ハッカーコンテストやCTF(Capture The Flag)ゲームでは、ステガノグラフィーのパズルに出くわすことがあります。隠されたメッセージを見つける必要のある写真が表示されます。おそらく、PNG画像のテキストを非表示にする最も簡単な方法は、カラーチャネルの1つまたはアルファチャネル(透明チャネル)にテキストを書き込むことです。などの特殊なツールがあり、このような「しおり」を識別するためにstegsolve、pngcheckとstegdetectは、時々 、出場者はGIMPやPhotoshopのフィルターを使用して手動でいじくり回すにあります。
ただし、進歩は止まらず、最近では、PNG入力など、データを非表示にする他の方法がますます使用されています。これがどのように行われるか見てみましょう。
PNGの「見えない」部分の理論的な紹介から始めましょう。
アルファチャンネル
コンピューターの画面に画像を表示すると、赤、緑、青の成分を組み合わせて色が出ます。これらの3つのカラープレーンはチャネルと呼ばれます。それらは通常RGBとして書かれます。
これらの3つのチャネルに加えて、PNGには、透明度レベルを決定するためのアルファ(文字Aで示される)と呼ばれる4番目のチャネルを含めることができます。結果のRGBA画像は、表示される色と透明度を決定します。
ほとんどのグラフィック形式では、アルファチャネルは0%から100%(またはバイト単位で0から255)の値です。値0%(黒)は、完全な透明度が必要な画像内の場所を示します。ここでは、RGB値は無視され、画像の下の背景が完全に表示されます。 100%(白)のアルファ値は、RGBチャネルが完全に不透明であることを意味します。中間値は、背景をRGBピクセル値とブレンドする量を決定します。
PNGアルファ勾配
アルファ勾配値は通常、画像を別の画像またはWebページにブレンドするために使用されます。アルファグラデーションは、PNG、WebP、ICO、ICN、およびその他のラスター形式で利用できます。 GIF形式はブール値のみをサポートします(ピクセルは透明かどうかのどちらかです)。
アルファチャネルは、非表示のテキストを配置するためのオプションの1つにすぎません。PNGパディングに移って、データをバイナリファイルに直接書き込みましょう。
列ごとのPNGコンテンツ
PNG形式は非常に単純です。各ファイルは、標準の8バイトの署名で始まります
137 80 78 71 13 10 26 10
。ここでは10進値です。編集者が誤って画像をテキストファイルと間違えないように、最初のバイトはASCIIの外部で選択されます。次の3バイトは、文字P、N、Gに対応します。次に、DOS改行(13 10)、タイププログラムがすべてのバイナリガベージを出力しないようにするDOSファイル終了マーカー(26)、およびUnixニューラインマーカー。
ヘッダーの後、標準構造のチャンクが始まります。最初に、画像の幅と高さ、色空間、ピクセルあたりのビット数、圧縮方法、フィルタリング方法、およびインターレースコーディングの有無を示すIHDRブロックがあります。幅と高さに4バイト、その他のパラメーターに1バイトが割り当てられます。
この後に、PNGファイルを生成したプログラムの名前などのテキストメタデータを含むオプションのtEXtブロックが続きます。プレーンテキスト情報をテキストブロックに書き込むことができます。
IHDRとtEXtの後には、ビットマップピクセルの圧縮されたRGBまたはRGBA値を持つIDATブロックが続きます。 PNGをレンダリングする場合、IHDRによって処理され、画像用のメモリにバッファが割り当てられ、データが圧縮形式から抽出され、ピクセルごとにバッファに書き込まれます。 PNGファイルはIENDブロックで終わります。
各ブロックの最後に、そのブロックのCRCチェックサムがあります。これは、標準アルゴリズムを使用して計算されます。
PNG画像には通常、RGBまたはRGBAチャネルごとに8ビットまたは16ビットの情報が含まれています。つまり、ピクセルごとに3〜8バイトが出力されます。この形式では、すべてのバイトが色と透明度に関する有用な情報で占められているため、グラフィックイメージの各行の終わりに、任意のデータを書き込む場所がありません。
ただし、ステガノグラフィタスクの場合、PNGは1ビット(2色)、2ビット(4色)、4ビット(16色)の低い色の深さもサポートしていることを知っておく必要があります。このような状況では、複数のピクセルに関する情報が1バイトに格納されていることがわかります。これは、PNGを無関係なデータで「水平に」埋める理論的な可能性が現れる場所です。ピクセル単位の画像の幅が8の倍数でない場合、行の最後のバイトには未使用のビットが含まれ、これらが一緒になって未使用の「ピクセルの列」全体を形成します。
1ビット画像の場合、各行の終わりに、パーサーによって処理されない最大7つの空きビットが存在する場合があります。 2ビット画像の場合、最後のバイトには最大3つの空きビットがあります。 FotoForensicsオンラインツールPNG画像でそのような未使用の「ピクセル列」を見つけます。
ただし、色の深さが浅いPNG画像は非常にまれであるため、このステガノグラフィーの方法はエキゾチックと見なすことができます。2、4、または16色のPNG画像に出くわした場合、この事実だけが疑わしいため、列のPNG塗りつぶしのチェックを開始できます。
まったく別の問題は、画像の境界の外側をPNGで埋めることです。これは、画像内のより多くの情報を非表示にできる、より簡単なステガノグラフィの方法です。
PNG-画像の外側を埋める
PNGポストピクセルパディングは、ハッキングだけでなく、さまざまなゲーム、パズル、コンテストでよく使用されます。この方法の仕組みは次のとおりです。
- PNG画像を撮ります(任意の色の深さで)。
- .
- PNG, .
- hex-.
- IHDR. IHDR.
- IHDR — , — . c
00 00 01 9D
(413 ), ,00 00 01 7E
(382 ).
- CRC ( PNG CRC , IHDR), . CRC , PNG- IHDR.
.
秘密のデータは画像の下部に残っていることに注意してください。ファイルサイズは変更されていません:335,906バイト。パーサーがこれらのピクセルを処理しないだけで、画像の下部が画面に表示されません。
写真の「秘密」の部分では、テキストの碑文だけでなく、任意のデータも非表示にできることは容易に推測できます。たとえば、パスワードで保護されたRARアーカイブをそこに書き込むことができます。シークレットメッセージの画像は、Habrastorageまたはその他の共有ホスティングで公開できます。メッセージは、情報の転送方法とパスワードについて事前に同意した人だけが受信します。このようにして、マルウェアはHabrやその他のパブリックホスティングサービスを介してペイロードを転送できます。
広告
サイトをホストするためのVDSは私たちの叙事詩についてです!「箱から出して」すべてのサーバーは、DDoS攻撃、便利なVestaCPコントロールパネルの自動インストールから保護されます。一度試してみたほうがいいです;)