Praxis: Einsatz von Honeypots

20.07.2006 von Ralf Spenneberg
Der erste Artikelteil vermittelte das notwendige Grundlagenwissen zu Honeypots. Dieser Beitrag betrachtet nun die beiden Honeypot-Lösungen Tiny Honeypot und honeyd und erklärt ihre Installation und Verwendung.

Tiny Honeypot (THP) wurde von George Bakos geschrieben. THP erlaubt die Simulation eines Dienstes auf jedem Port. Hierzu werden kleine Perl-Programme verwendet, die die Verbindungsanfrage entgegennehmen und jede Art von Dienst simulieren können. THP wurde für Linux geschrieben und benötigt die Netfilter-Architektur für die Implementierung des Honeypots. Da auch hier die Dienste lediglich simuliert werden, geht von THP grundsätzlich keine Gefahr aus. THP wird unter der GNU GPL veröffentlicht.

Der Kern von THP ist das Perl-Programm logthis. Dieses Perl-Programm wird vom xinetd oder dem inetd bei einer Verbindung auf dem Port 6635 gestartet. Das Programm protokolliert dann die Verbindung und kann in Abhängigkeit vom übergebenen Kommandozeilenargument unterschiedliche Dienstsimulationen starten. Im Paket sind bereits Perl-Skripts enthalten, die den Apache-Webserver, den Microsoft Internet Information Server, eine Root Shell und den WU-FTP-Server simulieren können. Zusätzlich existiert ein Skript nullresp.pl, welches lediglich Daten entgegennimmt, jedoch keine Rückmeldung gibt. Dieses ist insbesondere geeignet, um automatische Werkzeuge, die nach einer erfolgreichen Verbindung sofort den Angriff (zum Beispiel mit einem Bufferoverflow) starten, zu ermitteln. Die übertragenen Daten würden dann in einer Datei gespeichert werden.

Wichtig ist nun, dass bei einer Verbindung zum Beispiel auf dem Port 1433 (Microsoft SQL-Server) diese Verbindung an den Tiny Honeypot weitergeleitet wird. Dies erfolgt beim Tiny Honeypot mit der Netfilter-Architektur. Diese erlaubt eine Änderung der Zieladresse und/oder des Zielports eines Paketes. Hier wird die Destination NAT verwendet, um für alle auf dem Rechner nicht verwendeten Ports die entsprechende Verbindung auf den Port 6635 umzuleiten. Dazu muss jedoch Tiny Honeypot die Ports, auf denen reguläre Dienste des Rechners laufen, kennen, damit diese nicht umgeleitet werden.

Dieser Artikel basiert auf Kapitel 22 des Buches „Intrusion Detection und Prevention mit Snort 2 & Co.“ von Ralf Spenneberg. Das 840 Seiten starke Werk ist im Verlag Addison-Wesley erschienen (ISBN: 3827321344) und kostet in der Druckausgabe 59,95 Euro. Sie können das Buch direkt in unserem Buch-Shop versandkostenfrei bestellen

Installation von Tiny Honeypot

Die Installation von Tiny Honeypot ist sehr einfach. Nachdem das Programm geladen wurde, ist keine Übersetzung erforderlich, da es sich bei ihm um Perl-Skripts handelt. Es sollten lediglich die Dateien an die vorgesehenen Stellen kopiert und die Konfiguration angepasst werden.

Dazu wird zunächst das Paket an geeigneter Stelle ausgepackt und ein symbolischer Link auf das entstandene Verzeichnis erzeugt. Dies erlaubt später eine einfache Verwaltung unterschiedlicher Versionen.

# cd /usr/local
# tar xzf /pfad/thp-<version>.tar.gz
# ln -s thp-<version> thp

Nun sollten die entsprechenden Konfigurationsdateien für den xinetd in das Verzeichnis /etc/xinetd.d kopiert werden. Diese Dateien definieren, ob der xinetd die entsprechenden Dienste anbieten soll. Hierzu existiert in den Dateien eine Variable disable. Diese Variable muss den Wert no für alle anzubietenden Dienste erhalten.

# cp xinetd/* /etc/xinetd.d/

Wird an der Stelle des xinetd der inetd eingesetzt, so ist entsprechend in der Datei /etc/inetd.conf folgende Zeile anzuhängen.

6635 stream tcp nowait nobody /usr/local/thp/logthis logthis

In beiden Fällen wird bei einer Verbindung auf dem Port 6635 das Programm logthis mit den Rechten des Benutzers nobody aufgerufen. Anschließend müssen sowohl xinetd als auch der inetd neu gestartet werden.

