Wie überprüfe ich eine ausführbare Datei, um sicherzustellen, dass sie nicht bösartig ist?


10

Ich habe mich gefragt, ob es ein Tool oder eine Technik gibt, um eine ausführbare Datei in einer isolierten Umgebung auszuführen, möglicherweise in einer virtuellen Maschine. Während das Programm ausgeführt wird, möchte ich in der Lage sein, die Anwendung zu überwachen, dh alles zu sehen, was die ausführbare Datei tut (Datei- und Netzwerkzugriff).

Auf diese Weise möchte ich überprüfen können, ob die ausführbare Datei böswillig ist, dh Vorgänge ausführt, die sie nicht ausführen sollte (Lesen / Schreiben in Dateien, Abhören / Herstellen einer Verbindung zu Netzwerkports, ...).

Mit einer grafischen Oberfläche hätte ich nichts dagegen.


2
@EliahKagan: Wenn ich die Frage richtig verstehe, fragt das OP nach "einem (Tool), mit dem ich alles sehen kann, was die ausführbare Datei tut" - stellen Sie sich vor, Sie könnten ausführen sandbox somebinaryund das imaginäre sandboxProgramm würde alle somebinarygelesenen oder geschriebenen Dateien protokollieren IPs / Ports verbunden, Daten übertragen usw. Das wäre eine nützliche Sache, ich würde auch gerne wissen, ob so etwas existiert (und ohne ein solches Tool wäre es sinnlos, ein Programm zu beobachten, das in einer VM ausgeführt wird, wie Sie kann sowieso nicht sagen, was es dort macht). Gute Frage.
Sergey

2
Relevante Frage zu UL.SE, die ich zuvor gestellt habe: Wie überwache ich geöffnete Dateien eines Prozesses in Echtzeit? (nicht nur über Dateien, sondern auch über das Netzwerk) Denken Sie daran, dass der Schaden bereits eingetreten ist, sobald Sie dies sehen.
Gertvdijk

2
Ich habe eine Meta-Frage zum Schließen dieser Frage gestellt: meta.askubuntu.com/questions/5871/… - Ich glaube nicht, dass sie hätte geschlossen werden sollen.
Sergey

Antworten:


10

ist ein Tool oder eine virtuelle Maschine, um eine ausführbare Datei darin auszuführen

Ja, dies wird als Anwendungsvirtualisierung bezeichnet .

LXC (Linux Containers) ist ein häufig verwendetes Tool, um dies einzurichten. Sie können damit ein vollständig getrenntes Netzwerk für diese Anwendung einrichten und es in eine Art virtuelle Maschine "sandboxen", ähnlich wie bei einer Chroot. Dies dient hauptsächlich Sicherheitszwecken (einem "Gefängnis"), nicht wirklich der Prüfung.

Ich denke, es liegt etwas außerhalb des Rahmens der Frage, die vollständigen LXC-Container zu erklären und sie genau zu prüfen. Im Folgenden finden Sie jedoch einige Informationen zu den ersten Schritten.

Während das Programm ausgeführt wird, möchte ich alles sehen können, was die ausführbare Datei tut (Datei- und Netzwerkzugriff).

Dies kann erreicht werden mit straceund ich habe die gleiche Frage unter Unix & Linux gestellt:

Wie dort beantwortet , kommt es im Grunde darauf an

strace -t -e trace=open,close,read,getdents,write,connect,accept command-here

Wichtig: Sobald Sie es sehen, ist der Schaden bereits eingetreten.


LXC- Anwendungscontainer

Aus diesem Artikel . Es kommt darauf an:

  1. lxc-macvlan.conf Konfigurationsdatei:

    # example as found on /usr/share/doc/lxc/examples/lxc-macvlan.conf
    # Container with network virtualized using the macvlan device driver
    lxc.utsname = alpha
    lxc.network.type = macvlan
    lxc.network.flags = up
    lxc.network.link = eth0 # or eth2 or any of your NICs
    lxc.network.hwaddr = 4a:49:43:49:79:bd
    lxc.network.ipv4 = 0.0.0.0/24
    
  2. Starten Sie es mit lxc-execute:

    sudo lxc-execute -n bash-test2 -f lxc-macvlan.conf /bin/bash
    

Beachten Sie, dass LXC sowohl System- als auch Anwendungstypen von Containern anbietet. Hier suchen Sie nach Anwendungscontainern.


1
LXC ist noch nicht fertig und derzeit unsicher. Wird beispielsweise /sysnicht virtualisiert und Änderungen, /sysdie am Container vorgenommen wurden, werden /sysam Host vorgenommen. Bei einer schnellen Suche im Web gibt es einige Artikel, die dokumentieren, wie man aus einem Container "entkommt". LXC wird eine gute Lösung für das Problem sein, ist es jedoch derzeit nicht und sollte nicht als Sicherheitstool verwendet werden.
Andrea Corbellini

