1

ich mit dem Chrome Native Client zu tun habe und einige Schwierigkeiten in den folgenden Punkten haben:Native Client Innen-/Außen Sandbox

  1. Wie ich bisher verstanden, die ersten 64 KB des 256MB Nacl Segment gewidmet in die innere Sandbox. Diese innere Sandbox enthält das Trampolin und das Sprungbrett, die vom vertrauenswürdigen Code zum nicht vertrauenswürdigen Code und umgekehrt kommunizieren. Wenn ich in diesen ersten 64 KB bin, kann ich in die Mitte von 32 Byte Anweisungen springen? Zum Beispiel, wenn ich einen 32-Byte-Befehl im Trampolin habe, kann ich von diesem Instrument in die Mitte eines 32-Byte-Blocks im Trampolin springen (nicht 32 Bytes ausgerichtet)? Sind alle Anweisungen im Trampilin und im Sprungbrett ebenfalls 32 Byte ausgerichtet?

  2. Kann ich kombinieren mehrere x86-Befehle in einen 32 Byte Nacl Befehl ausgerichtet (zum Beispiel setzen UND 0xffffffe0% eax und JMP EAX in einem 32-Byte-ausgerichtet Nacl-Befehl).

  3. Ich habe verstanden, dass die Service-Laufzeit mit Prozess-Erstellung, Speicher-Management usw. befasst ist und dass über das Trampolin zugegriffen wird, wie genau der Trampolin-Befehl auf die Service-Laufzeit zugreift? wo befindet sich die Service-Laufzeit in der Speicherplattform? Wenn die Dienstlaufzeit beendet ist, kann auf nicht 32-Byte-Ausrichtung im Sprungbrett zugegriffen werden?

  4. Was ist die eigentliche Aufgabe der äußeren Sandbox? Wie überwacht und filtert er die Systemaufrufe? Wenn es einen Fehler im Validator der inneren Sandbox gibt, in welchen Fällen kann er einen illegalen/bösartigen Befehl auffangen?

Vielen Dank an all

Antwort

0
  1. Ich bin nicht 100% sicher von der Spitze von meinem Kopf, aber ich würde nur in dem Verzeichnis Layout der source von der Suche erraten, dass sie beide Teil sind des vertrauenswürdigen Service-Laufzeitcodes (sie befinden sich im Verzeichnis src/trusted/service_runtime) und sind daher mit dem System-Compiler aufgebaut und unterliegen keiner Validierung.

  2. Ja, die Anzahl der Befehle in einem 32-Byte-Bundle ist nicht begrenzt. Die Einschränkung besteht lediglich darin, dass keine Anweisung (oder eine Sandbox-Sequenz mit mehreren Anweisungen, wie sie für indirekte Sprünge erwähnt wurde) die Bündelgrenze überschreiten darf. In Ihrem Beispiel müssten also beide Anweisungen im selben Bündel sein.

  3. Wieder bin ich ein wenig unscharf über die Details, wie die Trampoline funktionieren, aber wenn die Kontrolle vom Trampolin transferiert wird, endet es in der Dienstlaufzeit, die nur gewöhnlicher Maschinencode gemäß den nativen ABIs für die OS. Die Service-Laufzeit kann also beliebige Systemaufrufe verwenden (zumindest alle, die von der äußeren Sandbox zugelassen sind) und kann jeden Teil des nicht vertrauenswürdigen Codes lesen oder ausführen.

  4. Die äußere Sandbox ist streng genommen eine Verteidigung in der Tiefe (d. H. Die innere Sandbox reicht theoretisch aus, um den nicht vertrauenswürdigen Code zu enthalten). Es filtert Systemaufrufe auf verschiedenen Betriebssystemen auf unterschiedliche Weise. In der Chrome-Einbettung von NaCl ist die äußere Sandbox dieselbe Implementierung wie die Chrome-Sandbox, die für Renderer- und GPU-Prozesse verwendet wird.

Verwandte Themen