In diesem Blogpost möchte ich euch den SSH-Honeypot „Kippo“ vorstellen. Kippo ist ein Tool, welches einen SSH-Server mit schwachen Zugängen simuliert, um nach einem erfolgreichen Login alle Aktivitäten des Angreifers aufzuzeichnen. Die Idee diesen Honeypot aufzusetzen und zu testen kam von unserem Bitwave ;)
Honeypot – Virtuelle Umgebung
Kippo arbeitet dabei in einer virtuellen Umgebung in der kaum Befehle ausführbar sind. Genauer gesagt, führen Kommands wie „mount“, „dmesg“ usw. nur zur Ausgabe eines lustigen Satzes. Der einzige Befehl, welcher „korrekt“ simuliert wird „wget“. (Es ist nicht wget, sondern eine Nachimplementierung in Python) Alle vom Angreifer heruntergeladenen Dateien werden in einem gesonderten Verzeichnis gesammelt, sodass man sich diese später genau anschauen kann. Versucht der Angreifer eine heruntergeladene Datei auszuführen, passiert nichts und er bekommt nur einen lustigen Satz zu lesen.
Alle Befehle, welche vom Angreifer ausgeführt werden, werden in einer Logdatei gespeichert, welche man sich später beliebig oft anschauen kann. Das sieht dann in etwa so aus:
Die Installation von Kippo
Das ganze Projekt basiert u.a. auf Python. Es müssen folgende Pakete installiert werden:
> sudo apt-get install git build-essential python-dev libmysqlclient-dev python-virtualenv python-pip unzip
Als nächstes legen wir einen unprivilegierten Benutzer für Kippo an:
> sudo useradd -m -s /bin/bash kippo > sudo su kippo
Der nächste Schritt besteht darin, eine virtuelle Umgebung zu erstellen und in diese hineinzuwechseln:
> virtualenv env > . ./env/bin/activate
In dieser virtuellen Umgebung können wir dann noch weitere Python-Pakete installieren:
> pip install twisted > pip install pyasn1 > pip install pycrypto
Anschließend loggen wir uns aus der virtuellen Umgebung aus und klonen das Kippo-Respository:
> deactivate > git clone https://github.com/desaster/kippo.git > cd kippo
Damit ist die Installation von Kippo abgeschlossen.
Die Konfiguration
Kippo konfigurieren
Als nächstes muss man die Kippo noch etwas konfigurieren. Das Projekt liefert eine Basiskonfiguration mit, die man übernehmen kann:
> cp kippo.cfg.dist kippo.cfg > vim kippo.cfg
Folgende Zeilen sollte man anpassen:
- ssh_port = 22222 (Einen Port >1024 auswählen)
- hostname (Einen passenden Hostnamen festlegen)
- textlog (Beide Zeilen auskommentieren)
Die Standardlogindaten sind folgende:
- root:12345
Weitere Passwörter hinzufügen
Ich habe meinem Honeypot noch 10.000 weitere Passwörter hinzugefügt:
wget http://xato.net/files/10k%20most%20common.zip unzip 10k\ most\ common.zip rm 10k\ most\ common.zip cat 10k\ most\ common.txt | while read pw; do echo "root:0:$pw" >> data/userdb.txt done
Weitere Benutzer kann man entsprechend hinzufügen. Einfach „root“ durch den gewünschten Benutzernamen ersetzen.
Dateisystem aktualisieren
Optional kann man noch das virtuelle Dateisystem aktualisieren. Dazu muss man sich Rootrechte besorgen (am besten den Benutzer kippo vorher ausloggen) und ein Script ausführen:
exit sudo su cd /home/kippo/kippo mv fs.pickle fs.pickle.bak ./utils/createfs.py | tee -a fs.pickle chown kippo:kippo fs.pickle exit
SSH Port anpassen
Damit Kippo später den SSH-Server spielen kann, müssen wir den eigentlichen SSH-Server auf einen anderen Port umsiedeln. Dazu bearbeitet man am Besten die /etc/ssh/sshd_config und setzt dort den Port z.B. auf „122“.
sed -i -e "s/Port 22/Port 122/g" /etc/ssh/sshd_config sudo /etc/init.d/ssh restart
Wichtig: Nicht vergessen in der Firewall den neuen Port freizuschalten!
Wenn man sich zum Server verbinden möchte, dann muss man dem SSH-Programm mit dem Switch „-p“ mitteilen, zu welchem Port es gehen soll:
ssh -p 122 user@host
Port-Forwarding
Da Kippo auf dem Port „22222“ lauscht, müssen wir einen Portforward mittels Iptables einrichten.
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 22222
Wir brauchen diese Regel, da unprivilegierte Nutzer nur Ports >1024 belegen dürfen. Wir möchten Kippo natürlich nicht mit Rootrechten laufen lassen ;)
Kippo starten
Es gibt zwei Möglichkeiten Kippo zu starten. Allgemein kann es ein paar Sekunden dauern, bis Kippo hochgefahren ist.
Im Vordergrund
Man aktiviert die virtuelle Umgebung und führt dann Kippo aus.
> . ./env/bin/activate (env)$ twistd -n -y kippo/kippo.tac
Diese Variante ist gut zum Debuggen.
Im Hintergrund
Dazu ruft man einfach die „start.sh“ auf und Übergibt den Pfad zur virtuellen Umgebung:
~/kippo> . ../env/bin/activate ~/kippo>./start.sh ../env
Logs anschauen
Zum Anschauen der Hackangriffe, sucht man erstmal die verschiedenen Logs heraus:
kippo@host:~/kippo$ ls log/tty/ 20141016-215452-5117.log 20141017-154123-1028.log 20141017-154811-967.log 20141017-161823-1127.log
Nun ruft man das Playback-Tool auf:
./utils/playlog.py log/tty/20141016-215452-5117.log
Fazit
Ich werde den Honeypot mal eine Weile laufen lassen und falls interessante Ergebnisse hängen bleiben, dann werde ich darüber natürlich bloggen.
~ Sebastian