2009-06-06:

Trojany bankowe - powrót do przeszłości

re:security:easy:malware
Tak się zdarzyło ostatnio że wróciłem do analizy trojanów. Powrót został uczczony prawie 24-godzinny maratonem z różnymi zagranicznymi bankerami, i widać że gdy ja zajmowałem się innymi rzeczami, to autorzy trojanów nie spali - wymyślali coraz to nowe metody żeby ich malware był...  jeszcze słabiej skonstruowany :p

Na wszelki wypadek zaznaczę że próbka malware'u który trafił na moje ręce na pewno nie jest reprezentatywna w odniesieniu do całego środowiska malware'owego, natomiast jest to (prawie) ten sam malware którym zajmowałem się jakiś rok temu, i o którym mówiłem na SekIT - więc mam pewne porównanie co do tego co było kiedyś, a co jest teraz, ale tylko odnośnie tego specyficznego gatunku malware którymi się zajmowałem :)

Zacznę od tego że wielkie, kilku-kilkunasto "megowe" trojany napisane w Delphi lub Visual Basicu nadal są popularne i nadal zbierają krwawe (a w zasadzie złote) żniwo. Działanie takiego trojana jest proste - poczekać aż user wejdzie na stronę banku, a następnie w oknie przeglądarki wyświetlić okno ze screenshotem strony banku na który są naniesione pola typu edit (input). Jeżeli użytkownik się nie zorientuje (a zorientować można się na parę sposobów - najprostszym z nich jest kliknięcie prawym w okolicy pola edycji i sprawdzenie czy popup na pewno się pojawia i wygląda tak jak zwykle), to wprowadzone hasło powędruje później do "złej" bazy danych, a trojan pokazuje użytkownikowi kolejną planszę - zazwyczaj kolejne pytania o hasła, karty kredytowe (CVV2, piny, daty ważności), etc.
Raz spotkałem się nawet z przypadkiem trojana który udawał że się loguje, i pokazywał fałszywe konto razem z fałszywym stanem konta (dość wysokim), i zachęcał usera do zrobienia przelewu (i wprowadzenia kolejnego hasła z tym związanego oczywiście).

Taka jedna ciekawostka którą znalazłem w pewnej binarce (czyżby chcieli się pochwalić ?;D):



Ta część się nie zmieniła za bardzo - trojany nadal zawierają screeny w BMP (stąd ich wielkość) i JPG, są wielkie, ale przyznać muszę że rzadziej zdarza im się wyświetlić ekran banku w notatniku (jeżeli trojan sprawdza tylko nazwy okien, to można np. utworzyć plik którego nazwa jest równa title okna strony banku, wtedy trojan myśli że weszliśmy na stronę banku, i stara się zasłonić "stronę banku" planszą ze screenshotem, czyli nagle notatnik zyskuje nową funkcjonalność ;D).

Co się zmieniło to sposoby przesyłania ukradzionych danych do autora malware'u - przy czym to co teraz napiszę nie jest regułą, a raczej pojedynczymi przypadkami, nie mniej jednak bardzo ciekawymi.

Zazwyczaj trojany wysyłały skradzione dane na dwa sposoby:
- SMTP: e-mail'em (via różne servery netowe serwery SMTP) na różne konta mejlowe
- HTTP: do skryptów naklepanych w PHP, które odbierały dane i wrzucały do bazy danych, lub przesyłały dalej

Natomiast ktoś poszedł <sarkazm>po rozum do głowy</sarkazm> i stwierdził że po co pisać skrypty PHP, jak można od razu przesłać dane do bazy SQL ? Nie myśląc więcej lib do obsługi MySQL bądź MSSQL został dodany do trojana, wrzucone zostały tam również user, password, nazwa hosta i nazwa bazy danych, oraz kilka zapytań SQL typu INSERT.

Uprzedzając pytania - tak, jest możliwe zalogowanie się do bazy dowolnym (względem rodziny baz danych ofc) klientem SQL, i wykonywanie SELECT, DELETE, UPDATE, etc. Cóż.

Drugim <sarkazm>bardzo dobrym</sarkazm> pomysłem który widziałem była identyczna sytuacja tylko z protokołem FTP - user/password/host w binarce. Oczywiście dowolny klient FTP z uzyskanymi danymi umożliwia operacje typu upload/download/etc. Co ciekawe, zdarzyło się że hasło od FTP pasowało również do SSH na danym serwerze.

Oczywiście, binarki trojanów były "zaszyfrowane", tj autor trojana użył UPX'a (sic!), lub jakiegoś bardziej zaawansowanego packera czy protektora, aby ukryć za równo kod jak i dane (hasła do FTP/SQL!). Natomiast jak każdy RE wie, nie istnieje coś takiego jak skuteczne zaszyfrowanie hasła które potem trzeba użyć plain text (tj odszyfrować), i nie ważne czy mówimy o szyfrowaniu całej binarki, czy tylko hasła - chcesz użyć? musisz odszyfrować! odszyfrowałeś? to hasło jest plain text w pamięci i czeka aż ktoś je sobie odczyta.
Po za tym, FTP ma logowanie plain text, więc hasło i tak w packet snifferze jest ładnie widoczne (nie jest tak w przypadku MySQL, który od wersji 4.1 używa challenge/response).

