kopug memo

名古屋で働くとあるWebエンジニアの覚書。

Amazon LinuxにハニーポットCowrieを入れてみる

はじめに

最近suzuki.sh に刺激されたのもあり, 2013年からhatena diaryの更新が完全停止していたが, hatena blog にインポートをして再度開始してみることに. 今年の夏/冬と"とあるイベント"があり, そこでSSHハニーポットを入れて遊ぶことがあったので, それの備忘録をここで残してみます. ただその時は, kippoを利用して構築したので, 今回は前々から気になっていたCowrieを利用する.

ハニーポットってなに?

元来は「蜜(の詰まった)壷」の意味で、何らかの有益そうな情報や資源がありそうな場所を用意して、それにつられた者を観察したり、肝心な部分で被害を出さないために目をそらせたり、コンピュータ・フォレンジックスを行うための証拠を集めたりする、一種のおとり手法に使われる。 手法そのものをハニーポットと呼ぶこともある。

ハニーポット - Wikipediaからの引用によると上記のように示されている.
ここではsshハニーポットを利用するので, 通常22番ポートでsshdがListenしているが, そこを全く別のモノに置き換えてしまい, ダミーのsshdで受け付けてしまおうという事である.

今回目指す構成

上にも書いたが, 22番ポートでListenしたい. ただ Cowrieを起動するにはrootユーザではなく一般ユーザにしたいので, その場合は通常だと1024番ポート未満ではListen出来なくなる.
なので今回はiptablesのNATテーブルを利用して, 22番ポートに来たリクエストを CowrieのListenポートにリダイレクトする事にした.

まとめるとこんな感じ

  1. sshdのポートは22番から2754番に変更
  2. Cowrieは2222番ポートでListenさせる
  3. iptablesのNATを利用して, 22番ポートへのアクセスを2222番ポートにリダイレクトさせる

まずはインストール

必要なパッケージをインストールする

必要なパッケージは以下に記載されている
cowrie/requirements.txt at master · micheloosterhof/cowrie · GitHub

$ sudo yum -y install gcc git python-setuptools python-devel python-crypto libffi-devel openssl-devel gmp-devel
$ sudo easy_install pip
$ sudo easy_install PyCrypto pyasn1
$ sudo pip install twisted==15.2.1 cryptography configparser pyopenssl tftpy

※ twistedのバージョンが 15.3以上の場合, 起動しなかったためバージョンを15.2.1に指定しています.

Cowrieの起動用アカウントの作成

$ sudo adduser cowrie

ここから先は cowrieユーザにswitchして作業をしていきます.

$ sudo su - cowrie

Cowrieのダウンロードと設定

$ git clone http://github.com/micheloosterhof/cowrie
$ cd cowrie/
$ cp cowrie.cfg.dist cowrie.cfg

今回は設定はデフォルトのままでいきます. listenポートを変更したり, ホスト名を変更したい場合はここを適宜触ってください.

ダミーユーザの追加

以下のファイルを編集/追加することで, ダミーユーザの作成ができます.
今回はこのまま利用するので, rootのパスワードは!rootです.

$ cat data/userdb.txt

root:x:!root
root:x:!123456
root:x:*
richard:x:*
richard:x:fout

Cowrie を起動する

$ ~/cowrie/start.sh

このままだと, 2222番ポートでListenしているだけですが, 以下のように接続をしてテストをしてみます.

$ ssh root@localhost -p 2222

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

root@svr04:~#

こんな風に返ってきたらOKです.
Cowrieを停止したい場合は以下のコマンドで停止することができます.

$ ~/cowrie/stop.sh

ポート番号を変更していく

ここからは適宜rootで実行していくので sudoを利用しています.

sshdのポート番号を変更

$ sudo vi /etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
# Port 22
Port 2754  <- ここを追加

変更をしたら設定を再読込させます.

$ sudo service sshd reload

iptablesの設定

必要最低限の設定だけをここではします.

sudo vim /etc/sysconfig/iptables
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# filter settings here...
COMMIT
$ sudo service iptables start

これで 22番ポートで ssh接続をすると 2222番ポートに転送されるようになりましたね.

ログの出力と確認

リアルタイムに見たい場合はこんな感じで.

$ tail -f ~/cowrie/log/cowrie.log

セッションごとにどんなコマンドが実行されたのかを見る場合は, 以下のコマンドでみれます.

$ ~/cowrie/bin/playlog ~/cowrie/log/tty/YYYYDDMM-AAAAAA-BBBBBBB-xx.log

このコマンドを実行すると, そのセッションでの出来事を再現してくれるので面白いですね.

まとめ

今回は遊び用で入れたものを書いているので, これをそのまま実運用に使わないでください.
マジメにやる場合は, CowrieよりもT-Pot: A Multi-Honeypot Platformのほうが可視化もされて良さそうですね.

blog.takanabe.tokyo

3年半ぶりともなると, なかなか投稿が進みませんでしたが, SAOのサウンドトラックのお陰で最後まで書ききる事ができました.