チャレンジ一覧

絞り込みを解除

85 問 (3 / 4 ページ)

基礎スキルLevel 4★★★★☆

CI/CDセキュリティ - GitHub Actions 脆弱性

`/challenge/repo/.github/workflows/` にある20個の GitHub Actions ワークフローを監査します。多くのステップに `# audit-ticket: KINOCO{...}` というコメントが付いています。次の3条件をすべて満たす「pwn request」脆弱性を持つワークフローは1つだけで、そのステップの audit-ticket がフラグです。(1) トリガーが `pull_request_target`。(2) あるジョブが、チェックアウトの `ref:` に `github.event.pull_request.head.sha` や `head.ref` を指定して PR の head を明示的にチェックアウトしている。(3) その同じジョブが `secrets.*` を参照している。どれか1つでも欠けるワークフローはおとりです。

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

CloudTrailログから不正アクセスを検出せよ

AWS CloudTrail の書き出し `/challenge/cloudtrail.json` を解析し、盗まれたアクセスキーによる不正アクセスと、シークレットの持ち出しを追ってください。 攻撃者は偵察・権限昇格・新しいアクセスキーの作成のあと、読み出したシークレットを、その新しいキーで外部バケットへ S3 PutObject として分割して送りました(CloudTrail は GetSecretValue の値を記録しません)。オブジェクトキーは `<prefix>/<連番4桁>-<16進>.part` で、16進は6バイトずつの暗号文です。連番順に連結したバイト列は、SHA-256("<新しいアクセスキーID>:<カウンタ>")(カウンタは0から始まる10進の文字列)を順に連結した鍵ストリームと XOR されています。 許可済みのレッドチーム演習(送信元 192.0.2.50)も同じ手口で記録されています。演習ではなく、実際のインシデントで持ち出されたデータを復元してください。 提供ファイル: cloudtrail.json

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

Dockerイメージレイヤーから秘密を抽出せよ

`/challenge/image/` は `docker save`(OCI レイアウト)の書き出しを展開したものです。レイヤーは `blobs/sha256/` にダイジェスト名の gzip 圧縮した tar として置かれ、順番は `manifest.json` から読みます。 `/root/.aws/credentials` は複数のレイヤーで書き換えられ、クリーンアップのレイヤーで whiteout(削除マーカー)され、その後に別の値で作り直されています。最終ビューからは消えている、whiteout で削除された時点の credentials を回収し、その `aws_secret_access_key` の値を答えてください。ほかの秘密ファイルや、削除前後の別の値はおとりです。

基礎スキルLevel 4★★★★☆

Infrastructure as Code - Terraform セキュリティ

Terraform providerを初期化せず、生成済みの terraform/terraform.tfstate を解析してください。outputs の recovery_secret_arn が、復旧用シークレットの ARN を指しています。resources の aws_secretsmanager_secret_version のうち、secret_id がその ARN と完全に一致し、version_stages に AWSCURRENT を含む版が現在の値です。その secret_string(JSON を文字列にしたもの)の recovery_token を Base64 デコードするとフラグになります。

基礎スキルLevel 4★★★★☆

Kubernetes入門 - クラスター調査

実Kubernetesクラスターへ接続せず、artifacts/kubernetes/ の2つのスナップショット(pod-snapshot.yaml と secret-snapshot.yaml)を調べてください。namespace security-lab の Pod suspicious-audit-pod は、環境変数 AUDIT_TOKEN を Secret から読んでいます。その secretKeyRef が指す Secret(同じ namespace で同じ名前)の、指定されたキーの値を Base64 デコードするとフラグになります。別の namespace の同名の Pod や Secret、似た名前の Secret、同じ Secret の別のキーはおとりです。

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

TLS暗号化されたHTTPS通信を復号せよ

`~/evidence/` に、あるクライアント PC の HTTPS 通信を記録したキャプチャ `traffic.pcap`(libpcap 形式)と、ブラウザが書き出した TLS の鍵ログ `sslkeylog.txt`(NSS 形式)があります。鍵ログには、このキャプチャに含まれない通信の行も混ざっています。キャプチャ内の TLS 1.2 の通信を復号し、外部へ持ち出された情報(HTTP の POST の内容)からフラグを取得してください。通信は実際に傍受したものではなく、演習のために作った記録です。python3(cryptography)と openssl が使えます。

基礎スキルLevel 4★★★★☆

カスタムツール開発 - Webディレクトリスキャナー

ライブWebサイトを走査せず、ローカル生成された artifacts/scanner/directory-report.ndjson を解析してください。スキャナーは同じサイトを複数回(run)走査しています。最新の run で、path がちょうど /secret_admin/backup、status が 200 の記録だけが本物です。その body_b64 は gzip で圧縮した応答本文を Base64 にしたもので、戻すとフラグになります。

