ScalaでSSHハニーポットを作ってみた
グローバルIPを持っているサーバで、sshのポートをデフォルト(22番)のままで運用していると、ログイン失敗のログがたくさん出るので、どんなアクセスが来ているのか見てみたくてSSHハニーポットを作ってみました。
SSHハニーポット
ハニーポットとはわざと不正アクセスを受け入れるおとりのようなものです。手法や傾向の調査に使われる事が多いです。
SSHだとkippoというOSSが有名ですね。昔ハッカージャパンで読んだような記憶があります。 desaster/kippo · GitHub
kippoはsshのログイン情報を保存するだけでなく、ログインさせ、その後そのサーバ内でどのような行動をしたのかのログまで残せたりするのですが、今回はログイン情報のみ保存するものを作りました。
sippo
Scalaで書いてみたので、sippoって名前にしてみました。
sshのアクセスが試行される度に、タイムスタンプ, 送信元IP, 送信元ポート, ユーザ名, パスワード
が保存されます。
個人所有している某サーバに設置してみたのですが、2日で400回くらいアクセスが来ました。(IPアドレスの第1, 2オクテットは伏せておきます)
しばらく置いておいてどんなid / passwordが多いのか集計してみたいですね。
実行方法
ビルド済のjarファイルを置きましたので、java
さえ動く環境だった動くと思います。(MacとLinuxでのみ確認)
$ 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
その他
待ち受けポートの設定とログディレクトリの指定くらいは起動オプションか設定ファイルで指定できるようにしたいですね。