私は これThe New York Times(NYT)の記事 を読んでいて、Jeff Bezosの電話のハッキングについて書いていました。記事は述べています:
悪意のあるコードの小さな14バイトのチャンクを含む無害に見えるビデオファイルを含む2018年5月のメッセージが突然
14バイトに含まれる可能性のある悪意のあるコードは何ですか?これは、NYTの記事で概説されているロジックを含めるのに十分なスペースとは思えません。記事によると、メッセージが受信された直後に、電話は大量のデータを送信し始めました。
はい、できます。ムービーの特定の領域のデータをメモリにロードして実行するのは、単にトリガーの脆弱性である可能性があります。
悪意のある部分はかなり小さい場合があり、ペイロードは別の場所に格納される可能性があります。ペイロードを抽出して実行した後、ローダーよりも多くの追加のモジュールをダウンロードできます。
これは、ほとんどのマルウェア感染の動作のようです。"ドロッパー"と呼ばれる小さなコンポーネントが最初に実行され、マルウェア全体がダウンロードされて実行されるまで、他のモジュールをダウンロードして実行します。これらの14バイトは非常にドロッパーになる可能性があります。
この特定のケースでは、これらの14バイトは、ムービーの一部をメモリにロードし、そのアドレスをレジスタにロードして、そこにジャンプする可能性があります。コードはビデオデータ(またはメタデータ)のように見えるため、ビデオのみを調べても疑わしいものは何も表示されませんが、ローダーからの14バイトは目立ちます。
それは、実際にはプログラミング言語と、コードが挿入されるコンテキストに依存します。
非常に少量のコードスペースで実行できることの例については、 Code Golf Stack Exchangeサイト を確認してください。
それは絶対に合うことができます。たとえば、この CTFチャレンジソリューション は、約12バイトを実行するバイナリを攻撃します。送信されるペイロードは次のとおりです。
0: 54 Push rsp
1: 5e pop rsi
0000000000000002 <y>:
2: 31 e2 xor edx,esp
4: 0f 05 syscall
6: eb fa jmp 2 <y>
(すべてのレジスタがゼロに設定されていると想定)
これは、コードの実行を可能にする完全なpwnの場合は8バイトにすぎず、リモートシェルにつながります。
もちろん、これは非常にターゲットを絞っていますが、例として役立ちます。
Peter Cordesが言ったように、ビデオファイル内の14バイトがメモリの脆弱性を引き起こすと想定しているので、それらの14バイトはマシンコードです!
これは非常に重要な事実です。ここで答える人の多くは、ソースコード、文字などすべてについて考えています。これらはすべて、1文字あたり〜8ビット/ 1バイトかかります。したがって、14文字では、それほど多くのことはできません。
しかし、これらの14バイトは確かにバイナリです!したがって、ARM CPU、1つの命令は引数を含めて32ビット幅、IPアドレスは32ビットです。このIPアドレスをメモリに入れて実行するための十分なスペースがあります。シスコール。
(実行可能マシンコードの)真のコードインジェクションは、通常、非実行可能スタック、および一般にW ^ X(xor execの書き込み)ページのアクセス許可によって十分に防御されます。
バッファオーバーフローについて話している場合、より一般的な最近のペイロードは、ROP攻撃の戻りアドレスです。これは従来の意味でのコードではなく、メモリに既に存在するコードフラグメントのaddressのみです。 (おそらく、4バイト命令の最後の2バイトとして、ARM Thumb2モード、これは電話だったためです。)
例えば正しいデータをレジスターに入れてから戻るコードを見つけることができれば、そのアドレスと、libcのsystem()
のアドレスをスタックに置くことができます。したがって、実行はsystem()
に到達し、文字列へのポインタが正しい場所にあるため、文字列を最初の引数として扱います。
その文字列は、たまたまメモリ内にあるものである場合と、ペイロードの非コード部分である場合があります。
情報がテクノロジージャーナリズムによってこれまでに薄められたときには、それが何について話しているのか正確に推測したり、可能性を排除したりすることは困難です。
実行されるメッセージ内の14(または任意の数)バイトの場合、おそらくO.S.
しかし、実行されると、システムにすでに存在する他のコードを確実に呼び出す可能性があります(その存在または性質もバグである可能性があります)。
または、JPEGでは、埋め込まれたプレビューに、14バイトで呼び出されるコードをさらに含めることができます。