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

ロマンティック・アイロニー

好きなこと・気になったことについて書いていきます!

Ubuntu16.04にDocker入れてさくっとハニーポット構築(cowrie)

以前からハニーポットを立ててみたかったのだがなかなか機会が見つけられずそのままずるずる時間がたってしまった。しかし最近ちょうど時間もあったので勢いで構築してみた。今回はSSHハニーポットのcowrieを使った。cowrieはkippoの上位互換なので。どこが上位互換なんだよ!って人はSSHハニーポットはKippoではなくCowrieを使え - 日々のおべんきょを参考にしてください。

基本的には DockerをLinux(Ubuntu 14.04 LTS)にインストールする方法と解説 | tracpath:Worksに書いてある通りに進めていった。

構築環境

  • さくらのVPS
  • OS : Ubuntu 16.04
  • メモリ : 1GB
  • HDD : 100GB

Dockerインストール

OSの確認

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu  
Description:    Ubuntu 16.04.1 LTS  
Release:        16.04  
Codename:       xenial

カーネルのバージョン確認

Dockerはカーネルのバージョンが3.10以上でないと動作しないらしい

$ uname -a
Linux ubuntu 4.4.0-42-generic

wgetコマンドがあるか確認

$ which wget
/usr/bin/wget

wgetでDockerダウンロード

$ wget -qO- https://get.docker.com/ | sh

Dockerの動作確認

$ sudo docker run hello-world

dockerグループを作成しsudo権限のあるユーザをグループに追加

$ sudo usermod -aG docker [ユーザ名]

ここで一旦ログアウトもしくは再起動

もう一度Docker動作確認(sudoなしで!)

$ docker run hello-world

先ほどと同じようなメッセージが表示されれば成功 このあと先ほどの参考記事ではgrubの設定をいじっていたがVPSで手元に実機がないうえ、実はVPSを友人と共有していてビビったので行わなかった。(おそらく問題はないと思うが...)

ファイアウォールの設定

Ubuntu16.04ではデフォルトでUFW(Uncompaticable FireWall)という複雑なiptablesをラップするツールがありとても便利なのでこれを利用すると良い。

ファイアウォールが動作しているか確認

$ sudo ufw status
Status: active

エディタでufwの設定変更

$ sudo vi /etc/default/ufw

DEFAULT_FORWARD_POLICYをACCEPTへ変更

DEFAULT_FORWARD_POLICY="ACCEPT" 

ポート2375(tcp)を開放(Dockerのデフォルトポート)

$ sudo ufw allow 2375/tcp

もし22番ポートも閉じていたら開けるのを忘れないように(cowrieで使う)

ファイアウォール設定リロード

$ sudo ufw reload
Firewall reloaded

DNS設定

Dockerの設定ファイルを編集

$ sudo vi /etc/default/docker

外部のDNSサーバ(ここではGoogle)を利用するように以下のコメントを消す

#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

Docker再起動

$ sudo /etc/init.d/docker restart

これでDockerのインストールは終了! つづいてcowrieの構築。といってもすぐに終わる。

Docker上にcowrie構築

DockerHubから他の人が保管しているcowrieコンテナイメージを探す

$ docker search cowrie
NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
k0st/cowrie                        Cowrie - SSH honeypot based on kippo (mini...   4                    [OK]
dtagdevsec/cowrie                  cowrie                                          2                    [OK]
wonderfall/cowrie                  SSH Honeypot. Based on Alpine Linux.            2                    [OK]
ouspg/cowrie                       Cowrie honeypot based on alpine:latest          1                    [OK]
armbues/netscreen                  SSH honeypot based on Cowrie modified to l...   1                    [OK]
vimagick/cowrie                    A SSH honeypot                                  0                    [OK]
rayson/cowrie                      Cowrie is a medium interaction SSH and Tel...   0                    [OK]
valerianomanassero/cowrie-centos   Docker Image packaging for Cowrie on Centos     0                    [OK]
thechris/cowrie                    A lightly modified version of cowrie            0
viker/cowrie                                                                       0
solson/cowrie                                                                      0
viker/cowrie-kippo                                                                 0

この中から好きなものを選択(今回はk0st/cowrieを使った)

コンテナイメージをローカルにもってくる

$ docker pull k0st/cowrie

コンテナ起動

$ docker run -it -name cowrie -p 22:2222 k0st/cowrie /bin/sh

ここでちょっとdocker runオプションの説明
-it : コンテナ起動後そのままコンテナ内にログイン
-name : コンテナに名前をつける(この名前はコンテナ削除時などコンテナ指定する場合に使用。これを指定していないとデフォルトで付与されるランダムな英数字の文字列で指定しなければいけないためめんどう)
-p : ホストの任意のポートをコンテナの任意のポートへ転送(この場合ホストの22番ポートにきたアクセスをコンテナの2222番ポート(cowrieのデフォルトの待ち受けポート)へ転送)

最後の/bin/shはコンテナ内で使用されているシェル(普通は/bin/bashだがこのk0st/cowrieで設定されているシェルが/bin/shだった)
コンテナから出るときは、

$ exit

ででれる。すでに起動した後にもう一度入りたいときは以下のコマンドで入れる。

$ docker exec -it cowrie /bin/sh

作成したコンテナの確認

$ docker ps -a

cowrieコンテナの削除

$ docker rm cowrie

まとめ

今回はじめてDockerとハニーポットを使用してみてこれはいろいろできそうだなと期待が高まった。(Dockerつよすぎ!!) ハニーポットに関しては侵入してきた攻撃者の動きが動画で再生できるのはとてもおもしろい。今後はkippo-graphなどでデータの可視化にも挑戦したい。

参考

DockerをLinux(Ubuntu 14.04 LTS)にインストールする方法と解説 | tracpath:Works

SSHハニーポットはKippoではなくCowrieを使え - 日々のおべんきょ

Dockerコマンドメモ - Qiita

いまさら聞けないDocker入門(1):アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識 - @IT