Gibt es eine Möglichkeit, einen Benutzer daran zu hindern, ausführbare Dateien zu erstellen und auszuführen?

31

Ransomware-Angriffe könnten Zero-Day-Exploits verwenden, aber oft täuscht ein Angreifer einen leichtgläubigen Benutzer nur durch Herunterladen und Klicken zum Ausführen einer ausführbaren Datei.

Angenommen, wir haben einen naiven Benutzer und möchten ihn auf den normalen Pfad beschränken. Gibt es eine Möglichkeit, sie daran zu hindern, eine Datei mit ausführbaren Rechten zu erstellen?

Oder gibt es generell eine Möglichkeit, eine Zugriffssteuerungsliste zu erstellen und zu definieren, dass dieser Benutzer nur Dateien in dieser Liste ausführen darf?

Dov
quelle
7
So deaktivieren Sie die Ausführung auf diese Weise würde verbieten Benutzer in der Lage , etwas auf dem System zu tun. Es gibt keinen Mechanismus dafür, der in das System oder sogar in Software von Drittanbietern eingebaut ist, von denen ich weiß, dass sie diese Art der Sicherheitsabschaltung durchführen
Thomas Ward
3
Ich antworte nicht, sondern weise darauf hin, was Sie tun können: Fügen Sie noexec für benutzerbeschreibbare Reittiere hinzu. verhindert keine Skripte, sondern die eigentliche binäre Ausführung.
Sampo Sarrala
3
@ThomasWard, ist das nicht genau das, was eine eingeschränkte Shell ist?
Robert Riedl
7
@ThomasWard Es gibt ein allgemeines Konzept von 'ausführbaren Dateien auf der Whitelist', bei dem eine bestimmte Liste von (normalerweise signierten) ausführbaren Dateien zulässig ist und nichts anderes ohne erhöhte Berechtigungen ausgeführt werden kann. und sowohl Windows als auch OS X haben vernünftige Lösungen, die dies tun. Ich weiß jedoch nicht, ob es eine gute Ubuntu-Lösung (oder eine andere Linux-Lösung) für das Whitelisting von Anwendungen gibt.
Peteris
2
@Peteris, es gibt mehrere solcher Lösungen. Mein Favorit ist es, ein signiertes, schreibgeschütztes Dateisystem mit Ihren ausführbaren Dateien zu haben und alle anderen zu noexecmounten, wie ChromeOS es verwendet dm_verity, um die Integrität des Root-Dateisystems sicherzustellen. Für Leute, die nicht so hardcore sind, kann man EVM-Module verwenden; Weitere Informationen zu Gentoo finden Sie unter wiki.gentoo.org/wiki/Extended_Verification_Module .
Charles Duffy

Antworten:

50

Der spezifische Angriff, über den Sie Bedenken geäußert haben, ist:

Häufig täuscht ein Angreifer einen leichtgläubigen Benutzer lediglich durch Herunterladen und Klicken zum Ausführen einer ausführbaren Datei.

Zumindest in dem üblichen Fall, in dem die Datei in einem Webbrowser heruntergeladen wird, sollte dies in Ubuntu bereits verhindert werden, indem der Browser die Richtlinie Execute-Permission Bit Required einhält. Die direktesten relevanten Teile dieser Richtlinie sind:

  • Anwendungen, einschließlich Desktops und Shells, dürfen keinen ausführbaren Code aus Dateien ausführen, wenn es sich um beides handelt:

    • Es fehlt das ausführbare Bit
    • befindet sich im Home-Verzeichnis eines Benutzers oder im temporären Verzeichnis.
  • Dateien, die von einem Webbrowser, einem E-Mail-Client usw. heruntergeladen wurden, dürfen niemals als ausführbar gespeichert werden.

Wenn ein Benutzer also aufgefordert wird, ein Programm in einem Webbrowser herunterzuladen, und versucht, die Datei durch Doppelklicken auszuführen, wird sie nicht ausgeführt. Dies gilt auch dann, wenn die heruntergeladene Datei ein Shell-Skript oder sogar eine .desktop-Datei ist. (Wenn Sie sich jemals gefragt haben, warum .desktop-Dateien in Ihrem Home-Verzeichnis als ausführbar markiert werden müssen, obwohl es sich nicht wirklich um Programme handelt, ist dies der Grund.)

