Conpot in Docker Container beitreiben

Conpot ist ein low interactive Honeypot der verschiedene Steuersysteme von Industrieanlagen nachahmen kann. In diesem Artikel wird eine Möglichkeit für den Betrieb des Honeypots in einem Docker Container vorgestellt.

Für den weiteren Verlauf des Artikels wird ein Computer oder Server benötigt auf dem Docker bereits installiert ist und läuft.

Leider wird von den Entwicklern des Honeypots momentan noch keine direkte Möglichkeit angeboten einen Docker Container zu erstellen. Aus diesem Grund wurde für diesen Artikel eine eigene Datei mit dem Namen Dockerfile erstellt, die diese Möglichkeit bietet. Der Inhalt dieser Datei ist im nachfolgenden Beispiel aufgeführt und kann auch heruntergeladen werden.

FROM ubuntu:14.04.1

ENV DEBIAN_FRONTEND noninteractive

# Prepare source.list
RUN sed -i '1ideb mirror://mirrors.ubuntu.com/mirrors.txt trusty main universe multiverse' /etc/apt/sources.list && \
    sed -i '1ideb mirror://mirrors.ubuntu.com/mirrors.txt trusty-updates main universe multiverse' /etc/apt/sources.list && \
    sed -i '1ideb mirror://mirrors.ubuntu.com/mirrors.txt trusty-backports main universe multiverse' /etc/apt/sources.list && \
    sed -i '1ideb mirror://mirrors.ubuntu.com/mirrors.txt trusty-security main universe multiverse' /etc/apt/sources.list

# Install dependencies
RUN apt-get update && apt-get install -y \
        git \
        libmysqlclient-dev \
        libsmi2ldbl \
        libxslt1-dev \
        python \
        python-dev \
        snmp-mibs-downloader && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Clone git repo and build the honeypot
RUN cd /opt/ && \
    git clone https://github.com/glastopf/conpot.git && \
    cd conpot/ && \
    python setup.py install && \
    rm -rf /opt/conpot /tmp/* /var/tmp/*

## Create directories
RUN mkdir -p /opt/myhoneypot/var

WORKDIR /opt/myhoneypot
VOLUME /opt/myhoneypot

EXPOSE 80 102 161/udp 502

CMD ["/usr/local/bin/conpot", "--template", "default", "--logfile", "/opt/myhoneypot/var/conpot.log"]

Die Datei wird für das Erstellen in diesem Artikel verwendet und muss zuerst heruntergeladen werden.

$ mkdir -p /tmp/conpot
$ cd /tmp/conpot
$ wget https://www.dinotools.de/file/article/2015/02/19/run-conpot-inside-a-docker-container/Dockerfile

Anschließend kann der Befehl

docker build
zum Einsatz kommen um ein neues Image für den späteren Container zu erstellen. Dieser Vorgang kann unter Umständen eine paar Minuten dauern.

$ sudo docker build --rm --tag conpot .

War die Erstellung erfolgreich, wird noch ein Verzeichnis benötigt in dem die Log-Dateien permanent gespeichert werden können. Die Dateien in diesem Verzeichnis bleiben erhalten, auch wenn der eigentliche Container beendet oder gelöscht wird.

$ sudo mkdir -p /opt/honeypot/conpot1

Danach wird es Zeit für den ersten Start des Honeypots in einem neuen Container.

$ sudo docker run --rm --publish 80:80 --publish 102:102 --publish 161:161/udp --publish 502:502 --volume /opt/honeypot/conpot1:/opt/myhoneypot/var conpot
2015-02-18 18:27:45,595 Starting Conpot using template: /usr/local/lib/python2.7/dist-packages/Conpot-0.4.0-py2.7.egg/conpot/templates/default
2015-02-18 18:27:45,595 Starting Conpot using configuration found in: /usr/local/lib/python2.7/dist-packages/Conpot-0.4.0-py2.7.egg/conpot/conpot.cfg
2015-02-18 18:27:45,795 Fetched 89.16.154.168 as external ip.
2015-02-18 18:27:45,797 Conpot modbus initialized
2015-02-18 18:27:45,798 Found and enabled ('modbus', <class conpot.protocols.modbus.modbus_server.ModbusServer at 0x7fbde415f530>) protocol.
2015-02-18 18:27:45,799 Conpot S7Comm initialized
2015-02-18 18:27:45,799 Found and enabled ('s7comm', <class 'conpot.protocols.s7comm.s7_server.S7Server'>) protocol.
2015-02-18 18:27:45,800 Found and enabled ('http', <class 'conpot.protocols.http.web_server.HTTPServer'>) protocol.
2015-02-18 18:27:45,801 Found and enabled ('snmp', <class 'conpot.protocols.snmp.snmp_server.SNMPServer'>) protocol.
2015-02-18 18:27:45,802 No proxy template found. Service will remain unconfigured/stopped.
2015-02-18 18:27:45,802 Modbus server started on: ('0.0.0.0', 502)
2015-02-18 18:27:45,802 S7Comm server started on: ('0.0.0.0', 102)
2015-02-18 18:27:45,802 HTTP server started on: ('0.0.0.0', 80)
2015-02-18 18:27:45,911 SNMP server started on: ('0.0.0.0', 161)
2015-02-18 18:27:50,967 Privileges dropped, running as nobody/nogroup.

Wie die Meldungen beim Start bereits vermuten lassen, werden mehrere Dienste durch den Honeypot angeboten. So verbergen sich hinter den TCP-Ports 80, 102 und 502 sowie hinter dem UDP-Port 161 verschiedene Dienste.

Mit Hilfe der Tastenkombination Strg. + C kann der laufende Honeypot wieder gestoppt werden.

Verwandte Artikel