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

2018年5月2日

以前KippoというSSHに特化したハニーポットをサーバに導入しました.
CentOS7にハニーポットKippoを導入する

しかし,Kippoは現在メンテナンスが行われておらず,コマンドの挙動がネイティブなUbuntuとは大きく異なる上に,パイプ・リダイレクトが実装されていないなどといった問題点が存在しています.
KippoよりCowrieのほうがいいよーという話

そこで今回はKippoの問題点を解決していて,現在もメンテナンスが行われているCowrieというSSH特化型ハニーポットを導入していきたいと思います.

ハニーポットCowrieとは

Cowrie is a medium interaction SSH and Telnet honeypot designed to log brute force attacks and the shell interaction performed by the attacker.
Cowrie is developed by Michel Oosterhof.

https://github.com/micheloosterhof/cowrieより

CowrieはMichel Oosterhof氏によって開発された,中規模対話型のSSH及びTelnetハニーポットです.攻撃者からのブルートフォースアタックとシェルの対話を記録するように設計されています.

Cowrieでできること

  • SSH及びTelnetに対する攻撃の観測
  • json形式のログ出力
  • データベースにログ出力
  • 攻撃者が設置したマルウェアの収集
  • オリジナルのタイミングで再生可能なセッションログの保存

Cowrieの導入

それではCowrieを導入していきたいと思います.

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

まずはCowrieのインストールに必要なライブラリなどをインストールします.

# yum groupinstall "Development Tools"
# yum install python-devel python-setuptools python-virtualenv
# easy_install pip

Cowrie用のユーザ作成

Cowrieはroot権限で実行することが推奨されていないので,Cowrie用のユーザを作成します.

# useradd cowrie
# passwd cowrie
# su cowrie
$ cd

Cowrieのインストール

gitからCowrieを取得

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

Python仮想環境の作成

$ pwd
/home/cowrie/cowrie
$ virtualenv cowrie-env
$ source cowrie-env/bin/activate

必要パッケージのインストール

(cowrie-env)$ pip install --upgrade pip
(cowrie-env)$ pip install --upgrade -r requirements.txt
(cowrie-env)$ deactivate

Telnetの有効化

$ cp cowrie.cfg.dist cowrie.cfg
$ vim cowrie.cfg
[telnet]
enabled = true

DSAキーを生成

Twistedの互換性の問題によるエラーを防ぐために,DSAキーの生成を行います.

$ cd data/
$ ssh-keygen -t dsa -b 1024 -f ssh_host_dsa_key
$ cd ..

Cowrieの起動/終了コマンド

Cowrieは以下のコマンドで起動/終了することができます.

$ ./bin/cowrie start
$ ./bin/cowrie stop

ファイアウォールの設定

Cowrieはデフォルトでは2222,2223番ポートで待ち受けているため,22,23番ポートに向けた通信をファイアウォールを用いて2222,2223番ポートにフォワーディングします.

# firewall-cmd --permanent --add-forward-port="port=22:proto=tcp:toport=2222"
# firewall-cmd --permanent --add-forward-port="port=23:proto=tcp:toport=2223"
# firewall-cmd --permanent --add-service=ssh
# firewall-cmd --permanent --add-service=telnet
# firewall-cmd --reload

※本項目は管理者のSSH接続ポートを22番ポートから,別のポートへ変更してあることを前提として説明を進めます.まだSSHの設定が終わっていない場合は,こちらの記事を参考し,SSH,ファイアウォール,SELinuxの設定を適切に行ってください.

これでCowrieは正常に動作します.サーバの22番ポートにssh接続,または23番ポートにTelnet接続を試してみると,ユーザ名:root,パスワード:任意のパスワードでログインができると思います.

CowrieをSystemdにサービス登録

今のままでもCowrieは正常に動作するのですが,systemctlコマンドからCowrieを利用できるようにし,サーバをリブートした時でも自動起動するようにしたいと思います.

Kippoの場合,kippo.serviceファイルを自分で作成したのですが,Cowrieは事前にcowrie.serviceファイルが用意されています.

# cp /home/cowrie/cowrie/doc/systemd/cowrie.service /etc/systemd/system/
# systemctl daemon-reload
# systemctl enable cowrie
# systemctl start cowrie

これで他のサービスと同様にsystemctlによる起動,停止,再起動を行うことができます.

Cowrieのアップデート方法

以下の方法でCowrieのアップデートを行うことができます.

# systemctl stop cowrie
# cd /home/cowrie/cowrie
# git pull
# pip install --upgrade -r requirements.txt
# systemctl start cowrie

Cowrieの利用方法

Cowrieの簡単な利用方法は以下のとおりです.

  • 設定ファイル:~/cowrie/cowrie.cfg
  • ログファイル
    • システムログ:~/cowrie/log/cowrie.log
    • json形式のログ:~/cowrie/log/cowrie.json
    • セッション別通信記録:~/cowrie/log/tty/
    • セッションログの履歴:~/cowrie/log/lastlog.txt
  • ダミーユーザ定義ファイル:~/cowrie/data/userdb.txt
  • ダウンロードされたファイルの保存場所:~/cowrie/dl/
  • セッションログの再生方法:$ ~/cowrie/bin/playlog ~/cowrie/log/tty/任意のセッションログ

新たなダミーユーザを追加する場合,以下の書式に従って追加してください.
"ユーザ名":x:"パスワード"
例:root:x:123456

セッションログ再生スクリプトを用いて,攻撃者のコマンド入力の様子を再現できる機能はKippoと同じですね.しかし,Kippoと違いSSHだけでなくTelnetのサポートしていることや,パイプ・リダイレクトが実装されているのでよりマルウェアを収集しやすいこと,json形式のログを出力するのでログ分析がしやすいといった,様々な利点があるため,どんなログが収集できるのか非常に楽しみです.

Cowrieはデータベースにログを出力することができるため,今後データベースとの連携もしたいと思っています.
(追記:2018/02/11)Cowrieとデータベースを連携する手法についてはこちらを参照してください→Cowrieのログをデータベースに出力する

おわりに

これでCowrieの導入は以上になります.
Cowrieで収集したログの分析結果も,ブログの記事にしていきたいと思っているので良ければ覗いてみてください.

参考文献

https://github.com/micheloosterhof/cowrie/blob/master/INSTALL.md
http://ecoha0630.hatenablog.com/entry/2016/02/07/125110