Für die Protokollierung muss nun noch das Verzeichnis /var/log/hpot mit den richtigen Rechten angelegt werden.

# mkdir /var/log/hpot
# chmod 700 /var/log/hpot
# chown nobody:nobody /var/log/hpot

Konfiguration für Tiny Honneypot

Nun fehlt lediglich die Umleitung sämtlicher freier Ports auf den Port 6635. Diese Umleitung (ein Destination NAT) wird mit dem Befehl iptables konfiguriert. Eine genaue Besprechung dieses Befehls würde den Rahmen dieses Buches sprengen. Robert L. Ziegler beschreibt die Möglichkeiten in seinem Buch „Linux Firewalls“. Für die Konfiguration von Tiny Honeypot ist aber ein Verständnis dieses Befehls nicht zwingend erforderlich. (Jedoch ist der Einsatz eines Honeypots, dessen Funktionsweise nicht verstanden wird, vielleicht doch als fahrlässig zu bezeichnen.) Die Anpassung erfolgt in der Datei iptables.rules. Dort sind einige Anpassungen in den ersten Zeilen erforderlich:

# Das externe Interface, auf dem der Honeypot aktiv sein soll
EXTIF="ppp0"

# Ein internes Interface, auf dem der Honeypot nicht aktiv ist
# INTIF="eth0"
# INTNET=

# Wenn nur bestimmte Netzwerke an dem Honeypot vorbei auf Dienste zugreifen
# dürfen, werden sie hier definiert:
# GOODNET="192.168.0.0/24"

# Diese Ports werden nicht umgeleitet, da hier andere echte Dienste laufen
# Komma-separierte Liste!
GOOD_SVCS="22"

# Diese Ports werden auf spezielle Simulationen umgeleitet. Bisher sind 21 und
# 80 unterstützt
HPOT_TCP_SVCS="21,80"

Nun ist noch ein Blick in die Datei thp.conf erforderlich. Diese Datei erlaubt die Angabe des zu simulierenden Webservers und des FTP-Servers. Möglicherweise werden dort noch weitere Modifikationen gewünscht und dann ist THP einsetzbar.

Bei einer Verbindung auf einem beliebigen Port reagiert nun THP mit folgender Ausgabe:

# telnet honeynet.spenneberg.org 27
Trying 217.160.128.61..
Connected to honeynet.spenneberg.org.
Escape character is '^]'
"If you ever want to get anywhere in politics, my boy, you're going to
have to get a toehold in the public eye.

[root@honeynet root]# ls
[root@honeynet root]# dir
[root@honeynet root]# ^]

Tipp:
Wenn die Ausgabe eines root-Promptes nicht gewünscht wird, so kann durch eine Modifikation der Datei /etc/xinetd.d/hpot dies unterdrückt werden. Dazu wird in dieser Datei die Zeile server_args = shell auskommentiert. Nach einem Neustart des xinetd wird nun kein Prompt mehr ausgegeben.

Protokollierung

Eine Protokollierung erfolgt in der Datei /var/log/hpot/captures. Hier wird der Beginn der Verbindung, das Ende und die Anzahl der übertragenen Bytes protokolliert.

Aug 05 15:42:43 start thp SID 1028554963, UNIX pid 4035 source 212.93.24.187:33167
Aug 05 15:42:50 end thp SID 1028554963
691 -elapsed time 00:00:07
-total 9 bytes

Zusätzlich wird eine Datei mit der entsprechenden SID erzeugt. Bei dieser Sitzung wurde die Datei /var/log/hpot/1028554963 erzeugt.

# cat /var/log/hpot/1028554963
ls
dir

Diese Angaben verraten jedoch nicht, auf welchem Port ursprünglich die Verbindung erfolgte. Diese Information wird in der Datei /var/log/messages protokolliert.

# grep 15:42 /var/log/messages
Aug 5 15:42:42 P15097491 kernel: HPOT_DATA: IN=eth0 OUT= MAC=00:20:ed:2f:ed:68:00:00:5a:9d:10:ba:08:00 SRC=212.93.24.187 DST=217.160.128.61 LEN=60 TOS=0x10 PREC=0x00 TTL=51 ID=37580 DF PROTO=TCP SPT=33167 DPT=27 WINDOW=5840 RES=0x00 SYN URGP=0 OPT (020405B40402080A002ADC880000000001030300)

