Przechwytywanie CreateProcess

0

Napisałem program, który jest w stanie przechwytywać uruchamianie programów w systemie. Spełnia to zadanie poprzez "hook' owanie" funkcji CreateProcessInternalW, CreateProcessAsUserW i CreateProcessAsUserA. Wszystko działa z jednym małym wyjątkiem, a mianowicie nie wykrywa momentu uruchamiania aplikacji wywoływanych poprzez skrót ctrl + alt + delete ( np. taskmgr.exe ). Jeżeli ktoś wytłumaczyłby mi dlaczego tak się dzieje i jak można temu zaradzić byłbym bardzo wdzięczny.

0

Nie jestem specjalistą w hookach, ale do tej pory nikt Tobie nie odpowiedział, więc napisze to co udało mi
się z pomocą znalezionych kodów na sieci zrobić. Otóż zapoznaj się ze źródłem - pod poniższym adresem.
W oryginale był to kod inaczej zorganizowany, używający niepotrzebnych modułów, ale pod Windowsem XP
Home SP2 u mnie, prawidłowo blokował funkcję TerminareProcess. Jednak jak znajomy testował program na
swoim Windows 7 to i tak ubił jej proces. Mimo to, na bazie tamtego kodu wykonałem dll oraz loadera dla
zablokowania funkcji CreateProcessW. U mnie pod XP działa ok, nawet z pod managera zadan. Pozwala w
trakcie działania programu (zanim klikniesz OK i go zamkniesz) uruchomić wszystkie programy poza takim,
o nazwie calc.exe z dowolnej ściezki, dowolnej wielkości literami nazwanym. Może się to Tobie też przyda.
Pewnie skoro pytałes o inne funkcję AsUser to używasz nowszego systemu niż XP, jednak może ten kod w
czymś Tobie pomoże. Loader został napisany przeze mnie, kod hookujący mam z sieci i działa lepiej dla ów
funkcji niż znaleziony inny, przy którym przy wyłączeniu hooka następowały błędy od explorer.exe i innych.
Z ciekawości napisz czy pod Twoim systemem dla funkcji CreateProcessW ten hook działa. Bo jak u siebie
na XP zauważyłem zatowno managery Total Commander i FAR oraz Explorator używają ów funkcji dla exe.
http://www.przeklej.pl/plik/hook-on-createprocessw-rar-001bgnb5796u

0
v3ntus napisał(a)

Wszystko działa z jednym małym wyjątkiem, a mianowicie nie wykrywa momentu uruchamiania aplikacji wywoływanych poprzez skrót ctrl + alt + delete ( np. taskmgr.exe )

Najprawdopodobniej zwyczajnie źle się za to zabierasz.

Na SAS (ctrl+alt+del) reaguje Winlogon. W celu uruchomienia taskmgr.exe, zależnie od sytuacji (lub/i konfiguracji), winlogon!SASWndProc bądź winlogon!HandleLoggedOn woła winlogon!StartApplication, ten zaś przechodzi do biblioteki MSGINA, przechodząc kolejno przez MSGINA!WlxStartApplication i MSGINA!ExecApplication, dochodząc w końcu do ADVAPI32!CreateProcessAsUserW.

Próbujesz ładować swoją bibliotekę poprzez SetWindowsHookEx? Mam złą wiadomość, tego rodzaju hooki funkcjonują wyłącznie na desktopie, na którym zostały stworzone, Winlogon z pulpitu użytkownika nie korzysta.

0

A ja dodam, że tak jak podejrzewałem - mój kod nie wyłapuje pod Windows 7 tej API,
bo tam się używa chyba jednak innych funkcji, o których wspomniał autor wątku, tak
więć kod tylko jako przykład może służyć. Jednak jeszcze z nim pokombinuję troszkę.

0

