
Stegcrackは、Steghideの脆弱性(具体的にはCVE-2021-27211)を悪用するためのオープンソースプログラムです。
Stegcrackは、指定されたファイルにSteghideで隠されたデータが含まれているかどうかを検出し、パスワードなしで隠されたデータを完全に抽出できる場合もあります。
このリポジトリをクローンする
git clone https://github.com/b4shfire/stegcrack
ソースディレクトリに移動する
cd stegcrack/src
プログラムをコンパイルする
clang++ main.cc utils.cc file_handling.cc ui.cc Extractor.cc -ljpeg -pthread -lz -std=c++11 -O2 -o ../stegcrack
ソースディレクトリから移動する
cd ..
./stegcrack <filepath> <number of threads> (default: 4)
./stegcrack flowers.jpg
./stegcrack ../images/rocket.jpg 8
Steghideは、カバーファイル内にデータを隠すために、最初に提供されたパスワードを32ビットのシードに変換します。
シードは以下のように作成されます:
このシードは、データが隠されるファイル内の位置のシーケンスを生成するために使用されます。
この方法の欠点は、パスワードがどれほど複雑でも、2^32の可能なシードのうちの1つを生成しなければならないことです。つまり、シード変数をブルートフォースすることでパスワードを完全にバイパスできるということです。
シードが生成されると、Steghideは最初にメタデータ(マジックバイト、Steghideバージョン、データサイズ...)をカバーファイルに埋め込みます。
このメタデータを使用して、各シードがデータを隠すために使用されたかどうかを判断できます。例えば、埋め込まれる最初の3バイトは常に0x73 0x68 0x8d(ほぼASCII文字列"shm" - StegHide Magic)です。特定のシードがこれらのバイトを生成しない場合、そのシードはデータを隠すために使用されていないため、破棄できます。これを、すべてのシードが破棄されるか、有効なシードが見つかるまで続けます。有効なシードは隠されたデータを示します。
デフォルトでは、Steghideは埋め込み前に完全なパスワードを使用してデータを暗号化します。つまり、ほとんどの場合、Stegcrackはこの暗号化されたデータのみを抽出できます。ただし、埋め込み中に暗号化が無効になっていた場合、Stegcrackは隠されたデータを平文で完全に抽出できます。