it-swarm-eu.dev

Verhindert eine virtuelle Maschine, dass Malware Schaden anrichtet?

Ich möchte wissen, ob es für das Host-System einer virtuellen Maschine (in meinem Fall VM - VirtualBox OSE) sicher ist, Malware auszuführen.

Kann ein Virus ausbrechen und Daten vom Host-System lesen oder schreiben? Kann es eine Internetverbindung herstellen, wenn ich sie in meiner VM deaktiviere?

Ist a VM eine sichere Umgebung, um herauszufinden, was ein Virus tut?

Kann eine Gabelbombe das Host-System "töten", wenn ich den Speicher auf etwa 1/4 meines gesamten realen Speichers reduziere? Wie viel CPU-Zeit/Ressourcen kann es verbrauchen?

66
Martin Thoma

Theoretisch ist das Gastsystem vom VM vollständig isoliert und kann den Host nicht einmal "sehen", geschweige denn angreifen. Der Gast kann also nicht aus der VM ausbrechen. In der Praxis natürlich es ist gelegentlich passiert ( Webarchiv-Link ). Ein Angriff erfordert das Ausnutzen eines Sicherheitsproblems (d. H. Eines Programmierfehlers, der schlimme Konsequenzen hat) in der VM - Implementierung oder möglicherweise in den Hardwarefunktionen, auf denen die VM aufbaut. Es gibt nur wenige Exit-Routen für Daten aus der VM. Für den Internetzugang emuliert die VM beispielsweise eine virtuelle Netzwerkkarte, die nur die Pakete der niedrigsten Ebene und nicht das vollständige TCP/IP behandelt. Daher bleiben die meisten IP-Stack-Probleme innerhalb der VM beschränkt ] selbst. Fehler, die zum Ausbruch von VM führen, bleiben daher selten.

Es gibt einige Arten von Angriffen, gegen die VM sehr effektiv ist, z. Gabelbomben. Aus Sicht des Host-Systems ist VM ein einzelner Prozess. Eine Gabelbombe im Gast bringt den Scheduler im Gastbetriebssystem auf die Knie, aber für den Host ist dies völlig harmlos. Ähnliches gilt für den Speicher: VM emuliert eine physische Maschine mit einer bestimmten RAM-Größe und benötigt ungefähr diese Menge an "echtem" RAM, um sie effizient zu sichern. Unabhängig davon, was der Gast tut, wird die VM niemals mehr RAM als das monopolisieren. (Sie möchten die Größe von VM RAM weiterhin auf beispielsweise höchstens die Hälfte Ihrer physischen Größe RAM beschränken, da das zusätzliche "echte" RAM praktisch ist Festplatten-Caching; und das Host-Betriebssystem wird auch einige verwenden wollen.)

55
Tom Leek

Haftungsausschluss: Ich strebe ein relativ hohes Verständnis an. Wenn Sie eine detaillierte Anleitung wünschen, ist dies nicht möglich. Darüber hinaus gibt es andere Möglichkeiten (vollständig in Software), virtuelle Maschinen zu implementieren, für die dies nicht gilt. Ich konzentriere mich auch darauf, nur durch die Virtualisierungsmechanismen "auszubrechen" - d. H. Nicht durch solche, die auf tatsächlich hart vernetzten Hosts von PC zu PC passieren können.

Ich mag Details, also gehen wir mit einigen. Erstens verfügt Codeproject über einige hervorragende Assembler-Referenzen für verschiedene Modi einer x86-CPU (real, geschützt und lang) und die Verwendung von Virtualisierung . Es gibt einen Intel VT-Blog (ich bin nicht sicher, ob Intel dies schreibt) und schließlich ist der erste Teil des Rootkit Arsenal der Erklärung von x86 gewidmet und eine ausgezeichnete Lektüre. komplett mit exemplarischen Vorgehensweisen und schönen Diagrammen. Um alles zu verstehen, ist Geduld erforderlich. Ich werde hier also eine sehr kurze Einführung in die Funktionsweise geben.

Die Art und Weise, wie wir gerockt haben, als wir DOS ausgeführt haben

DOS- und frühe 16-Bit-Realmodus-Systeme betreiben ein segmentiertes Speichermodell. Es gibt keine Kontrolle über die Größe von Segmenten und es gibt keine Schutzschalter für eines dieser Segmente. Code wird in ein Speichersegment geladen und ausgeführt. Es kann weit in andere Segmente springen, sodass jeder Code überall etwas ändern kann, einschließlich der Erzeugung eines TSR-Codeteils (terminieren und resident bleiben), der einfach einen der IVT-Einträge (Interrupt-Vektortabelle) auf eine Adresse in seinem Raum zeigt. vor dem Ausführen des Originals. Grundsätzlich gibt es keinen Schutz. Keiner. Nada.

