web-dev-qa-db-ja.com

Pegasus iOSエクスプロイトとカーネルメモリ破損

現在、Lookout Blogpostで、ゼロデイを3つ使用するiOS上のマルウェアであるPegasusについて読んでいます。

ペガサスに関するブログ投稿

私は最初の1年間はcsの学生ですが、マルウェアがシステムを完全に制御するにはカーネル特権にアクセスする必要があることを理解していますが、プロセスのしくみがわかりません。私は本当に好奇心が強く、情報セキュリティを専門とすることを私の研究の後半で考えています。

特に:

  1. Pegasus(どうやら何らかの方法でWebサイトで実行されているようです。申し訳ありませんが、Web開発を行ったことはありません)は、どのようにしてサファリからカーネルに組み込まれますか?それは悪意のあるjavascriptコードを使用していますか、それをどのように想像する必要がありますか?では、どのようにしてWebkitのメモリを破壊し、なぜメモリの場所を教えてくれるのでしょうか。

  2. プログラム/攻撃者がカーネルのメモリ位置を知っているのはなぜ悪いのですか?カーネルメモリは保護されていると思いましたか?

  3. カーネルのメモリの破損はどのように脱獄につながりますか?メモリ破損は、私が理解している限り、別のプログラムで使用されているメモリを上書きしているだけですよね?カーネルがメモリ位置で新しいコードを実行する必要があるのはなぜですか?

前もって感謝します!

6
Seen

エクスプロイトは3つの脆弱性の組み合わせを使用します。各脆弱性はiOSコンポーネントのバグであり、攻撃者が可能ではないことを実行できるようにします。

ステージ1( CVE-2016-4657 )は、Webページのレンダリングに使用されるコードのライブラリである WebKit のバグです。 WebKitコードは、iOSのSafari Webブラウザーのコンテキストで実行されます。詳細はまだ発表されていません。「メモリ破損の問題は、メモリ処理の改善を通じて対処された」との記述のみです。これは バッファオーバーフローse-after-free 、または他の同様の種類のバグである可能性があります。メモリ破損のバグの一般的な考え方は、攻撃者が一貫性のないデータ(ここでは、HTML、CSS、JavaScriptなどのWebページのコンテンツである可能性があります)を渡し、矛盾を検出する代わりに、プログラムが矛盾した方法で動作し、結果的に上書きされるというものです攻撃者から提供されたデータを含む独自の命令の一部。これにより、攻撃者は選択したコードをSafariで実行できます。

ステージ3( CVE-2016-4656 )もメモリ破損のバグで、詳細は公開されていませんが、今回はカーネル内にあります。このバグにより、iOSアプリケーションはカーネル内の一部のデータ構造を破壊し、カーネル内のコードを実行するか、または(説明を考えれば)呼び出し元のアプリケーションの特権を昇格させ、アプリケーションが想定していないことを実行できるようにしますたとえば、通常のiOS権限をバイパスして、たとえばインストールされているアプリケーションのリストに表示されないスパイウェアをインストールします。これは、基本的なオペレーティングシステムの一部として偽装するためです。

ステージ2( CVE-2016-4655 )は、ステージ3のイネーブラーです。通常、プログラムがカーネルがメモリをマップする方法をプログラムが知っていることは重要ではありません。攻撃者がカーネルに任意のコードを実行させることができる場合、ゲームは失われます。しかし、攻撃者がプレイする余地があまりないことが発生する可能性があります(これはおそらくここにあります)。たとえば、サイズチェックが存在するがわずかにずれている可能性があるため、攻撃者は、挿入されたデータが配置されている場所の数バイト後にのみ上書きできます。そのような場合、攻撃者はその場所に何を配置するかを正確に知る必要がある場合があります。そうしないと、興味深い効果を引き起こすことができません。上書きできる場所がポインターである場合は、クラッシュを引き起こすだけの無効なポインターではなく、カーネルが有効であるが間違ったデータを使用するためにそこに何を置くかを知る必要があります。たとえば、機能のリストへのポインタを、いくつかの主要なシステム機能を含むリストのように見えるものが含まれていることがわかっているメモリ内の場所のアドレスに変更します。そのため、カーネルがデータをどこにマップするかを知ることで、攻撃者は正しいポインタ値を計算できます。

明確にするために、私は現時点でリリースされた1行の説明に当てはまるもっともらしい攻撃方法の例を挙げています。

これがどのように機能するかを理解する最良の方法は、いくつかのエクスプロイトを自分で書くことです。 既知のエクスプロイト可能な脆弱性を持つ古いバージョンのソフトウェア(できればオープンソース)を入手 、そしてエクスプロイトを作成します。 CTFを再生 することもできます。