Na SAS (ctrl+alt+del) reaguje Winlogon. W celu uruchomienia taskmgr.exe, zależnie od sytuacji (lub/i konfiguracji), winlogon!SASWndProc bądź winlogon!HandleLoggedOn woła winlogon!StartApplication, ten zaś przechodzi do biblioteki MSGINA, przechodząc kolejno przez MSGINA!WlxStartApplication i MSGINA!ExecApplication, dochodząc w końcu do ADVAPI32!CreateProcessAsUserW.
Próbujesz ładować swoją bibliotekę poprzez SetWindowsHookEx? Mam złą wiadomość, tego rodzaju hooki funkcjonują wyłącznie na desktopie, na którym zostały stworzone, Winlogon z pulpitu użytkownika nie korzysta.

Dzięki za odpowiedzi i za wytłumaczenie mi o co chodzi. Będę musiał szukać innych sposobów api hooking' u. Jaki sposób hook' owania pozwala na śledzenie uruchamiania procesów na wszystkich desktopach?

0

Dobra, miałem chwilę żeby odkopać nieużywanego Windows 7 i zobaczyć jak tam jest to zrealizowane.

Pomijając rewolucje jakie zaszły w implementacji podsystemu Windows to Winlogon też przeszedł sporą metamorfozę. Cały problem sprowadza się tak naprawdę do unifikacji architektury podsystemu - obecnie właściwe funkcje znajdują się m.in. w KERNELBASE, ADVAPI32 do nich jedynie forwarduje dla kompatybilności z istniejącym softem, sam system korzysta ze swoich libów. Aktualnie całość wygląda tak: winlogon!StateMachineRun reaguje na event i woła winlogon!WLGeneric_TaskManager_Enter, to z kolei metodę winlogon!CUser::CreateProcessW, która w końcu korzysta z KERNELBASE!CreateProcessAsUserW.

Jak widać zmieniła się wyłącznie biblioteka, docelowo mechanizm jest ten sam.

Co do właściwszej metody hookowania to trudno powiedzieć, zależy co chcesz osiągnąć i w jakim momencie.

0

deus: a jeżeli zależy mi na przechwyceniu momentu uruchamiania i jeżeli nazwa uruchomionego pliku to na przykład calc.exe to ją
zablokowac, to jaką dllkę i jaką funkcję pod Windows 7 powinienem hookować? Nie mam póki co nowszego kompa dlatego siedzę
pod XP, ale wczoraj Api Monitorem przez TeamViewer u znajomka pod Windows 7 próbowałem monitorować różne api, kiedy pod
Total Commanderem uruchamialiśmy calc.exe dla testów. Nic nie łapało, to zapytałem innego znajomego co na codzien tworzy dla
jednej z firm sygnatury do popularnego antywirusa, jaką Api należy wziąć pod uwagę przy uruchomieniu to wkleił mi cytat, że pod
Windows 7 zamiast CreateProcessW do uruchomienia programów używane są funkcje ShellExecute(Ex) i to je należy "hookować".
Niestety znajomemu komp padł po raz kolejny w trakcie sesji pod TeamViewerem, a konkretnie to chyba zasilacz i już nie mialem
możliwości sprawdzenia czy Total Commander bądź system po kliknięciu na ikonę OS posłuży się do uruchomienia ów funkcjami.

0
olesio napisał(a)

Nic nie łapało, to zapytałem innego znajomego co na codzien tworzy dla jednej z firm sygnatury do popularnego antywirusa, jaką Api należy wziąć pod uwagę przy uruchomieniu to wkleił mi cytat, że pod Windows 7 zamiast CreateProcessW do uruchomienia programów używane są funkcje ShellExecute(Ex) i to je należy "hookować".

'Nieco' mija się to z rzeczywistością.

