Viele Leute (einschließlich des Securing Debian Manual ) empfehlen, /tmp
mit den noexec,nodev,nosuid
Optionen zu mounten. Dies wird im Allgemeinen als ein Element einer Tiefenverteidigungsstrategie dargestellt, indem die Eskalation eines Angriffs verhindert wird, bei dem eine Datei geschrieben wird, oder ein Angriff eines Benutzers mit einem legitimen Konto, aber keinem anderen beschreibbaren Bereich.
Im Laufe der Zeit bin ich jedoch auf Argumente gestoßen (am prominentesten von Debian / Ubuntu-Entwickler Colin Watson) noexec
, die aus ein paar möglichen Gründen eine nutzlose Maßnahme sind:
- Der Benutzer kann
/lib/ld-linux.so <binary>
versuchen, den gleichen Effekt zu erzielen. - Der Benutzer kann weiterhin vom System bereitgestellte Interpreter für Skripts ausführen, die nicht direkt ausgeführt werden können
In Anbetracht dieser Argumente ist das potenzielle Bedürfnis nach mehr Konfiguration (z. B. nach debconf
einem ausführbaren temporären Verzeichnis) und der potenzielle Komfortverlust eine lohnende Sicherheitsmaßnahme? Welche anderen Löcher, die Sie kennen, ermöglichen die Umgehung?
Antworten:
Hier sind die Argumente für den Nutzen, den ich mir bisher ausgedacht habe:
Moderne Kernel beheben die
/lib/ld-linux.so
Lücke, sodass es nicht möglich ist, ausführbare Seiten aus einemnoexec
Dateisystem abzubilden .Der Dolmetscher-Punkt ist sicherlich immer noch ein Problem, obwohl ich weniger von einem halte, als die Leute behaupten könnten. Der Grund, auf den ich kommen kann, ist, dass es zahlreiche Sicherheitslücken in Bezug auf die Eskalation von Berechtigungen gab, die darauf beruhten, dass bestimmte fehlerhafte Systemaufrufe ausgeführt wurden. Ohne einen Angreifer, der eine Binärdatei bereitstellt, wäre es viel schwieriger, böse Systemaufrufe zu tätigen. Außerdem sollten Skriptinterpreter nicht privilegiert sein (ich weiß, dass dies in der Vergangenheit manchmal nicht der Fall war, wie bei einem Suid Perl) und daher ihre eigene Verwundbarkeit benötigen, um bei einem Angriff nützlich zu sein. Anscheinend ist es möglich , zumindest Python zu verwenden, um einige Exploits auszuführen.
Viele "vorgefertigte" Exploits versuchen möglicherweise, ausführbare Dateien zu schreiben und auszuführen
/tmp
, undnoexec
verringern so die Wahrscheinlichkeit, dass sie zu einem Skriptangriff führen (etwa im Fenster zwischen der Offenlegung von Sicherheitslücken und der Installation von Patches).So gibt es immer noch einen Sicherheitsvorteil der Montage
/tmp
mitnoexec
.Wie in beschrieben Debians Bugtracker , Einstellung
APT::ExtractTemplates::TempDir
inapt.conf
ein Verzeichnis , das nicht istnoexec
und zugänglich root würde die Debconf Sorge vermeiden.quelle
Für viele Debian-Pakete muss / tmp ausführbar sein, damit das Paket installiert werden kann. Diese werden oft als Fehler markiert (mit dem Schweregrad "normal" / "Wunschliste"):
https://www.google.com/#q=site:bugs.debian.org+noexec+/tmp
Ich habe genau diesen Fehler erhalten, als ich gerade heute einen aktualisierten Kernel für den Stable-Zweig installiert habe.
Es sieht also so aus, als ob Debian (und Derivate?) Noch nicht bereit ist, / tmp noexec einzuhängen ...
quelle
Fügen Sie Folgendes zu /etc/apt.conf oder /etc/apt/apt.conf.d/50remount hinzu
quelle
mount
durch/bin/mount
für den Fall, dass PATH geändert wird. Du wirst es nie wissen.Obwohl es für die meisten zusätzlichen Sicherheitsmaßnahmen, die Sie möglicherweise implementieren, Problemumgehungen gibt, verhindern selbst die am leichtesten zu umgehenden Sicherheitsmaßnahmen (wie das Mounten von / tmp noexec oder das Ausführen von SSH auf einem alternativen Port) automatisierte oder skriptgesteuerte Angriffe, die auf den Standardeinstellungen basieren Funktionieren. Es wird Sie nicht vor einem entschlossenen und sachkundigen Angreifer schützen, aber in weit über 99% der Fälle werden Sie keinem entschlossenen oder sachkundigen Angreifer gegenüberstehen. Stattdessen verteidigen Sie sich gegen ein automatisiertes Angriffsskript.
quelle
Erstens: Es deckt viele verschiedene Angriffsfälle ab. Es ist komisch, es auszuschalten, weil es einige bekannte Möglichkeiten gab (von denen einige sogar behoben wurden). Angreifer, die Code nach / dev / shm oder / tmp herunterladen, tun dies häufig.
Bei der Tiefenverteidigung geht es darum, die gängigsten Wegpunkte zu sichern. Durch jede Unterbrechung bleibt Ihr System überlebensfähig. Nicht sicher. Aber es wird auch eine Chance haben . Wenn sie ihre sekundäre Nutzlast nicht abrufen können, haben Sie eine gute Chance.
Der Punkt ist es so schwer zu machen , wie Sie leicht können, und 99% der Angriffe ausgeschnitten.
Zweitens: Es verhindert schlechte Praktiken (Ausführen von temporären Dateien, Ausführen von Hauptanwendungsinstallationen über / tmp anstelle eines Benutzers tmpdir), wobei Daten in / tmp verbleiben. Benutzerdefinierte Installer verstehen in der Regel TMPDIR. Auch wenn dies nicht der Fall ist, ist die Installationszeit als Zeitpunktaktion kein gültiger Grund, um ein Sicherheitsproblem dauerhaft zu deaktivieren .
Drittens: In Anbetracht anonymer Namespaces in / tmp (ein "Feature") möchten Sie wirklich einschränken, was dort abgelegt und von dort ausgeführt wird.
Forth: Convenience spielt dabei keine Rolle. Vorausgesetzt, wir betreiben Server für Geld und für einen Zweck: Wir sind für dieses Zeug verantwortlich. "Oh, ich habe / tmp nicht gesperrt, weil ich dann ein paar Minuten mehr brauche, wenn ich nächstes Jahr meine Software aktualisiere." Sicherlich wird es nicht nur diese eine Sache sein, die zwischen Erpressung und Ordnung steht. Ein guter Grund? Ich glaube nicht
Wie wäre es mit diesem:
Warte was?
Es gibt andere Maßnahmen, die viel mehr Aufwand, Erfahrung und Glück erfordern, um ein System zu sichern, und zu wissen, dass die Menschen nur über begrenztes Geld und eine begrenzte Lebensdauer verfügen und auch gerne Zeit mit ihren Familien verbringen möchten: Überspringen Sie nicht die einfachen Dinge.
quelle
Es gibt Anwendungen, für deren Installation / tmp ausführbar sein muss. Bei einem früheren Job, bevor ich dort ankam, hatten die Administratoren / tmp noexec eingerichtet, aber ich stellte fest, dass das Paket db2 nicht installiert werden konnte. Selbst wenn Sie das db2-Paket an einer anderen Stelle entpacken, kopiert die Installationsprozedur einige Dateien nach / tmp und erwartet, dass sie ausgeführt werden können, was natürlich fehlschlug, wenn die Berechtigung verweigert wurde. Wenn Sie nicht wissen, dass das Dateisystem noexec gemountet ist, ist dies möglicherweise etwas irreführend. Die Installation konnte erst fortgesetzt werden, nachdem ich / tmp ohne noexec erneut gemountet habe.
Der Punkt ist jedenfalls, dass mindestens ein kommerzielles Produkt / tmp benötigt, um nicht noexec gemountet zu werden, und es könnte auch andere geben. Ich habe keinen wirklich überzeugenden Grund dafür gefunden. Wenn Sie mehr Sicherheit wünschen, würde ich stattdessen mit Selinux arbeiten.
quelle
mount -o remount,exec /tmp
funktioniert, wenn Sie etwas installieren müssen ... (Ja, es ist trivial, dies zu umgehen, aber viele Angreifer scheinen sich nicht darum zu kümmern ...)