Wenn der Honeypot zusätzlich auch die RPC-Dienste unterstützen soll, so bietet Tiny Honeypot eine Liste aller möglichen RPC-Dienste fakerpc. Der lokale RPC-Portmapper kann gestartet und mit dieser Liste gefüttert werden. Dann wird er auf die entsprechenden Anfragen immer die erwarteten Anworten liefern und das Vorhandensein der Dienste simulieren. Das Aufsetzen erfolgt folgendermaßen:

# /etc/init.d/portmap start # startet den Portmapper
# pmap_set < fakerpc # lädt die falsche Liste

Achtung:
Wenn der installierte RPC-Portmapper eine Sicherheitslücke aufweist, so kann diese nun ausgenutzt werden. Ein Start des Portmappers sollte daher wohlüberlegt sein.

Der Tiny Honeypot ist also ein sehr gutes Werkzeug, um zunächst jegliche Verbindungsanfrage entgegenzunehmen und einen Angriff zu erlauben. Die übertragenen Informationen werden in lokalen Dateien gespeichert und der Verbindungsaufbau wird in den Dateien /var/log/hpot/captures und /var/log/messages protokolliert. Seine einfache Installation und das geringe Risiko seiner Anwendung machen ihn zur idealen „Einsteigerlösung“.

Honeyd

Honeyd wurde von Niels Provos geschrieben. Es erlaubt die Simulation beliebiger Netzwerkdienste. Es unterscheidet sich jedoch massiv von den bisher besprochenen Lösungen, da es auch die Simulation beliebiger TCP/IP-Stacks erlaubt. So ist es möglich, auf einem Linux-Rechner den TCP/IP-Stack eines AIX 4.0-4.2-Rechners zu simulieren. Wenn ein Angreifer nun einen Nmap Scan des Rechners durchführt, wird ihm suggeriert, dass er gerade mit einem IBM AIX-Rechner kommuniziert. Zusätzlich erlaubt Honeyd die Simulation nicht nur eines Rechners, sondern gesamter Netzwerke, wenn die entsprechenden IP-Adressen zur Verfügung stehen. Honeyd wird als Open Source auf http://www.honeyd.org veröffentlicht.

Diese Fähigkeiten machen honeyd momentan zu einem der mächtigsten Werkzeuge. Jedoch ist honeyd nicht in der Lage, die Simulation eines Netzwerkes alleine auszuführen. Damit der für das simulierte Netzwerk bestimmte Verkehr auch bei honeyd ankommt, sind entweder explizite Routing-Einträge, ProxyArp oder der Dienst arpd erforderlich. arpd ist ein Dienst, der bei Address Resolution Protocol-Anfragen für konfigurierbare IP-Adressen immer mit der eigenen MAC-Adresse antwortet. Das Programm arpd wurde von Dug Song und Niels Provos geschrieben.

Um die verschiedenen TCP/IP-Stacks zu simulieren, benötigt honeyd Informationen über diese Stacks. Dabei verwendet honeyd dieselbe Datenbank wie nmap . Die Datenbank von nmap ist inzwischen über 700 Einträge groß. So können bis zu 700 verschiedene TCP/IP-Stacks (einschließlich Druckern, Routern etc.) simuliert werden.

Installation von honeyd

Die Installation von honeyd ist recht einfach. Jedoch werden für die Übersetzung die folgenden Bibliotheken benötigt:

Wurden die entsprechenden Bibliotheken installiert, so erfolgt die Übersetzung und Installation von honeyd folgendermaßen:

# cd /usr/local/src/
# tar xvzf /pfad/honeyd-<version>.tar.gz
# cd honeyd
# ./configure --with-libpcap=<DIR> --with-libdnet=<DIR> --with-libevent=<DIR>


--prefix=/usr/local --sysconfdir=/etc --mandir=/usr/local/share/man
# make
# make install

Zusätzlich sollte die Installation von arpd erwogen werden. Das Programm ist unter http://www.honeyd.org/tools.php und http://www.citi.umich.edu/u/provos/honeyd/arpd0.2.tar.gz erhältlich. Seine Installation erfolgt ähnlich:

# cd /usr/local/src/
# tar xvzf /pfad/arpd-<version>.tar.gz
# cd arpd
# ./configure --with-libpcap=DIR --with-libdnet=DIR --with-libevent=DIR


--prefix=/usr/local --sysconfdir=/etc --mandir=/usr/local/share/man
# make
# make install

