Przejdź


Botnet nieco inaczej

24 Lut 2008 @ 00:51:48 groszek 1 komentarz

Taka krótka recepta, jak stworzyć własny botnet. Ale nie taki zwykły, jak te o których płaczą w telewizji czy na stronach firm antywirusowych. Raczej taki.. śmieszny. Bo i po to ten botnet: do zabawy, a nie na sprzedaż mafii ;)
Czym się rózni od takich zwykłych? Przede wszystkim miejscem gdzie jest uruchomiony. Nie będziemy się zajmować ukrywaniem w systemie, rootkitami ani automatami czy też wysyłaniem "iloveyou" w mailu. Botnet jaki tu opiszę kiedyś tworzyłem na potrzeby pewnej zabawy, gry z irc. Oczywiście chodzi tu o boty które używają irc jako środka komunikacji, boty uruchomione z serwera www.

Na czym polegała zabawa? Otóż na początku był #takeoverz w jakiejś sieci. Było miło, każdy miał jednego bota, a całość opierała się na zasadzie codewar. Kto napisze lepszego robota zdobędzie sławę, chwałę, kobiety i mydło w płynie. Później, gdy wszystkim się znudziło (bo też ileż można..) zacząłem nieco bardziej się interesować łączeniem botów w małe armie, w których każdy bot by miał jakieś zadanie. Nigdy co prawda tego nie skończyłem, bo jak zwykle zabrakło chęci/czasu, jednak troszkę się przy tym nauczyłem. I ostatnia sprawa: z założenia nie potrzebowałem wielu botów, bardziej mi raczej zależało na szybkim ich skompletowaniu i jak najlepszym uptime. Co więc wybrałem? Serwery www :) Ma to taką dodatkową zaletę, że o uruchomienie każdego kolejnego bota trzeba było nieco powalczyć z samym serwerem, czyli po prostu znaleźć sposób na taką oporną bestię. Często było ciekawie, choć często wystarczyło znaleźć serwer z uploadem plików bez filtrowania ich zawartości/rozszerzenia lub serwera gdzie mogłem jako anonymous ładować pliki na ftp, do katalogu widocznego z przeglądarki. Tak tak, boty pisałem w PHP, który ostatnio przeżywa jakiś kryzys i wszyscy na niego narzekają. No cóż, do moich celów był to język idealny, bo większość serwerów takowy język obsługuje. Troszkę przeszkadzał brak wątków, ale i z tym można sobie poradzić. Brzydko ale jednak. Dlatego na potrzeby tego tekstu przyjmuję że bot jest w PHP.

Najtrudniejszą rzeczą na jaką można się natknąć jest, wydawałoby się, prosta sprawa: konfiguracja bota. Gdzie się podłączyć, na jaki kanał wejść, jakie jest hasło do zarządzania botem itd. Nie możemy tego zapisać w samym bocie, bo po pierwsze ktoś mógłby sobie ten plik odczytać, a po drugie uniemożliwi to jakiekolwiek przenosiny bota na inny serwer irc (będzie możliwe, ale strasznie upierdliwe). Problemem jest to, że plik konfiguracyjny powinien być jeden dla wszystkich botów (bądź grupy botów). Najprostszym rozwiązaniem jest serwer www na którym trzymamy ten plik. Ma to dwie zasadnicze wady: nadal można zobaczyć zawartość pliku, serwer może nam narobić problemów i nie każda konfiguracja php pozwala na otwieranie plików z innego serwera (dlatego chyba warto się pomęczyć i zdobyć możliwość zmiany konfiguracji php ;-)). Mimo to nie znalazłem dotąd lepszego rozwiązania. Zawsze też można utrudnić odczytanie tego pliku - np zaszyfrować go dobrym algorytmem, a za klucz dać sumę kontrolną samego bota. Tu jednak jest mała pułapka - co jeśli serwer na którym uruchomimy bota nie obsługuje danego szyfrowania? Optymalnym rozwiązaniem wydaje się jakiś prosty szyfr (nie, nie rot13 czy cezar :P) który sobie napiszemy w samym php, dodatkowo plik konfiguracyjny może mieć nazwę wywodzącą się od sumy kontrolnej pliku. Można to dodatkowo rozszerzyć - zastosować polimorfię dla naszego skryptu (tak tak, polimorfia w php, zmiana własnego kodu) i zmieniać zawartość pliku w ściśle określony sposób - wg. wytycznych konfiguracji wcześniej załadowanej. Przykłady można mnożyć w nieskończoność a i tak nie da nam to 100% bezpieczeństwa, myślę jednak że to wystarczy. Doświadczony user i tak znajdzie sposób, niedoświadczony nie znajdzie i wsio.