TotalCommander faktycznie używa SHELL32!ShellExecute, zaś Explorer kupy funkcji z shell32.dll, do tego dochodzą hooki powłoki w innych libach, które też z całej gamy funkcji korzystają (zależnie od sytuacji). Generalnie sprawa ma się tak: SHELL32!ShellExecute(Ex) działa jak działało, nadal używa CreateProcessW, po prostu już nie z kernel32 a z kernelbase (przynajmniej we 'właściwej' części bibliotek systemowych). Jak najbardziej wszystkie udokumentowane funkcje od uruchamiania procesów i komend schodzą się w KERNELBASE!CreateProcessInternalW, (prawie wszystkie już w KERNELBASE!CreateProcessW), po prostu (jak już pisałem) zmieniła się biblioteka zawierająca właściwy zestaw funkcji.

W żadnym razie ShellExecute nie zastępuje CreateProcess...

BTW, co to za firma AV, jeżeli to nie tajemnica (ew. na PM)?

0

Dziękuję za odpowiedź, chyba muszę sobie darować kombinowanie z takim hookiem, a przynajmniej póki sam nie mam Windows 7.
A firma to ESET. Jeżeli szukasz pracy to znajomy wspominał, że jest nabór ludzi. Zadania wymagane do CV są na: http://3537.pl.

0

Coś takiego, ESET :>. O rekrutacji oczywiście wiem, tak jak wszyscy potencjalnie zainteresowani. Znajomy dobrze trafił...

0

"Jadał krakersy" i doświadczenie tak nabyte, mu się przydają w pracy. Pracuje mu się ok i robi co lubi.

0

Tja, siłą rzeczy większość analityków zagrożeń to (byli) crackerzy. Jeżeli to jeden z nowych nabytków firmy to nawet chyba wiem kto. Nie przypominam sobie żeby ktoś poza ESETem miał w tym kraju naprawdę sensowny, rozwijający się lab AV. Ech, też wypadałoby sobie gdzieś stałego zatrudnienia poszukać w tym fachu...

0

On i wśród jedzących krakersy był starym wyjadaczem, a i w ekipie ESETa z tego co wiem jest już dłuższy czas. A skoro szukasz
zatrudnienia, a za pewne zdolny z Ciebie koder, a może i lubisz śledzić cudzy kod oraz go czasami "poprawić" to może uderz tam.
Pewnie zadania z tej strony są dla Ciebie do przetrawienia. Ja wymiekam, ale może Tobie by się chciało pracować w Krakowie tam
w ESETcie w zdolnym zespole. Jeśli nie analityków to może w developerce. Może spróbuj posiedzieć nad zadaniami i wysłac z CV.
A nuż widelec (w nuż nie ma błędu, tak się pisze to powiedzenie - to do moderacji ortów ;)) się Tobie uda, powodzenia Ci życzę.

0

Zadanie dla analityka jest proste, na jeden wieczór, zrobiłem wieki temu, stare (którego aktualnie poszukuję) z poprzedniej rekrutacji było znacznie ciekawsze. Kernel developer ma trochę więcej zabawy jeżeli chce zrobić wszystko legalnie, bez korzystania z nieudokumentowanych rzeczy, a przynajmniej ja mam z tym lekkie problemy. Kwestia poświęcenia czasu...

0

Napisałem do tego znajomka, wkleiłem mu Twoj ostatni post i poprosiłem, że jeżeli by dysponowal tym
zadaniem i mógłbym je Tobie dać to żeby mi je podesłał, więc jak da radę to przyślę Tobie linka na PM.

0

Dzięki za zainteresowanie. W moim projekcie będę musiał wykorzystać coś w stylu: http://www.codeproject.com/KB/system/soviet_protector.aspx

0

v3ntus proponuję Ci skorzystać z czegoś udokumentowanego jak PsSetCreateProcessNotifyRoutine zamiast kombinowania z modyfikacją SDT. Przykładowy kod - Detecting Windows NT/2K process execution.

lord_zero

0

Sorry, że trochę odkopuje temat ale zauważyłem, znalazłem w wyszukiwarce, że była rozmowa o rekrutacji Esetu. Co myślicie o pierwszym zadaniu z http://3537.pl/programista.html ? Ktoś próbował się zmierzyć? Jak oceniacie jego trudność?

1 użytkowników online, w tym zalogowanych: 0, gości: 1