CentOS
SSH
セキュリティ
kippo
ハニーポット

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

KippoというハニーポットをCentOS7に導入したときのことを備忘録として残しておきます.

※現在はKippoの改良版であるCowrieが推奨されているので,Kippoの導入を検討している人はCowrieをおすすめします.
KippoよりCowrieのほうがいいよーという話

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

Kippoの導入

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

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

# yum groupinstall "Development Tools"
# yum install kernel-devel kernel-headers git gcc 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番ポートにフォワーディングします.

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

・22番ポートを2222番ポートに,ポートフォワーディング

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

これで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の導入は以上になります.
こちらのブログでもう少し詳しいKippoの解説や,他のハニーポットの導入方法,攻撃の観測規則などを記事にしているので,興味があれば覗いてみてください.

参考文献

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