チャレンジ一覧

絞り込みを解除

95 問 (4 / 4 ページ)

WebセキュリティLevel 4★★★★☆

Web-28. OAuth認可コードの横取り

このOAuth 2.0認可プロバイダーはログインフローを提供していますが、redirect_uriの検証が甘い可能性があります。認可コードを横取りして管理者権限のアクセストークンを得られないか確認してみましょう。

WebセキュリティLevel 4★★★★☆

Web-29. MongoDBログインフォームのNoSQLインジェクション

このログインポータルはMongoDBを使っており、ユーザー名・パスワードをJSONとしてそのままクエリに組み込んでいます。パスワードを知らなくても管理者としてログインできないか確認してみましょう。

WebセキュリティLevel 4★★★★☆

Web-30. KinoVaultの安全でないデシリアライズ

レガシーなバックアップシステム「KinoVault」は、ユーザーセッションをPythonのpickleでシリアライズしてCookieに保存していると噂されています。Cookieの形式を解析し、悪意あるpickleペイロードで権限を昇格できないか調べてみましょう。

フォレンジックLevel 4★★★★☆

メモリからマルウェアのペイロードを抽出せよ

`/challenge/memstrings.txt` は、不審なプロセスのアドレス空間から取り出した文字列です。ローダーが展開した第2段ペイロード(Base64)が、おとりの文字列や Base64 に紛れています。`/challenge/malfind_region.txt` には、ファイルの裏付けが無い RWX 領域にある、ローダーのデコード処理の逆アセンブルと、同じ領域のデータ部の16進ダンプがあります。逆アセンブルからローダーが何をしているかを読み取り、第2段ペイロード(無害なドロッパーの記録で、何も実行しません)を復元して、campaign tag からフラグを取得してください。

フォレンジックLevel 4★★★★☆

メモリから隠されたカーネルモジュールを検出せよ

LKM ルートキットに感染した疑いのある Linux ホストのメモリから、モジュールの情報を3つ復元しました。`/challenge/modules_list.txt` はカーネルの modules 連結リスト(lsmod 相当)、`/challenge/sysfs_modules.txt` は `/sys/module/<name>/` の kobject とモジュールのアドレス情報、`/challenge/module_area.lime` は各モジュールのコア領域の先頭 8 KiB を LiME 形式(ヘッダー32バイト: magic, version, 開始アドレス, 終了アドレス, 予約)で並べたものです。連結リストから自身を外した隠しモジュールを特定し、その設定を取り出してフラグを取得してください。設定は、そのモジュールのコア領域の先頭から 0x200 バイト目に「長さ(2バイト、リトルエンディアン)+暗号化された本文」の形で置かれています。本文は、sysfs_modules.txt のそのモジュールの SrcVersion を材料に、SHA-256(`<SrcVersion>:<カウンタ>`)(カウンタは 0,1,2... の10進数)を連ねた鍵ストリームと XOR したものです。sysfs にしか無い名前には、組み込みコンポーネントやアンロード中のモジュールも混ざり、隠しモジュール以外にもおとりの設定を持つモジュールがあります。

フォレンジックLevel 4★★★★☆

多段階ステガノグラフィを解読せよ

`/challenge/cover.png` と `/challenge/notes.txt` に、3段階のステガノグラフィが仕掛けられています。各段階に、次の段階を読むための鍵(パスフレーズや符号の対応表)が入っていて、鍵は起動のたびに変わるため、途中を飛ばすことはできません。`cover.png` のピクセルの最下位ビット(先頭32ビットがバイト数)、PNG の `IEND` の後ろに付け足されたデータ、`notes.txt` に紛れたゼロ幅文字、の順にたどってフラグを取得してください。各段階におとりも混ざっています。

フォレンジックLevel 4★★★★☆

断片化されたJPEGファイルを復元せよ

`/challenge/fragments/` に、メモリーカードの未割り当て領域から回収した 256 バイトのクラスタ(`clus_NNNN.bin`)があります。番号は元の並びと無関係で、別のカメラの写真やゴミも混ざっています。`index.txt` が指す持ち主(owner=kinoco-cam-07)の JPEG を、JPEG の構造(マーカーの長さ、DRI と RSTn、EOI)から組み直してください。COM コメントの `note_enc=` は、組み直したスキャンデータ(SOS ヘッダーの直後から EOI の直前まで。RSTn マーカーとバイトスタッフィングはそのまま含む)の SHA-256 を小文字16進にした文字列を材料に、SHA-256(`<その文字列>:<カウンタ>`)(カウンタは 0,1,2... の10進数)を連ねた鍵ストリームで、メモを XOR して16進にしたものです。メモを復号してフラグを取得してください。

