2010-11-19 6 views
2

Ich schreibe einen PDF-Viewer, der verschiedene in C geschriebene Bibliotheken verwendet. Dieser C-Code ist möglicherweise leicht auszunutzen. Und es gibt einfach zu viele Zeilen, um es zu überprüfen. Ich muss davon ausgehen, dass dieser Code möglicherweise ausnutzbare Fehler enthält.Erstellen eines bombensicheren Worker-Prozesses (unter Windows)

Die Sache ist, dass der C-Code ziemlich einfach ist. Ein Stream von Bytes geht an einem Ende ein und eine Bitmap (auch ein Stream von Bytes) kommt am anderen Ende heraus.

Inspiriert von Google Chrome, denke ich, einen separaten Prozess zu erstellen, der die Decodierung und das Seitenrendering durchführt. Idealerweise sollte dies in einem Prozess ausgeführt werden, der absolut keine Rechte hat, irgendetwas zu tun, außer das Lesen des einen Eingabestroms, den es hat, und das Ausgeben in einen Strom von Bytes (einige nicht komprimierte Bitmap) am anderen Ende.

Was ich der Prozess denken soll, ist nicht in der Lage sein zu tun:

  • jeden Plattenzugriff
  • offene Steckdosen
  • begrenzte Menge an Speicher zu verwenden
  • Zugriff Shared Memory mit anderen Prozessen
  • laden andere dll's
  • ... noch etwas?

Ist das möglich? Ist das irgendwo beschrieben?

+0

mögliches Duplikat von [Gibt es eine leichte, programmierbare Sandbox-API für die Windows-Plattform?] (Http://stackoverflow.com/questions/2016731/is-there-a-lightweight-programmable-sandbox-api-for- the-windows-platform) –

Antwort

1

Wenn Sie den Quellcode haben - Sie können überprüfen, dass es die beschriebenen Dinge nicht tut. Nun, die Begrenzung der verfügbaren Speicher ist ein bisschen schwieriger. Sie können jedoch SetProcessWorkingSetSize verwenden.

Auch nachdem Sie die ausführbare Datei erstellt haben, können Sie ihre DLL-Importtabelle (von Abhängigkeiten Walker) überprüfen, um sicherzustellen, dass sie nicht auf eine Datei/Socket-Funktion zugreifen.

+0

Worüber ich spreche ist, dass ich nicht möchte, dass Exploit-Code in der Lage ist. Ich denke, es ist immer noch möglich, Funktionen von DLLs für den Prozess sichtbar zu machen, indem Sie ihre Adresse zur Laufzeit abfragen. Ich suche eine Verteidigungslinie auf Betriebssystemebene. –

+0

Aber hey, danke, dass du dem Brainstorm beigetreten bist. –

+0

Sie können auch überprüfen, dass der Code 'LoadLibraryX' und' GetProcAddress' nicht importiert. Daher wird der Code wahrscheinlich keine andere Socket/Datei-Funktion verwenden können. Es sei denn, es ist ein wirklich ** schlecht ** exploitierter Code, der zur Laufzeit den gemappten Kernel32.dll abfragen und die benötigte Funktion in seiner Exporttabelle finden kann. – valdo

1

Dies ist nicht wirklich möglich. Letztendlich wird jeder potentielle Exploit-Code mit allen Privilegien laufen, mit denen dieser Prozess läuft. Wenn Sie es als Standardbenutzer ausführen, begrenzen Sie den möglichen Schaden, aber Sie sollten den Code so gut wie möglich korrigieren.

+0

Ich stimme zu, dass der Exploit nur auf die Privilegien der Prozesse beschränkt ist. Die Idee besteht also darin, diese Privilegien auf ein Minimum zu reduzieren. –

+0

Sie könnten eine neue Gruppe/einen neuen Benutzer erstellen und die lokale Sicherheitsrichtlinie verwenden, um sie stark einzuschränken, aber das erscheint ein wenig extrem für einen kleinen PDF-Viewer. – Luke

Verwandte Themen