読者です 読者をやめる 読者になる 読者になる

Tahoo!!

自分の勉強していること(コンピュータ関連 / ネットワーク / セキュリティ / サーバ)や趣味について書いていきます

VPSにハニーポット(Dionaea)を入れてみた

以前からハニーポットの運用に興味があって、最近VPS借りて運用できる環境も整ったのでハニーポットを入れてみることにした。

どうやってハニーポットを選んだか、また選んだハニーポット(Dionaea)のインストール方法を書きたいと思う。

ハニーポットの選定

選ぶにあたってまず参考にしたのは、以下のIPAのドキュメント
セキュリティインシデントの積極的な検知:ハニーポットの利活用

この中に書いてあるハニーポットで、実際のOSの動作をエミュレートするために比較的安全に運用が可能な低対話型ハニーポットを候補としてピックアップ。ここで挙げられている低対話型ハニーポットは以下の4種類

  • Dionaea
  • Glastopf
  • Kippo
  • Honeyd

このうち、Honeydは半年ほど前の勉強会(池袋セキュリティ勉強会#2に参加してきた - Tahoo!!)で弄っていて、ある程度わかっていたので、候補から外した。

また、@k_morihisaさんのハニーポットの構築によると、Dionaeaがイケてるらしいので、Dionaeaを動かしてみることにした。

ちなみに、DionaeaはHoneynet Projectsの一部で、ハエトリグサの意味である。

Dionaeaのインストール

構築環境は、前回ブログで紹介したVPSで、OSはCentOS 6.5

プロバイダによっては規約でアウトなところもあるみたいだが、今回借りたプロバイダのVPSは大丈夫だった。(VPS上に構築する際は、規約等を必ず確認しましょう)

インストールにあたって参考にしたサイトは以下の通り

  1. dionaea — catches bugs(公式)
  2. Honeypot - Dionaea をインストール ( CentOS 6.3 ) - himajin315の記録
  3. ハニーポット観察記録(9) at www.morihi-soc.net
  4. さくらのクラウドにハエトリグサ(Dionaea)を植えてみた - Phos's blog

Ubuntuの場合、apt-getを利用してインストールが可能であるが、今回はCentOSにインストールということで、Dionaeaをコンパイルしてインストールした。

Dionaeaのコンパイルに必要なものをインストール

まず、以下のものが必要。

  • libev >=4.04
  • libglib >=2.20
  • libssl
  • liblcfg
  • libemu
  • python >=3.2
  • cython >0.14.1
  • libudns
  • libcurl >=7.18
  • libpcap >=1.1.1
  • libnl
  • libgc >=6.8

(公式サイトより)

なお、今回のインストール先のディレクトリは/opt/dionaeaに設定した。また、ソース

liblcfg
# git clone git://git.carnivore.it/liblcfg.git liblcfg
# cd liblcfg/code
# autoreconf -vi
# ./configure --prefix=/opt/dionaea
# make install
# cd ../..
libemu
# git clone git://git.carnivore.it/libemu.git libemu
# cd libemu
# autoreconf -vi
# ./configure --prefix=/opt/dionaea
# make install
# cd ..
libev
# wget http://dist.schmorp.de/libev/Attic/libev-4.04.tar.gz
# tar xfz libev-4.04.tar.gz
# cd libev-4.04
# ./configure --prefix=/opt/dionaea
# make install
# cd ..
Python 3.2

PythonはすでにCentOSに入っていたけど、これのために /opt/dionaea にインストール。
ここで、コンパイル前にsqlite-dev等をyumで入れておかないと、Dionaeaを実行するときにエラーを発生するので、入れてからソースをコンパイルする。
(参考:CentOS に Python2.7, Python3.3を入れたメモ - Qiita

# yum groupinstall "Development tools"
# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-deve
# wget http://www.python.org/ftp/python/3.2.2/Python-3.2.2.tgz
# tar xfz Python-3.2.2.tgz
# cd Python-3.2.2/
# ./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
# cd ..
Cython
# wget http://cython.org/release/Cython-0.15.tar.gz
# tar xfz Cython-0.15.tar.gz
# cd Cython-0.15
# /opt/dionaea/bin/python3 setup.py install
# cd ..
udns
# 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
# cd -
# cd ..
libcurl

curlは、デフォルトで/usrにインストールされているが、curl-configがなかったので、/opt/dionaeaに新たにインストールした。

# git clone https://github.com/bagder/curl.git curl
# cd curl
# autoreconf -vi
# ./configure --prefix=/opt/dionaea
# make
# make install
libpcap
# wget http://www.tcpdump.org/release/libpcap-1.1.1.tar.gz
# tar xfz libpcap-1.1.1.tar.gz
# cd libpcap-1.1.1
# ./configure --prefix=/opt/dionaea
# make
# make install
# cd ..
OpenSSL
# git clone git://git.openssl.org/openssl.git openssl
# cd openssl
# autoreconf -vi
# ./Configure shared --prefix=/opt/dionaea linux-x86_64
# make SHARED_LDFLAGS=-Wl,-rpath,/opt/dionaea/lib
# make install
# cd ..

なお、libnlはmakeの段階で失敗して、optionalだったので入れなかった。しかし、結果としてDionaeaは問題なくコンパイルも実行もできた。
libglibに関しても、インストールはしてないですが特に問題なくコンパイルと実行ができました。

Dionaeaのコンパイル、インストール

./configureでは、上記の必要なものをインストールしたディレクトリを指定する。

# git clone git://git.carnivore.it/dionaea.git dionaea
# cd dionaea
# autoreconf -vi
# ./configure --with-lcfg-include=/opt/dionaea/include/ \
        --with-lcfg-lib=/opt/dionaea/lib/ \
        --with-python=/opt/dionaea/bin/python3.2 \
        --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
# make
# make install

無事インストールが終了すると、上記の設定では/opt/dionaea/binにdionaeaが作成される。

Dionaeaを動かす

動かす前に、Dionaea用のグループとユーザを作成。そして、Dionaea用のディレクトリのパーミッションを上記で作成したユーザに変更する。

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

あとは、/opt/dionaea/etc/dionaeaにdionaea.confがあるので、-cでそれを指定、-uと-gでユーザとグループを指定。あとはデーモンで動作させるために-Dをつけて起動!!

./dionaea -c /opt/dionaea/etc/dionaea/dionaea.conf -u dionaea -g dionaea -D

無事動きました。(Dionaeaの公式にも動かし方あるので、こっちも参考にすると良いかも。http://dionaea.carnivore.it/#running

ログについて

/opt/dionaea/var以下のディレクトリにはログや捕まえられたマルウェアが置かれる。以下に各ディレクトリに格納されているものを示す。

  • var/log/
    • dionaeaのログが保存されている。どちらのログもdionaea.confで、どのレベルまでログを出力できるか設定できる。
  • var/dionaea/binaries
    • ファイル共有で作成されたファイルが保存されている。
  • var/dionaea/wwwroot
    • ここにindex.htmlを置いておくと、port 80にHTTPで接続したときに、そのHTMLファイルが読み込まれる
    • FTPで送信されてきたファイルもここに保存されるらしい。

感想

インストールするのが少し面倒くさかったけど、実際に動かしてみると結構攻撃が来るから非常に勉強になる。
ただ、収集できるマルウェアが今のところ同じようなものしか収集できてない。
これは、ハニーポットの性質上しょうがないって感じですねー

今後何したいか

  • 運用するための便利ツールがいくつかあるみたいなので、そのツールを入れる
  • tcpdumpを使ってパケットキャプチャも行ってるので、そのパケットを解析する
  • 種類に偏りがあるもののマルウェアを捕まえたので、そのマルウェアを解析する
  • 別のハニーポットを入れる(Kippoとか)

これからも出来る限りハニーポットの運用頑張って行きたい。

2014/06/07追記

ログの出力

ログはallにすると、とんでもないログが出力されて、すぐにストレージがいっぱいになる。(数時間で50GBくらいになったw)
なので、特に出力量が多いDebugログは出力しないよう設定を変更することをオススメします。

VirusTotalとの連携機能

Dionaeaには、捕まえたマルウェアVirusTotalを利用してスキャンする機能がある。
スキャンした結果はDionaeaのlogsql.sqliteに書き込まれ、DionaeaFR等で利用することができる。
この機能を利用したい場合は、dionaea.confの以下の部分を訂正する。

dionaea.confの320行目付近、VirusTotalにsignupして、PublicAPI Key(今回はキーの例としてxxxxxxx)を取得し、それを入力する。

virustotal = {
                   apikey = "xxxxxxx" // grab it from your virustotal account at My account -> Inbox -> Public API
                   file = "var/dionaea/vtcache.sqlite"
             }

dionaea.confの460行目付近、"virustotal",の行のコメントを外す。

ihandlers = {
     handlers = ["ftpdownload", "tftpdownload", "emuprofile", "cmdshell", "store", "uniquedownload",
     "logsql",
     "virustotal",
//   "mwserv",
//   "submit_http",
//   "logxmpp",
//   "nfq",
//   "p0f",
//   "surfids",
//   "fail2ban"
    ]
}