By the way...
On 22nd Nov'24 we're running a webinar called "CVEs of SSH" – it's free, but requires sign up: https://hexarcana.ch/workshops/cves-of-ssh (Dan from HexArcana is the speaker).


Odchodząc od pomysłów z SQL, FTP, i masą screenshotów w BMP, było również kilka trojanów które działały w dużo prostszy sposób - po prostu podmieniały plik hosts (C:\windows\system32\drivers\etc\hosts), który, jak czytelnik za pewne wie, zawiera adresy IP i nazwy które mają na ów adresy być tłumaczone (ten pliczek jest "odpytywany" przed odpytaniem servera DNS o IP domeny). Dodam że pliki hosts zyskiwały całkiem niezłą liczbę wpisów - widać autorzy malware nie próżnują, i coraz to nowe banki są "targetowane".

Znalazł się również jeden trojan który po prostu podmieniał adres DNS na jakiś "zły".

Na koniec trochę bolącej prawdy: co zmienia fakt że te trojany są słabo skonstruowane, zajmują po 10 mb, wyświetlają strony banków w notatniku, podają na tacy hasła do swoich serwerów?
Totalnie nic. Użytkownicy i tak je uruchamiają, wpisują swoje hasła, i tracą swoje oszczędności, a autorzy malware tylko zacierają ręce i zaśmiewają się do rozpuku z researcherów cieszących się z ich słabego kodu.

No i tyle :P

Comments:

2009-06-06 11:24:09 = ged_
{
hehe, a duzo bylo logow w tej bazie / ftpie ?
}
2009-06-06 13:05:53 = Jurgi Filodendrito
{
> po co pisać skrypty PHP, jak można od razu przesłać dane do bazy SQL

Ale się ubrechtałem, toż nawet ja, kompletny laik (ostatnie moje programowanie to był Turbo Basic na małym Atari) z marszu widzę głupotę. Wygląda na to, że do opanowania umięjętności programowania inteligencja nie jest konieczna. :P
}
2009-06-06 16:51:58 = M
{
Cóż sam kiedyś trojany w delphi pisałem, raczej do celów rozrywkowych niż rabowania banków, ale jednak solidniejsze były :)

