Ich möchte eine virtuelle Sandbox-Maschine zum Ausführen eines kompilierten Programms schreiben. Mein Ziel ist es, dieses Programm vom Rest des Betriebssystems zu isolieren und seine Ausführung so zu kontrollieren, dass es dem Host-Computer keinen Schaden zufügen kann.
Davon gehe ich aus:
- Das ausgeführte Programm wird im Portable Executable Format kompiliert und ist im Maschinencode, nicht in irgendeinem Bytecode oder für CLR,
- Das ausgeführte Programm darf nicht mit Peripheriegeräten wie Druckern oder Scannern kommunizieren und verwendet keine grafische Benutzeroberfläche,
- Die Hauptaufgabe des ausgeführten Programms besteht darin, einige in einer lokalen Datei gespeicherte Daten (z. B. Berechnungen) zu verarbeiten und die Ergebnisse in einer anderen lokalen Datei abzulegen,
- Ein ausgeführtes Programm sollte nicht direkt mit einem Betriebssystem kommunizieren können, jede Anfrage sollte von einer virtuellen Maschine bearbeitet werden, jede Anfrage, die einem Betriebssystem Schaden zufügen könnte, sollte blockiert werden.
Mein Konzept der Architektur und des Betriebs einer virtuellen Sandbox-Maschine:
- Anwendung besteht aus mehreren Objekten, die Prozessor, Speicher und E/A-Operationen an Dateien simulieren,
- Es gibt ein Modul, das die kompilierte Datei liest und den ausführbaren Code in einen virtuellen Speicher lädt,
- dann beginnt der virtuelle Prozessor mit der Verarbeitung ab dem ersten Byte, liest Opcode und Argumente, lädt sie bei Bedarf aus dem Speicher, führt den Befehl aus und legt das Ergebnis an der entsprechenden Stelle ab, setzt bei Bedarf virtuelle Flags und liest dann den nächsten Befehl, bis das Programm zu Ende ausgeführt ist.
Was denken Sie: Ist es ein gutes Konzept? Was würden Sie ändern, um es zu verbessern?