この記事はCTF Advent Calendar 2022の14日目の記事です。
昨日はCTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやんでした。殴り書きですみません。
初めに
本記事では、CTFでステガノグラフィ(steganography)と言われる分野についてまとめる。
ステガノグラフィは知っているだけで解けるような問題も多くあるので、備忘も兼ねてまとめておく。
注意事項
- ステガノグラフィ問題はフォレンジックというカテゴリに入っている可能性もあります -> CTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやん
- 本知識をそのまま実世界で使用するのは推奨しません。ちゃんと勉強してください(自戒)
CTFにおけるステガノグラフィ問題
Wikiを参照すると、「情報隠蔽技術の一つであり、情報を他の情報に埋め込む技術」とある。
CTFにおいては、隠蔽される情報はフラグか問題を進展させるものであり、埋め込み先は多彩である。
CpawCTF-Steganography - Speaker Deck
↑の記事が最強。とても分かりやすいし、初学者が読むのに最適。説明も丁寧。
初学者はこちらのスライドを一通り読んでから戻ってくることを勧めます。(戻ってくる必要もないかも)
ステガノグラフィに対して他の問題と大きく異なるのが、競技者不利の状況である。
他のジャンルの問題は机上におおよそ解くために必要な情報は揃っているが、
ステガノグラフィは「どういった情報」が「どういった方法」で埋め込まれているかを推測以外にほとんど知る術がない。
…いや、ちょっと強い表現かも。(推測以外にもエントロピーを確認したりとか、暗号学的なアプローチから推測は可能かもしれません。)
さておき、こういった状況があるので問題文にヒントを入れたりすることで多少なりともロジカルに解ける可能性を残していたりする。
そういった情報やググって出てきた手法、試行錯誤によって埋め込まれた情報を取り出してくる。
解き方/初学者に向けて
ステガノグラフィは全部アドホックな解法なので何とも言えないが、今までやってきた感じ、傾向が無くもないので気が付いた所をつらつらと書いていく。
- まず、File Carvingやstringsなど、どんなファイルでも汎用的に行うチェックはあるので、それを実施しよう
- 各ファイルフォーマットに対して使えるステガノグラフィ手法が異なるので、一通り試す
- 適当に調べて出てきた手法を試す。Writeupで見つけたんだけど試さなかったが死ぬほど心当たりある
- 冷静になる。難しく考えすぎないこと
- 手元にある方法でダメだったら、もうやりようはないのでググって新しいステガノグラフィ手法を探しにいくか、あきらめて寝る
- 比較的グループ化できる隠蔽方針
- LSB, Least Significant Bit
- データの最下位のビットに01で情報を埋め込んでいく手法。特に画像では画素情報の最下位ビットが変化しても見た目上は変化がないので見た目では自然に見える。ただ、最下位ビットだけを抽出して見てみると、元の画像のエントロピーとは異なる感じに見えてくるので怪しいみたいなことがあったりする(説明下手)
- 2つの全く同じように見えるファイルに対する差分を利用
- 元画像を何かしらの方法で探してきて差分比較するようなパターンも見たことある
- 特殊なエンコーディング
- この辺りは自分であれこれ考えてもしょうがないので、ステガノグラフィの各種ソルバーを順番に回していって成功するまで頑張るしかない
- フォーマットの構造上余っている部分にデータを置く
- File Carvingで拾ってこれる可能性もあるが、こういった可能性もある。ややフォレンジック問に近いかもしれない
- LSB, Least Significant Bit
サブジャンル
各サブジャンルについて、キーワード形式でまとめていきます。 学習の参考にしてください。
ファイルに対して汎用的に行える操作
とりあえずバイナリファイルに対してできることをあれこれやってみるのがいい。 フォレンジックでやるようなこともやってみると思わぬ情報が手に入るかも。
- file
- 拡張子が偽装されている可能性もあるので、とりあえずfileコマンドでファイルの種類を特定する
- File Carving
- とあるファイルに対して別のファイルが素直に埋め込まれている場合は、File Carvingを使って埋め込みファイルを取り出すことができるかもしれない。 -> forensicのページ
- バイナリエディタやテキストエディタで眺める
- XOR暗号化されてる箇所あるかも
テキストファイルに対するステガノグラフィ
- 一見何もなさそうに見えてもバイナリエディタで開くと色々見えてくるかも
- Stegsnow - bi0s wiki
stegsnow -C [encrypted filepath]
で復号- パスワードがあるときは
stegsnow -C -p '[password]' [encrypted filepath]
- これだと駄目で、Whitespace Language - Online Translator/Interpreterなら行けた時があった
- Trithemius Ave Maria Cipher - Online Decoder, Encoder
- ほんとにいろいろなわけわからんデコーダーがある
- ZWSP
- CTFtime.org / CSAW CTF Qualification Round 2020 / widthless / Writeup
- ここみたいにzwsp_stegを使うのがいい。
- More Than Meets the Eye - CTFs
- CTFtime.org / CSAW CTF Qualification Round 2020 / widthless / Writeup
- CTFtime.org / Engineer CTF / Plain Sight / Writeup
画像ファイルに対するステガノグラフィ
- 画像stegの決定版みたいなサイトあった Aperi'Solve
- tineyeなどで画像検索してオリジナルを持ってきて、比較してみるのもいいかも
- 汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」
- オールインワンパッケージ。かなり使える
- ステガノグラフィーの解析について
- マジで何でもできるな…
- StegOnline
- とりあえずこれに突っ込む
- 画像を読み込んで
Browse Bit Planes
を眺めてみる。元画像からとても乖離しているもの(白色乱数みたいな)は怪しいBlue 0
でそうなったら、blueの0th channelをbyteで抜き出してみる
- bit planeからバイナリファイルを抜き出している例(まあ、どうやってやるかは書いてないけど)
- gif動画でもいける?(未検証)
- apng
- apngdisを使ってpngファイルに変換する
apngdis ugo.apng
- apngを細かく解析して、埋め込まれたフラグを探している。この問題では画像間の時間に情報が埋め込まれていた
- apngdisを使ってpngファイルに変換する
- png
- jpeg
- gif
- gif動画を分解する
- LSB: 各RGB値の最上位ビット(LSB)にデータを埋め込む方法
steghide extract -sf [画像]
steghide extract -sf [画像] -p [パスワード] -xf [出力先]
- パスワードを辞書攻撃したいとき
- RickdeJager/stegseek: Worlds fastest steghide cracker, chewing through millions of passwords per second
docker run --rm -it -v "$(pwd):/steg" rickdejager/stegseek [stegofile.jpg] [wordlist.txt]
- Digital Invisible Ink Toolkit - Home
- diit-1.5.jarを起動
- Decodeへ変更
- Get Imageで画像を入れ、アルゴリズムをセットして、Set Messageで出力先を指定したらGo
- 視覚暗号
- 視覚暗号の最近の進歩
- 視覚複合型秘密分散法(Visual Secret Sharing Scheme, VSSS)
- 重ね合わせると情報が浮かび上がってくるというもの
- #28 Lo-Tech Cipher - 診断員見習いのセキュログ
- 2つの画像で値が異なっているセルのみ色付けすると情報が浮かび上がってこないか
- このファイルの末尾に復元コードをおいておく
- ぼかしを復元する GitHub - beurtschipper/Depix: Recovers passwords from pixelized screenshots
- stegsolveという便利ツールもある
- ctf-tools/install at master · zardus/ctf-tools
- cybric-2021/The Real CTF CAPTCHA.md at main · ccirpir/cybric-2021
- 問題例。これをみると青い空~でよさそう
- stegsolve.jar
- ctf-writeups/TFCCTF/2022/Cat_wink at main · kiyotaka-akaiwa/ctf-writeups
- 2つの画像を与えて何かできるっぽい
- RGBから画像を復元するような問題
- 錯視をすると浮かび上がってくるかも
- 英語ではstereogramと言って、ソルバーもある Stereogram solver
- Magic Eye Solver / Viewer
- magic sys(錯視を使って3Dを浮かび上がらせるアレ)のソルバー
動画ファイルに対するステガノグラフィ
- 比較明合成:星が流れるような合成写真を作れる
- SiriusComp | 比較明合成&タイムラプス動画生成フリーソフト
- 使用用途
- なんか差分でほにゃららみたいな動画を見たら、使用を検討してもいい
- 差分でちりじりになってる画像群の合成にも使える
- GitHub - Tsuku43/zoomg: Restoring room images from virtual background images
- バーチャル背景適用済み動画から部屋の画像を復元するライブラリ
- OpenPuff - Steganography & Watermarking
- Jade CTF 2022 mojojojo
- これでは更にEXIFにあった文字列をパスワードとして使ってデータを抜き出していた
- https://www.youtube.com/watch?v=5Wx_IZcfXK8
- Jade CTF 2022 mojojojo
- 画像に分割できそうなフレーム量なら分割して、画像ファイルに対するステガノグラフィ適用してみる
音声ファイルに対するステガノグラフィ
- Sonic Visualiser
- 「Layer/Add spectrum」でスペクトラムを作成してみるとフラグが浮かび上がってくるかも
- スペクトラムは表示させるwebサービスもある https://academo.org/demos/spectrum-analyzer/
- ノイズが多く乗っていたら、ステガノで情報が入れ込まれているかも
- Xiao Steganography
- なんかパルス波っぽくなってたらバイナリが埋め込まれているかもしれない
- Audacity
- 無料の音声編集ソフト。これでエフェクトが色々入っているので、使うと隠された音声が聞きやすくなるかも
- Slow Scan TV
- ISSがこれのヒントかも
- 最近の解読成功例
- MMSSTV
- zipで持ってきてMMSSTV起動
- 音を流すと自動で判別して画像化してくれる
- VLPで再生してPCのマイクでそのまま拾わせて表示させた
- RxID, TxIDの下に数字のカラム選択があると思うのでそれを変えながらうまくデコードされるまで試行
- MMSSTV
- wanictf21spring-writeup/for/slow at main · wani-hackase/wanictf21spring-writeup
- 静止画を主に短波帯の電波を使って時間をかけて送る方式
- ピピーガガーみたいなwavが特徴
- colaclanth/sstv: SSTV Decoder
- Black Cat SSTVでも抜けるみたい
- writeups/ETComm.md at main · cieran/writeups · GitHub
- cddaファイル
- CDDA WAV 変換。オンライン フリー — Convertioを使えばwavを抜き出せる
- 2つの同じような音声ファイルが与えられたら差分を取れば、情報が抜き取れるかも
- iqファイル
- standard GNURadio formatとなっていて、gqrxで開ける。(復調も可能?)
- 波形を見てみると、2パターンの繰り返しになっていて01に変換してみるとフラグになっている
- モールスコードかも
- 波形を見てみる
- MorseCode Worldに投げて、周波数とか調整すると出てくるかも
- 携帯電話のキーパッドの音かも
- Digital Overdose 2021 Autumn CTF 2021 Write up :: M4ndUの餃子餃子ブログ
- dtmfというツールで解析可能
dtmf [wavfile] -i 0.1
dtmf [wavfile] -d
dtmf [wavfile] -d -i 0.1
- 数字で出てきたら https://www.istockphoto.com/jp/%E3%82%B9%E3%83%88%E3%83%83%E3%82%AF%E3%83%95%E3%82%A9%E3%83%88/%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%E3%81%AE%E3%83%86%E3%83%B3%E3%82%AD%E3%83%BC-gm925820564-254055097 とかみながら文字列に変換するとフラグになるかも
- http://www.dialabc.com/sound/detect/index.html
- oggファイルについて
- 画像のようにLSBに埋め込んでいる可能性もある
- ステガノツール
資料,未整理リンク
- Steganography - CTF checklist for beginner
- DominicBreuker/stego-toolkit: Collection of steganography tools - helps with CTF challenges
- Xiao Steganography - Free download and software reviews - CNET Download
CTFアドカレの明日は?
明日はkanonさんの「初心者がCTF始めるためにはどうすればいいのか(個人的偏見)」です。
cryptoのWriteupを多く書いていて、いつも参考にさせてもらっています!圧倒的感謝