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

2018年5月2日

今回からいよいよサーバにハニーポットを導入していきます.
今回導入するのはKippoというハニーポットです.

最初に導入するハニーポットにKippoを選択した理由としては,とりあえずSSH周りの攻撃を観測してみたいなーと思ったときに,KippoがIPAによって推奨されていたから.
セキュリティインシデントの積極的な検知:ハニーポットの利活用

しかしこのドキュメントは日付が2012年12年26日となっています.変化の大きいセキュリティ業界においては情報が古すぎるなーと不安を抱きつつも,とりあえず導入していきたいと思います.笑

※現在,Kippoはメンテナンスされておらず,実際のSSHと挙動が違うなどといったことから推奨されていません.Kippoをもとに作られたCowrieというハニーポットが推奨されています.私のサーバもすでにKippoからCowrieへの移行を完了していますが,備忘録としてこの記事を残しておきます.今からKippoの導入を検討している人はCowrieを導入することをおすすめします.

KippoよりCowrieのほうがいいよーという話

ハニーポットKippoとは

Kippo is a medium interaction SSH honeypot designed to log brute force attacks and, most importantly, the entire shell interaction performed by the attacker.

Kippo is inspired, but not based on Kojoney.

https://github.com/desaster/kippoより

KippoとはKojoneyというハニーポットにインスピレーションを受けて作成された,中規模対話型のSSHハニーポットです.SSHをエミュレートしており実際のSSHのように振る舞うため,攻撃者はKippoに対してブルートフォースアタックや辞書攻撃を行い,悪意のあるコマンドを実行することができます.Kippoはこれらのログを保存し,攻撃者の攻撃を観測することが可能となっています.

Kippoのように実際のサービスをエミュレートすることで攻撃を観測する手法のハニーポットを,低対話型ハニーポットといいます.これに対して脆弱性のある本物のサーバやアプリケーションをインターネット上に設置することで攻撃を観測する手法を高対話型ハニーポットといいます.これらにはそれぞれメリットとデメリットが存在します.自分の目的に合わせたハニーポットを運用しましょう.

低対話型ハニーポットの特徴

  • 比較的安全な運用がしやすい
  • ハニーポットということがバレることがあり,目的の攻撃を観測できない可能性がある

高対話型ハニーポットの特徴

  • 実際にサーバが乗っ取られる可能性があり,運用が難しい
  • ハニーポットということがバレにくいため,目的の攻撃を観測しやすい

Kippoの導入

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

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

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

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

Kippoのインストール

次はKippo用のユーザを作成し,Kippoをインストールします.

Kippo用のユーザ作成

# useradd kippo
# passwd kippo
# su kippo
$ cd

Kippoのインストール

$ git clone https://github.com/desaster/kippo.git
$ cd kippo
$ cp kippo.cfg.dist kippo.cfg
$ chmod 775 stop.sh

Kippo用のPython仮想環境作成

Kippoを動作させる,Pythonの仮想環境を作成します.
twistedは公式でバージョン8.0~15.1.0の指定があるので,バージョンの指定を忘れないようにしてください.(15.2.0でも動作するようなので,15.2.0をインストールしました)

Python仮想環境の作成と実行

$ virtualenv kippo-env
$ source kippo-env/bin/activate

仮想環境にライブラリを追加インストール

(kippo-env)$ pip install pyasn1 pycrypto
(kippo-env)$ pip install twisted==15.2.0

Kippoの起動と仮想環境の終了

Kippoの起動コマンドと仮想環境の終了コマンドは以下のようになります.

(kippo-env)$ ./start.sh kippo-env
(kippo-env)$ deactivate

ファイアウォールの設定

Kippoは直接22番ポートを監視することが推奨されていません.Kippoはデフォルトでは2222番ポートで待ち受けているため,22番ポートに向けた通信をファイアウォールを用いて2222番ポートにフォワーディングします.

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

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

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

KippoをSystemdにサービス登録

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

kippo.serviceファイルを新規作成し,以下のファイル内容をコピペしてください.

# vim /etc/systemd/system/kippo.service

[Unit]
Description = Kippo Daemon
After=network.target
#Wants=mysql.servise

[Service]
Type = forking
User = kippo
Group = kippo
ExecStart = /home/kippo/kippo/start.sh kippo-env
ExecStop = /home/kippo/kippo/stop.sh
ExecReload = /home/kippo/kippo/stop.sh && sleep 10 && /home/kippo/kippo/start.sh
WorkingDirectory=/home/kippo/kippo/
Restart=on-failure
TimeoutSec=300

[Install]
WantedBy = multi-user.target

# systemctl daemon-reload
# systemctl list-unit-files --type=service | grep kippo
kippo.service                              disabled
# systemctl enable kippo
# systemctl start kippo

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

Kippoの利用方法

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

・設定ファイル
~/kippo/kippo.cfg

・ログファイル
~/kippo/log/kippo.log

・ダミーユーザ定義ファイル
~/kippo/data/userdb.txt

・ダウンロードされたファイルの保存場所
~/kippo/dl/

・ログ再生スクリプト実行方法
$ ~/kippo/utils/playlog.py ~/kippo/log/tty/任意のファイル

Kippoはデフォルトでユーザ名:root,パスワード:123456のダミーユーザが追加されています.ここに新たなダミーユーザを追加する場合,以下の書式に従って追加してください.

"ユーザ名":0:"パスワード"
例:root:0:123456

ログ再生スクリプトを用いて,攻撃者のコマンド入力の様子を再現できるのが面白いと思います.他にもログをMySQLに書き出したり,kippo-graphというモジュールを用いて攻撃の統計を可視化したりなど,色々なことができるみたいです.

おわりに

これでKippoの導入は以上になります.
現在,SSHハニーポットはKippoの改良版であるCowrieが推奨されているので,また後日Cowrieの導入方法やCowrieで収集した攻撃の観測記録も記事にしていきたいと思っています.

参考文献

https://github.com/desaster/kippo/wiki/Running-Kippo
http://tsubash.hatenablog.com/entry/2016/03/20/200822