Od assemblera do html5

Od assemblera do html5 czyli jak się dziś kradnie pieniądze Tomasz “keidii” Bukowski @~# id ★ IRT @ Cert Polska ○ malware hunter / devops ★ membe...
Author: Jakub Marciniak
7 downloads 0 Views 3MB Size
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: inject:

alert(“zuo”); ZUO end_inject

Jak

… czyli Webinject ... Przykłady …



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



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 !