Benutzer können dieses Verhalten durch Konfigurationsänderungen ändern. Die meisten werden es nicht, und diejenigen, die es tun, sollten es wahrscheinlich auch nicht, aber darum müssen Sie sich nicht wirklich sorgen. Das größere Problem ist der komplexere Angriff, über den Sie sich Ihrer Meinung nach bereits Sorgen machen, bei dem eine böswillige Person (oder ein Bot) den Benutzer anweist, eine bestimmte Datei herunterzuladen, sie selbst als ausführbar zu markieren (über ihren Dateibrowser oder mit chmod) und dann starte es.

Leider würde die Einschränkung der Fähigkeit eines Benutzers, das Ausführungsbit für eine Datei zu setzen oder andere Dateien als die auf einer Whitelist auszuführen, das Problem nicht merklich mindern. Einige Angriffe werden bereits funktionieren, und diejenigen, die nicht einfach geändert werden können, tun dies. Das grundlegende Problem besteht darin, dass der Effekt des Ausführens einer Datei auch dann erzielt werden kann , wenn die Datei keine ausführbaren Berechtigungen besitzt .

Dies lässt sich am besten anhand eines Beispiels veranschaulichen. Angenommen, es evilhandelt sich um eine Datei im aktuellen Verzeichnis, die bei Angabe der ausführbaren Berechtigungen ( chmod +x evil) und von run ( ./evil) etwas Böses bewirken würde. Je nachdem, um welche Art von Programm es sich handelt, kann der gleiche Effekt durch eine der folgenden Methoden erzielt werden:

Keiner von denen, auch nicht die letzten, verlangt , dass die ausführbare Datei Berechtigungen oder sogar , dass der Benutzer sein kann der ausführbare Datei Berechtigungen geben.

Aber die böswilligen Anweisungen müssen nicht einmal so kompliziert sein. Betrachten Sie diesen nicht böswilligen Befehl, der eine der offiziell empfohlenen Methoden zum Installieren oder Aktualisieren von NVM ist :

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

Der Grund, der nicht böswillig ist, ist, dass NVM keine Malware ist. Wenn die URL jedoch zu einem Skript führt, das bei der Ausführung böse ist, wird das Skript mit diesem Befehl heruntergeladen und ausgeführt. Zu keinem Zeitpunkt müsste eine Datei ausführbare Berechtigungen erhalten. Das Herunterladen und Ausführen des in einer schädlichen Datei enthaltenen Codes mit einem einzigen Befehl wie diesem ist meines Erachtens eine ziemlich häufige Aktion, bei der Angreifer die Benutzer dazu verleiten.

Sie könnten versuchen, die verfügbaren Interpreter für die Benutzer einzuschränken. Es gibt jedoch keine Möglichkeit, dies zu tun, die sich nicht wesentlich auf die normalen Aufgaben auswirkt, zu denen Benutzer voraussichtlich in der Lage sein sollen. Wenn Sie eine extrem eingeschränkte Umgebung einrichten, in der fast alles, was ein Benutzer auf einem Computer tun möchte, unzulässig ist, z. B. ein Kiosk, auf dem nur einige Programme ausgeführt werden, bietet dies möglicherweise ein gewisses Maß an sinnvollem Schutz. Aber es hört sich nicht so an, als wäre es Ihr Anwendungsfall.

Die ungefähre Antwort auf Ihre Frage lautet "Nein". Die umfassendere Antwort lautet, dass Sie möglicherweise verhindern können, dass Benutzer Dateien ausführen, die nicht auf einer Whitelist aufgeführt sind. Dies ist jedoch im strengen technischen Sinne von "Ausführen" zu verstehen, der nicht erforderlich ist, um den vollen Effekt der Ausführung der meisten Programme oder Skripte zu erzielen. Um zu verhindern , dass , könnten Sie versuchen , die Whitelist sehr klein zu machen, so hat es keine Dolmetscher mit Ausnahme derjenigen , auflisten , die stark eingeschränkt werden könnte. Aber selbst wenn Sie das geschafft haben, konnten Benutzer nicht viel tun, und wenn Sie es so klein gemacht haben, dass sie sich nicht selbst verletzen konnten, konnten sie wahrscheinlich nichts tun. (Siehe Thomas Wards Kommentar .)

