ファイルシステム分析
Linux, Windows, Macにおいて、共通部分と個別の方法についてまとめる。
インシデント対応にはライブフォレンジック、オフラインフォレンジックがある。
ライブフォレンジックシステム
インシデント対応の初期段階として実施
やる意味
- サーバー/サービスを止めずに”今まさに動いていいる”マルウェアや通信を観測
- 証拠が上書き・削除される前にRAM・ログ・ネット接続状況を取得
基本的な実施の流れ
- クリーンなVMから/bin /sbin /lib /lib64をUSBにコピー
- USBを読み取り専用でマウント
- PATH / LD_LIBRARY_PATH をUSB側に切り替え
- psやnetstat, lsof等でプロセス/ポートを確認
- メモリダンプ(LiMEなど)やログコピーを取得
- 必要に応じてオフライン解析に進む
オフラインフォレンジック
やる意味
- マルウェアを完全に止めた環境で徹底的にファイル改ざんやタイムランイを調べる
- 法的証拠保全(チェーン・オブ・カストディ)を確認に行う
基本的な実施の流れ
- 可能なら電源断前にRAMダンプを採取
- dd や FTK Imager でディスク全体をイメージ取得
- 別 PC / VM にコピーし、autopsy・sleuthkit・ghidra などで解析
- ハッシュ比較で改ざんバイナリ検出
- ファイルタイムラインで侵入時刻を特定
- 証拠を保全しつつ、レポート・再発防止策をまとめる
違い(特徴)
観点 | ライブ調査 (Live Response) | オフライン解析 (Disk/Image Forensics) |
---|---|---|
サーバの状態 | 稼働したまま(サービス停止なし) | 停止 or ディスクを切り離して解析 |
使うツール | USB 上の クリーンなコマンド/ライブラリ に置き換えて実行 | 解析用 PC/VMに 専用フォレンジックツール をインストール |
取得できる情報 | 実行中プロセス・ネット接続・RAM など「動的」な証拠 | ファイル改ざん・タイムライン・マルウェア本体など「静的」な証拠 |
主なリスク | 攻撃者プロセスがまだ動いており、偽情報提示や証拠破壊の恐れ | マシン停止によるサービス断・取得に時間とストレージが必要 |
メリット | 迅速な状況把握/インシデントの即時封じ込めに有効 | 深掘り解析・法的証拠保全に適し、マルウェアによる妨害を受けない |
適した場面 | まず被害範囲を素早く把握したいとき | サービス停止を許容し、徹底調査・証拠保全が必要なとき |
Linuxファイルシステム分析
ファイル、権限、タイムスタンプ
所有権と権限
一般的に書き込み可能なディレクトリ
- /tmp: 一時ディレクトリ
- /var/tmp:
- /dev/shm: 共有メモリファイルシステム
条件に一致するファイルを素早く探すコマンド
find / -user www-data -type f 2>/dev /null | less
-type fでファイルを検索
2>/dev/nullで権限によって発生する可能性のあるエラー メッセージを抑制して出力
オプチョン | 内容 |
---|---|
-f | ファイルタイプ |
-user | 特定のユーザー bobやjon |
-group | 特定のグループ |
-perm | 特定お権限 -o+w(誰でも書き込み可能) |
-cmin | 過去?分以内に作成または更新 5 |
メタデータ
ファイルを説明する埋め込み情報、ファイルの特性、出所、属性情報を提供。
ライブフォレンジックの場合、特定のファイルの起源と変更のタイムスタンプ、作成者の詳細を決定するの役立つ。
コマンド | 内容 |
---|---|
exiftool | ファイルのヘッダーと埋め込まれたメタデータ構造を解析してファイルからメタデータを抽出 |
チェックサム分析
データの整合性検証で、データの改ざんまたは破損していないことを確認。
コマンド | 内容 |
---|---|
md5sum | ハッシュ出力 |
sha256sum | ハッシュ出力 |
タイムスタンプ
ファイルやイベントに関連づけられたメタデータであり、特定のアクションがいつ発生したかを示す。作成、変更、アセクス時刻を追跡するのに使用。
- 更新タイムスタンプ(mtime)ファイル内容が最後に変更された時刻
- 変更タイムスタンプ(ctime)ファイルのメタデータが歳暮に変更された時刻
- アクセスタイムスタンプ(ztime)ファイルが最後にアクセス or 読み取られた時刻
コマンド | 内容 |
---|---|
ls -l | mtime |
ls -lc | ctime |
ls -lu | atime |
stat | mtime, ctime, atime |
ユーザーとグループ
ユーザーアカウントの識別
UNIX系システムにおいて、
- /etc/ディレクトリ
- 設定ファイルやシステム全体の設定を保存する中心的な場所
- /etc/passwd
- システムのアカウントとその属性(ユーザーID(UID)、グループID(GID)、ホームディレクトリの場所、ユーザーに定義されているログインシェルなど)のリスト
コマンド | 内容 |
---|---|
ユーザーID(UID) | 個々のユーザーを一意に識別するための数値 |
グループID(GID) | 複数のユーザーをまとめるための数値 |
保存ユーザーID(SUID) |
[user@USER XXXXX]% sudo cat /etc/passwd
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
...
もしこの中に、正当なルートユーザー以外にユーザーID(0)がある場合、バッグドアの可能性あり。
[user@USER XXXXX]:~$ cat /etc/passwd | cut -d: -f1,3 | grep ':0$'
root:0
**********:0 ← こやつ
グループの識別
攻撃者が関心を持つ可能性のある重要なLinuxグループ
グループ | 権限 |
---|---|
sudo, wheel | sudoを使用して昇格された権限でコマンドを実行 |
adm | システムログファイルへの読み取りアクセス権 |
shadow | ユーザー認証とパスワード情報の管理、/etc/passwdの全ユーザーのパスワードハッシュを含むファイルを読み取る |
ディスク | ほぼ無制限の読み取りアクセスと制限付きの書き込み |
[user@USER XXXXX]:~$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,ubuntu,investigator
...
ユーザーのログインとアクティビティ
コマンド | 内容 |
---|---|
last | 全てのユーザーログインに関する情報 |
lastlog | ユーザーの最新のログインアクセティビティ /var/log/lastlog |
lastb | 特定のログファイルを通じて成功したログイン試行と失敗したログイン試行を含む認証関連イベント |
コマンド | 内容 |
---|---|
who | 現在システムにログインしているユーザーを表示 |
[user@USER XXXXX]:$ sudo cat /etc/sudoers
XXXXXX ALL=(ALL) /sbin/ifconfig
- XXXXXはsudo権限が付与されたユーザー
- ALLは権限が全てホストに適用
- (ALL)はユーザーが任意のユーザーとしてコマンドを実行できる
- /sbin/ifconfig は、特定のバイナリ(この場合は ifconfig ユーティリティ)へのパス
→ XXXXXXは必要に応じてネットワークインターフェースを管理するために、昇格されたsudo権限でifconfigを実行できる