LoginSignup
28
22

More than 3 years have passed since last update.

自宅の公開sshサーバの不正アクセスログを調査してみた

Last updated at Posted at 2020-01-21

はじめに

自宅の公開sshサーバーに久しぶりにログインしてみて,アクセスログを見ていたところ,不審なIPアドレスから不審なユーザ名でのログイン試行のログを発見してしまった.
当該ログから不審なIPアドレスによるログイン成功がないか,どんなログイン試行があるのか,いくつくらいあるのかを調査してみた.

前提

自宅sshサーバーは以下の設定の下,運用している.

  • 公開鍵認証を有効にしている
  • パスワード認証は無効にしている
  • rootユーザーでのログインを無効にしている
  • ポートはデフォルトのポートから変更している

運用当初は,デフォルトのポートで公開していなかったため,自分のアクセスログしか見当たらなかったが,半年以上運用したことにより,デフォルトのポート以外で公開されている本sshサービスを発見し,ログイン試行を仕掛けてくる通信が出てきた.

パスワード認証をしようとしても,無効になっているので下記のようなメッセージが出力される.

ログイン失敗メッセージ
[ユーザー名]@[IPアドレス]: Permission denied (publickey).

上記より,間違いなく不正アクセスを試みた通信である.(おそらくほぼすべて海外のIPアドレスであると推測される)

ログイン成功ログの調査

sshのログが記録される/var/log/auth.log* のファイルすべてから必要な情報を抽出し,アクセスに成功したIPアドレスを調査した.ここでは,当該ファイルの情報をssh.log という一つのファイルにまとめた前提で進める.

まずは,アクセスに成功した際にログにどのように記録されるか調べた.
以下のようなメッセージがログファイルに記録される.

ログイン成功ログ
auth.log:Jan 21 17:55:15 [ホスト名] sshd[26757]: Accepted publickey for [ユーザー名] from [IPアドレス] port 52228 ssh2:...

鍵認証のログインに成功した場合,Accepted という文字列が出力されるため,本文字列をキーにしてログインに成功したIPアドレスを確認した.
IPアドレスの値があるのがスペースをデリミタとして11番目のフィールドにあるので,cut コマンドで当該部分を切り出し,sort およびuniq コマンドで重複排除した.

実行コマンド
grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' ssh.log | grep -E 'Accepted' | cut -d ' ' -f 11 | sort | uniq

結果として一つのIPアドレスのみが記録されており,本IPアドレスを調査したところ,見覚えのあるIPアドレスであったため,とりあえず不正アクセスされていないことが確認できた.

ログイン試行したIPアドレスの調査

とりあえず不正アクセスに成功した形跡はなかったため,一安心した.
次に,どれくらい不正アクセスしたIPアドレスがあるのかを調査した.

実行コマンド
grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' ssh.log | cut -d ' ' -f 8 | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sort | uniq | wc -l

上記コマンドで,IPアドレスの種類数を集計できる.結果は下記の通り.

集計結果
146

一つは,自身の使用したIPアドレスである.それ以外はログインに成功した形跡がないため,実に145種類のIPアドレスから不正アクセスを試みられた形跡があった.

各IPアドレスによるアクセス試行回数の上位3種類を調査した.コマンドは下記の通り.

実行コマンド
grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' ssh.log | cut -d ' ' -f 8 | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sort | uniq -c | sort -nr | head -3

集計結果は下記の通り.1番目のフィールドがアクセス回数,右側のフィールドがIPアドレスである.(IPアドレスの第4オクテッドは伏字)
また,IPアドレス情報から地域を調査した.

集計結果
1493 64.62.134.*** ← アメリカ
     20 92.222.141.*** ← フランス
      6 51.91.102.*** ← イギリス

アクセス数に偏りがあるが,海外からのIPアドレスであった.(当たり前だが)
圧倒的にアメリカからの攻撃が多かった.

使用されたユーザー名

最後に,使用されたユーザー名を調査した.
Invalid user というメッセージが出力されている行が,無効なユーザー名を使用してログインしようとした場合のメッセージなので,本メッセージが出力されている行の8フィールド目にユーザー名が記録されていたため,下記コマンドでユーザー名を抽出した.(ログインに使用されたユーザー名というよりか,無効なユーザー名の抽出である.トップ10をリストアップした.)

実行コマンド
grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' ssh.log | grep -E 'Invalid user' | cut -d ' ' -f 8 | sort | uniq -c | sort -nr | head 

集計結果は,上記と同様で1番目のフィールドが使用回数,2番目のフィールドがユーザー名である.

集計結果
796 user
 55 test
 40 admin
 35 oracle
 34 postgres
 27 ubuntu
 22 zabbix
 21 nagios
 19 ftpuser
 12 zimbra

見たところ,サービスの初期ユーザー名が多い印象を受ける.
初期ユーザーをそのまま使用して運用するのもいいけど,その場合は強固なパスワードにするかパスワード認証を廃止して公開鍵認証にすべきと考える.
というのが,今回調査して得た教訓である.

おわりに

感想をつらつらと書き下す.

  • シェルコマンドを駆使すれば,ログ集計をさっと実施できることが分かった
  • ポートが違うからといって攻撃が来ないわけでないことが分かった
  • とはいえ,公開鍵認証なので不正アクセスされる危険性は低い,と今回の結果から思う
  • 初期ユーザー名は狙い撃ちされるので,初期ユーザー名で運用する場合は不正アクセス対策が必須
  • 上記に記載しなかったけど,たぶん流れてしまっているログもあるので,ログの確保は運用上必須

以上

28
22
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
28
22