お手軽にHoneypot設置(UbuntuへのKippo導入)

#1. はじめに

　大学の研究室のサーバーへの攻撃を度々受けるので、攻撃者の行動やログイン試行の様子を見たいと思い手軽なHoneypotを設置して行動を観測することにしました。
また、QiitaでUbuntuにKippoを導入する記事を見かけなかったということもあったので今回Qiitaに書き残すことにしました。

##今回の内容

　普段使う自前のサーバーや大きなサーバーを使うのはお手軽さに欠けるので、今回はRaspberryPiを用いてKippoを導入してみて実際にデータを観測できるのか確かめてみます。

#2. 環境
 * RaspberryPi 2 (OS Ubuntu 14.04)
  * Python 2.7(Ubuntu 14.04標準搭載ですが、なければinstallしてください。)  
   Pythonのinstallはこちら⇩
   
  ```
  $ sudo apt-get upgrade

  $ sudo apt-get install python2.7
  ```



  

#3. Kippoの導入

Kippo本体をdownload、解凍します。

  ```
$ wget http://kippo.googlecode.com/files/kippo-0.8.tar.gz

$ tar xf kippo-0.8.tar.gz
  ```

不要なファイルは消しておきましょう。

  ```
$ rm kippo-0.8.tar.gz
  ```

とりあえず導入はこれで終わりました。
次は他の設定を行っていきます。





#4. MySQLの導入

すでにMySQLを導入されている方は適当に読み飛ばしてください。


まずはMySQLをinstallし、確認のためversionも見ておきます。
  
  ```
$ sudo apt-get install mysql-server

$ sudo apt-get install python-mysqldb

$ mysql --version
 mysql  Ver 14.14 Distrib 5.5.49, for debian-linux-gnu (armv7l) using readline 6.3
  ```
上記のように表示されれば問題ないです。(version違いも然り)

また、MySQLのinstall時にMySQLのrootユーザーのpasswordを聞かれるのでご自由に設定してください。

設定ができたらMySQLの起動を確認しましょう。

  ```
$ sudo service mysql restart
  ```


起動が確認できたら次はKippoで使用するMｙSQLのユーザーを登録していきます。
これからKippoで使うMySQLのユーザーになるので、事前に **User_name**、**User_password**、**Database_name** を決めておきましょう。

  ```shell:Kippoで使用するMySQLユーザーの登録
$ mysql -u root -p


mysql > create user 'User_name(お好きなもの)'@'localhost' identified by 'User_password(お好きなもの)';

mysql > grant all on User_name.* to 'User_name(お好きなもの)'@'localhost' identified by 'User_password(お好きなもの)';

mysql > quit;
  ```

通常
$ mysql -u root -p 
の表記は
$ mysql -u User_name@Host_name -p
とするのが正確ですが、@以下がlocalhostの場合のみ省略が可能です。


続いてディレクトリを~/kippo-0.8/doc/sql/へと移動し、MySQLにKippo用のユーザーでログインします。

  ```
$ cd ~/kippo-0.8/doc/sql/
  ```
  ```
$ mysql -u User_name(お好きなもの) -p


mysql > create database Database_name(お好きなもの);

mysql > use Database_name(お好きなもの);

mysql > source mysql.sql;

mysql > select User,Host from mysql.user;

mysql > quit;
  ```

mysql > select User,Host from mysql.user;
を打ち込んだときにprintされるUserとHostの表を見て自分の登録情報の正誤を確認しましょう。


#5. Kippoで取れたデータのMySQLデータベースへの出力

Kippoではデータ出力が容易にできるように実装されていて出力先や出力方法に関しては、~/kippo-0.8/kippo.cfgで管理することができます。

では実際にKippoで取れたデータの出力先をMySQLデータベースにしてみましょう。

  ```shell:kippo.cfgの編集
$ cd ~/kippo-0.8/

$ vim kippo.cfg

(結構下の方にあります)

#[database_mysql]
#host = localhost
#database = 
#username = 
#password = 
#port = 3306

↓↓↓上の表記を下に変更↓↓↓

[database_mysql]
host = localhost
database = Database_name
username = User_name
password = User_password
port = 3306
  ```


#6. Kippoを動かしてみる

~/kippo-0.8 にある start.sh を動かせばKippoは起動します。
Kippoはデフォルトが2222番portで起動するようになっているので、外部からの22番port宛ての接続を2222番portにNATしてあげます。

  ```
$ iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 22 -j REDIRECT --to-port 2222
  ```

これでKippoを起動してみます。
注意するべき点が2つあって(当たり前のことではありますが)
1.sudoersからは起動できないこと
2.~/kippo-0.8/kippo.pidにあるプロセスを殺さないと起動しない

まずは動いているプロセスを確認してみます。

  ```
$ sudo cat ~/kippo-0.8/kippo.pid
(ここに動いているプロセスの番号(ここではnとします)が出ます)

$ sudo kill n
  ```

これでプロセスを殺せたらいよいよ起動です。

使っているuserがsudoersではないことを確認して、

  ```
$ ./start.sh
Starting kippo in background...Loading dblog engine: ｍｙｓｑｌｄ
Generating RSA keypair...
done.
  ```
上記のような表示があれば起動成功です。


#7. Kippoで取れたデータの可視化

PHP version 5.3.4以上
パッケージ　libapache2-mod-php5, php5-mysql, php5-gd, php5-curl　
が必要。

以下のコマンドで準備します。

  ```
$ sudo apt-get update && apt-get install -y libapache2-mod-php5 php5-mysql php5-gd php5-curl
  ```

そしてapache2を再起動。

  ```
$ sudo /etc/init.d/apache2 restart 
  ```

Kippoのデータを可視化するKippo-graphをinstallし、permissionの設定を行います。

  ```
$ wget http://bruteforce.gr/wp-content/uploads/kippo-graph-VERSION.tar.gz
$ mv kippo-graph-VERSION.tar.gz /var/www/html
$ cd /var/www/html
$ tar zxvf kippo-graph-VERSION.tar.gz
$ mv kippo-graph-VERSION kippo-graph
$ cd kippo-graph
$ chmod 777 generated-graphs
$ cp config.php.dist config.php
  ```

MySQLで取れたデータを出力するためにMySQL情報をconfig.phpに記入します。

  ```
$ vim config.php

(結構最初の方にあります)

define('DB_HOST', 'localhost');
define('DB_USER', 'User_name');
define('DB_PASS', 'User_password');
define('DB_NAME', 'Database_name');
define('DB_PORT', '3306');
  ```

以上で終了です。
実際にブラウザを開いて見てみましょう。

#おわりに
さっさと書くつもりが、思ったより時間が掛かってしまったため所々抜けております。
iptablesの設定などはきちんとしましょう。ufwを使ってやると比較的簡単にできます。
Dockerizeしてみましたが、raspiのアレがアレだったのでできませんでした。
精進します。


間違い等あればどしどしご指摘いただければ直します。
質問等もご自由にどうぞ。

#参考
 * http://bruteforce.gr/kippo-graph
 * http://d.hatena.ne.jp/ozuma/20130829/1377703104