ScalaでSSHハニーポットを作ってみた

グローバルIPを持っているサーバで、sshのポートをデフォルト(22番)のままで運用していると、ログイン失敗のログがたくさん出るので、どんなアクセスが来ているのか見てみたくてSSHハニーポットを作ってみました。

SSHハニーポット

ハニーポットとはわざと不正アクセスを受け入れるおとりのようなものです。手法や傾向の調査に使われる事が多いです。

SSHだとkippoというOSSが有名ですね。昔ハッカージャパンで読んだような記憶があります。 desaster/kippo · GitHub

kippoはsshのログイン情報を保存するだけでなく、ログインさせ、その後そのサーバ内でどのような行動をしたのかのログまで残せたりするのですが、今回はログイン情報のみ保存するものを作りました。

sippo

Scalaで書いてみたので、sippoって名前にしてみました。

sshのアクセスが試行される度に、タイムスタンプ, 送信元IP, 送信元ポート, ユーザ名, パスワードが保存されます。

github.com

個人所有している某サーバに設置してみたのですが、2日で400回くらいアクセスが来ました。(IPアドレスの第1, 2オクテットは伏せておきます)

f:id:kuro_m88:20150727230514p:plain

しばらく置いておいてどんなid / passwordが多いのか集計してみたいですね。

実行方法

ビルド済のjarファイルを置きましたので、javaさえ動く環境だった動くと思います。(MacLinuxでのみ確認)

$ mkdir sippo
$ wget https://github.com/kurochan/sippo/releases/download/v0.1/sippo-0.1-SNAPSHOT.jar
$ java -jar sippo-0.1-SNAPSHOT.jar

これで、10022番ポートでsshハニーポットが起動します。
アクセスログは、実行時のカレントディレクトリ以下のlogs/ssh.logにタブ区切りで保存されます。
また、1日おきにログファイルがローテーションされてgzip圧縮されます。

22番ポートで待ち受けるには

まず、本物のsshdの待ち受けポートは変えておく必要があります。

Linuxであれば、iptablesをつかってポートフォワーディングしてあげるとよいのではないでしょうか。

$ sudo iptables -A PREROUTING -t nat -p tcp --dport 22 -j REDIRECT --to-port 10022

面倒くさい場合のために、一応22番で起動するjarも用意しています。rootで起動する必要がありますが…

Release First Release · kurochan/sippo · GitHub

その他

待ち受けポートの設定とログディレクトリの指定くらいは起動オプションか設定ファイルで指定できるようにしたいですね。