攻撃の跡はログに残る
ネットワークへの攻撃は、ログや通信の記録に、たいてい何かの跡を残します。跡を見つけるコツは、ふだんの姿を知ったうえで、そこから外れた動きに気づくことです。
例えば、一つの送信元が、数秒のうちに何十ものポートを順に叩いていたら、それはポートスキャンの跡です。今日は、その見分け方を学びます。
このレッスンのゴール
メモ
ログの並びから、ポートスキャンなどの攻撃の跡を見つけられる。
重要な言葉
| ことば | いみ |
|---|---|
| ログ | 起きたことを時刻つきで残した記録 |
| 基準 | ふだんの通信の量や形 |
| シグネチャ | 既に知られた攻撃の型の目印 |
| 異常検知 | 基準から外れた動きに気づくこと |
| しきい値 | これを超えたら警告する、境目の数 |
| 誤検知 | 攻撃でないのに、攻撃と判断すること |
学生が入力するセルは、このプレビューでは空白です。
まずふだんの姿を知る
攻撃かどうかは、ふだんとの違いで決まります。ふだんは一日に何件の接続があり、どの送信元が多いかを、先に知っておきます。
ふだんを知らなければ、異常に気づけません。ログの最初の用途は、基準を作ることです。
例: 攻撃の跡の見え方
| 攻撃 | ログに見える跡 | 見分けの手がかり |
|---|---|---|
| ポートスキャン | 一つの送信元が、多くのポートを叩く | 違うポートの数 |
| 総当たり | 一つの送信元が、同じ入口を何度も叩く | 同じ入口への回数 |
| 大量の送信 | 一つの送信元からの量が、急に増える | 基準との差 |
学生が入力するセルは、このプレビューでは空白です。
ログのファイルを見る
ls -1 /var/log/netlabここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ログの一行の形
ラボの三つのウェブサービスは、受けた要求を一行ずつ、ログに残します。ls は、lan-private.log、lan-web.log、outside-server.log の三つを並べます。
一行は、時刻、送信元のアドレス、要求の道筋の順です。自分で一件出して、確かめましょう。
一件の要求を出す
sudo ip netns exec gw curl --noproxy '*' -s -m 3 http://10.0.0.2/login-testここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ログの最後の行を読む
tail -n 1 /var/log/netlab/lan-web.log | awk '{print $2, $3}'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
二つの出力が言うこと
要求の答えは lan-web: you are 10.0.0.1 です。サーバーは、見えた送信元のアドレスを答えます。
ログの最後の行を取り出すと、10.0.0.1 /login-test と出ます。誰が、何を求めたかが、そのまま残っています。
シグネチャは既知の型を探す
攻撃には、よく知られた型があります。型の目印を探すのがシグネチャです。例えば「login を一秒に十回叩く」は、総当たりの型です。
数えるには、送信元ごとに行を数えます。下の実行で、数える練習をしましょう。
送信元ごとに行を数える
printf '203.0.113.9\n198.51.100.4\n203.0.113.9\n203.0.113.9\n' | sort | uniq -c | sort -rnここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
しきい値で異常を拾う
数が分かったら、しきい値を決めます。「一分間に違うポートを十個以上叩いた送信元は、スキャンの疑い」のように書きます。
しきい値が低すぎると、ふつうの利用者まで引っかかります。高すぎると、攻撃を見逃します。基準を見ながら決めます。
例: しきい値を5にしたとき
| 送信元 | 叩いたポートの数 | 判断 |
|---|---|---|
| 203.0.113.9 | 7 | 疑いあり(スキャン) |
| 198.51.100.4 | 2 | ふつう |
| 192.0.2.77 | 1(同じ入口を30回) | ポート数ではふつう。回数で別に見る |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
「警告が出なければ安全」「警告が出れば攻撃」と思う人が多いです。誤検知もあれば、見逃しもあります。警告は調べるきっかけで、結論ではありません。調べるのは、人の仕事です。
発展: 自分の基準を作る
ラボの lan に、gw から数件の要求を出し、lan-web.log を読みます。送信元ごとの数と、道筋ごとの数を、それぞれ数えましょう。
その結果から、「この数を超えたら警告」というしきい値を一つ決め、理由を一文で書きます。