Der Aufstieg des 32-Bit-geschützten Modus

Der geschützte Modus wird schnell kompliziert. Es besteht aus drei Teilen: Segmentierung, Paging und PAE. Für jede Tabelle ist eine Datentabelle erforderlich, die der CPU Informationen zu diesem Segment, dieser Seite oder zur Erweiterung des Adressraums (PAE) enthält. Dazu gehören die berühmten Ringflags (sie gelten für Segmente und Seiten), die die Prozessisolation implementieren. Paging ist Ihre Methode, um Daten aus RAM und auf die Festplatte) zu laden und ausgefallene Dinge wie virtuellen Speicher zu erstellen (siehe das virtuelle Word! Wir sind da!)

Langer Modus

Der Long-Modus beseitigt die Segmentierung und schreibt einfach die PAE/Paging-Strukturen vor. Um die Implementierung eines Betriebssystems vollständig zu trivialisieren, wird Paging wiederum durch Strukturen im Speicher gesteuert, die dann über spezielle Anweisungen eingerichtet werden. Voila, man kann mit den richtigen Einstellungen eine Prozessisolation erreichen. Wieder trivialisiere ich leicht ...

Gib mir Virtualisierung!

Okay. Virtualisierung ist das gleiche allgemeine Konzept. Virtuelle Maschinen werden mithilfe von Steuerungsstrukturen für virtuelle Maschinen eingerichtet, die bestimmen, wie ihr Speicher wieder dem physischen Speicher zugeordnet wird, ein bisschen wie Paging. Entscheidend ist, dass die virtuelle Maschine unter bestimmten Bedingungen das Host-Betriebssystem nach etwas fragen muss, ein bisschen wie Prozessisolation, ein bisschen wie ein Software-Interrupt. Diese beziehen sich auf VM wird beendet und liefert dem Host Informationen wie den Status der Register beim Beenden. Ein bisschen wie ein Systemaufruf.

Kann eine Malware aus einer virtuellen Maschine ausbrechen?

In Bezug auf VM) verfügt das Host-Betriebssystem über einen eigenen Speicherplatz und kann nach Belieben infiziert/beschädigt/zerstört werden.

In Bezug auf die direkte Auswirkung auf den Hostspeicher kann die virtuelle Maschine dies nicht, da sie ihn nicht sehen kann. Der Host muss den erforderlichen Speicher dem Speicherplatz der virtuellen Maschine zuordnen. In diesem Speicherbereich muss außerdem alles vom BIOS an implementiert werden. Um mit bestimmten Host-Geräten für bestimmte Aufgaben zu kommunizieren, muss der Host-Computer diese VM-Beendigungsbedingungen und das Ziel VM muss sie auslösen) einrichten passiert, wird die Kontrolle auf den Host übertragen.

Es gibt daher zwei mögliche Risikobereiche:

  1. Die Aktionen, die der Host als Reaktion auf einen Exit VM Exit) ausführt. Wenn diese Behandlung Fehler enthält, kann der Host möglicherweise davon überzeugt werden, etwas auszuführen, das er nicht ausführen sollte.
  2. Jeder Hostzugriff auf den Speicherplatz des Gastcomputers. Denken Sie daran, dass der Host-Maschinencode, der in Ring 0 ausgeführt wird, die Party überall dort zum Absturz bringen kann, wo es Ihnen gefällt. Es kommt einfach so vor, dass Sie den Speicher des Gastes vom Gast aus einstellen können (überraschenderweise).

Dies führt Sie zu Ihrem Exploit-Mechanismus. Sie benötigen einen Handhabungsfehler in der Exit-Routine VM), dann müssen Sie in der Lage sein, diesen Code zur Ausführung von Speicher zu überreden. Idealerweise Code, den Sie gerade von der Gast-VM in eine Seite eingefügt haben Verabschieden Sie sich von Kansas.

Wie Tom Leek sagt, sind VMs unglaublich effektiv bei der Verteidigung gegen Gabelbomben. Ähnlich wie das Betriebssystem die Speicherzuweisung eines Prozesses begrenzen kann, kann auch die Zuordnung des Arbeitsspeichers zur VM begrenzt werden. Auslaufen und das Gastbetriebssystem glaubt, dass der physische Speicher knapp ist. Der Host wird es nicht mehr zuweisen es sei denn Sie implementieren einen VM Exit, um dies zu tun, was ein bisschen gefährlich wäre und ich glaube nicht, dass dies getan wird.

Wie wahrscheinlich ist das?