暗号Level 4★★★★☆

暗号解析 - DSA nonce再利用による秘密鍵復元

起動のたびに新しい鍵で作られる /challenge/signatures.json には、DSA の公開パラメーター(p は1024ビット、q は160ビット、g、y)、4つの署名(message, h, r, s。h は SHA-256(message) を整数にして mod q)、暗号化されたフラグ encrypted_flag_hex が入っています。4つの署名のうち2つは同じ nonce k を使っています。同じ r を持つ2つの署名から nonce k と秘密鍵 x を復元し、SHA256(str(x)) を繰り返した XOR 鍵で encrypted_flag_hex を復号してフラグを得てください。

暗号Level 4★★★★☆

暗号解析 - RSAのWiener攻撃

組み込み機器の開発チームが、復号を速くするためRSAの秘密指数dをとても小さくして鍵を作りました。public_key.txtの公開指数eはnと同じくらい大きな数です。e/nの連分数展開からdを求めて ciphertext.txt を復号し、フラグを取り出してください。

暗号Level 4★★★★☆

暗号解析 - 線形合同法の内部状態の復元

あるサービスは、セッショントークンも暗号化の鍵ストリームも、パラメーターa, c, mが秘密の線形合同法 x_{k+1} = (a×x_k + c) mod m から作っていました。tokens.txtの連続した10個の出力からa, c, mを復元し、続きの出力を8バイトずつ並べた鍵ストリームで暗号化された secret.enc.hex を復号して、フラグを取り出してください。

フォレンジックLevel 4★★★★☆

破損したRAID5アレイを復元せよ

ファイルサーバー fs01 の RAID5 アレイ `/dev/md0`(4台構成)が、メンバー sdd の故障で組み上がらなくなりました。`~/evidence/` に、各メンバーのイメージ(`sdb.img`・`sdc.img`・`sde.img`、空の `sdd.img`、予備ベイにあった `sdf.img`)と、初動担当者のメモ `mdadm-examine.txt` があります。各イメージの先頭には key=value のヘッダー(NUL 詰め)があり、データ領域は `data_offset` から始まります。同じ世代のメンバーだけを使って、失われたメンバーのチャンクをパリティから復元し、チャンクを正しい順に並べて、財務共有にあった金庫のリカバリーメモを取り出してください。ブロックデバイスや mdadm は使いません(ファイルとして扱います)。

フォレンジックLevel 4★★★★☆

複数のログを統合して攻撃シナリオを再構築せよ

`/challenge/web.log`、`/challenge/auth.log`、`/challenge/db.log` に、同じ侵入が多数の正規の通信に紛れて記録されています。Web への攻撃から認証の成功、データベースの機密テーブルの読み出しまでをたどり、持ち出された値からフラグを取得してください。db.log は機密テーブルの値を平文では記録せず、`value_enc`(16進)としてマスクしています。マスクは、`<セッションID>:<クライアントIP>:<端末ID>:<カウンタ>`(カウンタは 0,1,2... の10進数)の SHA-256 を連ねた鍵ストリームと値を XOR したものです。クライアント IP と端末 ID は db.log には出てきません(端末 ID は auth.log の login success の行にだけ出ます)。正規の DBA のセッションも機密テーブルを読むため、攻撃者のセッションを見分ける必要があります。

フォレンジックLevel 5★★★★★

APT攻撃の全ステージを再構築せよ

4つのログ `/challenge/edr_process.log`、`proxy_http.log`、`dns_queries.log`、`dlp_transfer.log` に、APT 攻撃が多数の正規の記録に紛れて残っています。攻撃者のイベントにラベルはありません。端末・ドメイン・ファイル・時刻を手がかりに、侵入から持ち出しまでを再構築し、持ち出されたデータの中にあるフラグを答えてください。 許可済みのペネトレーションテスト(端末 10.20.9.15)も同じ手口で記録されています。実際のインシデントのデータを復元してください。

フォレンジックLevel 5★★★★★

BitLocker暗号化ドライブをクラックせよ

BitLocker復旧キーの検証を安全なメタデータfixtureで学びます。bitlocker.img は実ボリュームではありません。候補キーのSHA-256を記録済みダイジェストと照合して復旧キーを特定し、そのキーで保護ペイロードを復号してください。

フォレンジックLevel 5★★★★★

Bitcoinトランザクションに隠されたメッセージを抽出せよ

