CTF MISCカテゴリにおける解析手法の概要
CTF(Capture The Flag)競技の MISC(Miscellaneous)カテゴリーでは、多様な形式のデータからフラグを検出する能力が問われます。ここでは、ファイル構造の解析、画像やアーカイブへの情報隠蔽技術、およびネットワークトラフィックからのデータ抽出に関する主要なアプローチを解説します。
1. ファイルフォーマットの特定と修復
拡張子の欠落やヘッダー情報の破損は、ファイルの正常な開封を妨げる一般的な問題です。これに対し、マジックナンバー(ファイル署名)の確認による型判定やバイナリ編集を用いた修復が必要です。
ヘッダー解析と修復
ファイルの先頭バイトを確認することで、正しい形式を特定できます。
- Linux環境:
fileコマンドを使用し、内部構造を判別します。 - Windows環境: WinHex や 010 Editor などのエディタで十六進表示を開き、先頭のシグネチャパターン(例:JPEG は FFD8、PNG は 89 50 4E 47)と照合します。
ヘッダーが破損している場合、既知の正しいファイルテンプレートをコピーして先頭に付与することで復元可能です。
ファイルの分割と結合
複数のファイルが連結されているケースでは、専用のツールで分離を行う必要があります。
# Linuxでの自動抽出
binwalk -e sample_image.jpg
# または最前線データを抜粋する場合
foremost -i mixed_file -o output_dir
# ddコマンドによる手動オフセット指定
dd if=corrupted_input of=recovered_output bs=1 skip=[開始位置]
Windows では、WinHex で該当領域を選択し「コピー」操作を行うことで、一部のみを新しいファイルとして保存できます。
ファイル内容の探索
テキストエディタや HEX エディタ(Notepad++ の HEX プラグイン等)を用いて、ファイル末尾や中間部分に埋め込まれたキーワード(FLAG, KEY など)を直接検索します。
2. 画像ステガノグラフィー技術
画像データには、視覚的に確認できない形で情報が書き込まれることが多いです。
- Exif データ: リファレンス情報としてカメラ設定や注釈が格納されるため、プロパティ詳細や exiftool を確認します。
- LSB(最低有効ビット)置換: ピクセルデータの最下位ビットを利用した方式です。stegsolve や python スクリプトを用いて各平面のビットパターンを可視化し、隠蔽された文字列を見つけます。
- 画像修復: PNG 形式において CRC チェックサム不整合により表示されない場合、TweakPNG 等のツールでチャンクのチェックサム値を補正するか、010 Editor で CRC 値を手動更新する必要があります。
- ツール活用:
zsteg: PNG/BMP の LSB 解析を自動化します。Stegsolve: 複数画像間の差分比較や色成分ごとの解析を行います。Jphide / Outguess / F5: JPEG 形式特有の圧縮アルゴリズムを利用した隠蔽を検知・解除するための専門ツールです。
QR コード解析
QR コードの一部が欠損している場合は、画像編集ソフトで誤った部分を修正(反転や位置合わせ)し、再度読み取れる状態に戻すことが必要になる場合があります。
3. アーカイブファイルの暗号解析
圧縮ファイルに対する攻撃技法として、以下のケースがあります。
偽暗号化(Pseudo Encryption)
ファイルヘッダ内のフラグを変更することで、実際には暗号化されていない状態に見えるように偽装されたケースです。ZIP ではファイルヘッダの特定のバイト(10 文字目付近)が '00' に設定されていれば復号不要です。RAR の場合も同様にヘッダの属性フラグを調整することで回避可能です。
ブルートフォース攻撃
パスワードが短い場合に適用されます。ARCHPR などのツールを使用し、辞書ベースまたは全件総当たりで試行錯誤を行います。マスク機能を利用し、一部のパスワード特徴が分かっている場合は攻撃範囲を絞り込むことで効率を向上できます。
既知平文攻撃
暗号化された ZIP ファイル内の一部ファイルの元のデータ(平文)を入手できている場合、その情報を基に暗号鍵を推定し、他のファイルを解読します。このためには、対応する未圧縮ファイルが存在し、CRC 値と圧縮アルゴリズムが一致する必要があります。
4. ネットワークトラフィックのフォレンジクス
PCAP 形式のキャプチャファイルからは、通信履歴から重要なデータを引き出す作業が行われます。
Wiresharkによるフィルタリング
目的のプロトコルやアドレスに特化したビューア設定が重要です。
# IP アドレス指定
ip.src == 192.168.1.1 or ip.dst == 192.168.1.1
# ポート番号による絞り込み
tcp.port eq 80 or tcp.srcport == 443
# プロトコル種別
http or dns or icmp
# パケット長による特定
frame.len == 60
HTTP ストリームを再構築すると、アップロードされたファイルや Base64 エンコードされたペイロードを発見できる可能性があります。また、"flag" や "key" といった文字列を含む TCP セグメントを直接検索することも有効です。
無線およびUSBトラフィック
WiFi クライアント接続データ(CAP ファイル)に対しては、handshake パケットを取得後、aircrack-ng ツールを用いた辞書攻撃を試みます。
aircrack-ng -w dictionary.txt handshake.cap
USB キャプチャデータにおいては、キーボード入力やマウス座標移動のイベントが記録されています。USB HID データのパケットサイズ(通常 64 バイト以下)と内容(Leftover Capture Data)を解析することで、入力されたキーストロークやカーソルの軌跡を再現することが可能です。
HTTPS トラフィックについては、暗号化されているため中身が見えませんが、サーバー証明書の手続きや、RSA 鍵ペアが取得可能な場合に復号化を試みるなどのアプローチが取られます。