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ポートにリダイレクトする事にした.
まとめるとこんな感じ
- sshdのポートは22番から2754番に変更
- Cowrieは2222番ポートでListenさせる
- 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のほうが可視化もされて良さそうですね.
3年半ぶりともなると, なかなか投稿が進みませんでしたが, SAOのサウンドトラックのお陰で最後まで書ききる事ができました.