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

無料レッスン

怪しいファイルとプロセスの見つけ方

このレッスンのあとで: 中身の印で怪しいファイルを見分け、動いているプロセスを調べることができる。

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

ファイルの中身で種類を見分ける

怪しいファイルは、名前や拡張子で、別の種類に見せかけることがあります。しかし、ファイルの中身の最初の数バイトは、種類を表す印で、簡単には隠せません。

このレッスンでは、中身から種類を見分ける方法と、動いているプロセスを調べる方法を学びます。

このレッスンのゴール

メモ

中身の印で怪しいファイルを見分け、動いているプロセスを調べることができる。

キーワード

ことばいみ
プロセス動いているプログラム。1つずつ番号(PID)がつく
ファイルシグネチャファイルの先頭にある、種類を表す決まったバイト
バイトコンピュータが扱う、データの最小のまとまり。16進数で2文字
16進数0から9とaからfで書く数。1バイトは2文字
カービング大きなデータの塊から、印を手がかりにファイルを切り出すこと
オフセット先頭から数えた位置

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

プロセスは、動いているプログラム

プログラムを動かすと、プロセスになります。プロセスには番号があり、PID と呼びます。どのプロセスが、どのプロセスから起動されたか(親)も、記録されます。

怪しいプロセスは、名前だけで決められません。実行ファイルの場所と、親と、起動した時刻を見ます。

例: プロセスの一覧の読み方(作り物)

PID親名前実行ファイルの場所気になる点
10systemd/usr/lib/systemd/systemdふつう
8121nginx/usr/sbin/nginxふつう
44101update-helper/tmp/.cache/update-helper一時フォルダの隠しフォルダから動いている

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

いま端末で動いているプログラム名

コマンド
ps -p $$ -o comm=

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

そのプロセスの本体はどこか

コマンド
readlink /proc/$$/exe

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

ファイルの種類は、最初の数バイトに出る

画像、文書、プログラムなどは、先頭に決まったバイトを持ちます。これがファイルシグネチャです。拡張子は名前の一部にすぎず、あとから書き換えられます。

バイトは16進数で書きます。1バイトは2文字です。たとえば、PNG画像は 89 50 4e 47 で始まります。

よくあるファイルシグネチャ

種類先頭のバイト(16進数)文字で見ると
PNG画像89 50 4e 47 0d 0a 1a 0a最初が読めない文字で、次に PNG
PDF文書25 50 44 46 2d%PDF-
ZIP圧縮50 4b 03 04PK
JPEG画像ff d8 ff読めない文字
Linuxのプログラム7f 45 4c 46読めない文字で、次に ELF

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

名前はjpg、中身はPNGのファイルを作る

コマンド
printf '\211PNG\r\n\032\n' > photo.jpg

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

先頭の8バイトを16進数で読む

コマンド
od -An -tx1 -N8 photo.jpg

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

文字で読める印を見る

コマンド
printf '%%PDF-1.4\n' | head -c 5

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

塊の中から、印を頼りに切り出す

消したファイルの中身は、ディスクの上に残っていることがあります。ディスクのコピー(イメージ)の中から、先頭の印を探し、そこから切り出します。これがカービングです。

手順は3つです。印を探す。位置を知る。その位置から、決まった長さを切り出す。

小さなディスクの見本を作る

コマンド
printf 'xxxx\211PNG\r\n\032\nyyyy' > disk.img

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

印の文字PNGの位置を探す

コマンド
grep -oba PNG disk.img

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

例: 見本の中のバイトの位置

位置(オフセット)バイト意味
0から3xxxxただの詰め物
489PNGの印の最初のバイト
5から750 4e 47文字の PNG
8から110d 0a 1a 0aPNGの印の残り
12から15yyyyただの詰め物

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

位置4から8バイトを切り出す

コマンド
dd if=disk.img of=carved.bin bs=1 skip=4 count=8 2>/dev/null

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

切り出したものを読む

コマンド
od -An -tx1 carved.bin

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

よくある間違い

注意

拡張子が .txt だから、ただの文字のファイルだ、と決める人がいます。拡張子は、誰でも付け替えられます。見るのは中身の先頭です。ただし、文字だけのファイルには印がなく、種類は「不明」になります。

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

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