チャレンジ一覧
改ざんされたタイムスタンプを検出せよ
`/challenge/mft_timeline.csv` は NTFS の `$MFT` から書き出したタイムラインです。各ファイルの `$STANDARD_INFORMATION`(SI)と `$FILE_NAME`(FN)のタイムスタンプと、小さいファイルの常駐データ `resident_data`(16進)を含みます。攻撃者はマルウェア本体のタイムスタンプを SI だけ過去へ書き換えて(timestomping)隠しましたが、FN には本当の作成時刻が残っています。 マルウェアは、自分が置くファイルの常駐データを、そのファイルの本当の作成時刻(`FN_Born`)から作った鍵で暗号化します。鍵ストリームは SHA-256("<FN_Born の文字列そのまま>:<カウンタ>")(カウンタは0から始まる10進の文字列)を順に連結したもので、データと XOR します。同じマルウェアの、timestomp されていない他の検体も残っています。timestomp されたファイルの常駐データを復号してください。
暗号化されたiOSバックアップを復号せよ
暗号化iOSバックアップのパスワード検証を安全なiTunesメタデータfixtureで行います。実iPhoneや実バックアップは使用しません。Manifest.plistのダイジェストと候補パスワードを照合してパスワードを特定し、暗号化されたメッセージデータベースを復号してフラグを探してください。
暗号解析 - RSA e=3ブロードキャスト攻撃
broadcast.jsonには同じ平文をパディングなしRSA・e=3で3つの互いに素なmodulusへ暗号化した結果があります。中国剰余定理と整数立方根で平文を復元してください。
未知のLinuxカーネルバージョンのメモリプロファイルを作成せよ
社内で `CONFIG_RANDSTRUCT` を有効にしてビルドしたカーネルで動くサーバーの、物理メモリの一部 `/home/ctfuser/evidence/custom_kernel.dump` を解析します。構造体のメンバーの並びがビルドごとに変わるため、既製のプロファイルは使えません。`evidence/vmlinux`(System.map と pahole 形式の構造体定義)から `task_struct` と `mm_struct` の配置を読み取り、`init_task` からプロセスのリストをたどってください。アドレスの変換式は `/home/ctfuser/README.md` にあります。 端末から起動された攻撃者のツールが、カーネルスレッド(kworker)を装って常駐しています。ツールは自分の設定(コマンドライン引数)を、そのプロセスの `start_time`(8バイト、リトルエンディアン)の SHA-256(32バイト)を繰り返した鍵で XOR して持っています。引数の中の設定からフラグを復元してください。`evidence/profiles/` の既製プロファイルは、このカーネルのものではありません。
独自プロトコルのC&C通信を解読せよ
侵害された端末 10.20.4.88 の通信を、出口のプロキシが記録していました。`/challenge/beacon.log` は1行が1回の送受信で、`data=` は送受信したバイト列の Base64 です。大半は正規のテレメトリですが、1つのホストとの通信はマルウェア独自のバイナリプロトコルです。`/challenge/implant_decompiled.c` は、検体から復元したフレームの組み立てと暗号化の処理(逆コンパイル結果)です。 プロトコルを読み解き、攻撃者がコマンド `cat` で読み出して持ち出したトークンを復元してください。回線上で壊れて再送されたフレームがあります。これは攻撃の実行ではなく、記録済みの通信を解析する防御側の演習です。