LoginSignup
2
4

More than 5 years have passed since last update.

インターネットに危険っぽいサーバ立てて攻撃を見てみる(I)

Posted at

挨拶

こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面です。

今回QiitaのAdventCalendarということで、インターネット上に立てたサーバをハニーポットみたいにしていって攻撃のログとかを見てみたいと思います。
ほぼほぼスクリプトキディ的なノリなので、全然ディープな内容にはなっていません。
あくまでも、息抜き程度ということで、肩の力を抜いてお楽しみください。

基本的な構成

Debian(Stretch)を入れて、最新の状態にaptで上げています。また、iptablesを使って、開けたポート以外はデフォルトで閉じるようにしています。
ドメインを晒すのはアレなので、マシン名は「host1.hogehoge.jp」だとします。
このサーバを使って毎回お題を考えてエンハンスしていこうと思います。

第一回のお題

第一回は、「SSH」です。インターネット上でサーバを運用する際にはSSHで接続することがほとんどだと思いますが、実際には
- ソースIPアドレスで縛ったり
- パスワードじゃなく公開鍵認証にしたり
で運用するのがほとんどだと思います(というか、そうしないと危ないですよーというのをこれから見ていくわけです)。

そこで、偽物のSSHサーバを用意して
- ソースIPはどこからでもOKにして
- ID/パスワード認証にしたら
どういうことになるかを見てみます。

実際に使ったもの

実際には、FakeなSSHサーバを提供してくれる「FakeSSH」を使用しました。こちらはGo言語を使って作った「偽物の」SSH サーバを、Dockerを使ってPort22で起動するものです。

実験

では、まずはDockerを使ってFakeSSHを起動しましょう。DebianでDockerを使うには、「公式サイトに載っている方法」の通りに行えば、問題なくDockerをインストールすることが出来ます。

  1. Dockerをインストール
  2. FakeSSHのReadmeに載っている通り、dockerコマンドを使ってFakeSSHをインストールする。うまく動いたら、Ctrl+cで一旦落とす。
docker run -it --rm -p 22:22 fffaraz/fakessh
  1. FakeSSHをdockerでデーモンとして動かす。
docker run -d --restart=always -p 22:22 --name fakessh fffaraz/fakessh
  1. 以下のコマンドで、ログを見る。sshで接続を試したIDとパスワードが見える。
docker logs -f fakessh

FakeSSHのテスト

  1. マシン名が"host1.hogehoge.jp"で、iptablesでPort22を開けて、実際にログインがあるかを確認してみました。単純にPort22を開けた後ですと、5時間以上待っていても、どこからもログインの渡来がありませんでした。
  2. 次に、DNS設定をいじって、同じIPが"www.hogehoge.jp"だと登録しました(CNAME)。すると、www.hogehoge.jpの登録後10分以内に、SSHのログインが大量に発生しました。ログの例は下記になります。
