Zapobieganie Code Injection i Dll Injection

Dzisiaj zajmiemy się zapobieganiem Code Injection i Dll Injection.
Obie te techniki łączy wspólna rzecz – obie tworzą zdalny wątek w aplikacji. Po wywołaniu funkcji CreateRemoteThread która ma utworzyć wątek w drugiej aplikacji, wywołanie trafia do jądra, które w aplikacji w której wątek ma powstać tworzy wątek i startuje go w funkcji KiUserApcDispatcher ale jak powiedział mi j00ru nie jest bezpiecznie modyfikowac ta funkcje bo kozysta z niej bardzo wiele innych funkcji. Zamiast tego lepiej modyfikowac LdrInitializeThunk która jest później wywoływana. No wiec zalozymy sobie hooka na ta funkcje.
Pierwsze 5 bajtów nadpiszemy skokiem do naszej funkcji która zamknie nowo powstały wątek zanim kod zostanie wykonany.
Kod naszej funkcji:

1
2
3
4
5
6
void __declspec(naked)wrap(void)
{
printf("Killing thread: %d\n",GetCurrentThreadId());
TerminateThread(GetCurrentThread(),0); //zamykamy wątek
__asm ret
}

No to nadpiszmy kod funkcji.

1
2
3
4
5
6
7
8
x=GetProcAddress(GetModuleHandle("NTDLL"),"LdrInitializeThunk"); //pobieramy adres funkcji
DWORD old;
VirtualProtect(x,5,PAGE_EXECUTE_READWRITE,&old); // ustawiamy prawa do zapisu
memcpy(x,"\xE9",1); //nadpisujemy pierwszy bajt(0xE9 to jmp)
DWORD addr=(DWORD)wrap-(DWORD)x-5;//obliczamy przesuniecie naszej funkcji wzgledem orginału
//aby wykonac skok zgodnie ze wzorem offset=punkt_docelowy-miejsce_do_nadpisania-5
memcpy((char*)((char*)x+1),&addr,4);//kopiujemy tam nasz offset
VirtualProtect(x,5,old,&old);//ustawiamy spowrotem prawa

Teraz mozemy sprobowac utworzyc zdalny wątek w naszej aplikacji. Wątek utworzy się lecz zostanie odrazu zabity.
Jeśli chcemy w naszej aplikacji używać wątków powinnismy napisać funkcje która najpierw przywróci orginalne bajty następnie wywoła CreateThread po czym od nowa nadpisze skokiem. To juz pozostawiam chętnym.

Po tym zabiegu Olly także nie bedzie potrafił się attachnąć do naszego procesu.
To chyba tyle na dziś ;)

przykładowa aplikacja

//EDIT
Właśnie hxv poinformował mnie że można attachnac sie Ollym ale z uzyciem OllyAdvance :)

//EDIT2
Przygotowałem dll`ke która będzie chroniła nasza aplikację odrazu po wczytaniu jej do programu(LoadLibrary)
DLL`ka

A tak dodatkowo chciałbym podziękować Gynvaelowi Coldwindowi bo prawdopodobnie bez jego pomocy ten i kilka innych postow zakonczyloby sie po 3 wyrazach ;)

Podziel się:
  • Digg
  • Facebook
  • Google Bookmarks
  • Blip
  • Flaker
  • RSS
  • Twitter
  • Wykop
Tags: , , , ,


11 Responses to “Zapobieganie Code Injection i Dll Injection”

  1. Tofik Says:

    Witam Grzona. Mam pytanie odnośnie GGsniffer. Otóż przechwytuje on hasła niby w SHA-1, ale nie da się tego w żaden sposób odkodować, czy jest może jednak jakiś sposób, aby to zrobić?

  2. Grzonu Says:

    jakims crackerem. Szczerze to nie interesowalem sie tym czy istnieja jakies crackery do SHA-1 ale raczej tak

  3. Tofik Says:

    Istnieje pełno do SHA-1, ale żaden nie działa :( ( Lipa z tym trochę.

  4. Tofik Says:

    Z tymi hasłami to jest jednak lipa. Sprawdzałem te hashe na swoim profilu to jednak jak się okazuje za każdym moim logowaniem te hashe były inne (logowałem się tym samym hasłem).

  5. hxv Says:

    Hasze w GG są solone, sól jest w pakiecie powitalnym.

  6. Tofik Says:

    hxv, możesz dokładniej wyjaśnić o co chodzi? Bo trochę nie zrozumiałe Twojego posta

  7. hxv Says:

    http://toxygen.net/libgadu/protocol/#ch1.3 – po podłączeniu się do serwera odsyła on pakiet powitalny (GG_WELCOME) z solą (ziarnem/seedem) którą należy „dokleić” do hasła, za każdym razem sól jest inna więc inny też będzie wysyłany hash.

  8. Tofik Says:

    A w jaki sposób należy to połączyć, żeby otrzymać pełne hasło?

  9. timpler Says:

    Myślę że sposób opisany przez Drega na rootkit.com jest znacznie mniej inwazyjny i efektywniejszy – choć nie wiem co powie Olly nań.
    ( o tu: http://www.rootkit.com/blog.php?newsid=934 )

  10. Grzonu Says:

    Hmm nie zwrocilem na ten wpis wczesniej uwagi a wydaje sie ciekawe :)
    przetestowalem i dziala tez. A olly nie potrafi watku w nim utworzyc.

  11. Zabezpieczenie pamieci aplikacji Says:

    [...] [...]

Leave a Reply