1

私はクロームネイティブクライアントを扱うと以下の点でいくつかの困難持っています:私はこれまで理解できるようにネイティブクライアントは、内側/外側のサンドボックス

  1. を、256メガバイトのNaClセグメントの最初の64 KBが専念しています内側の砂場にこの内側のサンドボックスには、トランポリンと信頼できるコードから信頼されていない、あるいはその逆に通信するスプリングボードが含まれています。私がこの最初の64KBにいるとき、32バイト命令の中間にジャンプできますか?私はトランポリンに32バイトの命令を持っている場合、例えば、私はトランポリンで別の32バイトintructionの(いない32バイト整列)中央このINSTRからジャンプすることができますか? trampilineとspringboardのすべての命令も32バイト整列されていますか?

  2. は、私が(例えば、1つの32バイトアラインのNaCl命令にと0xffffffe0%eaxにJMP EAXを置く)のNaCl命令整列1つの32バイトにいくつかのx86命令を組み合わせることができます。

  3. 私は、サービスランタイムはプロセスの作成、メモリ管理などを扱っており、トランポリンを介してアクセスされていることを理解しています。サービスランタイムはメモリプラットフォーム内にありますか?サービスランタイムが終了したときに、それはバネボードの32バイト整列命令にアクセスできませんか?

  4. 何アウターサンドボックスの実際のデューティ?システムコールの監視とフィルタリングはどのように行われますか?内部のサンドボックスのバリデーターにバグがある場合、どのような場合に違法な/悪意のある命令をキャッチできますか?

私は私の頭の上の100%わからないんだけど、私は彼らが一部の両方であることをちょうどsourceのディレクトリ構成を見てから推測するすべての

答えて

0
  1. ありがとう信頼できるサービスのランタイムコードの(彼らはsrc/trusted/service_runtimeディレクトリにある)ので、システムのコンパイラで構築し、検証の対象とされていません。

  2. はい、32バイトのバンドル内の命令の数に制限はありません。この制限は、命令(または間接ジャンプについて言及したような複数命令のサンドボックス・シーケンス)がバンドル境界を越えることがないということだけです。したがって、あなたの例では、これらの命令の両方が同じバンドルに存在する必要があります。

  3. トランポリンがどのように機能するのかについて詳しくはわかりませんが、コントロールがトランポリンから転送されるとサービスランタイムに終わります。これはサービスのランタイムに終わります。 OS。そのため、サービスランタイムはシステムコール(少なくとも外部サンドボックスで許可されているもの)を使用することができ、信頼できないコードの一部を読み取りまたは実行することができます。

  4. 外側のサンドボックスであり、厳密に言えば、深さの防御(すなわち、内側サンドボックスは、信頼できないコードを含むのに十分な理論にあります)。これは、さまざまなOSで異なる方法でシステムコールをフィルタリングします。 ChromeのNaCl埋め込みでは、外部サンドボックスはレンダラーとGPUプロセスで使用されているChromeサンドボックスと同じ実装です。

関連する問題