12-06 07:24:55  xx.xx.xx.xx:45832   Connected
12-06 07:24:57  xx.xx.xx.xx:45832   SSH-2.0-libssh2_1.7.0   root    root
12-06 07:24:57  xx.xx.xx.xx:45832   SSH-2.0-libssh2_1.7.0   root    admin
12-06 07:24:58  xx.xx.xx.xx:45832   SSH-2.0-libssh2_1.7.0   root    12345
12-06 07:24:58  xx.xx.xx.xx:45832   SSH-2.0-libssh2_1.7.0   root    guest
12-06 07:24:58  xx.xx.xx.xx:45832   SSH-2.0-libssh2_1.7.0   root    123456
12-06 07:24:58  xx.xx.xx.xx:45832   SSH-2.0-libssh2_1.7.0   root    1234
12-06 07:24:58  xx.xx.xx.xx:45832   ssh: disconnect, reason 2: too many authentication failures
12-06 07:24:58  xx.xx.xx.xx:45832   Disconnected
12-06 07:24:59  xx.xx.xx.xx:45835   Connected
12-06 07:25:01  xx.xx.xx.xx:45835   SSH-2.0-libssh2_1.7.0   root    123
12-06 07:25:01  xx.xx.xx.xx:45835   SSH-2.0-libssh2_1.7.0   root    hlL0mlNAabiR
12-06 07:25:01  xx.xx.xx.xx:45835   SSH-2.0-libssh2_1.7.0   root    test
12-06 07:25:01  xx.xx.xx.xx:45835   SSH-2.0-libssh2_1.7.0   root    toor
12-06 07:25:01  xx.xx.xx.xx:45835   SSH-2.0-libssh2_1.7.0   root    qwerty
12-06 07:25:02  xx.xx.xx.xx:45835   ssh: disconnect, reason 11: disconnected by user
12-06 07:25:02  xx.xx.xx.xx:45835   Disconnected
12-06 07:25:02  xx.xx.xx.xx:45839   Connected
12-06 07:25:11  xx.xx.xx.xx:45848   SSH-2.0-libssh2_1.7.0   oracle  oracle
12-06 07:25:11  xx.xx.xx.xx:45848   ssh: disconnect, reason 11: disconnected by user
12-06 07:25:11  xx.xx.xx.xx:45848   Disconnected
12-06 07:25:11  xx.xx.xx.xx:45852   Connected
12-06 07:25:13  xx.xx.xx.xx:45852   SSH-2.0-libssh2_1.7.0   usuario usuario
12-06 07:25:14  xx.xx.xx.xx:45852   ssh: disconnect, reason 11: disconnected by user
12-06 07:25:14  xx.xx.xx.xx:45852   Disconnected
12-06 07:25:14  xx.xx.xx.xx:45856   Connected
12-06 07:25:16  xx.xx.xx.xx:45856   SSH-2.0-libssh2_1.7.0   contador    contador
12-06 07:25:16  xx.xx.xx.xx:45856   ssh: disconnect, reason 11: disconnected by user
12-06 07:25:16  xx.xx.xx.xx:45856   Disconnected
12-06 07:25:16  xx.xx.xx.xx:45860   Connected
12-06 07:25:19  xx.xx.xx.xx:45860   SSH-2.0-libssh2_1.7.0   test    test
12-06 07:25:19  xx.xx.xx.xx:45860   ssh: disconnect, reason 11: disconnected by user
12-06 07:25:19  xx.xx.xx.xx:45860   Disconnected
12-06 07:25:19  xx.xx.xx.xx:45864   Connected
12-06 07:25:21  xx.xx.xx.xx:45864   SSH-2.0-libssh2_1.7.0   user    user
12-06 07:25:21  xx.xx.xx.xx:45864   ssh: disconnect, reason 11: disconnected by user
12-06 07:25:21  xx.xx.xx.xx:45864   Disconnected
12-06 08:40:12  yy.yy.yy.yy:59563   Connected
12-06 08:40:12  yy.yy.yy.yy:59563   EOF
12-06 08:40:12  yy.yy.yy.yy:59563   Disconnected
12-06 08:40:17  yy.yy.yy.yy:60311   Connected
12-06 08:40:23  yy.yy.yy.yy:60311   SSH-2.0-JSCH-0.1.54 cisco   cisco
12-06 08:40:23  yy.yy.yy.yy:60311   ssh: disconnect, reason 3: com.jcraft.jsch.JSchException: Auth fail
12-06 08:40:23  yy.yy.yy.yy:60311   Disconnected
12-06 08:41:33  yy.yy.yy.yy:52799   Connected
12-06 08:43:06  yy.yy.yy.yy:52799   EOF
12-06 08:43:06  yy.yy.yy.yy:52799   Disconnected

解析及びまとめ

ちなみに、上記のIPアドレスをインターネット上の「ソースIPで国がわかるサイト」等で調べると(この手のサービスはいっぱいあるので割愛します)

xx.xx.xx.xx: RU(ロシア)
yy.yy.yy.yy: CN(中国)

でした。一連の動きが数秒以内に纏まってきていることも併せて考えると、ボットの仕業のようです。
また、ホストとして「www」を登録した途端にアクセスが来たことから、Webサーバを狙ったボットが来たのではないかと考えられます。そう考えると、Webサーバを立てる場合には、やはり最初に書いた通り

  • iptablesでSSHのソースIPアドレスを指定して、それ以外はリジェクトする
  • SSHもID/パスワード認証ではなく、公開鍵認証を使う

というのが「必須」と言えると思います。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4