Wenn Ihre Benutzer sich selbst verletzen können, können sie dazu verleitet werden, sich selbst zu verletzen.

Möglicherweise können Sie verhindern, dass bestimmte Programme verwendet werden oder sich auf andere Weise schädlich verhalten. Wenn Sie sich bestimmte Muster ansehen, denen Ransomware tendenziell folgt, können Sie möglicherweise bestimmte häufige Fälle verhindern. (Siehe AppArmor .) Dies könnte einen gewissen Wert liefern. Aber es gibt Ihnen nichts, was der von Ihnen erhofften umfassenden Lösung nahe kommt.

Unabhängig von den technischen Maßnahmen (falls vorhanden), die Sie am Ende ergreifen, ist es am besten, die Benutzer zu schulen. Dazu gehört, dass sie keine Befehle ausführen, die sie nicht verstehen, und keine heruntergeladenen Dateien in Situationen verwenden, in denen sie nicht erklären können, warum dies einigermaßen sicher ist. Aber es beinhaltet auch Dinge wie das Erstellen von Backups, sodass der Schaden so gering wie möglich ist, wenn etwas schief geht (aufgrund von Malware oder auf andere Weise).

Eliah Kagan
quelle
6
Möglicherweise müssen die nichttechnischen Maßnahmen Kontaktinformationen für jemanden enthalten, der die Vernunft überprüfen kann , was er tun möchte. Wenn sie sich nicht sicher sind, rufen Sie an oder senden Sie eine Nachricht und fragen Sie. Das könnte die Versuchung beseitigen, zu raten.
Peter Cordes
1
Dies ist eine großartige Zusammenfassung über die Probleme und Befürchtungen, die hinter der Frage von OPs stehen
Robert Riedl,
Minor nit: " . ./eviloder source ./evilführt die Befehle in evil.sh" - Diese sourceBefehle führen die Befehle in aus, es evilsei denn, sie geben beispielsweise die Erweiterung an.. ./evil.sh
Bis auf weiteres angehalten.
@DennisWilliamson Danke - behoben! Das ist von einem älteren (nicht eingereichten) Entwurf der Antwort übrig geblieben, in dem ich verschiedene Skriptnamen verwendet habe. Mir wurde schnell klar, dass das albern war, aber anscheinend nicht alle Vorkommnisse zu ändern.
Eliah Kagan
1
Jedes Mal, wenn ich eine Möglichkeit sehe, eine Software zu installieren oder zu aktualisieren, bei der es darum geht, "dieses Skript einfach zu testen und auszuführen", kräuseln sich meine Zehennägel ein wenig. Nichts hindert jemanden daran, einen GitHub-Account / ein GitHub-Repo zu erstellen, der / das von einem einzelnen Zeichen abweicht, oder 0 anstelle von O verwendet, oder UTF-8-Zeichen verwendet, um Unklarheiten zu vermeiden und ein eigenes bösartiges Skript einzubinden ... dann brauchen Sie nur eines Tippfehler in Ihrem wget Befehl und Bam.
Ian Kemp
11

JA *


Es heißt eine eingeschränkte Shell.

Sie können verwenden /bin/rbash, was bereits in Ubuntu verfügbar ist, und dies mit einer eingeschränkten PATH-Variablen kombinieren . Das rbashwird die Ausführung von allem verbieten, was nicht drin ist $PATH.

Hinzufügen eines eingeschränkten Benutzers:

sudo adduser --shell /bin/rbash res-user

Erstellen Sie ein neues Verzeichnis, in das Binärdateien eingebunden werden können, auf die der Benutzer beschränkt ist:

sudo mkdir /home/res-user/bin

Ändern Sie die .profileDatei:

sudo vim /home/res-user/.profile

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

