web-dev-qa-db-ja.com

実行可能コードを画像に埋め込むことはどのように可能ですか

私は FireEye を読んでいて、出会った このNYTimesの記事 画像が送信されたSkypeチャットの詳細マルウェアが大量に含まれている

見積もり:

デバイスの情報にアクセスするために、ハッカーはSkypeで女性を装って、ターゲットが使用しているデバイスのタイプを特定し、マルウェアが大量に含まれている写真を送信しました。

2番目の写真は、標的のコンピューターからファイルをコピーする特に強力なマルウェアでした。

私はexifデータとIPTCヘッダーが画像に存在することを知っており、FileMagic mimetypeヘッダー情報を使用して画像ファイルにいくつかの追加情報を詰め込むことができると確信していますが、実行可能コードを画像?

画像ファイルの形式はpifでした。そのため、コンピューターがファイルを開いて画像を表示するアプリがなければ、コードを密かに実行していない限り、その方法はわかりません。

36
Jeremy Thompson

答えは簡単です。それは写真ではなかった。そして.pifは画像形式ではありません。正しい技術情報を提供するためにNYTimesを信頼してください。

NYTimesの記事のログにあるように、そして FireEyeの実際のレポート が確認するように、使用されたファイルは 。pifファイル でした。これは、あまり知られていないWindowsの実行可能ファイル拡張子の1つです。

.pifは、.comのようなMS-DOSからのレガシーです。これは、「プログラム情報ファイル」(つまり名前)であることが意図されており、(DOS)プログラムへのショートカットと、システムの扱い方に関するさまざまな情報が格納されています。今日でも、Windowsは.pifファイルにショートカットタイプのアイコンを提供しています。

面白いことに、今日、Windowsは.pifが本当に単なるプログラム情報ファイルであるかどうかを気にしていません。試してみましょう:.exeファイルの名前を.pifに変更して実行します。アイコンが表示されないなどの違いがあるかもしれませんが、それだけです。これが、さまざまな形式のファイルを統一的に扱うことで得られます。 ありがとう、マイクロソフト!

なぜこれが起こるのですか?短い答え:Windowsのため。より長い答え:Windowsは ShellExecute を通じて.pifを実行します。技術的には、ファイルを開くための適切なプログラムを見つけ、それを使用してファイルを開く必要があります。 .pifファイルの場合、最初に、それが実際にMS-DOS実行可能ファイルを指すファイルであるかどうかを確認します。 .pifファイル形式に準拠していない場合、ShellExecuteは実行可能コードが含まれているかどうかを確認します。存在する場合は、.exeであるかのように実行されます。どうして? Windowsだから!

suuper-scary genius hackersは何をしましたか?これらの人たちは複雑なことをする必要はありませんでした:彼らはウイルスのインストーラーとプログラム(おそらく.batだけ)から自己解凍して実行するSFXRARアーカイブを作成し、インターネットで見つけた女の子の画像を開きました。その悪魔のような仕掛けの名前を.pifファイルに変更し、それを不幸な自由の戦闘機に送信しました。

なぜ.pifを使用したのですか? 2つの理由から、明らかに:

  1. 実行可能ファイルとして実行できることを知っている人はほとんどいません(ありがとう、Microsoft!

  2. 明らかに.gifや.tiffや.pdfなどのように聞こえますimage-y。その名前から、それが画像フォーマットであることに疑いもありませんでしたね、OPさん。 ;)

実際の質問について(「実行可能コードをイメージに埋め込む方法」)。はい、脆弱なプログラムで開かれた場合、特別に細工された画像を介してコードを実行することが可能です。これは、バッファオーバーフローのような攻撃を悪用することで実行できます。しかし、これらの特定のハッカーは、おそらくこれには十分な賢さではありませんでした。

編集

興味深いメモ:これらの人たちは実際にDarkCometを使用しました。DarkCometは、さまざまな拡張子を持つ圧縮された実行可能ファイルを生成する機能があり、.pifがリストに含まれています。画像の表示についてはわかりませんが、新しいバージョンで追加された機能である可能性があります。

別の編集

この特定の「vulnerability」から保護する方法について質問しているようですね。答えは簡単です。

