auf was basiert Winsock?

T

Tigerass 2.0

Gast
Hey Leute,
vllt. hat hier jemand von euch das (sehr spezielle) Fachwissen.

Ich arbeite gerade an einem kleinem Hobbyprojekt, welches letztendlich den Netzwerkverkehr eines (Windows) Programmes aufzeichnen / überwachen soll. Das ganze soll auf einer relativ Tiefen ebene (mit detours) stattfinden, und da liegt das Problem.

Den tiefsten Punkt, den ich bei der Netzwerkkommunikation kenne, sind die send(), WSAsend(), etc. Funktionen :p

Gesucht ist nun eben eine? ntdll- oder was auch immer Funktion, welche für die Verbindung von Winsock zum Kernel sorgt.

WinPcap ist keine option, da ich dort den Ursprung des Gesendeten nicht zurückverfolgen kann, bzw. keinen Programmfilter setzten kann. Korrigiert mich wenn ich falsch liege. Auch sollte das Programm eher als übung gedacht sein und keine Library verwenden ;)

Danke schonmal im Vorraus,
alternative lösungsvorschläge sind natürlich auch Willkommen.
 
Es sind mehr als eine Funktion, die sich um sockets kümmern.
Falls du wirklich nur einen einzigen Punkt haben willst, such mal nach SYSENTER bzw. Heavens Gate (falls du unter WoW32 programmierst).
Den angesprochenen Punkt wirst du in der ntdll.dll finden. Dein Problem wird sein, dass da halt gar alles drüberläuft, was mit dem Kernel zu tun hat. Also einmal ein Fehler gemacht, wirst du nicht viel machen können.

http://rce.co/knockin-on-heavens-gate-dynamic-processor-mode-switching/

Sonst einfach all die Funktionen hooken, die winsock so exportiert. Wenn was fehlt, wirst du es ja hoffentlich merken.
 
Ich lande letztendlich über undokumentierte (dependency walker macht bei sowas nicht mehr mit) und nicht exportierte Funktionen der mswsock.dll bei ZwDeviceIoControlFile &co. Also die ntdll exports die ich gesucht habe. Weiter geh ich nich ;) aber da alles undokumentiert ist, und es scheinbar über treiberkommunikation läuft, muss ich wohl noch ein bisschen forschen.

Gibt es vllt. Bereits ein tool, welches solche Treiberkommunikation aufzeichnet, damit ichs nicht selber proggen muss?
 
Jap habe ich, aber die kann das glaube ich nicht.
Ich hatte mal ein Tool, das fähig war sowas zu tun, also Allerhand Funktionen zu Protokollieren, schön mit filtern, etc.
Aber wie immer verliert man sowas und findet es nie Wieder :(

Ich hab mir selber was geschrieben auf die Schnelle, ich muss ja sowieso an diesem Punkt ansetzten. Wie es aussieht sind dies bei ZwDeviceIoControlFile die IoControlCodes die Ich für die Funktionen suche:

recv() 0x12017
recvfrom() 0x1201B
send() 0x1201f
sendto() 0x12023
bind() 0x12003
connect() 0x12007
select() 0x12024
(nur zur vollständigkeit genannt, damit jemand nicht nochmal alles herausfinden muss)

bei send() wird ein 16Byte großer Input gegeben, ich vermute mal 4 Pointer. Jetzt ist eben debuggen angesagt, da hilft alles nichts mehr. Wäre ja auch zu schön, wenn das dokumentiertes Gebiet Wäre :D

Aber danke an eure Mühe
 
Ich verstehe dein Problem nicht ganz. Wenn du eh mit Detours arbeitest, kannst du doch einfach einen Hook auf recv etc. setzen. Warum willst du die darunterliegende Schicht hooken? Ich kenne keine Anwendung, die Netzwerk ohne die Winsock-Funktionen macht und direkt mit dem Kernel spricht. Es sollte reichen, die Aufrufe zu send() etc. umzuleiten.
 
Naja ich kenne gewisse Anwendungen, die genau dies Tun. Ich überlege sogar nach Dem Syscall Pattern zu suchen, die ntdll Routine kann man grad selber noch schreiben wenn man sich so mit verschleiern bemüht. Außerdem ist es schicker, direkt die ntdll zu Hooken, als zig andere Funktionen.

Strukturen hab ich auch rausgefunden, damit ist es jetzt eig. kein Problem mehr.

typedef struct _DATA {
UINT len;
PCHAR buf;
} DATA, *PDATA;

typedef struct SEND_INFO {
PDATA data;
ULONG count;
ULONG ?;
ULONG ?;
} SEND_INFO , *PSEND_INFO ;
 
Glaube ich nicht. PC Firewalls haken noch tiefer ein. Direkt an deine Netzwerkschnittstelle. Deshalb können sie auch noch z.B. den Ethernetheader mitschneiden. Ich komme ja nichtmal bis zum IP (hoffe ich mal). Sie sehen dass, was z.B. Wireshark sieht. Also reine Rohdaten. Für ausgehende Daten sind Firewalls aber meistens sowieso nicht Konzipiert.

Aber mit dieser Methode würde man Malwareanalysen anhand der Importliste zunichte machen.

Schadcode könnte dann nur noch mit Laufzeitanalysen erkannt werden, Da besagte nt Funktion für ziemlich vieles gebraucht wird, da sie die Verbindung mit Treibern herstellt.

AV's wie z.B. Avast hooken soweit ich weiß ntdll Funktionen (sogar auf Kernelebene?) um eben solchen Echtzeit-verhaltensschutz zu implementieren.

Aber ich teste auf deinen Post hin trotzdem mal, ob es möglich ist einen Server zu starten ohne von der MS Firewall genervt zu werden, und v.A. ob mann ohne Adminrechte seinen eigenen IP-Header erstellen kann. Wer weis :p
 
Die AV-Software hookt gar nicht viel, sondern hat Zugriff auf APIs, die ihnen MS zur Verfügung stellt.
Ich denke nicht, dass du deine IP-Pakete einfach so erstellen kannst. Wenn ich mir deine Strukturen anschaue, wird der Großteil des IP-Stacks im Kernel gemacht und damit auf der "falschen Seite".
 
Es gibt auch die Möglichkeit raw sockets zu erstellen. Da ich nicht weiß, wo hierbei uac einsetzt, und ob der Kernel alles frisst, probier ich es einfach mal aus.
 
Zurück
Oben