Nach der Installation sind arpd und honeyd einsatzbereit. Das Programm honeyd unterstützt die folgenden Optionen beim Aufruf:

Der Aufruf erfolgt dann mit:

honeyd [-dP] [-p fingerprints] [-f datei] [-i interface][Netzwerk]

Konfiguration von honeyd

Nach dem Aufruf erzeugt honeyd virtuelle Rechner für alle IP-Adressen, die mit dem Ausdruck Netzwerk angegeben werden. Wird das Netzwerk nicht definiert, so beantwortet honeyd die Anfragen für jede sichtbare IP-Adresse. Dabei werden TCP-und UDP-Dienste simuliert. Sämtliche Anfragen auf UDP werden standardmäßig mit einem ICMP-Port unreachable beantwortet, wenn der simulierte TCP/IP-Stack genauso reagieren würde. Das bedeutet, der Port ist geschlossen. Zusätzlich beantwortet honeyd ICMP Echo Requests (PING).

Um nun virtuelle Rechner zu erzeugen, muss eine Konfigurationsdatei entstehen. Folgendes Listing zeigt eine Beispielkonfiguration.

create win311
set win311 personality "Windows for Workgroups 3.11 / TCP/IP-32 3.11b stack or Win98"
add win311 tcp port 80 "sh scripts/web.sh"
add win311 tcp port 23 "sh scripts/test.sh $ipsrc $dport"
set win311 default tcp action reset

annotate "Xerox DocuPrint N40" fragment drop
create printer

set printer personality "Xerox DocuPrint N40"
add printer tcp port 515 "scripts/test.sh $ipsrc $dport"
set printer default tcp action reset

bind 192.168.0.15 win311
bind 192.168.0.14 printer

Diese Konfiguration erzeugt zwei Beispielsysteme: 192.168.0.15 ist ein Windows 3.11-Rechner und 192.168.0.14 ist ein Xerox Docuprint N40-Drucker.

Um diese Systeme zu erzeugen, werden zunächst so genannte Templates erzeugt. Dies erfolgt mit der Direktive create Templat-Name. Anschließend kann diesem Templat eine TCP/IP-Persönlichkeit zugewiesen werden: set Templat-Name personality Persönlichkeit . Der Name der Persönlichkeit ergibt sich aus der Datei mit den Nmap-Fingerabdrücken. Diese Persönlichkeit definiert dann das folgende Verhalten des TCP/IP-Stacks der entsprechenden Maschine.

Dienstekonfiguration

Anschließend können die einzelnen Dienste und das Verhalten dieser Dienste definiert werden. Dazu werden dem Templat Dienste mit add hinzugefügt. Hierbei ist die Angabe des Protokolls (tcp, udp) erforderlich. Anschließend erfolgt die Angabe von port und der Portnummer. Es folgt dann die Aktion, die ausgeführt werden soll für diesen Port. Hier stehen die Funktionen block, open, reset, proxy oder eine Kommandoausführung zur Verfügung. Die Aktion proxy erlaubt die Weiterleitung der Anfrage auf einen anderen Rechner. Dieser nimmt dann die Anfrage entgegen. Damit kann die Illusion eines echten Dienstes erzeugt werden. Die Angabe eines Kommandos erlaubt den Aufruf eines Skripts. Dieses kann dann auch den Dienst simulieren. Beim honeyd-Paket sind momentan drei Skripts enthalten. Dies sind web.sh zur Simulation eines Microsoft IIS-5.0, test.sh zur Annahme und Protokollierung jeder Verbindung und router-telnet.pl zur Simulation eines Routers.

add templat proto port port action

Schließlich muss eine IP-Adresse auf dem Templat gebunden werden. Dies erfolgt mit dem Befehl bind. Anschließend wird honeyd gestartet.

Wird nun die IP-Adresse mit Nmap gescannt, so erscheint das folgende Bild:

# nmap -sS -O 192.168.0.14