Nicht sehr. Dies hängt davon ab, ob VM Implementierungen vollständig beenden oder Speicher vom Gast auf dem Host mit einem netten Fehler in Ihrem Lesecode lesen. Außerdem muss dieser Fehler es Ihnen ermöglichen, den Absturz zu kontrollieren Auf diese Weise können Sie die Ausführung an die Speicheradresse Ihres Hosts erzwingen. Der Exit VM muss auf diesen Speicher zugreifen können.

Was ich nicht behandelt habe?

  1. Angriffe auf vorhandene Software-Stacks wie TCPIP. Die Sicherheitslücken hier sind die gleichen, als ob Sie ohnehin zwei physische PCs hätten.
  2. Vollständig durch Software implementierte Virtualisierung.
  3. Virtualisierung auf jedem anderen Chip. Dies gilt für Intel VT-kompatible Setups.

Schließlich hat ich habe zuvor argumentiert, dass Prozessisolation eine Form von Sandboxing ist. Wenn Sie diese und diese Antwort lesen, sollten Sie jetzt verstehen können, warum ich sie so definiere. Es gibt bemerkenswerte Ähnlichkeiten zwischen Prozessisolation und virtuellen Maschinen in x86.

Update

Also habe ich mich noch mehr damit beschäftigt, insbesondere mit der Forschung zu blauen Pillen. Was ich beschrieben habe, ist eine sehr vereinfachte Ansicht auf hoher Ebene. Ich habe mehr Details gefunden. Hier ist ein ganzes Papier von Invisible Things Lab. Es stellt sich heraus, dass ihre Verteidigung Diskussion das Konzept beinhaltete, den Ausführungszugriff auf Benutzermodus-Seiten ab Ring 0 zu verweigern, wodurch die direkte Ausführung von Daten verhindert wird, die die virtuelle Maschine in den Speicher gestellt hat. Es stellt sich heraus, dass dies in Intel-CPUs implementiert ist und Patches sind derzeit im Linux-Kernel vorhanden. Je nachdem, wie das geht, kann es durchaus vorkommen, dass Angriffe dieser Art viel schwieriger werden, selbst wenn Exploits existieren.

31
user2213

Ich habe einige Malware-Experimente in einem VM - hauptsächlich mit backtrack4 durchgeführt, um von einem Host zum nächsten zu gelangen. Ich bin hauptsächlich ein VMware Workstation-Benutzer.

Das größte Problem ergibt sich aus der Möglichkeit, dass die Netzwerkverbindung Ihres VM) zurück auf Ihr Host-Betriebssystem übertragen wird. Sie möchten das Netzwerk vollständig deaktivieren und/oder ein Netzwerk verwenden, das keinen Zugriff zurück auf Ihren Host hat .

Die Begrenzung des Speichers ist eine bewährte Methode. Ich halte es im Allgemeinen auf ungefähr ein Viertel, genau wie Sie. Die CPU-Zeit ist entweder auf die Anzahl der Kerne oder (wenn Sie feinkörnigere Steuerelemente in Ihrer Software haben) auf den Prozentsatz der für Ihre spezifische VM definierten CPU-Zeit begrenzt.

Gezielte Angriffe, die aus der virtuellen Umgebung ausbrechen können, existieren und sind im Handel erhältlich - wie die Erwähnungen von Cloudburst @ Hendrick - sind jedoch relativ selten. Es ist eine sehr gute Idee, Ihre Virtualisierungs-Patches auf dem neuesten Stand zu halten.

Siehe hier , hier und hier für Details.

11
Tim Brigham

Lassen Sie mich neben all den guten Informationen darüber, ob der Virus aus der VM entkommen kann, auf ein weiteres Problem hinweisen, das zu berücksichtigen ist:

Es ist möglich, dass bösartiger Code erkennt, ob er in einer virtuellen Maschine ausgeführt wird oder nicht . Dies wird häufig als Erkennung virtueller Maschinen oder "rote Pillen" bezeichnet, und es stehen vieleTechniken zur Verfügung.

Darüber hinaus verwenden einige Viren und andere Malware diese Techniken, um festzustellen, ob sie in einer VM ausgeführt werden, und schalten in diesem Fall ihre Nutzdaten aus (vermeiden Sie böswillige Maßnahmen). Sie tun dies, um den Leuten das Leben zu erschweren, die Malware zurückzuentwickeln oder zu erkennen.

Folglich ist ein VM kein guter Weg, um herauszufinden, was eine Malware tut. Die Malware kann möglicherweise nicht aus der VM ausbrechen, aber gleichzeitig möglicherweise nicht Tun Sie alles, wenn es in der VM ausgeführt wird. Wenn Sie es in der VM) ausführen und sehen, dass es nichts bewirkt, entscheiden Sie, dass es harmlos ist, und entscheiden Sie sich dann, es außerhalb der VM - Sie könnten in Besitz genommen werden. Seien Sie da draußen vorsichtig.

10
D.W.