1
Übrigens verwendet die veröffentlichte Beispielkonfiguration keine lxc.mountOptionen. Dies bedeutet, dass der ausführbare Lauf auf das Dateisystem des gesamten Benutzers zugreifen kann.
Andrea Corbellini

10

Was Sie suchen, ist ein Tool, das zeigt, wie ein Programm mit dem System (genauer gesagt mit dem Kernel) interagiert. Programme interagieren mit dem System über Syscalls. Beispiele für Systemaufrufe sind:

  • open - zum Öffnen einer Datei verwendet;
  • readund write- zum Lesen / Schreiben von / in einen Dateideskriptor verwendet wird;
  • connect - zum Verbinden eines Sockets mit einem Peer;
  • viele, viele andere (siehe man syscalls).

Der Punkt ist: Syscalls können mit verfolgt werden ptrace(2). Sie suchen also im Grunde nach Werkzeugen, die darauf basieren ptrace. Eines dieser Tools ist strace(1)eine Terminalanwendung, die einen Befehl als Argument verwendet und Folgendes ausgibt:

  • Das System ruft das Programm auf.
  • die Argumente, mit denen die Systemaufrufe ausgeführt wurden;
  • das Ergebnis der Systemaufrufe.

Die Ausgabe erfolgt in C-Form. Hier ist ein Beispiel:

$ strace cat test
execve("/bin/cat", ["cat", "test"], [/* 55 vars */]) = 0
/* ... */
open("test", O_RDONLY)                 = 3
/* ... */
read(3, "hello\n", 32768)               = 6
write(1, "hello\n", 6)                  = 6
read(3, "", 32768)                      = 0
/* ... */

Dort sehen Sie, dass cat testeine Datei mit dem Namen geöffnet test, deren Inhalt ( hello) gelesen und in die Standardausgabe eingefügt wird.

stracekann viel Ausgabe produzieren, lesen Sie also unbedingt die Manpage ( man strace), insbesondere die Dokumentation der -eAusgabe, mit der Sie nur die Syscalls sehen können, an denen Sie interessiert sind.

Leider sind mir keine grafischen oder benutzerfreundlichen Alternativen bekannt. Wenn Sie nach ihnen suchen möchten, ptracesollte eines Ihrer Suchbegriffe sein.


Über die Isolation gibt es viele Technologien. Am häufigsten werden Chroots, Linux-Container (die derzeit entwickelt und unvollständig sind), Software-Virtualisierung und Paravirtualisierung verwendet. Dies ist jedoch ein Thema, das viel zu groß ist, um es zu diskutieren. Ich würde vorschlagen, eine neue Frage zu öffnen, wenn Sie weitere Details wünschen.


5

Schauen Sie sich AppArmor an . Sie können ein eingeschränktes Profil für eine ausführbare Datei hinzufügen und es in den "Beschwerde" -Modus versetzen, in dem Aktionen zulässig, aber protokolliert werden, was Ihrer Meinung nach Ihren Anforderungen entspricht.

Beachten Sie jedoch, dass dies nicht wirklich ausreicht. Eine clevere böswillige Binärdatei kann möglicherweise erkennen, dass sie beobachtet wird, und keine böswilligen Aktionen ausführen, es sei denn, sie wird nicht beobachtet.

AppArmor geht noch weiter und ermöglicht es, eine Anwendung für immer auf nur genehmigte Vorgänge zu beschränken. Apps, die im Ubuntu Software Center landen, werden mit AppArmor-Profilen geliefert.


5

Wie Sie bereits festgestellt haben, ist eine virtuelle Maschine besser geeignet, um Isolation bereitzustellen, insbesondere wenn Sie Grund zu der Annahme haben, dass eine ausführbare Datei in erster Linie bösartig ist. Aber auch das ist nicht perfekt, da Schwachstellen in der Virtualisierungsplattform (sowohl Hardware als auch Software) durch bösartigen Code ausgenutzt werden können, um auszubrechen. Hier ist ein Beispiel für eine Virtualisierungsanfälligkeit in der realen Welt: http://www.kb.cert.org/vuls/id/649219


1

Sie könnten einen Snap erstellen .

Snaps sind "durch Sicherheitsmechanismen auf das Betriebssystem und andere Apps beschränkt, können jedoch Inhalte und Funktionen mit anderen Snaps gemäß detaillierten Richtlinien austauschen, die vom Benutzer und den Standardeinstellungen des Betriebssystems gesteuert werden." (von http://snapcraft.io/docs/snaps/intro )

Diese bieten neben AppArmor eine weitere Isolierung, beispielsweise auch unter Verwendung von seccomp .

Darüber hinaus kann ein Snap für eine einfache Verteilung und atomare Updates auf Ihrem System in sich geschlossen sein.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.