IDコラム

トップページ > コラム >  【エバンジェリスト・ボイス】ス...

【エバンジェリスト・ボイス】ステガノグラフィ/Steganographyを知る 2018/11/07 (水)

サイバー・セキュリティ・ソリューション(CSS)部
エバンジェリスト フェロー 関原 弘樹 


こんにちは!CSS部エバンジェリスト フェローの関原です。
だいぶ寒くなってきました。コートが欲しくなる日々も近いですね。

まだちょっと早いですが、寒くなるとこたつに入ってみかんを食べるのが楽しみという方も多いのではないでしょうか。みかんといえばその昔、みかんのしぼり汁で「あぶり出し」というのをやったことを思い出しました。しぼり汁を筆につけ、はがき等に絵をかき乾かすあれです。あぶると独特のにおいがしたことを覚えています。

あぶり出しの原理については、しぼり汁を塗った部分は塗らない部分より焦げやすくなるので、火でさっとあぶると茶色くなると聞いたことがありますが特に検証したことはありません。


さて、先日Webをウォッチしていたらこんな記事が目に入りました。

外部リンク:ボットネット「Cutwail」、日本狙うメール攻撃に新展開 - 画像に命令埋め込む「ステガノグラフィ」を悪用 

相変わらずメールを起点としたサイバー攻撃は続いていますが「ステガノグラフィ/Steganography」とは何でしょう??マルウェアに使われるとはどういうことでしょう??
興味がある方やおさらいした方は是非ご覧ください。 


■ステガノグラフィ/Steganographyとは?
Web上を検索してみると

・(デジタル)データ隠蔽技術の一つ

・データを他のデータに埋め込む技術

・暗号技術はデータの可読性を失わせ、ステガノグラフィはデータの存在を隠蔽する

のように記述されています。つまりステガノグラフィとは既存のデジタルデータの中に別のデジタルデータを埋め込んで隠す技術ということです。

暗号技術では次のように、暗号化の後「平文」に対応する「暗号文」が必ず存在しますが
「平文」+「暗号化アルゴリズム+暗号鍵」⇒ 「暗号文」

画像0-1_372x185

ステガノグラフィではそのような対応は存在しません。

「(埋め込みたい)データA」+「(埋め込み先の)データB」⇒ 「変形されたデータB'

画像0-2_396x213

とこのようになります。


■基本的な考え方
ステガノグラフィの手法についてはとにかく埋め込めればいいのでいろいろと考えられます。ここではメジャーな手法の一つ値データ内の特定bitへの埋め込みの方法について原理を見ていきましょう。

埋め込み先のデータとして画像ファイルを例に考えてみましょう。
コンピュータで扱う画像ファイルはデジタルデータ(つまり2進数)、つまり0/1で構成されたデータで一般的に色の3原色RGB3種類のパラメータを数ケタの2進数で表現します。パラメータは各色の段階を表現しますが、たとえば赤のパラメータが2進数8ケタであらわされるとしますとその範囲は256段階になります。

ここで人間の目の識別能力を考えてみましょう。見てみるのが早いですね。

PNG-1 PNG-2
画像①_445x242 画像②_445x242
SHA256 a69b76bbcd6f03a85e62e305413d8caa1b42f03e1  
ab7524413fc9b545f8c4257e
SHA256 8773be7e26817122d8c08e2c10ebe0a40a174728  
47fb12b688019184e48857c1


この二つの画像の色、見分けがつきますでしょうか。

#今回はアップロードの都合上、BMPの元ファイルをPNGファイルに変換しましたが、表示される色情報は変換の前後で相違ありません。

ここで再度BMPファイルに変換し、バイナリエディタで確認するとBMP-1(変換前のPNG-1)では"B2"2進数で10110010)となっているデータの部分がBMP-2(変換前のPNG-2)ではすべて"B3"(2進数で10110011) になっています。絵の元となっているすべての画素で1bitのみ値が変化しているだけということですね。

・確認しやすくするためPNGファイルをBMPファイルに戻す

画像2-1_863x567

・バイナリエディタで値を確認

画像③_1301x675

このように人間の色や音に関する識別能力の限界をついて埋め込んだデータを隠蔽する方法は、ステガノグラフィで最もメジャーな手法です。


■埋め込みと取り出し
前段ではデータが埋め込める原理について説明するため特定のbitを全て変更していきましたが、実際に画像ファイルに埋め込む場合の流れとしては以下となります。

①ある程度の大きさの画像データを用意する(方法によりますが圧縮を解除した状態で埋め込みたいデータの3~10倍程度でしょうか)

②エディタやツールを使用して、「自身で定義する方法」により画像データのbit列の特定の位置の値を埋め込みたいデータのbit列に置き換える