被害者は身代金をビットコインアドレス `bc1qr4nsmw4r3pay7hzfx0d9cq3vkt8e6m5ljgs2ua` に支払いました。`/home/ctfuser/evidence/transactions.json` は調査期間のトランザクションをオフラインで書き出したものです(ブロックチェーンには接続しません。記録の並びはブロック順ではありません)。 攻撃グループは、資金を動かすたびに、トランザクションの OP_RETURN にメッセージの断片を残します。断片は、そのトランザクションが使った入力のトランザクションID(txid)から SHA-256 で作った鍵で XOR されています。OP_RETURN は取引所・タイムスタンプサービスなどほかの利用者も使っています。身代金の資金の流れを追い、断片をつなげてメッセージ(フラグ)を復元してください。

フォレンジックLevel 5★★★★★

IoTデバイスファームウェアから秘密鍵を抽出せよ

ネットワークカメラ KNC-CAM-2000 の更新ファイル `/home/ctfuser/evidence/firmware.bin` を解析します(実機には接続しません)。メーカーは rootfs を暗号化して配布し、復号はブートローダーが起動時に行います。ヘッダーとパーティション表の形式は `/home/ctfuser/README.md` にあります。 ファームウェアに入っている root ユーザーの SSH 秘密鍵のコメント欄にフラグがあります。ホスト鍵などほかの鍵や、ブートローダーにあるほかの鍵は、答えではありません。

フォレンジックLevel 5★★★★★

ハイパーバイザーメモリからVM情報を抽出せよ

KVM ホストのメモリダンプ `/home/ctfuser/evidence/kvm_host.dump` を解析します。ゲストは AMD SEV を模した設定でメモリが VM ごとの鍵で暗号化されていますが、このホストは KVM のデバッグビルドで動いており、ゲストの鍵がホスト側の構造体(kvm_sev_info)に残っていました。ダンプの形式とページの暗号化の方式は `/home/ctfuser/README.md` にあります。 対象は DB サーバーの VM `db-prod-02` です。QEMU のプロセスの記録から VM を特定し、VMCS・EPT・kvm_sev_info をたどってゲストのメモリを復号してください。ゲストのメモリ上に残っているシェルの履歴から、復元トークン(restore token)を答えてください。

フォレンジックLevel 5★★★★★

プロセスホロウイング攻撃を検出せよ

Windows ホストのメモリから、プロセス一覧 `process_list.txt`(PEB の見え方)、VAD の一覧 `vad_regions.txt`、プライベートな実行可能領域のダンプ `malfind/` を復元しました。プロセスホロウイングされたプロセスを特定し、そのイメージベースにあるインプラントの設定ブロックからフラグを復元してください。 RWX の領域は、JIT・Defender のスキャン領域・別のプロセスへの DLL 注入など、正規やおとりの領域にも多数あります。設定ブロックは、先頭が `KCFG`、続いて鍵の長さ(1バイト)、鍵、暗号文の長さ(2バイト、リトルエンディアン)、暗号文で、暗号文は鍵を繰り返した XOR です。ほかの領域にも同じ形式のブロックがあります。

フォレンジックLevel 5★★★★★

改ざんされたタイムスタンプを検出せよ

`/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 されたファイルの常駐データを復号してください。

フォレンジックLevel 5★★★★★

暗号化されたiOSバックアップを復号せよ

暗号化iOSバックアップのパスワード検証を安全なiTunesメタデータfixtureで行います。実iPhoneや実バックアップは使用しません。Manifest.plistのダイジェストと候補パスワードを照合してパスワードを特定し、暗号化されたメッセージデータベースを復号してフラグを探してください。

暗号Level 5★★★★★

暗号解析 - RSA e=3ブロードキャスト攻撃

broadcast.jsonには同じ平文をパディングなしRSA・e=3で3つの互いに素なmodulusへ暗号化した結果があります。中国剰余定理と整数立方根で平文を復元してください。

フォレンジックLevel 5★★★★★

未知の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/` の既製プロファイルは、このカーネルのものではありません。

フォレンジックLevel 5★★★★★

独自プロトコルのC&C通信を解読せよ

侵害された端末 10.20.4.88 の通信を、出口のプロキシが記録していました。`/challenge/beacon.log` は1行が1回の送受信で、`data=` は送受信したバイト列の Base64 です。大半は正規のテレメトリですが、1つのホストとの通信はマルウェア独自のバイナリプロトコルです。`/challenge/implant_decompiled.c` は、検体から復元したフレームの組み立てと暗号化の処理(逆コンパイル結果)です。 プロトコルを読み解き、攻撃者がコマンド `cat` で読み出して持ち出したトークンを復元してください。回線上で壊れて再送されたフレームがあります。これは攻撃の実行ではなく、記録済みの通信を解析する防御側の演習です。