A co do wyciągania haseł z pamięci... są jakieś widoki na ciąg dalszy kursu RE?
}
2009-06-06 17:25:54 = Gynvael Coldwind
{
@ged_
Raczej niewiele jak na ich standardy ;>

@Jurgi
;D

@M
Jak najbardziej ;> Było kilka opóźnień, ale kolejny eps mam już nagrany, a dalsze zaplanowane, tak że w następnym tygodniu powinno coś trafić na net ;>
}
2009-06-06 21:13:23 = TBH
{
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

A znalazłeś jakiś soft który przesyłał dane jakimś szyfrowanym protokołem? scp, https ?




-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Use GnuPG with Firefox : http://getfiregpg.org (Version: 0.7.5)

iEYEARECAAYFAkoq2/AACgkQEn/HVkVUjEQiaQCfViTb/D9fCPFbRrcqpOeHykGS
6MkAniC0lh17eV3BJ2bMabcfDnWgyK+L
=vAap
-----END PGP SIGNATURE-----
}
2009-06-07 09:01:23 = Gynvael Coldwind
{
@TBH
Przedwczoraj takiego softu nie widziałem, natomiast wcześniej https spotykałem nie raz. Również http z danymi zaszyfrowanymi się pojawiał.
Natomiast scp/sftp/ftps/etc nigdy nie spotkałem.
}
2009-06-10 08:43:12 = Necro
{
HEHE ... W tym przesylaniu danych do db via php jest pewna logika :) Pare linijek nizej napisales o plain text a taki most po miedzy smiecioware a serwerem SQL moze chronic passlo dosyć skutecznie =)
}
2009-06-10 08:52:25 = Necro
{
uoops :P nie zakumalem sarkazmu, jurgi mnie zmylil :P:D
}
2009-06-10 13:24:24 = lord_zero
{
Bardzo ciekawy temat, szkoda tylko, że tego typu malware jest tak prymitywne. Może to głupio zabrzmi (żal mi naiwnych użytkowników) ale mam nadzieję, że pojawi się coś o wiele bardziej zaawansowanego i godnego analizy.
}
2009-06-10 21:58:41 = l.
{
Nie ma sie co oszukiwac, ofiary takich bankerow sa niezbyt ogarniete jesli chodzi o normy bezpieczenstwa w uzytkowaniu bankow on-line. Backdoory tego typu moga byc trywialne, bo ich autorzy, wykorzystujac mass-effect, i tak zdobeda dosc profitow z jednej kampanii, by wymyslac coraz to lepsze rozwiazania (vide plain-text password w execu). Zawsze jakis frajer sie trafi.
Jesli chodzi o zaawansowane protokoly, wykorzystujace szyfrowanie, three-way handshake, itp - zazwyczaj jest to nieoplacalne dla autora malware, bo musi sie naumiec takich trickow, zakodowac to, no i przetestowac.
Autorzy malware nie sa zajebisci, polecam ten papier:
http://www.symantec.com/avcenter/reference/me.code.write.good.pdf
tak samo jak inni programisci robia bledy w swoim sofcie.
}
2009-06-13 01:17:14 = cOndemned
{
Gynvael :

"Zacznę od tego że wielkie, kilku-kilkunasto "megowe" trojany napisane w Delphi lub Visual Basicu nadal są popularne i nadal zbierają krwawe (a w zasadzie złote) żniwo."

- bo pr0gramisci zapomnieli ikonek Reshackiem usunąć ! ;D

nastomiast jesli chodzi o modyfikacje ...etchosts : http://milw0rm.com/video/watch.php?id=101

Co do Twojego (Gynvael) podsumowania, cóż.. sad but true ;D

}
2009-06-14 08:43:38 = Gynvael Coldwind
{
@Necro
;D

@lord_zero
Jest kilka rodzin kapkę bardziej zaawansowanych, np. Sinowal, szczególnie odmiana MBR (afair według innych terminologii Mebrootem go zwą), w którą ktoś wsadził rootkita bazującego na modyfikacji Master Boot Record. Polecam analizę tego cuda, można się duuużo nauczyć ;> (BOCHS jest odpowiednim narzędziem do części MBR, potem cokolwiek pod co WinDBG można podpiąć).

@l.
True true ;>
Najlepiej ich błędy widać po panelach C&C które piszą w PHP. Rany boskie ;D Najbardziej mnie rozbawił przypadek w którym autor filtrował zmienną $_GET['x'] takim oto kodem:
if(strstr("..", $_GET['x']) || strstr("/", $_GET['x'])) die("");
Wszystko by było OK, kod nawet sensownie by wykrywał path traversal, gdyby tylko strstr przyjmowało parametry w tej kolejności ;D (a przyjmuje w odwrotnej, powinno być strstr($_GET['x'], "..") etc ;>).
Thx za linka, wygląda na ciekawy papierek ;>

@c0ndemned
;D
Thx a linka, to już wiem skąd taki wysyp tego ostatnio :DDD


}
2009-06-19 23:42:12 = Yfoog
{
Mógłbyś uruchomić RSSa?
}
2009-06-19 23:56:58 = Gynvael Coldwind
{
@Yfoog
Uh, a nie działa ?
Z jakiego klienta korzystasz ? Hmmm mi za równo z RssReader i Google Reader działa OK.
}
2009-06-28 15:16:42 = someone
{
Ja tego nie kapie jak pisać to już porządnie a nie takie pierdoły zresztą nie dziwie się jak siedzą jeden z drugim 15-16 lat nic nie umieją i tylko gadają, że "klepią trojany" wiem jak to wygląda kopiuj wklej kompiluj i później dziwcie się ;) co prawda są i inni lepsi co znają już podstawy i trochę swojej makówki używają ale ja osobiście nie wieże że jakiś porządny programista robi takie rzeczy - nie opłaca się mu ;)
}
2009-07-14 20:54:49 = croner
{
nigdy ne spotkłem sie z trojanem 10 megowym :O jak wogóle można tak wielkiego trojana zroić , to jakaś przwdziwa masakra, chyba że zbindowany z czymś dużym
}
2009-07-15 06:53:00 = Gynvael Coldwind
{
@croner
Hehe całkiem sporo tego jest na sieci prawdę mówiąc ;>
Nie są zbindowane z niczym, sam trojan tyle waży.
Co do drogi infekcji to często prowadzi ona przez dużo mniejszy plik (np 30kb) który po odpaleniu ściąga to 10 megowe monstrum, odpala je i się wyłącza (taki typowy downloader) - tak żeby user 'nie musial ściągać 10 mb' samodzielnie ;D
}
2009-07-15 06:58:29 = Gynvael Coldwind
{
@someone
No właśnie odrobinkę się mylisz. Naklepanie takiego trojana w Delphi za długo nie trwa, używa się tylko standardowych narzędzi, a to dość skutecznie kosi ludziom kasę z kont. Co z tego że AVki zaczną to wykrywać bardzo szybko, jak:
a) masę ludzi nie ma AV lub mają AV który nie wykrywa tego w danym momencie
b) wystarczy skompresować innym mniej znanym packerem i już sigi przestają pasować (pomijam kwestie heurystyk, która czasem daje radę, a czasem nie)
Szczerze to imo to jak dobrze napisany jest dany malware wpływa jedynie na jego żywotność na danym kompie, a nie na skuteczność. Ofc czym trojan dłużej żyje na kompie tym bardziej przechlapane ma user.

P.S. Ukryłem komentarz haflinger jako że i tak nic do dyskusji nie wnosił.
}

Add a comment:

Nick:
URL (optional):
Math captcha: 6 ∗ 7 + 5 =