クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

攻撃を調べて報告する

このレッスンのあとで: ログを読んで攻撃の流れを時系列にまとめ、報告することができる。

50分のレッスンコマンド5件インシデント対応とフォレンジックのラボ:侵入されたサーバーをブラウザーで調べる

サーバーが攻撃されたら、まず何をするか

インシデントとは、情報の安全をおびやかす出来事のことです。サーバーに入られたと分かったとき、慌てて消すと、証拠まで消えてしまいます。

この回では、証拠を残しながら調べ、何が起きたかを時系列にまとめて報告する方法を学びます。

ラボのルール

注意

ラボの事件は、作り話のログです。本物のサーバーではなく、あなた専用のコピーです。証拠のファイルは書きかえず、コピーして作業します。許可なく他人のサーバーを調べるのは、不正アクセス禁止法に反します。

このレッスンのゴール

メモ

ログを読んで攻撃の流れを時系列にまとめ、報告することができる。

キーワード

ことばいみれい
インシデント情報の安全をおびやかす出来事不正なログイン
ログ誰が、いつ、何をしたかを、順に書いた記録
証拠何が起きたかを示す、変えてはいけない記録やファイル
時系列出来事を、起きた順に並べたもの
居座り一度入った攻撃者が、また入れるように残すしかけ
影響範囲被害がどこまで及んだか

学生が入力するセルは、このプレビューでは空白です。

インシデント対応は、どんな順番で進めるのか

対応は、おおよそ5つの段階で進みます。見つける、広がりを止める、調べる、元にもどす、報告する、の順です。

調べる前に消したり再起動したりすると、証拠が失われます。まず記録を残し、そのあと止めます。

証拠のフォルダに移る

コマンド
cd ~/case

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ログの置き場所を見る

コマンド
ls var/log

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

作業用にコピーを作る

コマンド
cp -r ~/case ~/work

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

なぜ、コピーで作業するのか

証拠は、見つけたときの形のままで残します。あとで「書きかえたのでは」と疑われたら、調べた結果が使えなくなるからです。

ここでは case フォルダを読むだけにして、書きこみはコピーの work フォルダでします。

ログの1行は、どう読めばよいのか

ログの1行には、時刻、機械の名前、どのプログラムの記録か、何が起きたかが並びます。次の例は、作り話の1行です。

「失敗」が続いたあとに「成功」があれば、当てずっぽうの試行がうまくいったのかもしれません。

ログの1行の例(作り話)

コード: bash
Oct 14 03:12:09 web01 sshd[2211]: Failed password for deploy from 198.51.100.7 port 51812 ssh2
# 時刻 03:12:09、機械 web01、ログイン失敗、アカウント deploy、相手のアドレス 198.51.100.7

1行を分けて読む

部分意味
Oct 14 03:12:09いつ起きたか
web01どの機械の記録か
Failed password何が起きたか(パスワードの失敗)
deployどのアカウントか
198.51.100.7どこから来たか

学生が入力するセルは、このプレビューでは空白です。

時刻の一覧の見出しを見る

コマンド
head -n 1 ~/case/mtimes.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

一覧が何行あるか数える

コマンド
wc -l ~/case/mtimes.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

時系列は、どう作るのか

集めた出来事を、時刻の順に並べます。「00:05:10」のように0をそろえて書くと、文字として並べかえるだけで時刻の順になります。

攻撃者を決めるときは、失敗の数だけで決めません。成功したか、何をしたか、いつ来たかを、並べて見ます。

時刻の順に並べてみる

コード: python
# 先頭の時刻の0をそろえてあるので、sorted で時刻の順になります。
events = [
    "03:12:09 ok",
    "03:10:01 fail",
    "03:11:30 fail",
]
for line in sorted(events):
    print(line)

よくある間違い

注意

失敗がいちばん多いアドレスが犯人だ、と考える人がよくいます。何度失敗しても、一度も入れていなければ、ただの雑音かもしれません。成功の記録と、そのあとに何が起きたかを見ます。

報告に書く5つのこと

問い書くこと
いつ最初の侵入と、見つかった時刻
どこから攻撃元のアドレス
何を入られたアカウントと、変えられたもの
どうやって入り方と、居座りのしかけ
これから元にもどす手順と、再発を防ぐ対策

学生が入力するセルは、このプレビューでは空白です。

このラボとソースについて: インシデント対応とフォレンジックのラボ:侵入されたサーバーをブラウザーで調べる

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。