つまり「1110 1001」というデータAを 「1000 1100 1111 1111 1000 1100 1111 1111」というデータBに埋め込みたいときは…

 ⇒アルゴリズムとして「データBの最下位bitに先頭からデータを埋め込む」のようにまず定義

 ⇒データB埋め込み先のbit列クリア 「1000 1100 1111 1111 1000 1100 1111 1111>>100x 110x 111x 111x 100x 110x 111x 111x

 ⇒データAの埋め込み       「1110 1001」+「100x 110x 111x 111x 100x 110x 111x 111x

③変形されたデータB1001 1101 1111 1110 1001 1100 1110 1111」が完成!!!!!!

あっけなく終わりますね。

#アルゴリズムは自身で定義するのでそのアルゴリズムを知る者/解読したものだけが取り出せる
#変化を気づかれにくくするためにRBG各色の(変化の影響が少ない)最下位bitを置き換えるのが無難
#埋め込むデータはバイナリでもテキストでも取り出す側がデータの扱い方を知っていれば問題ない。


一方、取り出す側は変形されたデータBに逆の操作をし、データAを取り出します。

変形されたデータB 1001 1101 1111 1110 1001 1100 1110 1111

 ⇒アルゴリズム 「データBの最下位bitに先頭からデータを埋め込む」

 ⇒ピックアップ 「100"1" 110"1" 111"1" 111"0" 100"1" 110"0" 111"0" 111"1"

 ⇒データA    「1110 1001


「この方法のステガノグラフィ」自体に制限的なことがあるとすれば、埋め込み先のデータは埋め込みたいデータよりある程度大きいサイズであることが望ましく、bit操作を伴うことからテキストデータやバイナリコードではなく色(画像)データや音データのように最終的に人間がアナログで知覚するデータが必要というところですね。

また、取り出し方法を見てわかるとおり、取り出しは埋め込みと全く逆の操作をするだけです。つまり、埋め込み先のデータを特定し、ファイルの隠蔽方法(アルゴリズム)が判明すれば第三者でも簡単にデータを取り出されてしまいます。

とはいえ現実に、どのファイルにどのようにデータが埋め込まれているかを第三者が知ることは難しいでしょう。
よって、確実に特定の2者のみが埋め込みデータを取り出せるようにするためには埋め込む前のデータを共通鍵暗号等で暗号化し、暗号鍵を共有する必要があります。

-- 
ステガノグラフィ自体はデータを気付かれないように埋め込めれば方法は問わないので、この他にもたくさんの方法が考えられます。Web上にも様々な参考文献がありますし、読者のみなさまもちょっと考えてみていただくと面白いかもしれません。
--

■ツールでの実践
実装方法はさまざまと申し上げましたが今回は以下のツールを使用してメッセージを埋め込みと取り出しを検証してみました。お時間のある方は一回どのようなものか試してみるのもいいと思います。

ステガノグラファー v2.10206/09/03)画像の中にファイルを電子透かしとして埋め込むソフト

外部リンク:「窓の杜」ステガノグラファーダウンロードページ

Download
#インストールが必要です。


埋め込むための適当な画像を入手

画像④_400x602

SHA256 48f136a6edf6651619a765a01704377e7ffc6475c1699480214f368fba2c73ea

 

埋め込みたいデータを用意し埋め込み

画像⑤_1379x887

 

完成

画像⑥_400x602

SHA256 e47eaf56b9f96b8fd01e08605b32b5c56572fc12ef5911b91fb09df249ce9f1f

 

埋め込み前後でファイルは間違いなく異なりますが、全く見分けがつきません!
しかし「完成」の画像には数kbのテキストデータが埋め込まれており、この画像から実際にデータを取り出すことが出来ます。

今回はパスワード等も使用していないのでデータを取り出せるか、お時間のある方はお試しください。

 繰り返しますが埋め込みアルゴリズムの実装方法はツールによって様々なので、取り出し時も原則同じツールを使用します。


■マルウェアによる攻撃への応用
以上によりマルウェアの作成者は一見無害なファイルのなかに簡単に攻撃コードを埋め込むことができることをご理解いただけたかと思います。

現在では「ファイルレスマルウェア」と呼ばれるファイルとしての実体を持たない、つまりダウンロード後メモリ上にのみ展開されるPowerShell等のコードを駆使した攻撃が全盛です。

このような攻撃がステガノグラフィのような技術と組み合わされた時に、どのような経路で侵入し、どのように襲い掛かってくるのか考えてみることはエンドポイントのセキュリティを考えるうえで非常に有益ではないでしょうか。


ではまた、次回のエントリーでお会いしましょう。

Hiroki Sekihara CRISC, CISSP, CEH, PMP, CCIE #14607

お問い合わせ