CentOS7にハニーポットDionaeaを導入する

2018年5月2日

数ヶ月前にWeb特化型ハニーポットGlastopfの運用を始めて,3ヶ月ほどが経ちました.

まだまだCowrieもGlastopfもログ分析を行いきれているわけではないですが,SSHやTelnet,HTTP以外にもログの収集だけは行っておきたかったので,当初から導入を検討していたハニーポットDionaeaを導入していきたいと思います.

ハニーポットDionaeaとは

dionaea intention is to trap malware exploiting vulnerabilities exposed by services offerd to a network, the ultimate goal is gaining a copy of the malware.

https://dionaea.readthedocs.io/en/latest/introduction.htmlより

Dionaeaは後述する様々なサービス,プロトコルをエミュレートする低対話型サーバ側のハニーポットです.攻撃者が仕掛けるファイルや丸ェアの収集を目的として開発されています.随分前の文献にはなりますが,IPAにも推奨されていました.

Dionaeaがエミュレートするサービス,プロトコル

Black hole

  • Config: blackhole.yaml
  • Service: Telnet, DNS, NTP
  • Port: 53/TCP, 23/TCP, 53/UDP, 123/UDP

EPMAP

  • Config: epmap.yaml
  • Port: 135/TCP

FTP

  • Config: ftp.yaml
  • Port: 21/TCP

HTTP

  • Config: http.yaml
  • Service: HTTP, HTTPS
  • Port: 80/TCP, 443/TCP

Memche

  • Config: memcache.yaml
  • Port: 11211/TCP

Mirror

  • Config: mirror.yaml
  • Port: 42/TCP

MongoDB

  • Config: mongo.yaml
  • Port: 27017/TCP

MQTT

  • Config: mqtt.yaml
  • Port: 1883/TCP

MSSQL

  • Config: mssql.yaml
  • Port: 1433/TCP

MySQL

  • Config: mysql.yaml
  • Port: 3306/TCP

nfq

  • Config: pptp.yaml
  • Port: 1723/TCP

SIP(VoIP)

  • Config: sip.yaml
  • Port: 5060/TCP, 5061/TCP, 5060/UDP

SMB

  • Config: smb.yaml
  • Port: 445/TCP

TFTP

  • Config: tftp.yaml
  • Port: 69/UDP

UPnP

  • Config: upnp.yaml
  • Port: 1900/UDP

Dionaeaの導入

Dionaeaのインストール

必要なライブラリ等のインストール

# yum install autoconf automake libtool wget flex bison
# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel
# yum install glib*

Dionaeaのダウンロード

# cd /opt/
# git clone https://github.com/DinoTools/dionaea dionaea

Liblcfgのインストール

# cd
# git clone https://github.com/pb-/liblcfg.git liblcfg
# cd liblcfg/code/
# autoreconf -vi
# ./configure -prefix=/opt/dionaea
# make install

Libemuのインストール

# cd
# git clone https://github.com/cperdana/libemu.git libemu
# cd libemu/
# autoreconf -vi
# find ./ -type f | xargs sed -i "s/-Werror//g"
# ./configure -prefix=/opt/dionaea
# make
# make install

LibEvのインストール

# cd
# wget http://dist.schmorp.de/libev/Attic/libev-4.24.tar.gz
# tar xzf libev-4.24.tar.gz
# cd libev-4.24
# ./configure -prefix=/opt/dionaea
# make install

Libpcapのインストール

# cd
# wget http://www.tcpdump.org/release/libpcap-1.8.0.tar.gz
# tar xzf libpcap-1.8.0.tar.gz
# cd libpcap-1.8.0
# ./configure -prefix=/opt/dionaea
# make install

Pythonのインストール

# cd
# wget http://www.python.org/ftp/python/3.4.7/Python-3.4.7.tgz
# tar xzf Python-3.4.7.tgz
# cd Python-3.4.7
# ./configure --enable-shared -prefix=/opt/dionaea --with-computed-gotos -enable-ipv6 LDFLAGS="-Wl,-rpath=/opt/dionaea/lib -L/usr/lib/x86_64-linux-gnu/"
# make
# make install

Cython, Pyyalmのインストール

# cd /opt/dionaea/bin
# ./pip3 install cython pyyaml

OpenSSLのインストール

# cd
# wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_1p.tar.gz
# tar xzf OpenSSL_1_0_1p.tar.gz
# cd openssl-OpenSSL_1_0_1p
# ./Configure shared --prefix=/opt/dionaea linux-x86_64
# make
# make install

Curlのインストール

# cd
# git clone https://github.com/bagder/curl.git curl
# cd curl/
# autoreconf -iv
# ./configure --prefix=/opt/dionaea
# make
# make install

udnsのインストール

# cd
# wget http://www.corpit.ru/mjt/udns/old/udns_0.0.9.tar.gz
# tar xfz udns_0.0.9.tar.gz
# cd udns-0.0.9/
# ./configure
# make shared
# cp udns.h /opt/dionaea/include
# cp *.so* /opt/dionaea/lib/
# cd /opt/dionaea/lib
# ln -s libudns.so.0 libudns.so

glibのインストール

# cd
# wget http://ftp.acc.umu.se/pub/gnome/sources/glib/2.31/glib-2.31.22.tar.xz
# tar xf glib-2.31.22.tar.xz
# cd glib-2.31.22
# ./configure --prefix=/opt/dionaea/
# make
# make install

Dionaeaのインストール