Starting nmap V. 3.00 ( www.insecure.org/nmap/
Interesting ports on (192.168.0.14)
(The 1600 ports scanned but not shown below are in state: closed)
Port State Service
515/tcp open printer
Remote operating system guess: Xerox DocuPrint N40

Nmap run completed --1 IP address (1 host up) scanned in 10 seconds

Die einzelnen TCP/IP-Persönlichkeiten können zusätzlich annotiert werden. Hierbei kann definiert werden, ob ein TCP FIN-Scan erfolgreich ist und wie mit Fragmenten umgegangen werden soll.

annotate Persänlichkeit [no] finscan
annotate Persänlichkeit fragment [drop|new|old]

Komplette Netzwerke mit honeyd

Der Dienst honeyd erlaubt auch die Erzeugung kompletter Netze. Hierzu können in der Konfigurationsdatei Router und Routen definiert werden. Dazu wird zunächst der erste Router mit der Zeile

route entry Router-IP

spezifiziert. Anschließend werden die Netze definiert, die über diesen Router direkt erreicht werden können. Das erfolgt mit der Zeile:

route Router-IP link Netzwerk

Zusätzlich können weitere Netze definiert werden, die über den zweiten Router erreicht werden. Die Verbindung des zweiten Routers muss dabei explizit definiert werden.

route Router-IP add net Netzwerk Gateway latency Zeitms loss Prozent
route Gateway link Netzwerk

Eine Beispielkonfiguration ist in folgendem Listing abgedruckt.

create win311
add win311 tcp port 80 "sh scripts/web.sh"
add win311 tcp port 23 "scripts/test.sh $ipsrc $dport"
set win311 personality "Windows for Workgroups 3.11 / TCP/IP-32 3.11b stack or Win98"
set win311 default tcp action reset

bind 10.0.6.15 win311

route entry 192.168.0.13
route 192.168.0.13 link 192.168.1.0/24
route 192.168.0.13 add net 10.0.6.0/24 192.168.1.1
route 192.168.1.1 link 10.0.6.0/24

Wird anschließend honeyd gestartet, so kann zunächst ein traceroute auf den Rechner durchgeführt und anschließend der Rechner 10.0.6.15 mit nmap gescannt werden:

# traceroute 10.0.6.15

traceroute to 10.0.6.15 (10.0.6.15), 30 hops max, 38 byte packets
1 192.168.0.13 (192.168.0.13) 0.753 ms 0.389 ms 0.420 ms
2 192.168.1.1 (192.168.1.1) 11.308 ms 7.705 ms 9.897 ms

3 10.0.6.15 (10.0.6.15) 19.942 ms 18.040 ms 20.193 ms

# nmap -sT -O 10.0.6.15

Starting nmap V. 3.00 ( www.insecure.org/nmap/
Interesting ports on (10.0.6.15)
(The 1599 ports scanned but not shown below are in state: closed)
Port State Service
23/tcp open telnet
80/tcp open http
Remote operating system guess: Windows for Workgroups 3.11 TCP/IP-32 3.11b stack or Win98

Nmap run completed --1 IP address (1 host up) scanned in 9 seconds

Paketumleitung mit arpd

Damit der Rechner, auf dem honeyd gestartet wurde, aber überhaupt die Pakete erhält, ist es erforderlich, dass dieser auf die ARP-Anfragen für die entsprechenden IP-Adressen antwortet. Die einfachste Lösung für dieses Problem ist der Befehl arpd. Dieser muss zusätzlich auf dem Rechner gestartet werden.

Der Befehl arpd unterstützt bei seinem Aufruf die folgenden Optionen:

Der Aufruf erfolgt dann mit:

arpd [-d] [-i interface][Netzwerk]

Hierbei müssen die simulierten Rechner im selben Netz oder der simulierte Router angegeben werden.

Auf der Homepage http://www.honeyd.org werden noch weitere Skripts und Werkzeuge zum Download angeboten, die honeyd in seiner Funktion erweitern. Inbesondere soll hier auf das Werkzeug honeyview hingewiesen werden. Dieses kann eine grafische Darstellung aus den honeyd-Protokolldateien erzeugen. Damit ist die Analyse der Protokolle wesentlich einfacher.

Der Honeypot honeyd ist somit sicherlich eines der mächtigsten Werkzeuge. Er erlaubt die Simulation beliebiger Rechnernetze und Dienste. Alle wichtigen Netzwerkfunktionen werden unterstützt. Auf der Homepage wurde bereits ein Bereich für Skripts eingerichtet, die von den Benutzern beigesteuert wurden. Insgesamt ist honeyd das Werkzeug der Wahl für einen simulierten Honeypot.

Dieser Artikel basiert auf Kapitel 22 des Buches „Intrusion Detection und Prevention mit Snort 2 & Co.“ von Ralf Spenneberg. Das 840 Seiten starke Werk ist im Verlag Addison-Wesley erschienen (ISBN: 3827321344) und kostet in der Druckausgabe 59,95 Euro. Sie können das Buch direkt in unserem Buch-Shop versandkostenfrei bestellen