こんにちは! 👋 デジタルフォレンジックやCTF(Capture The Flag)の世界では、情報を隠蔽するテクニック「ステガノグラフィー」がしばしば登場します。その中でも、音声ファイルにデータを隠すツールとして「DeepSound」が知られています。
DeepSoundは、WAVE、FLAC、WMA Lossless、MP3(Windows Vista以降)などのオーディオファイルに、任意のファイルを埋め込むことができるソフトウェアです。埋め込まれたファイルは、AES-256で暗号化することも可能です。これにより、一見すると普通の音楽ファイルのように見えても、実は重要な情報が隠されている、という状況が生まれます。
しかし、もしDeepSoundで隠されたファイルのパスワードがわからなくなってしまったら?あるいは、セキュリティ調査やCTFの問題で、DeepSoundで保護されたファイルに遭遇したら?そんな時に役立つのが、今回ご紹介するdeepsound2john
です。
deepsound2john
は、強力なパスワードクラッキングツールであるJohn the Ripper(JtR)と連携し、DeepSoundでパスワード保護された音声ファイルからパスワードハッシュを抽出し、そのパスワードを解析(クラック)するためのツールです。
この記事では、deepsound2john
の基本的な使い方から、実際の使用例まで、詳しく解説していきます。これであなたもDeepSoundファイルのパスワード解析に挑戦できるようになるはずです!💪
DeepSoundとは? 🤔
deepsound2john
を理解する前に、まずDeepSoundについてもう少し詳しく見てみましょう。
DeepSoundは、jpinsoft.net(現在はGitHubにリポジトリが移行)によって開発された、Windows向けのフリーウェアです。主な機能は以下の通りです。
- WAVE, FLAC, WMA, APE形式の音声ファイルに任意のファイルを隠蔽(ステガノグラフィー)
- 隠蔽するファイルをAES-256で暗号化するオプション
- 音声ファイルやオーディオCDトラックから隠蔽されたファイルを抽出
- 音声ファイル形式の変換機能 (FLAC, MP3, WMA, WAV, APE, CDA 間の変換)
- 音声ファイルへの著作権情報の埋め込み用途
DeepSoundでファイルを埋め込む際、パスワードを設定してAES-256暗号化を有効にすることができます。これにより、パスワードを知らない第三者は、たとえDeepSoundツールを持っていても、隠されたファイルを容易には抽出できません。
埋め込めるファイルのサイズは、選択する音声品質(Low, Normal, High)によって制限されます。例えば、”Normal”品質では、キャリアとなる音声ファイルのサイズの約1/4までのファイルを埋め込むことができます。
DeepSound自体は2014年頃にバージョン2.0が登場し、その後も開発が続けられ、2021年には.NET Framework 4.8への対応やUnicodeパスワード対応などを含むバージョン2.1がリリースされています。
deepsound2johnの役割と前提条件 🛠️
deepsound2john
は、John the Ripper (JtR) のツール群の一部として提供されているPythonスクリプトです。その主な役割は、DeepSoundで作成され、パスワードで保護された音声ファイル(特にWAVE形式が対象)を解析し、JtRが理解できる形式のパスワードハッシュを抽出することです。
抽出されたハッシュがあれば、あとはJtRの強力なパスワードクラッキング機能を使って、元のパスワードを特定することができます。
deepsound2john
を使用するための前提条件は以下の通りです。
- John the Ripper (JtR) のインストール:
deepsound2john
はJtRの一部であるため、JtRがインストールされている必要があります。多くのLinuxディストリビューション(特にKali Linuxなどのペネトレーションテスト用)ではデフォルトで含まれているか、パッケージマネージャで簡単にインストールできます。WindowsやmacOS用のビルドも存在します。JtRにはいくつかのバージョンがありますが、「bleeding-jumbo」ブランチ(開発版)に含まれていることが多いです。 John the Ripper 公式サイト - Python 3 環境:
deepsound2john
はPython 3で書かれたスクリプトです。Python 3インタプリタが利用可能である必要があります。 - 解析対象の音声ファイル: DeepSoundで作成された、パスワード保護されている可能性のある音声ファイルが必要です。
deepsound2john
は主にWAVE (.wav) 形式のファイルを対象としていますが、他の形式(例: MP3)からWAVE形式に変換したファイルでも動作することがあります。(例:ffmpeg -i input.mp3 output.wav
)
これらの準備が整っていれば、deepsound2john
を使ってパスワード解析を進めることができます。
deepsound2john の基本的な使い方 🚀
deepsound2john
の使い方は非常にシンプルです。基本的なコマンド形式は以下のようになります。
python3 /path/to/deepsound2john.py [対象の音声ファイル.wav] > [出力するハッシュファイル名.txt]
または、JtRの実行ディレクトリ (run
ディレクトリなど) にパスが通っていれば、より簡単に実行できる場合もあります。
deepsound2john [対象の音声ファイル.wav] > [出力するハッシュファイル名.txt]
ここで、
/path/to/deepsound2john.py
は、deepsound2john.py
スクリプトが存在する実際のパスに置き換えてください。通常、John the Ripperのインストールディレクトリ内のrun
ディレクトリにあります。[対象の音声ファイル.wav]
には、解析したいDeepSoundのWAVEファイルを指定します。>
はリダイレクト演算子で、コマンドの標準出力をファイルに書き込みます。[出力するハッシュファイル名.txt]
には、抽出したハッシュを保存するファイル名を指定します。任意の名前で構いません。
実行例
例えば、secret.wav
というファイルからハッシュを抽出し、hash.txt
というファイルに保存したい場合は、以下のように実行します。
deepsound2john secret.wav > hash.txt
スクリプトが正常に動作し、ファイル内にDeepSoundのデータ構造(マジックヘッダーDSCF
など)とパスワードハッシュが見つかれば、hash.txt
ファイルに以下のような形式のハッシュが出力されます。
secret.wav:$dynamic_1529$ea007a659e8e59ba2cb9d8fb5119413b718c5517
この出力形式は、John the Ripperが認識できるフォーマットになっています。
secret.wav
: 元のファイル名(情報として含まれる)$dynamic_1529$
: John the Ripperが使用するフォーマット識別子。これはDeepSoundのハッシュ(内部的にはパスワードを特定の形式に変換したもののSHA-1ハッシュ)であることを示します。ea007a659e8e59ba2cb9d8fb5119413b718c5517
: 実際のパスワードハッシュ値(16進数表記)
deepsound2john
スクリプトが見つからない場合は、JtRのインストールディレクトリを探してみてください。多くの場合、/usr/share/john/
や /opt/john/
などの下に run
ディレクトリがあります。
エラーと対処法
もし対象ファイルがDeepSoundファイルでなかったり、破損していたりする場合、deepsound2john
はエラーメッセージを出力するか、何も出力しないことがあります。
# 例: DeepSoundファイルではない場合
$ deepsound2john not_a_deepsound_file.wav > hash.txt
not_a_deepsound_file.wav does not appear to be a DeepSound file
この場合は、ファイルが本当にDeepSoundで作成されたものか、またはファイル形式(WAVEであるかなど)を確認してください。他の形式からWAVEに変換した場合は、変換が正しく行われたかも確認しましょう。
John the Ripperでハッシュをクラックする 💥
deepsound2john
でパスワードハッシュを抽出したら、いよいよJohn the Ripper (JtR) の出番です。JtRは様々なモード(単語リスト攻撃、ブルートフォース攻撃など)を駆使して、ハッシュから元のパスワードを特定しようと試みます。
基本的な使い方は以下の通りです。
john [ハッシュファイル名.txt]
例えば、先ほど作成した hash.txt
を使ってクラックを開始するには、次のように実行します。
john hash.txt
JtRは自動的にハッシュの形式(この場合は dynamic_1529
)を検出し、クラックプロセスを開始します。デフォルトでは、いくつかのクラッキングモード(Single Crack, Wordlist Mode, Incremental Mode)を順番に試します。
クラックが成功すると、パスワードが画面に表示されます。
$ john hash.txt
Using default input encoding: UTF-8
Loaded 1 password hash (dynamic_1529 [SHA1 128/128 AVX 4x])
Cost 1 (iteration count) is 1 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
ragerocks123 (secret.wav) <-- 発見されたパスワード!
1g 0:00:00:05 DONE (2025-03-31 07:27) 0.1886g/s 1234Kp/s 1234Kc/s 1234KC/s ragerocks..password123
Use the "--show" option to display all of the cracked passwords reliably
Session completed
上記の例では、パスワード ragerocks123
が発見されました。
単語リスト(Wordlist)を使った攻撃
より効率的にクラックを行うために、パスワードに使われていそうな単語を集めたリスト(Wordlist)を指定することができます。有名なリストとして rockyou.txt
などがあります。
john --wordlist=/path/to/wordlist.txt hash.txt
例として、Kali Linuxに含まれる rockyou.txt
を使う場合は、以下のようになります。(パスは環境によって異なる場合があります)
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
単語リスト攻撃は、辞書に載っている単語や、よく使われるパスワードが含まれている場合に非常に効果的です。
クラック結果の表示
一度クラックに成功したパスワードは、JtRのポットファイル(john.pot
)に保存されます。後でクラック済みのパスワードを確認したい場合は、--show
オプションを使用します。
john --show hash.txt
これにより、hash.txt
に含まれるハッシュに対応する、既にクラックされたパスワードが表示されます。
$ john --show hash.txt
secret.wav:ragerocks123
1 password hash cracked, 0 left
実践的な例:CTFシナリオ 🚩
deepsound2john
は、特にCTF(Capture The Flag)競技のフォレンジック問題やステガノグラフィー問題で役立つことがあります。ここでは、架空のCTF問題を例に、deepsound2john
とJohn the Ripperを使った解析フローを見てみましょう。
シナリオ
CTFの問題として、mystery_sound.wav
という音声ファイルが与えられました。ファイルの説明には「重要な情報が隠されているが、パスワードが必要だ」と書かれています。
ステップ1: ファイル形式の確認とツールの特定
まず、ファイルの種類を確認します。
file mystery_sound.wav
出力が WAVE audio … のようになれば、WAVEファイルであることが確認できます。
次に、音声ファイルにデータが隠されている可能性を考え、ステガノグラフィーに関連するツールを疑います。問題文やファイル名から「DeepSound」が使われている可能性が高いと推測します。(実際のCTFでは、strings
コマンドやバイナリエディタでファイル内容を確認し、”DSCF”のようなDeepSound特有の文字列を探すこともあります。)
ステップ2: deepsound2johnでハッシュを抽出
DeepSoundが使われていると仮定し、deepsound2john
を使ってパスワードハッシュの抽出を試みます。
deepsound2john mystery_sound.wav > mystery_hash.txt
mystery_hash.txt
に以下のようなハッシュが出力されたとします。
mystery_sound.wav:$dynamic_1529$a3eb15172cc7e6090a2eb32e6dc8c3bd30c39a02
ステップ3: John the Ripperでパスワードをクラック
抽出したハッシュファイルを使って、John the Ripperでパスワードクラックを開始します。まずはデフォルトモードで試してみます。
john mystery_hash.txt
しばらく待ってもパスワードが見つからない場合は、強力な単語リストを使ってみます。
john --wordlist=/usr/share/wordlists/rockyou.txt mystery_hash.txt
運が良ければ、このステップでパスワードが見つかります。例えば、ctfpassword
というパスワードが発見されたとしましょう。
ctfpassword (mystery_sound.wav)
ステップ4: DeepSoundでファイルを抽出
クラックしたパスワード ctfpassword
を使って、DeepSoundツール(Windows環境などが必要)で mystery_sound.wav
を開きます。パスワードを入力すると、隠されていたファイル(例えば flag.txt
)が表示され、抽出できるようになります。
抽出した flag.txt
の中身を確認し、CTFのフラグを獲得します。 🎉
このように、deepsound2john
は、DeepSoundで保護された音声ファイルに対するパスワード解析のプロセスにおいて、非常に重要な役割を果たします。
まとめとおわりに
今回は、DeepSoundでパスワード保護された音声ファイルからパスワードハッシュを抽出し、John the Ripperで解析するためのツール deepsound2john
の使い方について詳しく解説しました。
deepsound2john
は、以下の手順で使用します。
- John the Ripper と Python 3 を準備する。
deepsound2john [対象ファイル.wav] > [ハッシュファイル.txt]
コマンドでハッシュを抽出する。john [ハッシュファイル.txt]
コマンド(必要に応じて--wordlist
オプションなどを追加)でパスワードをクラックする。- クラックしたパスワードを使って、DeepSoundツールで隠されたファイルを抽出する。
このツールは、特にCTF競技やデジタルフォレンジック調査において、DeepSoundによるステガノグラフィーが用いられている場合に非常に有効です。音声ファイルに隠された秘密を解き明かすための強力な武器となるでしょう。
ただし、パスワードクラッキングツールの使用には注意が必要です。必ず法的に許可された範囲で、倫理的な目的にのみ使用してください。他人のファイルやシステムのパスワードを無断で解析することは違法行為となります。
この記事が、deepsound2john
を理解し、活用するための一助となれば幸いです。🕵️♀️🎶
参考情報
- John the Ripper 公式サイト: https://www.openwall.com/john/
- deepsound2john.py スクリプト (John the Ripper GitHubリポジトリ内): https://github.com/openwall/john/blob/bleeding-jumbo/run/deepsound2john.py
- DeepSound 公式リポジトリ (GitHub): https://github.com/Jpinsoft/DeepSound
- 窓の杜によるDeepSound紹介記事 (2014年): https://forest.watch.impress.co.jp/docs/review/654207.html
コメント