Kippo – SSH Honeypot installieren

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