- 1.解析について
- 2.実際の解析
- 3.フォレンジック解析
- 4.フォレンジック関連のツール
- 5.ディスクフォレンジック詳細
- 6.メモリフォレンジック詳細
- 7.スマホのフォレンジック
- 9.解析をやってみよう
1.解析について
1.1 想定するシーン
PCがマルウェアに感染しました。情報漏えいがしていないか、社内の他の端末に不正通信などをしていないか、ADサーバが乗っ取られていないかなどを確認したいとします。
この前提で、解析に関して整理していきます。
1.2 解析の全体像
基本としたのは、フォレンジック解析をせず、情報システム部のメンバーが簡単にできるものとしての内容です。
(1)PCの調査(基本)
・想定されるのは以下
項目 | 内容 |
---|---|
Windowsイベントログ(アプリケーション) | |
Windowsイベントログ(セキュリティログ) | 他のPCにおいては、ID 4624(ログオン)など |
タスクマネージャ | プロセス確認って有効? |
ネットワーク接続確認 | netstat -anoなどは、有効? |
ブラウザのログ | 接続先のログが残っている? |
Prefetchファイル | exeファイルの実行ログが残る。詳細はこちら |
(2)PCの調査(ツールが必要)
・ウイルス対策ソフトやEDRなどのログ
・資産管理ツールのログ
(3)ネットワーク機器
項目 | 内容 | 備考 |
---|---|---|
ファイアウォールログ | 感染端末が外部IPとどのポートで通信していたかを確認(C2通信など) | IPアドレスベース |
プロキシサーバのログ | C2通信やマルウェアダウンロードの痕跡の確認 | URLベース |
DNSサーバのログ | 不審なFQDNへの名前解決の調査 |
(4)ADサーバ
項目 | 内容 |
---|---|
ログオンイベント(4624) | 感染PCからのログオン履歴、誰がいつ認証したか(成功/失敗) |
グループ変更イベント(4728, 4732 など) | ADの管理者権限が勝手に付与されていないか確認 |
GPOの変更(4739) | グループポリシーの改ざんチェック |
サービス作成(7045) | リモートサービスによる不正常駐を検出 |
ドメインコントローラーの振る舞い | 高負荷や不審なKerberosトラフィックがあると、Golden TicketやPass-the-Hashの可能性 |
(5)その他のサーバ(ファイル/DB/社内Webなど)
・ログオン履歴を見て、感染PCやそのユーザーから不正なログオンがないか(ローカルログ、RDP)
・Windowsならこんなログ、Linuxならこんなログ、というのを整理したい。
2.実際の解析
2.1 Prefetchファイル
(1)概要
拡張子 .exe の実行ファイルの実行履歴がわかる
項目 | 内容 | 備考 |
---|---|---|
ファイルの保存場所 | C:\Windows\Prefetch | 隠しファイルなので、表示することを有効にしないと表示されない可能性があり |
ファイル名 | 実行ファイル名-ハッシュ値.pf (例)NOTEPAD.EXE-DE15EE03.pf |
メモ帳などでは開けない |
作成タイミング | プログラムが初回起動から約10秒後 | |
ファイルに含まれる情報 | 実行ファイルのパス、実行回数、最終実行日時、など | |
対応OS | Windows XP以降 | サーバOSでは残らない |
(2)Prefetchで何がわかるか
・実行ファイルのファイル名、そのパス、過去8回分の実行日時。
・実行ファイルがアクセスしたファイル名およびパス。フルパス(例:E:\MALWARE.EXE)から、USBデバイス経由の実行履歴も確認可能。
(3)Prefetchファイルの開き方
・メモ帳などでは開けないので、winprefetchviewなどのツールを活用する。
・以下のサイトにアクセスしてダウンロードする。
https://www.nirsoft.net/utils/win_prefetch_view.html#google_vignette
a)「Download WinPrefetchView (64-bit)」からダウンロード
b)「winprefetchview-x64.zip」がダウンロードされるので解凍
c)WinPrefetchView.exeを実行 ★この見方は要確認
・実行した結果は以下。たとえばExcelであれば、下の欄に、開いたExcelのファイルのファイル名(malware.xlsx)およびパスが記載されている。
(4)注意点
・.pfファイルが削除される可能性がある
・8回を超える履歴は、記録が上書きされる。
・.bat や .cmd、.ps1(PowerShell)、.vbs などのスクリプトファイルは直接は対象外
・サーバOSでは残らない。
2.2 LinuxのWebサーバのアクセスログ
(1)アクセスログについて
・LinuxによるWebサーバのログがアクセスログである。
・ファイルのパスは、デフォルトでは以下
OS | パス |
---|---|
CentOS | /var/log/httpd/access_log |
Ubuntu | var/log/apache2/access.log |
・設定によって取得するログ内容は変わるが、デフォルトでわかることは、たとえば以下
項目 | 内容 |
---|---|
送信元IPアドレス | |
時刻 | |
メソッド | POSTやGETなど |
パス | アクセスするURLのFQDN以降の部分 |
ステータスコード | 200 OKや301 リダイレクト、など |
レスポンスサイズ | サーバからの応答のサイズ。設定によっては「-」になる |
リファラ | 参照元URL |
ユーザエージェント | アクセス元のOSやブラウザの種類・バージョンなど |
(2)実際のログ
以下は、実際に攻撃をしかけたログです。
パスワードをブルートフォースで順次ログインの攻撃を仕掛け、一番最後は200 OKでログインが成功してしまっている。
153.w.z.128 - - [26/Jan/2023:16:48:26 +0900] "POST /login.php HTTP/1.1" 301 - "http://34.x.y.205/kaiin.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" 153.w.z.128 - - [26/Jan/2023:16:48:26 +0900] "GET /kaiin.html HTTP/1.1" 304 - "http://34.x.y.205/kaiin.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" 153.w.z.128 - - [26/Jan/2023:16:48:32 +0900] "POST /login.php HTTP/1.1" 301 - "http://34.x.y.205/kaiin.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" 153.w.z.128 - - [26/Jan/2023:16:48:32 +0900] "GET /kaiin.html HTTP/1.1" 304 - "http://34.x.y.205/kaiin.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" 153.w.z.128 - - [26/Jan/2023:16:48:41 +0900] "POST /login.php HTTP/1.1" 301 - "http://34.x.y.205/kaiin.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" 153.w.z.128 - - [26/Jan/2023:16:48:42 +0900] "GET /kaiin.html HTTP/1.1" 304 - "http://34.x.y.205/kaiin.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" 153.w.z.128 - - [26/Jan/2023:16:49:06 +0900] "POST /login.php HTTP/1.1" 301 - "http://34.x.y.205/kaiin.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" 153.w.z.128 - - [26/Jan/2023:16:49:07 +0900] "GET /kaiin.html HTTP/1.1" 304 - "http://34.x.y.205/kaiin.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" 195.154.77.190 - - [26/Jan/2023:16:49:33 +0900] "POST /boaform/admin/formLogin HTTP/1.1" 404 196 "http://34.x.y.205:80/admin/login.asp" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0" 153.w.z.128 - - [26/Jan/2023:16:49:43 +0900] "POST /login.php HTTP/1.1" 301 - "http://34.x.y.205/kaiin.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" 153.w.z.128 - - [26/Jan/2023:16:49:43 +0900] "GET /kaiin.html HTTP/1.1" 304 - "http://34.x.y.205/kaiin.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" 153.w.z.128 - - [26/Jan/2023:16:51:31 +0900] "POST /login.php HTTP/1.1" 200 160 "http://34.x.y.205/kaiin.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
2.3 LinuxのSSHのログ
(1)概要
・/var/log/secureに保存される。
・項目は以下
項目 | 説明 |
---|---|
日時 | |
ホスト名 | |
サービス名 | ログを出力したプロセス |
プロセスID | 該当するプロセスのID |
ログメッセージ本文 |
(2)ログの例
・Invalid user や Did not receive identification string などのログが多数あり、ブルートフォースによる不正アクセス試行が多数行われている
・ec2-user による公開鍵ログイン、user1 によるパスワードログインが成功している。user1に関しては、不正ログインの可能性も否定できない。
Jul 18 23:29:56 ip-172-31-41-230 sshd[11448]: Received disconnect from 205.x.y.109 port 57026:11: Normal Shutdown, Thank you for playing [preauth] Jul 18 23:29:56 ip-172-31-41-230 sshd[11448]: Disconnected from 205.x.y.109 port 57026 [preauth] Jul 18 23:30:22 ip-172-31-41-230 sshd[11458]: Invalid user user from 205.x.y.109 port 35098 Jul 18 23:30:22 ip-172-31-41-230 sshd[11458]: input_userauth_request: invalid user user [preauth] Jul 18 23:30:22 ip-172-31-41-230 sshd[11458]: Received disconnect from 205.x.y.109 port 35098:11: Normal Shutdown, Thank you for playing [preauth] Jul 18 23:30:22 ip-172-31-41-230 sshd[11458]: Disconnected from 205.x.y.109 port 35098 [preauth] Jul 18 23:30:48 ip-172-31-41-230 sshd[11460]: Invalid user user from 205.x.y.109 port 41564 Jul 18 23:30:48 ip-172-31-41-230 sshd[11460]: input_userauth_request: invalid user user [preauth] Jul 18 23:30:48 ip-172-31-41-230 sshd[11460]: Received disconnect from 205.x.y.109 port 41564:11: Normal Shutdown, Thank you for playing [preauth] Jul 18 23:30:48 ip-172-31-41-230 sshd[11460]: Disconnected from 205.x.y.109 port 41564 [preauth] Jul 18 23:31:12 ip-172-31-41-230 sshd[11463]: Invalid user user from 205.x.y.109 port 47982 Jul 18 23:31:12 ip-172-31-41-230 sshd[11463]: input_userauth_request: invalid user user [preauth] Jul 18 23:31:13 ip-172-31-41-230 sshd[11463]: Received disconnect from 205.x.y.109 port 47982:11: Normal Shutdown, Thank you for playing [preauth] Jul 18 23:31:13 ip-172-31-41-230 sshd[11463]: Disconnected from 205.x.y.109 port 47982 [preauth] Jul 18 23:31:37 ip-172-31-41-230 sshd[11465]: Invalid user user from 205.x.y.109 port 54424 Jul 18 23:31:37 ip-172-31-41-230 sshd[11465]: input_userauth_request: invalid user user [preauth] Jul 18 23:31:37 ip-172-31-41-230 sshd[11465]: Received disconnect from 205.x.y.109 port 54424:11: Normal Shutdown, Thank you for playing [preauth] Jul 18 23:31:37 ip-172-31-41-230 sshd[11465]: Disconnected from 205.x.y.109 port 54424 [preauth] Jul 18 23:34:07 ip-172-31-41-230 sshd[11469]: Did not receive identification string from 195.w.x.2 port 60136 Jul 18 23:51:02 ip-172-31-41-230 sshd[11560]: Invalid user user from 195.w.x.2 port 51846 Jul 18 23:51:02 ip-172-31-41-230 sshd[11560]: input_userauth_request: invalid user user [preauth] Jul 18 23:51:02 ip-172-31-41-230 sshd[11560]: Received disconnect from 195.w.x.2 port 51846:11: Normal Shutdown, Thank you for playing [preauth] Jul 18 23:51:02 ip-172-31-41-230 sshd[11560]: Disconnected from 195.w.x.2 port 51846 [preauth] Jul 18 23:52:35 ip-172-31-41-230 sshd[11564]: Received disconnect from 222.x.y.213 port 46871:11: [preauth] Jul 18 23:52:35 ip-172-31-41-230 sshd[11564]: Disconnected from 222.x.y.213 port 46871 [preauth] Jul 19 00:09:00 ip-172-31-41-230 sshd[11655]: Connection reset by 222.x.y.13 port 35130 [preauth] Jul 19 00:18:22 ip-172-31-41-230 sshd[11677]: Did not receive identification string from 81.161.63.100 port 7138 Jul 19 00:34:44 ip-172-31-41-230 sshd[11748]: Connection reset by 222.x.y.137 port 12811 [preauth] Jul 19 00:52:31 ip-172-31-41-230 sshd[11787]: error: AuthorizedKeysCommand /opt/aws/bin/eic_run_authorized_keys ec2-user SHA256:I8Bm/A5QOXttRd8PyI52Lbfd8SX8TaOTl+r1sS3TG7I failed, status 22 Jul 19 00:52:31 ip-172-31-41-230 sshd[11787]: Accepted publickey for ec2-user from 114.x.y.150 port 58118 ssh2: RSA SHA256:I8Bm/A5QOXttRd8PyI52Lbfd8SX8TaOTl+r1sS3TG7I Jul 19 00:52:31 ip-172-31-41-230 sshd[11787]: pam_unix(sshd:session): session opened for user ec2-user by (uid=0) Jul 19 00:52:34 ip-172-31-41-230 sudo: ec2-user : TTY=pts/0 ; PWD=/home/ec2-user ; USER=root ; COMMAND=/bin/bash Jul 19 00:52:34 ip-172-31-41-230 sudo: pam_unix(sudo-i:session): session opened for user root by ec2-user(uid=0) Jul 19 10:12:47 ip-172-31-41-230 sshd[12229]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=i114-184-195-150.s41.a027.ap.plala.or.jp user=user1 Jul 19 10:12:49 ip-172-31-41-230 sshd[12229]: Failed password for user1 from 114.x.y.150 port 61101 ssh2 Jul 19 10:12:53 ip-172-31-41-230 sshd[12229]: Accepted password for user1 from 114.x.y.150 port 61101 ssh2
2.4 ブラウザの履歴
・インターネット接続の履歴が分かる
・履歴はどれほど保存されている?
・履歴はどこで見る?
2.5 Sysmonログ
(1)Sysmonログとは
・正式名称は、System Monitor(Sysmon)
・提供元は、Microsoft(Sysinternals Suiteの一部)
・イベントログとは違い、高精度なログが取得できる。(プロセス生成、ネットワーク通信、ファイル作成など)
・イベント記録先は、Windowsイベントログ → Applications and Services Logs
・標準では搭載されておらず、Sysinternalsから別途インストールが必要
・利用は無料
・インストールしている企業はそれほど多くないと思われる。
(2)Sysmonの主なログ内容
イベントID | イベント内容 | 説明・用途例 |
---|---|---|
1 | プロセス作成 | 実行されたプロセスのパス、引数、親プロセス、ユーザ、ハッシュを記録。 |
2 | ファイル作成タイムスタンプ変更 | 攻撃者がファイルの作成日時を改ざんした場合に検出。Timestomping対策。 |
3 | ネットワーク接続(IPv4/IPv6) | 接続元プロセスとリモートIP、ポート番号、プロトコルを記録。C2通信の特定などに有効。 |
5 | プロセス終了 | プロセスが終了したタイミング。短命プロセスやマルウェアの終了検知に利用。 |
7 | イメージロード(ドライバ) | カーネルドライバの読み込み。未署名ドライバの読み込み検知などに活用。 |
8 | イメージロード(DLLなど) | 実行中プロセスに読み込まれたDLLファイルを記録。DLLインジェクションの検出等。 |
10 | プロセス間アクセス | 他のプロセスへのメモリ操作、読み取り、コード挿入などを記録。 |
11 | ファイル作成 | 作成されたファイルのパス、拡張子、ハッシュ等を記録。ドロッパーなどの解析に。 |
13 | レジストリ値の書き込み | レジストリキーの変更操作を検出。Runキーやサービス改ざんの検出に有効。 |
22 | DNSクエリ | 実行プロセスからのDNS名前解決の記録。不審なドメインへの問い合わせ検知。 |
23 | ファイル削除 | 削除されたファイルの記録(※Sysmonv13以降でサポート、構成に依存)。 |
(3)参考資料
Sysmonログを可視化して端末の不審な挙動を調査~SysmonSearch~
https://blogs.jpcert.or.jp/ja/2018/09/SysmonSearch.html
3.フォレンジック解析
外注が必須と言えるフォレンジック解析。
3.1 フォレンジック解析とは
・言葉の定義や目的
・フォレンジック解析でできること(、できないこと)
・ログ解析との違い
・参考1:NIST SP800-86
https://www.ipa.go.jp/security/reports/oversea/nist/ug65p90000019cp4-att/begoj9000000bd3p.pdf
・参考2:インシデント対応へのフォレンジック技法の統合に関するガイド
IPAがNISTの資料を解説
https://www.ipa.go.jp/security/reports/oversea/nist/ug65p90000019cp4-att/begoj9000000bf0q.pdf
3.2 フォレンジック解析の方法
(1)ディスクフォレンジック
・HDDやSSD、USBメモリなどの外部記憶媒体。
・ファイル操作履歴
・プログラムの実行履歴
・外部デバイスの接続履歴
・・・
(2)メモリフォレンジック
・メモリのフォレンジック。まずはメモリの保全が必要。
・メモリダンプ(RAWデータ)して、それを解析
・感覚的には、9割がディスクフォレンジックで、メモリフォレンジックをするのは1割程度であろう。PCの場合、原則は再起動したらメモリデータが消えるので、そうするとメモリフォレンジックはできない。サーバであれば再起動することが少ないので、時間がそれほど経過していなければ、調査可能かもしれない。また、ファイバネーションファイルがあり、次の起動時に必要な情報を残しているので、再起動しても、完全にメモリフォレンジックができないというわけでもない。
3.3 ファストフォレンジック
・簡易なフォレンジックだが、短時間で結果がでる。
・やばいかやばくないかを判断するような感じ。やばい(=情報漏えいが起こったことが確実)のであれば、さらに調査をするなど。
3.4 証拠保全(データ保全)
・証拠を保全しないと、解析ができない。非常に重要な工程である。
・「証拠保全ガイドライン 第9版」が参考になるでしょう。
https://digitalforensic.jp/wp-content/uploads/2018/07/guideline_7th.pdf
3.5 契約関係
・手続き方法
チケットサービスとして、事前に契約があった方がスムーズだと思います。インシデントが発生してから依頼してからでも対応してもらえますが、契約などに時間がかかりそうです。
・料金
・所要日数
・フォレンジックの流れ
1)事前打ち合わせ(目的や調査対象、台数の確認など)
2)データ保全
・オンサイトおよびオフサイトでも可能
・仮想の場合はイメージをエクスポート。
3)解析
4)報告(3日程度で速報、2~3週間程度で調査結果の報告。必要に応じて報告会)
4.フォレンジック関連のツール
・フォレンジック解析では、イベントログやレジストリなどを地道に見るのは大変です。 有料のものもありますが、無料のツールもあり、それらを使うことで解析のサポートができます。
Nir Sofer氏のソフトが有名で、以下にたくさんのツールが紹介されています。
http://www.nirsoft.net/utils/
いくつか紹介します。
❶USBdeview
このツールを使うと、USBの接続情報や、抜き差しの記録がわかります。
http://www.nirsoft.net/utils/usb_devices_view.html
USBによるデータ持出しなどの履歴を確認することに利用できるでしょう。ただし、接続履歴は分かりますが、ファイルのコピーは分かりません。
❷fulleventlogview
このツールを使うと、イベントログが整理されて表示されます。
http://www.nirsoft.net/utils/full_event_log_view.html
❸winprefetchview
http://www.nirsoft.net/utils/win_prefetch_view.html
exeファイルを実行すると、C:\Windows\Prefetch にPrefetchファイルが作成されます。そのファイルをリスト化してくれます。結果、どんなアプリケーションを実行したかがわかります。
❹FTK Imager
・FTK Imager Lite
メモリダンプのフリーツール
http://www.atmarkit.co.jp/ait/articles/1610/12/news001.html
❺AutoSPY
❻X-Ways
5.ディスクフォレンジック詳細
5.1 ログ解析の限界とディスクフォレンジック
(1)ログ解析の限界
・攻撃者によって消去されることがある
・取得するログの情報が、そもそも不十分な場合がある(必要な情報が取得されていない)
・ログの保存期間は一般的にはそれほど長くなく、欲しい情報が消える可能性
(2)フォレンジック解析で分析できること
・上記(1)のログ解析の限界の上2つへの対応ができる可能性がある。
・具体的には、消去された痕跡を復元できる場合がある
・ログには残らなかった痕跡を確認できることがある。
(3)詳細の対比
項目 | ログ解析で取得可 | どのログで? | ディスクフォレンジックで取得可 | フォレンジックでの取得方法・対象 |
---|---|---|---|---|
インターネット接続履歴 | △条件付き | DNSキャッシュ、ブラウザ履歴、FWログ | ✔可能 | ブラウザキャッシュ、履歴DB、レジストリ、URL履歴ファイル |
ダウンロードファイル名・サイズ | △一部可能 | ブラウザログ、イベントログ | ✔可能 | ファイル実体、$LogFile、$MFTからファイル属性を復元 |
実行したアプリケーション | △一部可能 | Sysmon(ID:1)、イベントログ(ID:4688) | ✔可能 | Prefetch、ShimCache(レジストリ)などから実行履歴を取得 |
開いたファイル | △条件付き | 最近使ったファイル、Officeログ | ✔可能 | RecentItems、ShellBags、$MFTのアクセス日時 |
ファイルのコピー(PC内) | ✖不可 | ― | ✔判明する可能性あり | コピー元・先の属性比較、$LogFile、ファイルIDなどの変化 |
ファイルのコピー(USBなど外部) | ✖不可 | ― | ✔高確度で可能 | USNジャーナル、$LogFile、USBStorレジストリとの照合 |
ファイルの新規作成 | △一部可能 | Sysmon(ID:11)、イベントログ | ✔可能 | $MFTの作成日時、ファイルIDなど |
ファイルの削除 | ✖不可 | ― | ✔検出・一部復元可能 | 削除済み領域、$MFT残骸、$LogFile、シャドウコピー |
USBメモリの接続履歴 | ✔可能 | レジストリ(USBStor,MountedDevices) | ✔可能 | 同上+アクセス履歴との相関解析 |
自動起動設定の改ざん | △一部可能 | レジストリ監査ログ、Sysmon(ID:13) | ✔可能 | レジストリRunキー、サービス、スケジュールタスクをオフライン解析 |
新規ユーザの作成 | ✔記録される | セキュリティログ(ID:4720) | ✔確認可能 | SAMレジストリのオフライン解析 |
マルウェア本体の存在(実行/保存) | △履歴は可能 | Sysmon(ID:1)、イベントログ | ✔実体を検出可能 | ファイルハッシュ照合、EXIF解析、Prefetch、ページファイルなど |
ファイルの改ざん(内容・日時) | ✖不可 | ― | ✔検出可能 | $MFTの$SIと$FNのタイムスタンプ差異、Diff解析など |
ステルス化(隠しファイル/ADS) | ✖不可 | ― | ✔可視化可能 | ADS(代替データストリーム)、隠し属性、Rawスキャン |
ログ削除の痕跡 | ✖ログ消失で不可 | ― | ✔検出可能 | $LogFileや$MFTの不整合、USNジャーナルの分析 |
5.2 (参考)ディスクフォレンジック関連の用語
用語 | 説明 | 主なファイル/レジストリパス例 |
---|---|---|
`$MFT` | MasterFileTable。NTFSで管理される全ファイルのメタ情報を保持。削除・改名・作成日時など。 | `\\.\C:`(ディスク全体のRAWアクセス) |
`$LogFile` | ファイル操作のトランザクションログ。削除や移動の操作痕跡を保持。 | `C:\$LogFile`(直接アクセス不可。RAW取得が必要) |
`USNJournal` | ファイルの変更・作成・削除の履歴を記録するNTFSのジャーナル。 | `C:\$Extend\$UsnJrnl`(直接アクセス不可) |
`Prefetch` | アプリケーションの実行履歴(.pf)。起動された実行ファイルとタイムスタンプを保持。 | `C:\Windows\Prefetch\*.pf` |
`ShimCache` | AppCompatCache。過去に実行されたファイルの情報がレジストリに記録される。 | `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\AppCompatCache` |
`ShellBags` | エクスプローラでアクセスしたフォルダの履歴(表示位置や設定も含む)。 | `HKEY_USERS\ |
`ThumbCache` | 画像・文書などのサムネイル画像キャッシュ。削除済みファイルの存在確認に有効。 | `C:\Users\<ユーザ名>\AppData\Local\Microsoft\Windows\Explorer\thumbcache_*.db` |
`ADS` | AlternateDataStreams。NTFSの隠しデータ格納領域。マルウェアの隠蔽にも使われる。 | `C:\path\file.txt:streamname`(例:`notepadfile.txt:malicious`) |
`VolumeShadowCopy` | システムのスナップショット。過去のファイル状態を復元可能。 | `\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyX\`(Xは番号) |
`SAM` | Windowsユーザアカウント情報(ハッシュ含む)。 | `C:\Windows\System32\config\SAM` |
5.3 ディスクフォレンジックの流れ
5.3 HDDとSSDの違いがフォレンジックに与える影響
・解析そのものに大きな影響はないが、ファイルが削除されてしまうと、ほぼ痕跡が残らないと考えた方がいいい。
観点 | HDD | SSD |
---|---|---|
保存方式 | 磁気ディスクにセクタ単位で記録 | NANDフラッシュにページ/ブロック単位で記録 |
ファイル削除の挙動 | 削除しても物理セクタにデータが残る(通常) | TRIMコマンドによりデータ領域が即座に消去される可能性 |
フォレンジックツール対応 | 多くの既存ツールで対応可能(Autopsy, FTK, EnCase等) | 同様に可能だが削除データの痕跡は少ない可能性が高い |
※TRIMとは?
SSDの空きブロック管理機構。OSが削除済みブロックをSSDコントローラに通知し、内部的に消去処理を促進する。これにより、パフォーマンスは向上するが痕跡も消える。
6.メモリフォレンジック詳細
6.1 メモリフォレンジックでできること
メモリフォレンジックでわかること(通常のログ解析やディスクフォレンジックではわからないこと)として、IPAの資料の言葉を使うと、「現在のネットワーク接続、プロセス、ログインセッション、オープンされているファイル、ネットワークインタフェースの設定、メモリーの内容などが含まれる。このデータに、アタッカーの身元や使用された攻撃方法の手がかりが含まれていることがある。」
6.2 メモリフォレンジックの流れ
6.3 メモリ保全
6.4 メモリフォレンジックの実施
・ツール:Volatility3など
・目的:ランタイム中にのみ存在するマルウェア、不審なネットワーク接続などの検出
・分析ポイント
コマンド | 内容 |
---|---|
pslist, pstree | プロセスツリーの可視化 |
netscan | TCP/UDPセッションとリモートIPの把握 |
cmdline | 実行されたコマンドの確認 |
dlllist | ロードされたDLLの確認 |
・・・ |
7.スマホのフォレンジック
・スマホに関するニーズが少ない。最新のOSなどでは、解析しようにもデータがそもそも抜けないし、本当にデータを保全すうならJailBreakしないと見えない。なので、現実的にはなかなかフォレンジックは難しい。
・AndroidOSの解析は、Linuxベースなので多少はできるかも。iOSは少し難しい気がする。
・LINEなどのアプリのログを確認したりすることになるのではないか。
9.解析をやってみよう
9.1 gdbでプログラムの解析をしてみよう。
(1)解析するプログラム
Cで書かれた以下のプログラム(ping.c)があります。 ※拡張子は.cにすること
これは、ping 8.8.8.8 をバックグラウンドで実行するものです。
#include<stdio.h> int main () { system ( "ping 8.8.8.8 >/dev/null 2>&1 &" ); }
では、コンパイルして、ping.exeという実行ファイルを作ります。
gcc -o ping.exe ping.c
※警告が出ますが、無視しましょう。
(2)静的解析
マルウェアを実行すれば、その挙動はわかります。しかし感染したり不正な行為を行うので得策とは言えません。そこで、静的解析として、gdb(The GNU Project Debugger)というLinux用の解析ツールを使います。
❶gdbのインストール
# yum -y install gdb
❷gdbの起動
# gdb ping.exe GNU gdb (GDB) Red Hat Enterprise Linux 8.0.1-36.amzn2.0.1 Copyright (C) 2017 Free Software Foundation, Inc. ・・・ Reading symbols from ping.exe...(no debugging symbols found)...done. (gdb)
❸使用されている関数の確認
main関数の存在があることがわかる。
(gdb) info functions All defined functions: Non-debugging symbols: 0x00000000004003c8 _init 0x00000000004003f0 system@plt 0x0000000000400400 _start 0x0000000000400430 deregister_tm_clones 0x0000000000400460 register_tm_clones 0x00000000004004a0 __do_global_dtors_aux 0x00000000004004c0 frame_dummy 0x00000000004004c7 main 0x00000000004004f0 __libc_csu_init 0x0000000000400550 __libc_csu_fini 0x0000000000400554 _fini (gdb)
❹main関数の解析
(gdb) disas main Dump of assembler code for function main: 0x00000000004004c7 <+0>: push %rbp 0x00000000004004c8 <+1>: mov %rsp,%rbp 0x00000000004004cb <+4>: mov $0x400570,%edi 0x00000000004004d0 <+9>: mov $0x0,%eax 0x00000000004004d5 <+14>: callq 0x4003f0 <system@plt> 0x00000000004004da <+19>: mov $0x0,%eax 0x00000000004004df <+24>: pop %rbp 0x00000000004004e0 <+25>: retq End of assembler dump. (gdb)
- <+19> --> 関数呼び出し:外部コマンドを実行するsystem関数の呼び出し
- <+4> --> 引数の準備:外部コマンドに渡す引数を設定
❺メモリ空間を確認
引数が格納されたアドレスを確認する。そして、4ずつ数字を増やしながら実行。
(gdb) x 0x400570 0x400570: 0x676e6970 (gdb) x 0x400574 0x400574: 0x382e3820 (gdb) x 0x400578 0x400578: 0x382e382e (gdb) x 0x40057c 0x40057c: 0x642f3e20 (gdb) x 0x400580 0x400580: 0x6e2f7665
1つ目として、メモリの0x400570 には、0x676e6970という値が入っている。
これはリトルエンディアンなので、メモリ上には逆に並んで配置されている。
元に戻すと 70696e67
これをテキストにすると、pingとなる。
※たとえばCyberChef(https://gchq.github.io/CyberChef/)にて、Swap endiannessを使って、ビッグエンディアンからリトルエンディアン(またはその逆)を実行し、From Hexを使って、
16進数をテキストに変換するのが楽です。
同様に
382e3820 --> 20382e38 --> 8.8
382e382e --> 2e382e38 --> .8.8
642f3e20 --> 203e2f64 --> >/d
6e2f7665 --> 65762f6e --> ev/n
こうして、ping 8.8.8.8 を実行していることがわかります。