KNOWLEDGE - COLUMN ナレッジ - コラム

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

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


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

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

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


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

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

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


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

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

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

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

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

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

画像0-1_372x185

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

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

画像0-2_396x213

とこのようになります。


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

埋め込み先のデータとして画像ファイルを例に考えてみましょう。
コンピュータで扱う画像ファイルはデジタルデータ(つまり 2 進数)、つまり 0/1 で構成されたデータで一般的に色の 3 原色 RGB 3 種類のパラメータを数ケタの 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 列クリア 「 100 0 110 0 111 1 111 1 100 0 110 0 111 1 111 1 >> 100 x 110 x 111 x 111 x 100 x 110 x 111 x 111 x

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

③変形されたデータ B 100 1 110 1 111 1 111 0 100 1 110 0 111 0 111 1 」が完成!!!!!!

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

# アルゴリズムは自身で定義するのでそのアルゴリズムを知る者 / 解読したものだけが取り出せる
# 変化を気づかれにくくするために 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.102 06/09/03 )画像の中にファイルを電子透かしとして埋め込むソフト

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

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


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

画像④_400x602

SHA256 48f136a6edf6651619a765a01704377e7ffc6475c1699480214f368fba2c73ea

 

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

画像⑤_1379x887

 

完成

画像⑥_400x602

SHA256 e47eaf56b9f96b8fd01e08605b32b5c56572fc12ef5911b91fb09df249ce9f1f

 

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

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

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


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

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

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


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

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

当サイトの内容、テキスト、画像等の転載・転記・使用する場合は問い合わせよりご連絡下さい。

エバンジェリストによるコラムやセミナー情報、
IDグループからのお知らせなどをメルマガでお届けしています。

メルマガ登録ボタン

関原 弘樹

株式会社インフォメーション・ディベロプメント フェロー / CISSP

この執筆者の記事一覧

関連するナレッジ・コラム

ITエンジニアの現地作業 ミスを減らす!作業本番のポイントとは

NTTのIP網移行と、通信の未来とは

ITエンジニアの現地作業 ミスを減らす!事前準備のポイントとは