Omijanie firewalla

fl3a

Użytkownik
Dołączył
Marzec 12, 2005
Posty
538
Zapewne znacie dwie oklepane juz metody na omijanie firewalla - CreateRemoteThread i SetThreadContext - zostaly one swietnie opisane tu: Bypassing Windows personal fw with process infection. Lecz sa one juz zbyt dobrze znane by mogly jeszcze dlugo cieszyc sie funkcjonalnoscia. Zapewne kolejni producenci fw podaza sladami ZoneAlarm jak napisal Dolphin:
As far as I can tell you, the infection method works on most average firewalls, including NIS. For now, ZoneAlarm 5.5+ blocks DLL infection. Even worse, ZoneAlarm Security Suite 6+ is completely protected, and blocks every suspicious action like installing a driver, accessing registry, hooking API's, DLL injection, etc.. As far as I know, it has never been bypassed.. And I assume more firewalls will follow ZoneAlarm with their next releases..[/b]
Zapewne macie wlasne teorie i pomysly zwiazane z tym tematem. Skutecznym rozwiazaniem zapewne byl by kod na poziomie ring0 - lecz szczerze jeszcze nie analizowalem takiej opcji i nie moge nic powiedziec w tej sprawie.
 

Jonny

Użytkownik
Dołączył
Kwiecień 7, 2002
Posty
401
Witam. Publikowanie niektórych metod nie jest zbyt dobrym pomysłem bo zaraz bedą nieaktualne. Moge podsunac pomysl na jaki wpadlem pewien czas temu. Nazywam to "na brutala". Jest to metoda troszke zbyt drastyczna ale moze byc skuteczna. Oczywiscie zakladamy, ze nasz trojanik jest niewykrywalny przez antywiry!!. Stosujemy tradycyjnie dll-iniection tyle tylko az do skutku na np. przegladarce. User wkoncu musi puscic przegladarke jak chce miec internet - trojek jest niewykrywalny wiec wirem go nie usunie. Aby go nie mogl tradycyjnie podgladnac - tzn. kilnac procesu mozemy stosowac multiwatkowa komunikacje, instalowanie na uslugach serwisowych, infekcje w pamieci (namnazanie sie trojanika na ramie), wkoncu pipe komunikacje itd...... W 90% (smiem twierdzic, ze nawet 99%) jesli nasz trojanik jest sprytnie napisany dostaniemy polaczenie internetowe (w przypadku gdy nie dostaniemy trojanik musi kilowac przegladarke - co jest przegladarka mozemy odczytac z rejestru - czytamy procesy i kilujemy przegladarke internetowa <gg, tlena, outloka, the bat'a itd> az do skutku). Moze to byc nie tylko dll-injection ale np: multithread infection itd....
 

fl3a

Użytkownik
Dołączył
Marzec 12, 2005
Posty
538
Ja natomiast troche zastanawialem sie nad glebsza analiza pewnych funkcji. Oczywiscie najlatwiej zaczac od: CreateRemoteThread i SetThreadContext. ZoneAlarm zapewne monitoruje wywolywanie tych funkcji. Zatem czy nie bylo by mozliwe wykonanie wylacznie ciala tych funkcji? Szczerze jeszcze nie analizowalem ich kodu ale wydaje mi sie ze bylo by to mozliwe. Gdyby to byly funkcje odwolujace sie do swoich macierzystych odpowiednikow badz funkcje macierzyste wowczas mozna by wywolac je nie po nazwie ale stosujac znany zapis:
Kod:
NtCreateFile:

mov eax, 0x0000001A

lea edx, [esp+04]

int 0x2e

ret 0x2C
Oczywiscie utrudnieniem byl by zmieniajacy sie dla kazdego SP jej numer. Lecz i to mozna szybko rozwiazac. Naturalnie gdyby producent FW zastosowal hooking na poziomie kernel mode ten sposob na nie wiele by sie zdal. Tak nie jest w przypadku powyzszych funkcji.
Jonny czy moglbys zarysowac tylko inne znane Ci metody?
 

Jonny

Użytkownik
Dołączył
Kwiecień 7, 2002
Posty
401
Witam. No wlasnie dalo by sie
smile.gif
smile.gif
. Jest to jeden ze sprytnych sposobow wykonania funkcji bez ich wywolywania. Powiem szczerze, ze wyprobowalem to juz pare razy i dziala tylko ze nie na wszystkich funkcjach - nie dziala naprzyklad na niektorych funkcjach ntdll.dll. Ja stosuje to czasem przy kraczeniu - robieniu loadeow. Mozna to stosowac jako obejscie przy zaezpieczeniach niektorych progsow. Ja to robie tak - pobieram katalog systemowy a nastepnie tworze sciezke do danego dll-ka. Mapuje go w pamieci - globalallock. Odczytuje adres offsetowy funkcyjki (trza sobie napisac funkcje RVAtoOffset) i wywolanie do pamieci a nie do funkcji. Wykonyjesz funkcje nie wykonujac jej
smile.gif
smile.gif
. Probowalem - dziala ale nie na wszystkich funkcjach !!!!!. Tak jak Ty proponujesz to nie zadziala.
 
N

nBD

Gość
@Jonny: pomysl niezly, ale co jesli dll-ka ma w main'ie jakas funkcje inicjujaca dane wewnetrzne? Zaladowanie jej do pamieci w GlobalAlloc nie spodowuje wywolania main'a, a LoadLibrary tak.
 

Jonny

Użytkownik
Dołączył
Kwiecień 7, 2002
Posty
401
Originally posted by nBD
@Jonny: pomysl niezly, ale co jesli dll-ka ma w main'ie jakas funkcje inicjujaca dane wewnetrzne? Zaladowanie jej do pamieci w GlobalAlloc nie spodowuje wywolania main'a, a LoadLibrary tak.
Oczywiscie ze w takim przypadku nie da rady. Sam probowalem na niektorych funkcjach i podzialalo. Nie pamietam z jaka biblioteka eksperymantowalem - chyba z kernelem - zerkne do zrodelek. moge powiedziec bo to pamietam, ze eksperymentowalem NtQuerySystemInformation i akurat na tej funkcji nie dzialalo ale na na niektorych z ntdll.dll dzialalo. To tylko pomysl (wprawdzie sprawdzony ale nie do konca) ale jak sie zastanowic to daje olbrzymie mozliwosci - trzeba to tylko dopracowac (przyznam szczerze, ze pisalem crakmesa z ta metoda i bawilem sie w wyswietlanie messagebox'ów, ktorych user nie mogl wywalic).
 
N

nBD

Gość
z dll'ami jest pewien problem, gdyz musza byc one ladowane pod swoj adres imagebase ( z naglowka PE), mozna by pokusic sie o napisanie wlasnego LoadLibrary, co rozwiazalo by problem z Kerio (ten fw alarmuje, gdy aplikacja probuje zaladowac biblioteke, wiec Kerio musi stosowac hookowanie LoadLibrary)
 

Jonny

Użytkownik
Dołączył
Kwiecień 7, 2002
Posty
401
Nie musza byc ladowane od tego samego imagebase - tak samo jak w exekach aby nie byl plik ladowany zawsze od tego samego adresu sluzy sekcja relokacji pliku.
 

goliat

Użytkownik
Dołączył
Styczeń 16, 2005
Posty
23
nie trzeba ladowac od razu DLLki, mozna przeciez skopiowac do zdalnego procesu sam kod, a potem tylko CreateRemoteThread lub SetThreadContext i wio. oczywiscie te tez moga byc zhookowane.
moznaby napisac cos w rodzaju serwera proxy (pipe na wejsciu, socket na wyjsciu) i ladowac go do jakiejs uprzywilejowanej aplikacji.
 

Jonny

Użytkownik
Dołączył
Kwiecień 7, 2002
Posty
401
Jest jeden maly problem - wlasciwie obecnie kazdy lepszy firewall monitoruje checksumy procesow w pamieci - nie pozwoli ci na utworzenie watku (zalezy jaki firewall) - monitoruja ilosc watkow i polaczen pozwalajac na pozostawienie ich na stalym poziomie (pewnym poziomie zaufania). Pomysl z socketem na wyjsciu a na wejsciu z obiektem pipe - hehe - jedno z lepszych rozwiazan (od jakiegos czasu juz spotykane - "src z0mbie" - w niektorych shellcod'ach).
 

mdew

Użytkownik
Dołączył
Luty 6, 2005
Posty
3
Jonny chcę skorzystać z tej twojej metody wywoływania funkcji bez jej wywoływania, tzn. wywoływania do pamięci. Nie rozumiem jednak jednej rzeczy. Zacznijmy jednak od poczatku:

1. Rezerwuję blok pamięci - globalalloc i tam 'wgrywam' dll'ka (np. kernel32). - tylko dlaczego napisałeś "mapuję go w pamięci"? czy to poprostu nieścisłość językowa bo z tego co wyczytałem to globalalloc nie jest używane podczas mapowania pliku.

2. I tutaj to czego nie rozumiem - po co mi offset funkcji (tzn bloku w pamięci który jest jej ciałem) ? Przecież mam va czyli pełny adres do tego bloku po wyszukaniu i mogę odwołać się właśnie do niego? nie jarzę motywu z offsetem
smile.gif


3. Problem wywołania funkcji - rozumiem, że mogę zrobić zwykłe call do bloku pamięci? (a tak przy okazji czy call to to samo co położenie na stos adresu powrotnego i jmp?


ech, pewnie to co pisze to dla Ciebie jakieś tam głupoty i oczywiste sprawy ale fajnie byłoby jakbyś nieco rozjaśnił tą metodę...

pozdrawiam, MDew
 

Kornik52

Były Moderator
Dołączył
Sierpień 12, 2004
Posty
848
Ostatnio na 4progammers.net pojawil sie
ten artykuł i zaciekawiły mnie komentarze do artykułu:

(czytaj od dołu do góry)

Kod:
InterAktywny dnia 30-11-2005 14:00



Proszę masz linka ..podaje Ci go tylko dla wiarygodności:

[url]http://winsockfirewall.sourceforge.net[/url]

A to jaką trzeba procedurę wziąść, co zmienić, co dodać ? - to oblukaj sobie sam. Może tytuł tego arta jest idiotyczny , ponieważ mi chodziło o sposób wysłania maila, a nie o samo ukrycie tego faktu przed użytkownikiem Wyszło jak wyszło. Art był odpowiedzią na post innego kolegi. Akurat poruszony był problem szyfrowania. Więc dodałem to do arta. I wcale tu nie chodzi by był to jakiś trojan czy inne  świństwo. Więc temat firewalla zamykam

Piotrekdp dnia 30-11-2005 11:21



user to podaj ten kawałek blokujący firewalla bo jakoś ci nie wierze albo daj chociaż link... albo wyślij mi na maila [email][email protected][/email] byłbym zainteresowany

InterAktywny dnia 29-11-2005 21:58



Na firewalla tez jest sposób - w sieci jest kod żródłowy firewalla napisanego w Delphi.

Wystarczy wziąść kawałek z ze wskazaniem otwartego portu  i nazwą aplikacji ... i w tym momencie zostaje zablokowany firewall usera.

Zero komunikatów - sam sprawdzałem.

Po wysłaniu maila kolejną instrukcją z tego kodu, wyłaczyć naszego firealla. I przywrócone zostanie działanie  firewalla usera.

Zresztą kombinacji jest dużo.

A to umieściłem tu bo gdzie miałem umieścić ? w poście ?

Wolverine dnia 29-11-2005 20:33



Darowalbym sobie pisanie takich "zabezpieczen", ich temat byl walkowany tyle razy, ze cos takiego jak to nie powinno ujrzec swiatla dziennego.

Ktos dnia 29-11-2005 20:13



Chyba, że użytkownik na firewalla - wtedy z wysyłania bez wiedzy użytkownika nici
 
N

nBD

Gość
jonny wez zapodaj jakies zrodelko na udowodnienie swoich teorii bo takie dywagacje co moze dzialac a co nie to mi sie nie podobaja a poza tym to nie wierze, ze twoj sposob dziala.
 
Do góry Bottom