こんにちは。インフラの業務をさせて頂いている者です。
だんだん春らしく暖かくなってきましたね。
花粉症の方はこれから一緒に頑張りましょう!
さて、今回は…
外部公開しているサーバにブルートフォース攻撃がされているかチェックしてみたい
…と思います。
対象となる読者
- 外部公開のWebサーバを立ててみたけど何をしたらいいのか分からない方
- 自身のサーバにどんなSSHブルートフォース攻撃がされているか確認したい方
行うに至った経緯
私自身、お遊び用としてインターネット上に公開しているWebサーバを1台持っています。
ただ…インターネット上に公開すると途端に攻撃の的になるらしい!
攻撃はさまざまで世界中から飛んできます。
じゃあ自分の公開Webサーバはどうなっちゃっているんだろう?
…ということで調べてみました。
今回は、単純にSSHブルートフォース攻撃がされているか確認してみます。
チェックを行うのみで対策はまた別にしたいと思います。
また、注意点として、今回ご紹介するログはSSH接続が試行されているか確認するのみなので他のセキュリティに関するログは確認しません。
まず前提知識
ブルートフォース攻撃とは?
総当たり攻撃ともいいます。
総当たり攻撃とは、暗号の解読やパスワードの割り出しなどに用いられる手法の一つで、割り出したい秘密の情報について、考えられるすべてのパターンをリストアップし、片っ端から検証する方式。英名の“brute force”の原義は「力づく」。
調査環境
ざっくりと紹介します。
- 調査対象は、お遊び用としてインターネット上に公開しているサーバ
- CentOS7 x86_64
- SSH接続のポートは22のまま
- SSH接続可能ユーザはroot以外の一部のユーザに限定している
- むしろrootでのログインは不可にしている
- 公開鍵認証有効
調査してみよう
さっそく調査を行ってみましょう。
セキュリティ関連のログ確認
このサーバに見知らぬ人からのSSHログインが試行されているかチェックします。
まず、sshdサービスやsudoコマンドの実行履歴等 認証やセキュリティ関連のログが記録されているファイルを確認します。
手順
- 認証やセキュリティ関連のログを確認
$ sudo more /var/log/secure
- ログの状況が表示されます。一部を見てみましょう。(一部伏字にしています)
Mar 9 08:26:52 XXXXXXXXXX sshd[24710]: Disconnected from XXX.XXX.XXX.XXX port 41650 [preauth] Mar 9 08:26:54 XXXXXXXXXX sshd[24712]: Invalid user admin from XXX.XXX.XXX.XXX port 44750 Mar 9 08:26:54 XXXXXXXXXX sshd[24712]: input_userauth_request: invalid user admin [preauth] Mar 9 08:26:54 XXXXXXXXXX sshd[24712]: Received disconnect from XXX.XXX.XXX.XXX port 44750:11: Bye Bye [preauth] Mar 9 08:26:54 XXXXXXXXXX sshd[24712]: Disconnected from XXX.XXX.XXX.XXX port 44750 [preauth] Mar 9 10:13:17 XXXXXXXXXX sshd[24788]: error: maximum authentication attempts exceeded for root from XXX.XXX.XXX.XXX port 44606 ssh2 [preauth] Mar 9 10:13:17 XXXXXXXXXX sshd[24788]: Disconnecting: Too many authentication failures [preauth] Mar 9 11:50:40 XXXXXXXXXX sshd[24864]: error: maximum authentication attempts exceeded for root from XXX.XXX.XXX.XXX port 48340 ssh2 [preauth] Mar 9 11:50:40 XXXXXXXXXX sshd[24864]: Disconnecting: Too many authentication failures [preauth] Mar 9 12:19:12 XXXXXXXXXX sshd[24886]: error: maximum authentication attempts exceeded for root from XXX.XXX.XXX.XXX port 35002 ssh2 [preauth] Mar 9 12:19:12 XXXXXXXXXX sshd[24886]: Disconnecting: Too many authentication failures [preauth] Mar 9 12:41:45 XXXXXXXXXX sshd[24895]: Invalid user admin from XXX.XXX.XXX.XXX0 port 7570 Mar 9 12:41:45 XXXXXXXXXX sshd[24895]: input_userauth_request: invalid user admin [preauth] Mar 9 12:41:46 XXXXXXXXXX sshd[24895]: error: maximum authentication attempts exceeded for invalid user admin from XXX.XXX.XXX.XXX port 7570 ssh2 [preauth] Mar 9 12:41:46 XXXXXXXXXX sshd[24895]: Disconnecting: Too many authentication failures [preauth] Mar 9 13:17:43 XXXXXXXXXX sshd[24933]: reverse mapping checking getaddrinfo for XXX.XXX.XXX.XXX [XXX.XXX.XXX.XXX] failed - POSSIBLE BREAK-IN ATTEMPT! Mar 9 13:17:43 XXXXXXXXXX sshd[24933]: Invalid user admin from XXX.XXX.XXX.XXX port 9460 Mar 9 13:17:43 XXXXXXXXXX sshd[24933]: input_userauth_request: invalid user admin [preauth] Mar 9 13:17:43 XXXXXXXXXX sshd[24933]: error: maximum authentication attempts exceeded for invalid user admin from XXX.XXX.XXX.XXX port 9460 ssh2 [preauth] Mar 9 13:17:43 XXXXXXXXXX sshd[24933]: Disconnecting: Too many authentication failures [preauth] Mar 9 14:08:00 XXXXXXXXXX sshd[24975]: Accepted publickey for XXXXXXX from XXXXXXX port 60204 ssh2: RSA SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Mar 9 14:08:00 XXXXXXXXXX sshd[24975]: pam_unix(sshd:session): session opened for user XXXXXXX by (uid=0) Mar 9 14:08:05 XXXXXXXXXX sudo: XXXXXXX : TTY=pts/0 ; PWD=XXXXXXX ; USER=root ; COMMAND=/bin/more /var/log/secure
ログを見てみよう
前述でログを表示するところまで行きました。
続いて、ログの内容を見てみましょう。
Mar 9 08:26:52 XXXXXXXXXXXXX sshd[24710]: Disconnected from XXX.XXX.XXX.XXX port 41650 [preauth] Mar 9 08:26:54 XXXXXXXXXXXXX sshd[24712]: Invalid user admin from XXX.XXX.XXX.XXX port 44750 Mar 9 08:26:54 XXXXXXXXXXXXX sshd[24712]: input_userauth_request: invalid user admin [preauth] Mar 9 08:26:54 XXXXXXXXXXXXX sshd[24712]: Received disconnect from XXX.XXX.XXX.XXX port 44750:11: Bye Bye [preauth]
このあたりがSSH接続の試行しているログ。
先ほど表示したログの中だと一部とは言え、結構な数ありますね。
error: maximum authentication attempts exceeded for invalid user admin
更には、特定のユーザ名でログイン試行を繰り返し、
最大認証試行回数を超えさせて対象のユーザをログインさせないようにしているように見えます。
統計してみよう
今回、ログに記録されている攻撃者情報を元に以下の情報の統計を取ってみました。(ただの分析なので、完全に趣味です。)
分析対象
- どこの国のIPアドレスからが多い?
- どんなユーザ名でログインしようとしているのか?
ログ取得範囲
- 2018/03/04 03:43 ~ 2018/03/09 14:42
攻撃数
- 2642回(同一IP含む)
- 34個の端末から(IPで数えた結果)
統計結果 ~ 国ランキング
送信元IPアドレスから以下のツールを使って国を判別してみました。
トップ3までご紹介いたします。
順位 | 国名 | 端末数 |
---|---|---|
1 | アメリカ | 7 |
2 | ブラジル | 5 |
3 | 中国 | 4 |
3 | イギリス | 4 |
他にも1端末ずつ色んな国籍の方がいらっしゃってました。
地域も似たり寄ったりではなく、本当にさまざまでした。
日本もありました。
ただし、IPアドレスを所持しているプロバイダの国を判断している為、
ただ単に踏み台にされてしまっている可能性もあります。
統計結果 ~ ユーザ名ランキング
こちらもSSH接続を試行しているユーザ名で多いものを順位にしてみました。
こちらはトップ10でご紹介します。
順位 | ユーザ名 | 試行数 |
---|---|---|
1 | admin | 146 |
2 | oracle | 64 |
3 | user | 41 |
4 | test | 40 |
5 | nagios | 33 |
6 | git | 32 |
7 | ubuntu | 28 |
8 | pi | 27 |
9 | postgres | 26 |
10 | hadoop | 22 |
たくさんのユーザ名で試行されていましたが、やはり一番多いのは「admin」!
他にも使いがちなユーザ名は攻撃対象になりやすいですね。
パスワードを複雑にしたり鍵認証を設定していても
これだけ攻撃されていると不安になりますね。
考えられる対策
ありがちなユーザ名にしていないから…とは言え、
やはりいずれは突破されてしまうものと考えましょう。
ただ、早めに対策を打たないといけない…というのは分かっていながら、
セキュリティ対策に関してはなかなか一歩が踏み出せないものです。
まず簡単なものから実施していきましょう!
簡易的な対策(難易度:★)
- SSH接続のポート番号変更
基本のキではありますが、SSH接続のポート番号変更だけでも効果は大きいと言います。
デフォルトのポート番号からの変更だけでも攻撃は激減するそうですよ! - パスワードを変える
こちらも基本のキ。単純なことではありますが、攻撃者に特定されないようなパスワードにしましょう。 - 攻撃者がよくログイン試行しているユーザ名は使わない
今回の統計結果ユーザ名ランキングにランキング入りしているユーザ名はSSH接続を有効にしないようにしましょう。
もう少し手を入れてみる対策(難易度:★★)
- 使わないポートをきっちり閉じる
- webサーバであれば、バージョンを見えなくさせる
- サーバを常に最新の状態にする
時間がある時などはこのあたりも行っておくと良いと思います。
さいごに…
今回は、WebサーバにSSHブルートフォース攻撃がされているかをチェック、分析してみました。
この方法はお手軽に試せて、
どんな対策を打ってみたらいいのか分かりやすい為、最近Webサーバを公開してみたけどセキュリティは自信がないなぁ…という方は気軽にチェックしてみてください。
参考にしたサイト
→今回の調査の上で参考にさせて頂きました。
侵入者に対してアンケートを取ってみるなど遊び心満点です。
いずれやってみたいです(笑)