readonly PATH=/home/res-user/bin
export PATH

Machen Sie das .profile, bashrcund .bash_profileunveränderlich:

sudo chattr +i /home/res-user/.profile
sudo chattr +i /home/res-user/.bashrc
sudo chattr +i /home/res-user/.bash_profile

Jetzt geben wir dem Benutzer das Einzige, was er tun darf, nämlich Firefox öffnen:

sudo ln -s /usr/lib/firefox/firefox /home/res-user/bin/

Wenn wir res-useruns jetzt anmelden , können wir nur Firefox öffnen:

res-user@localhost:~$ /home/res-user/bin/firefox --version
Mozilla Firefox 68.0.1

Wir können uns unserer eingeschränkten Hülle nicht leicht entziehen:

res-user@localhost:~$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
-su: PATH: readonly variable

Der eingeschränkte Benutzer kann keine Dateien ausführbar machen oder starten:

res-user@localhost:~$ chmod +x script.sh 
Command 'chmod' is available in '/bin/chmod'
res-user@localhost:~$ bash script.sh 
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

Der eingeschränkte Benutzer kann keine bösen Skripte aus dem Internet ausführen, da der Benutzer die erforderlichen Befehle nicht ausführen kann:

res-user@localhost:~$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
Command 'wget' is available in '/usr/bin/wget'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
wget: command not found
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

* Es gibt Möglichkeiten, aus eingeschränkten Shells auszubrechen , aber wenn Ihr Benutzer dazu in der Lage ist, sind sie möglicherweise nicht so leichtgläubig, wie Sie denken.

Robert Riedl
quelle
2
Dies versucht "eine extrem eingeschränkte Umgebung zu erreichen, in der fast alles, was ein Benutzer auf einem Computer tun möchte, nicht erlaubt ist" (wie ich in meiner Antwort formuliert habe). res-userIch kann mich nicht grafisch anmelden. Das einzig Nützliche, was sie tun können, ist ssh -Xrein und rennen firefox. Sie können weitere Befehle zulassen, damit der Benutzer seine Arbeit erledigen kann. Dann wird das Ausbrechen leichter. Mehrere der verknüpften Methoden können zu Einzeilern gemacht werden (die ein Angreifer bereitstellen kann). Wenn Benutzer Einschränkungen als hinderlich empfinden, werden sie zu Experten, wenn es darum geht, sie zu umgehen, und bleiben dabei genauso versiert oder leichtgläubig wie zuvor.
Eliah Kagan
1
@EliahKagan ja, richtig. Sie müssten alles verknüpfen, was der Benutzer benötigt. Aber dies ist sehr nahe daran, [...] dass es eine Möglichkeit gibt, eine Zugriffssteuerungsliste zu erstellen und zu definieren, dass dieser Benutzer nur Dateien in dieser Liste ausführen darf . So könnte es OP helfen. Das Ausbrechen dieser Muscheln ist nicht unmöglich, aber ziemlich schwierig. Wir hatten ähnliche Einstellungen für den externen Zugriff auf bestimmte Ressourcen oder Jump-Hosts. Ich bezweifle, dass es weitreichende Angriffe gegen Restricted-Shell-Setups gibt. Wenn Sie es mit einem gezielten Angriff zu tun haben , bei dem der Angreifer die Umgebung kennt, sind alle Wetten sowieso ungültig.
Robert Riedl
4
Ich würde die Fußnote in die erste Zeile Ihrer Antwort setzen.
Bis auf weiteres angehalten.
Wahrscheinlich ist es besser, wenn sie Chrome im Kiosk-Modus oder in einem anderen gehärteten Browser verwenden. Es sollte ziemlich einfach sein, ein Firefox-Plugin oder eine Erweiterung mit sehr hohen Berechtigungen und der Ausführung von Systembefehlen zu installieren. Stellen Sie in Firefox sicher, dass Sie die neueste Version verwenden und Erweiterungen nicht zulassen.
Benjamin Gruenbaum
Geben Sie dem Benutzer zum weiteren Schutz nur Schreibzugriff auf Dateisysteme, die mit der Option noexec bereitgestellt wurden.
Dan D.