web-dev-qa-db-ja.com

悪意のあるコードは14バイトに収まりますか?

私は これThe New York Times(NYT)の記事 を読んでいて、Jeff Bezosの電話のハッキングについて書いていました。記事は述べています:

悪意のあるコードの小さな14バイトのチャンクを含む無害に見えるビデオファイルを含む2018年5月のメッセージが突然

14バイトに含まれる可能性のある悪意のあるコードは何ですか?これは、NYTの記事で概説されているロジックを含めるのに十分なスペースとは思えません。記事によると、メッセージが受信された直後に、電話は大量のデータを送信し始めました。

79
Stud Sterkel

はい、できます。ムービーの特定の領域のデータをメモリにロードして実行するのは、単にトリガーの脆弱性である可能性があります。

悪意のある部分はかなり小さい場合があり、ペイロードは別の場所に格納される可能性があります。ペイロードを抽出して実行した後、ローダーよりも多くの追加のモジュールをダウンロードできます。

これは、ほとんどのマルウェア感染の動作のようです。"ドロッパー"と呼ばれる小さなコンポーネントが最初に実行され、マルウェア全体がダウンロードされて実行されるまで、他のモジュールをダウンロードして実行します。これらの14バイトは非常にドロッパーになる可能性があります。

この特定のケースでは、これらの14バイトは、ムービーの一部をメモリにロードし、そのアドレスをレジスタにロードして、そこにジャンプする可能性があります。コードはビデオデータ(またはメタデータ)のように見えるため、ビデオのみを調べても疑わしいものは何も表示されませんが、ローダーからの14バイトは目立ちます。

99
ThoriumBR

それは、実際にはプログラミング言語と、コードが挿入されるコンテキストに依存します。

非常に少量のコードスペースで実行できることの例については、 Code Golf Stack Exchangeサイト を確認してください。

33
Mike Ounsworth

それは絶対に合うことができます。たとえば、この 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バイトにすぎず、リモートシェルにつながります。

もちろん、これは非常にターゲットを絞っていますが、例として役立ちます。

23
Martin

Peter Cordesが言ったように、ビデオファイル内の14バイトがメモリの脆弱性を引き起こすと想定しているので、それらの14バイトはマシンコードです!

これは非常に重要な事実です。ここで答える人の多くは、ソースコード、文字などすべてについて考えています。これらはすべて、1文字あたり〜8ビット/ 1バイトかかります。したがって、14文字では、それほど多くのことはできません。

しかし、これらの14バイトは確かにバイナリです!したがって、ARM CPU、1つの命令は引数を含めて32ビット幅、IPアドレスは32ビットです。このIPアドレスをメモリに入れて実行するための十分なスペースがあります。シスコール。

14
Dark_eye

(実行可能マシンコードの)真のコードインジェクションは、通常、非実行可能スタック、および一般にW ^ X(xor execの書き込み)ページのアクセス許可によって十分に防御されます。

バッファオーバーフローについて話している場合、より一般的な最近のペイロードは、ROP攻撃の戻りアドレスです。これは従来の意味でのコードではなく、メモリに既に存在するコードフラグメントのaddressのみです。 (おそらく、4バイト命令の最後の2バイトとして、ARM Thumb2モード、これは電話だったためです。)

例えば正しいデータをレジスターに入れてから戻るコードを見つけることができれば、そのアドレスと、libcのsystem()のアドレスをスタックに置くことができます。したがって、実行はsystem()に到達し、文字列へのポインタが正しい場所にあるため、文字列を最初の引数として扱います。

その文字列は、たまたまメモリ内にあるものである場合と、ペイロードの非コード部分である場合があります。

情報がテクノロジージャーナリズムによってこれまでに薄められたときには、それが何について話しているのか正確に推測したり、可能性を排除したりすることは困難です。

10
Peter Cordes

実行されるメッセージ内の14(または任意の数)バイトの場合、おそらくO.S.

しかし、実行されると、システムにすでに存在する他のコードを確実に呼び出す可能性があります(その存在または性質もバグである可能性があります)。

または、JPEGでは、埋め込まれたプレビューに、14バイトで呼び出されるコードをさらに含めることができます。

1
WGroleau