# cd /opt/dionaea/
# autoreconf -iv
# ./configure --with-lcfg-include=/opt/dionaea/include/ \
  --with-lcfg-lib=/opt/dionaea/lib/ \
  --with-python=/opt/dionaea/bin/python3.4 \
  --with-cython-dir=/opt/dionaea/bin \
  --with-udns-include=/opt/dionaea/include/ \
  --with-udns-lib=/opt/dionaea/lib/ \
  --with-emu-include=/opt/dionaea/include/ \
  --with-emu-lib=/opt/dionaea/lib/ \
  --with-gc-include=/usr/include/gc \
  --with-ev-include=/opt/dionaea/include \
  --with-ev-lib=/opt/dionaea/lib \
  --with-curl-config=/opt/dionaea/bin/ \
  --with-pcap-include=/opt/dionaea/include \
  --with-pcap-lib=/opt/dionaea/lib/ \
  --with-ssl-include=/opt/dionaea/include/ \
  --with-ssl-lib=/opt/dionaea/lib/ \
  --with-glib=/opt/dionaea/

# make
# make install

Dionaeaの設定及び起動

IPアドレスの指定及び出力するログレベルの変更

IPアドレスの指定と出力するログレベルの変更を行います.ログレベルについてはデフォルトの設定で起動すると,ものすごい量のログが出力されて短時間でストレージを圧迫するそうなので変更を行いました.

# vim /opt/dionaea/etc/dionaea/dionaea.cfg
[dionaea]
listen.mode=manual
listen.addresses=xxx.xxx.xxx.xxx

[logging]
default.levels=all,-debug
errors.levels=error

json形式のログを出力

デフォルトの設定ではjson形式のログが出力されなかったため,出力されるように設定します.

# cd /opt/dionaea/etc/dionaea/ihandlers-enabled/
# ln -sf ../ihandlers-available/log_json.yaml ./

Dionaea用のグループとユーザを作成

# groupadd dionaea
# useradd -g dionaea -s /usr/sbin/nologin dionaea
# chown -R dionaea:dionaea /opt/dionaea/

firewallの設定

firewallの設定についてはDionaeaがサポートするサービスが多いため,最初に示したDionaeaがエミュレートするサービスのポートを参考に自分の収集したいサービスのポートを適宜開けるようにしてください.

起動コマンド

起動コマンドのオプションについては公式のドキュメントを参照してください.

# /opt/dionaea/bin/dionaea -D -u dionaea -g dionaea

systemdにサービス登録

# vim /etc/systemd/system/dionaea.service
[Unit]
Description=Home of the dionaea honeypot
Documentation=https://github.com/DinoTools/dionaea
After=network.target

[Service]
Type=forking
ExecStart=/opt/dionaea/bin/dionaea -D -u dionaea -g dionaea
KillMode=control-group
Restart=on-failure

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable dionaea
# systemctl restart dionaea
# systemctl status dionaea
  Active: active (running)

起動確認

正しくDionaeaが動作しているかssコマンドを用いて確認します.

# ss -tulp | grep dionaea
udp    UNCONN     0      0      xxx.xxx.xxx.xxx:ssdp
udp    UNCONN     0      0      xxx.xxx.xxx.xxx:ntp
udp    UNCONN     0      0      xxx.xxx.xxx.xxx:sip
udp    UNCONN     0      0      xxx.xxx.xxx.xxx:domain
udp    UNCONN     0      0      xxx.xxx.xxx.xxx:tftp
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:mysql
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:nameserver
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:memcache
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:http
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:ftp
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:domain
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:telnet
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:ms-sql-s
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:pptp
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:ibm-mqisdp
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:https
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:microsoft-ds
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:sip
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:sip-tls
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:epmap
tcp    LISTEN     0      20     xxx.xxx.xxx.xxx:27017

Dionaeaの利用方法

Dionaeaの簡単な利用方法は以下の通りです.

  • 設定ファイル
    • Dionaeaの設定ファイル:/opt/dionaea/etc/dionaea/dionaea.cfg
    • 各種サービスの設定ファイル:/opt/dionaea/etc/dionaea/service-available/*.yaml
    • ログやその他の設定ファイル:/opt/dionaea/etc/dionaea/ihandlers-available/*.yaml

設定ファイル*.yamlについては/opt/dionaea/etc/dionaea/service-enabled//opt/dionaea/etc/dionaea/ihandlers-enabled/にシンボリックリンクを張ることで設定ファイルとして読み込まれ,反映されます.

  • ログファイル
    • システムログ:/opt/dionaea/var/dionaea/dionaea.log
    • エラーログ:/opt/dionaea/var/dionaea/dionaea-errors.log
    • json形式のログ:/opt/dionaea/var/dionaea/dionaea.json
    • sqlite形式のログ:/opt/dionaea/var/dionaea/dionaea.sqlite
    • セッション別通信記録:/opt/dionaea/var/dionaea/bistreams/日付/
  • 攻撃者に設置,ダウンロードされたファイル:/opt/dionaea/var/dionaea/binaries/
  • ドキュメントルート
    • HTTP,HTTPS:/opt/dionaea/var/dionaea/roots/www/
    • FTP:/opt/dionaea/var/dionaea/roots/ftp/
    • TFTP:/opt/dionaea/var/dionaea/roots/tftp/
    • UPnP:/opt/dionaea/var/dionaea/roots/upnp/

ドキュメントルートにファイルを置いておくと,攻撃者がアクセスした際に表示されます.

おわりに

これでDionaeaの導入は以上になります.

ハニーポットを始めるにあたって,情報収集していた段階から運用しようと思っていた3つのハニーポットCowrie, Glastopf, Dionaeaを導入することができたので,しばらくはこの構成で観察を続けていこうと思います.

他にも気になるハニーポットはいくつかあるので,もし導入することになればまた記事にしていこうと思います.

参考文献

https://dionaea.readthedocs.io/en/latest/
http://www.morihi-soc.net/?p=96
http://csrun.hatenablog.com/entry/5253475