hxv blog
15lip/104

Jak nie tworzyć botnetu

Bycie moderatorem na hakierskim forum ma parę zalet. Jedną z nich jest dostęp do usuniętych tematów zawierających m.in. "złe" malware. Od czasu do czasu znajdzie się ktoś, kto wrzuci 'super-hiper trojana/keyloggera' zainfekowanego własnym syfem. Zazwyczaj są to gotowe programy, do tego koszmarnie skonfigurowane (logi wysyłane są z normalnego e-maila - login i hasło są w pliku), ale czasem zdarzy się, że ktoś poświęci chwilę i napisze coś swojego. Tak było i tym razem.

Żeby nie było żadnych nieporozumień - ten program nie jest specjalnie wybitny, nie ma szczególnych zabezpieczeń - ot po prostu jest.
Znajduje się pod tym adresem, spakowany, czeka aż ktoś go pobierze i odpali. Napisany z użyciem .NET'a - kompletnie nie mogę zrozumieć, czemu ktoś pisze malware, które wymaga pobrania 70MB środowiska, aby je odpalić. No ale OK, pobieram program, odpalam (na wirtualnej maszynie - tak na wszelki wypadek) i widzę, że łączy się na porcie 6667. Czyli prawdopodobnie korzysta z IRC'a. Bez żadnego zastanowienia włączyłem mIRC'a i weszłem na kanał - prawie 90 maszyn. Lekko się zdenerwowałem, to kilka razy więcej ludzi niż miesięcznie odwiedza mojego bloga :( No i do tego żaden AV go nie wykrywa.

Pora wziąć się do roboty (której za dużo nie będzie):
Dis# .NET decompiler wygląda nieźle, w wersji trial nie pokazuje całości kodu ale powinien wystarczyć. Po chwili przeglądania kodu  można znaleźć dwie interesujące funkcje:

oraz tą (a właściwie tylko część):

Pomijam całą resztę bo program za wiele nie robi - dodaje się do rejestru, kopiuje plik, podłącza do serwera, wchodzi na kanał i czeka na komendy. Adres serwera, nazwa kanału i hasło są co prawda zaszyfrowane 3DES'em ale nie ma potrzeby ich odszyfrowywać - wystarczy włączyć sniffer i wszystko wyłapać. W obecnej chwili dane te i tak nie zadziałają - autor zmienił hasło do kanału (co oznacza, że wszyscy zainfekowani do tej pory nie będą służyli za zombie - nie ma żadnego systemu aktualizacji/pobierania nowych danych).

Wracając do kodu - pierwsza funkcja służy do floodowania wybranego hosta pakietami UDP, za argumenty przyjmuje adres IP (w postaci numeru), port i czas, przez jaki ma trwać flood.
Co do drugiego fragmentu: w zmiennej s1 znajdują się pakiety odebrane z serwera. Właśnie uświadomiłem sobie, co robi pierwszy if (który na szczęście nie jest do niczego niezbędny) - sprawdza, czy na kanał nie weszła osoba z nickiem takim samym, jak jego nazwa i w razie potrzeby wita ją.
Drugi warunek jest ciekawszy, ponieważ odpowiada za praktycznie jedyną funkcję programu - DDoS. Na początek sprawdza, czy w pakiecie nie ma ciągu "UDP" (nie tylko w treści wiadomości - wejście na kanał z odpowiednim nickiem prawdopodobnie wywali wszystkie boty które nie mają żadnej walidacji danych). Dalej jest wyciąganie nicka osoby która wysłała wiadomość, wysyłanie do niej notice, przerwa (nie wiem po co) i kluczowa sprawa - dzielenie wiadomości i przekazywanie odpowiednich parametrów do funkcji floodującej. Pakiet jest rozbijany w miejscu, w którym występuje spacja i jego kolejne części są używane. Cały pakiet wygląda tak:
:nick!username@host PRIVMSG #channel :tresc
Po podzieleniu treść ląduje w sArr1[3] i jeśli zawiera spacje to kolejne wyrazy są kolejnymi elementami w tablicy. [4] nie jest nigdzie przekazywana, więc można wstawić dowolną treść, [5] ma być adresem IP (dla 127.0.0.1 trzeba przekazać np. 2130706433), [6] portem a [7] długością flooda w sekundach.
Po zebraniu wszystkiego do kupy okazuje się, że wystarczy wysłać na kanale wiadomość o treści "UDP lol 2130706433 80 3600" żeby przez godzinę wszystkie boty obecne na kanale próbowały same się wykończyć.

W międzyczasie pisał do mnie autor tego "cuda" - tak to jest, jak się wchodzi na kanał bez zmiany nicka. Stwierdził, że jeśli tylko ja o tym wiem to jest spoko, jak ktoś jeszcze się dowie to będzie musiał wszystko wyłączyć (podejrzewam, że stąd właśnie zmienione hasło). I to właśnie jeden z powodów, dla których w ogóle powstał ten wpis :>

Komentarze (4) Trackbacks (0)
  1. Mam mieszane uczucia co do tego czy bic brawo czy za glowe sie lapac :> choc przyznam ze z .NET mnie troche rozbawil :DD

  2. Czemu chcesz się za głowę łapać, aż taki denny wpis? :P

  3. moze samo uzycie .NET nie jest zle jesli ktos kieruje sie w strone nowszych systemow (w7) i zaszywa kod w jakiejs aplikacji, ale korzystanie z samego IRC’a jest malo „tworcze” i …

  4. Wpis nie denny, pomysl autora botneta zato „genialny” :D


Dodaj komentarz


Brak trackbacków.