チャレンジ一覧

絞り込みを解除

82 問 (3 / 4 ページ)

LinuxLevel 3★★★☆☆

Linux-strace. システムコールを追ってファイルを暴け

標準出力にもファイルにも何も残さないバイナリが用意されています。このプログラムは隠しファイルから鍵を読み、メモリ上でフラグを復元して /dev/null へ書き込みます。straceでシステムコールを追跡し、どの引数にフラグが現れるかを突き止めてください。

LinuxLevel 3★★★☆☆

Linux-競合状態. TOCTOUの隙を突いてroot権限のファイルを奪え

rootが定期的に実行するクリーンアップスクリプトには、チェックと処理の間に隙(TOCTOU)があります。シンボリックリンクをうまく使ってこの隙を悪用してみてください。

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

NTFS $MFTから削除ファイルの痕跡を探せ

Windows 端末 `KINOCO-WS07` の `$MFT` をレコード単位のテキストに書き出した `/challenge/mft_records.txt`(先頭にクラスタサイズとダンプの開始 LCN があります)と、ボリューム C: のクラスタの生データ `/challenge/cluster_dump.bin` を渡します。 ユーザー yuki が削除した `secret_note.txt.gz` は非常駐(non-resident)で、断片に分かれてディスクに残っています。MFT の `$DATA` に残るデータラン(RunList)の生バイトを読み解いて断片を集め、元のファイルを復元して、フラグを取り出してください。常駐データに見える文字列は、答えとは限りません。 使えるツール: python3, xxd, dd, gzip, grep, awk

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

イベントログからブルートフォース攻撃を検出せよ

サーバー `kinoco-srv01` の sshd 認証ログ `/challenge/auth.log` を解析し、ブルートフォース攻撃を成功させた攻撃者のセッションを特定してください。 このサーバーはハニーポットで、セッションを開くたびに PAM モジュールがカナリアトークンを発行し、次の形でマスクして記録します。 sshd[PID]: pam_canary(sshd:session): token issued for USER: <hex> hex = トークン(ASCII 文字列)の各バイトを、SHA-256("<PID>:<送信元ポート>") のダイジェスト 32 バイトを繰り返したものと XOR し、16進にしたもの PID と送信元ポートは、そのセッションの `Accepted password` 行の値です。全セッションが同じ形のトークンを持つので、どれが攻撃者のものかは、ログイン失敗の様子から決める必要があります。フラグは、攻撃者のセッションのトークンです。 使えるツール: python3, grep, awk

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

メモリから不審なネットワーク接続を見つけよ

侵害されたホスト `kinoco-app03` のメモリイメージから、ソケット一覧 `/challenge/netstat_dump.txt` と、ESTABLISHED のソケットを持つプロセスごとのヒープ領域 `/challenge/heap_carve/pid_<PID>.bin` を復元しました。 カーネルスレッドに偽装した不審なプロセス(インプラント)が外部の C2 サーバーと通信していて、ビーコン設定(フラグを含む)をヒープに、平文ではない形で隠し持っています。ソケット一覧からそのプロセスを特定し、ヒープから設定を取り出してください。ほかのヒープには、フラグに似たおとりの文字列が混ざっています。 使えるツール: python3, grep, strings, xxd, awk

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

メモリから実行コマンドを復元せよ

メモリ文字列の記録 `memdump.txt` を解析し、実行されたコマンド履歴を復元してください。Base64 文字列をデコードし、bash へ渡している不審なコマンドの引数からフラグを取得します。

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

削除されたSQLiteレコードを復元せよ

社内チャット「kinoco-msg」の SQLite データベース `/challenge/app.db` を渡します。「機密メッセージ」として送られた本文は、次の形で保存されます。 body = "enc:v1:" + hex(本文 XOR 鍵ストリーム) 鍵ストリーム = SHA-256("<salt>|<sender>|<sent_at>|0") || SHA-256("<salt>|<sender>|<sent_at>|1") || ... salt = settings テーブルの secure_msg_salt(sender と sent_at は、そのメッセージの列の値) 管理者がワンタイムのアカウントリカバリートークンを機密メッセージで送り、すぐに削除しました。SELECT では見えない削除済みのレコードを復元し、本文を復号してトークン(フラグ)を取り出してください。 使えるツール: sqlite3, python3, xxd, strings, grep

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

多重に圧縮されたファイルを解凍せよ

`/challenge/artifact.xz` は、攻撃者が持ち出そうとしていたファイルで、gzip・bzip2・xz・zip・tar が何重にも重ねてあります。形式を1層ずつ見極めながら剥がし、最も深いところにある `flag.txt` からフラグを取り出してください。 途中のアーカイブには、README・ノイズ・偽の `flag.txt` などのおとりが一緒に入っている階層があります。ファイルの拡張子はあてになりません。 使えるツール: file, gzip, bzip2, xz, zip/unzip, tar, python3

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

暗号化されたディスクを復号せよ

`/challenge/secret_disk.img` は本物の LUKS2 コンテナで、データ領域にはバックアップ(tar アーカイブ)が入っています。パスフレーズは弱いもので、`/challenge/wordlist.txt` のどれかです。 このターミナルでは device-mapper が使えず、`cryptsetup open` でボリュームを開けません。キースロットから取り出したボリュームキーで、データ領域を自分で復号し、中のファイルからフラグを見つけてください。 使えるツール: cryptsetup, openssl, python3, dd, tar

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

音声ファイルに隠されたデータ

`hidden.wav` にはオンオフ変調(OOK)で符号化されたメッセージが隠されています。トーンのオン/オフをビット化してデコードし、フラグを取得してください。 参照用のデコーダは付いていません。標準ライブラリの `wave` モジュールなどで、自分で信号を読み解きます。 提供ファイル: hidden.wav

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

Androidアプリから秘密鍵を抽出せよ

安全なZIP形式APK fixture(evidence/app.apk)を展開し、Androidリソースに記録された暗号化済みAPIシークレットを解析してください。開発者がビルドに同梱してしまった秘密鍵のうち、どれがそのシークレットに対応するかを見極めて復号します。実端末や実アプリは使用しません。

フォレンジック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` の値を答えてください。ほかの秘密ファイルや、削除前後の別の値はおとりです。

LinuxLevel 4★★★★☆

Linux-カーネルモジュール. 脆弱なドライバでroot権限を得よ

このチャレンジは、脆弱なキャラクタデバイスドライバを安全なユーザー空間シミュレーションとして解析します。実際のカーネルモジュールはロードされません。root デーモンがドライバを /run/vulnerable.sock として公開し、あなたは非特権ユーザー challenger(uid 1000)として接続します。提供されたドライバソース vulnerable.c を読み、read/write の境界不備を突いて自分の資格情報を uid 0 に書き換え、GETFLAG でフラグを取得してください。

LinuxLevel 4★★★★☆

Linux-バッファオーバーフロー. gets()の脆弱性を突け

SUIDが付与された脆弱なCバイナリが用意されています。保護機構が無効化されたこのプログラムのバッファオーバーフローを突いて、隠された関数へ制御を移してください。

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

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

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

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

破損した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を記録済みダイジェストと照合して復旧キーを特定し、そのキーで保護ペイロードを復号してください。