まず、Windowsがファイル拡張子を表示していることを確認します。 Windowsはデフォルトでそれらをほとんど隠します(ありがとう、Microsoft!

次に、これを暗記する:.exe .com .cmd .bat .pif .vb .vba .vbs .msi .reg .ws .wsc .wsf .cpl .lnk。これらは、脆弱なアプリケーションがインストールされているかどうかに関係なく、潜在的に悪意のあるコードを簡単に実行したり、開かれた場合にコンピュータに害を及ぼしたりする可能性がある最もよく知られているファイルタイプです。誰かがそれをかわいい女の子の画像だと言ってそのようなファイルを送った場合、あなたはそれがこれらのシリア人のような別の目立たないハッカーであると確信することができます。

別のオプションは、プロアクティブであり、ダウンロードされたファイルをよく知らないファイル形式でチェックおよびダブルチェックすることです。マルウェアかもしれませんね。

エクスプロイトを含む実際の画像については、おそらくソフトウェアを最新の状態に保つことを試みることができます。

64
Mints97

完璧なものはなく、一般的な種類のバグはバッファオーバーフローで、短いデータが本来あるべき場所にコピーされず、場合によっては任意のコードが実行される可能性があります。

たとえば here は古いバージョンのMicrosoftのバグであり、特定の画像をIEで表示すると、任意のコードが実行される可能性があります。

これは非常に実装固有のものであることに注意してください。Firefoxまたはchromeで同じ画像を開くと、画像が壊れるだけで、コードは実行されません。

素人の言葉ではバッファオーバーフロー

バッファオーバーフローの技術詳細

12
Shelvacu

Mints97の答えは素晴らしいですが、それだけではないかもしれません。 Windowsの特に素晴らしい(読む:ひどい)問題は、U-202Eを含む(これが最悪ですが)ファイル名で完全なUnicode文字セットをサポートすることです。

私はそれがいくつかの無害な使用法を持っていると確信していますが、それは人々が平均的なユーザーが気付かないように悪意を持ってファイル名を変更することを可能にする可能性があります。これは このhowtogeek.comの記事 に文書化されています。

基本的に、ハッカーはU-202Eをファイル名に入れ、filename by gnp.tabfilename by bat.pngに変更できます。文字は、名前の後のすべての名前の順序を逆にします。攻撃者が実行する必要があるのは、実行する正しいファイルの種類を選択することだけで、Windowsはそれを実行可能ファイル名に関連付けます。

これはあなたが考えるよりも守るのが難しいです。最善の防御策は、これについてファイルの名前をスキャンすることです。 CMDコマンドdirは、このUnicode文字の?を報告するようです。 Pythonは、他の言語もUnicode名を取得できると確信しているため、何らかのスクリプトまたはプログラムでこの問題を回避できます。

はるかに簡単な解決策は、ファイル拡張子の前の4文字も見て、その逆が実行可能ファイル名でないことを確認することです。 (4文字の実行可能ファイル名があると思いますが、よくわかりません)。

注意してください!

編集:私はpythonスクリプト ここからダウンロード を作成しました。これは、U-202Eのディレクトリ内のファイル名を読み取ります。これは、a)実際の名前とb)かどうかを通知します拡張子。 1つの名前で複数のファイルと複数のU-202Eを操作できるようにする必要があります。

6
IronManMark20

あなたは「画像ファイル形式はpifでした」と書いたが、記事は「FireEyeの研究者がPDFドキュメントに隠されたマルウェアを研究しているときにチャットとドキュメントのコレクションを見つけた」と述べています。 プログラム情報ファイル 形式がMicrosoft Windowsシステムで使用されましたが、その形式のファイルは以前よりもまれになりました。 PIFファイルに関連する脆弱性がありました。たとえば、 を参照してください。MicrosoftWindowsはショートカットファイルで指定されたコードを自動的に実行します が、ニューヨークタイムズの記事ではPDFドキュメントについて言及しています。

画像はPDFドキュメント内に保存でき、PDFドキュメントを開くと、PDFファイルを使用した悪用に対して脆弱になります。その場合、問題は画像ではなく、送信されたPDFファイルなどのコンテナによって引き起こされる可能性は低いです。一部のPDFの脆弱性については、 pdf現在の脅威 および を参照してください。古いPDFの脆弱性の悪用の増加 。たとえば、後者のリファレンスでは、PDFファイル内のJavaScriptに関連する脆弱性について言及しており、「埋め込まれたJavaScriptには、他のマルウェアをダウンロードしてインストールするコマンドなど、悪意のある命令が含まれている可能性があります。」

3
MoonPoint

数年前に広く公表されたエクスプロイトがあり、特定の広く配布されているjpegライブラリのバグを使用していました。このエクスプロイトの最終的な影響は、被害者のマシン上で任意のコードを実行できるようにすることでした。

また、たとえば、バグを必要としないリッチテキストファイル(rtf形式)のエクスプロイトがあり、rtf形式のほとんど知られていない機能のみを使用してユーザーのマシンでコードを実行しました。

別の例は、Word文書へのマクロの埋め込みです。マクロは非常に強力で便利な機能ですが、選択したマクロを含むドキュメントを誰かに渡すことができる場合、それは強力なハッキングツールにもなります。

一般に、複雑なファイル形式で機能を埋め込むと、チューリング相当の機能が得られます。また、良い考えではありません。

2
ddyer

ファイル形式の分析から始めましょう。そして、さまざまなソフトウェアがどのように反応するかについてしばらく推測してください。

[〜#〜] jpeg [〜#〜]- http://en.wikipedia.org/wiki/JPEG -画像の開始と終了を区切るために特別なマーカーを使用します。ここで、JPEGを扱うソフトウェアは、イメージマーカーの開始と終了のみを探し、その間のすべてをプロットすることに注意してください。どちらのマーカーも見つからない場合、jpegは無効です。次に、イメージマーカーの終わりの後にファイルの終わりマークを追加し、その後、実行可能ペイロードを追加するとどうなるでしょうか。まあ、私はそこにあるほとんどのjpegプロッタがペイロードを無視して想定どおりに機能することを確信しています。この時点で成功し、画像にペイロードを添付しました。実行するには、まあ、これは少し難しいです。イメージマークアップの終了後に「ソフトウェア」で検索し、存在する場合は取り込みます。または、イメージマークアップの開始前にコードのオフセットを指定してELF/EXE/COMヘッダーを挿入し、プロットすることを期待できます。ソフトウェアはそれを無視しますが、OSは無視しません。

問題は、当初、システムとネットワークは、人々は正直でマシンのように振る舞い、パターンを壊したり、意図したケース以外でソフトウェアを使用したりしないという、事前に形成された誤解で構築されたことです。このため、多くの仮定が行われました。ええ、ユーザーは最大200文字を入力します。そうすれば、ユーザーは常に読み取り可能なフォーマットを入力することになります。ユースケースを考えると、プログラマーとして、ケースは絶対的なものであり、例外を守るものではないと考える癖がつきます。箱から出して考えている誰かがやってきたときに何が起こるかを推測します。

1
user283885