Drugą ważną sprawą jest sposób uruchamiania. Jak już mamy naszego bota na jakimś serwerze, trzeba go włączyć. Najłatwiej oczywiście wejść przeglądarką na serwer/plik ale to jest.. cóż, głupie. Prędzej czy później skrypt zdechnie, zabity przez php lub serwer. Przede wszystkim należy się zatroszczyć o to, by bot został uruchomiony w tle. Można do tego użyć innego skryptu który wywoła tylko php bot.php >/dev/null 2>&1 &. Jest to dosyć ważne - przekierowuje stderr na stdout a następnie stdout wywala w kosmos. Ostatni ampersand włącza program w tle (w wypadku serwera na windows - a są takie - trzeba to odpowiednio zmodyfikować. Zresztą, tam jest z reguły mniej problemów bo wszystko automagicznie idzie w tło). Na koniec zostawiłem dwie najlepsze metody. W pierwszej, zakładamy że mamy dostęp do shella. Wtedy możemy wygodnie postawić sesję screen i po problemie. Prawie, bo warto to jeszcze "ubezpieczyć" crontabem - potrzebny będzie prosty skrypt który sprawdzi czy nasz bot ciągle żyje, a jak nie to go włączy. Crontab jest także bardzo przydatny gdy nie mamy shella (czyt. "prawdziwej" konsoli, nie "dumb" oferowane przez nc -e /bin/bash) - najlepszy sposób by zapewnić skryptowi życie. Warto tu zwrócić uwagę na nazwę pliku - spójrz do siebie do /tmp i zobacz jakie są schematy nazw. Spróbuj wymyśleć coś podobnego. Dobrze też jeśli skrypt za każdym razem zmieni nazwę bota np. na services, uruchomi go i nazwę zmieni ponownie na jakiś losowy ciąg znaków. Spowoduje to wyświetlenie na liście procesów nie php evilbot.php tylko np. php services

Kilka słów o kodzie. Nie używajmy żadnych niestandardowych czy "dziwnych" funkcji. Nie opierajmy się o PEAR/PECL. Piszmy tak, by działało na PHP4. Żadnych udziwnień w kodzie, choć obiektowość jest bardzo zalecana (tu php4 wystarczy - po prostu chcemy mieć możliwość połączeń z kilkoma sieciami irc jednocześnie - przynajmniej socket musi być jakimś obiektem).

To co zrobić później z kilkoma takimi botami, to już nie moja sprawa. Jak ktoś jest głupi to zacznie go używać do prób DDoS jakichś serwerów czy robienia forkbomb na serwerach botów, "for the lulz". Jak ktoś troszkę pomyśli to może się sporo nauczyć - obliczenia rozproszone, sieci neuronowe, codewar i inne takie rzeczy tylko czekają aż ktoś się nimi zajmie.
Nie będę tu tłumaczył skąd wziąć takie serwery - powiem tyle, że wystarczy trochę poszukać i praktycznie bez jakiegokolwiek doświadczenia mamy 5-10 botów. Oczywiście nie będzie to żadna wygoda, bo z reguły takie boty będą nam działały jako user serwera http. No ale to nam daje pole do popisu, zawsze można nieco pokombinować by zdobyć lepsze cukierki. (btw, kiedyś widziałem serwer który miał kopię całego /etc w formie archiwum, kopię do której user www miał dostęp :)) Do tego z każdego serwera można uruchomić bota kilka razy - choć klonowania nie polecam. Trzeba też wziąć pod uwagę że od czasu do czasu może na nasz kanał wpaść jakiś administrator z dziwnymi tekstami, czasem warto zmienić sieć i zawsze trzeba unikać dużych, publicznych sieci - jak ircop ciekawski, czemu nagle się łączy 10 dziwnych nicków, to możemy mieć ?-line.
Generalnie, świata nie zwojujemy, jednak przy odrobinie rozwagi można się sporo nauczyć.


Komentarze:

10 Lip 2011 @ 17:22:52 Pupilek Genoy

Bardzo ciekawy artykuł. Mam nadzieję, że inne też takie są.

Pierdol licencje, kopiuj na zdrowie!