基礎スキルLevel 4★★★★☆

ネットワークトンネリング - SSH ポートフォワーディング

単一コンテナ内でSSHローカルポートフォワーディングを練習します。SSHは127.0.0.1:22、内部サービスは/run/tunnel/database.sockにあります。内部ソケットはローカルのプレイヤーから直接アクセスできません。転送専用ユーザーtunnel(パスワードpassword123)でSSH認証し、127.0.0.1:8888へ転送して応答を取得してください。外部ホストや実データベースは使用しません。

フォレンジック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★★★★☆

暗号化通信 - GPG公開鍵暗号

GnuPG の復号を練習します。`/challenge/keys/` にある秘密鍵をすべてインポートし、`/challenge/messages/` の各暗号文を復号してください。フラグを含む平文になるのは、本物の受信者鍵で暗号化された1通だけです。他は無害な業務連絡のおとりで、宛先鍵IDの突合でも一意に絞れます。本物の GnuPG が非特権環境で動作します。

フォレンジック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★★★★☆

脆弱性スキャン - Nmap NSE 高度活用

社内サブネット `10.66.13.0/24` に `nmap -sV -sC --script vuln` を実行した結果が `/challenge/scan_results/nmap_scan.nmap`(通常形式)と `nmap_scan.gnmap`(grep 形式)にあります。ライブのターゲットは無く、レポートを読み解く問題です。NSE の vuln スクリプトの判定ブロックにはどれも `Finding ID: KINOCO{...}` が付いています。フラグは、`IDs:` が CVE-2020-1938(AJP の Ghostcat)で、かつ `State: VULNERABLE (Exploitable)` の判定ブロックの Finding ID です(1件だけ)。Ghostcat の LIKELY VULNERABLE / NOT VULNERABLE や、ほかの CVE の VULNERABLE (Exploitable) はおとりです。

フォレンジック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 4★★★★☆

静的解析 - コード脆弱性スキャン

社内メモアプリのPythonソースコードが `/challenge/src/` にあります。前回の静的解析で指摘された9行には、行末に `# finding: KINOCO{...}` という指摘IDが付いていますが、ほとんどは偽陽性です。次の3条件をすべて満たす1行だけが本物のOSコマンドインジェクションで、その行の指摘IDがフラグです。(1) シェル経由で実行している(`subprocess.run(..., shell=True)` か `os.system(...)`)。(2) コマンド文字列に、HTTPリクエストから取った値(`request.args` / `form` / `json` / `values`)が入っている。(3) その値が途中で無害化・検証されていない(`shlex.quote`、許可リストでの確認、`int()` 変換などが無い)。指摘IDはどれも同じ形なので、grep で拾うだけでは決まりません。

基礎スキルLevel 5★★★★★

APTシミュレーション - 完全侵入シナリオ

これは攻撃を実行する問題ではなく、発生済みインシデントのログを読むブルーチーム演習です。EDR・認証・ネットワーク機器から集約した統合タイムライン `/challenge/timeline.log` から、通常業務に紛れたAPTの各段階(初期侵入→権限昇格→横展開→データ持ち出し)を再構築してください。`tag=` は SIEM のルールに当たった印で、業務の操作にも付いています。大容量の外部送信(`event=OUTBOUND-TRANSFER`)にはすべて DLP の案件ID `dlp_case=KINOCO{...}` が付いており、フラグは次の2条件を両方満たす1件の案件IDです。(1) 送信先が、初期侵入で PowerShell が接続した外部アドレス(C2)である。(2) 送信元が、攻撃者が横展開で最後に到達したホストである。

フォレンジック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★★★★★

Bug Bounty実践 - 脆弱性発見マスター

ライブアプリケーションを診断せず、固定の artifacts/bug-bounty/triage-report.json を解析してください。連鎖した脆弱性の報告は status が validated-chain で、chain に構成する finding の id が順番に並んでいます。構成する finding がすべて validated の連鎖だけが、認められた本物です。その chain の順に各 finding の proof_fragment をつなぎ、Base64 デコードするとフラグになります。

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

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

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

基礎スキルLevel 5★★★★★

Red Teaming - カスタムC2フレームワーク

C2サーバー、agent、socket通信、コマンド実行は起動しません。ローカルの artifacts/c2/beacon-transcript.log を解析してください。beacon は1つのメッセージを複数の断片(frag=i/n)に分け、順不同で送っています。beacon=alpha かつ type=analysis-result のメッセージの断片を集め、frag の番号順に data をつないで Base64 デコードするとフラグになります。名前が似た beacon や type のメッセージはおとりです。