GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Aktivieren sudo und .profile/.bashrc die Eskalation trivialer Berechtigungen?

Alles, was Sie mit einem kompromittierten Konto tun können, kann auch ein Angreifer tun.

Im Grunde liegt das daran, dass Linux nicht die Isolierung zwischen Benutzern anbietet zwischen einzelnen Prozessen, die unter demselben Benutzer ausgeführt werden. Jeder Prozess, der unter einem bestimmten Benutzer ausgeführt wird, hat die gleichen Fähigkeiten wie alle anderen Prozesse, die unter diesem Benutzer ausgeführt werden.

Stimmt es, dass die ausführbare System-Sudo-Datei auf diese Weise umgangen werden kann?

Ja, und auch sonst. Wenn Sie die Rechte auf root auf einem kompromittierten, nicht privilegierten Konto erhöhen, kompromittieren Sie root. Wenn Sie Berechtigungen von root mit su löschen zu einem unprivilegierten Konto kompromittieren Sie auch root! Sie können Berechtigungen für ein nicht vertrauenswürdiges Konto niemals sicher erhöhen. Es ist zwar möglich, das System mit PATH auszunutzen , ist es auch möglich, den Bash-Prozess selbst zu kapern, um Tasteneingaben auszuspähen. Ausführung mit noexec deaktivieren ist weiterhin nicht sinnvoll, da Interpreter (bash, python, perl, etc) weiterhin laufen. Die noexec Option ist und war nie als Sicherheitsmerkmal konzipiert, obwohl es regelmäßig als solches angeboten wird.

Eine unvollständige Liste von Möglichkeiten, wie ein Angreifer die Verwendung von sudo kapern könnte oder su :

  • Mit dem LD_PRELOAD Variable auf dem übergeordneten Prozess (z. B. bash ).

  • Einhaken des übergeordneten Prozesses mit ptrace() oder process_vm_writev() .

  • Mit dem X11-Protokoll Tastenanschläge in den Terminal-Emulator schnüffeln oder einfügen.

  • Aliase oder Funktionen erstellen, um den eigentlichen sudo zu umschließen ausführbar.

Ich habe diese ausführlicher in meiner Antwort auf eine andere Frage erläutert.

Warum sind Desktop-Linux-Systeme standardmäßig so eingerichtet, dass sie leicht ausgenutzt werden können?

Das Erhöhen von Berechtigungen für ein nicht vertrauenswürdiges Konto ist etwas, von dem Sie nicht erwartet werden machen. Ganz zu schweigen davon, dass Desktop-Linux ein nachträglicher Einfall im großen Schema der allgemeinen *nix-Architektur ist. Es ist ein Versagen des Sicherheitstheaters, das unaufhörlich dieselben schlechten Ratschläge wiederholt, nicht ein Versagen der Sicherheitsarchitektur von Linux selbst. Die Leute sagen immer wieder, dass sie sudo verwenden sollen für root, da viele neue Benutzer stattdessen alles ausführen als root, sogar ihre Browser! In diesem Fall ist es besser, sudo zu verwenden . Es ist schädlich, wenn der Benutzer bereits schlau genug ist, nicht für alles root zu verwenden.

Beachten Sie, dass sudo ist in hohem Maße konfigurierbar und kann so gestaltet werden, dass nur bestimmte Befehle zugelassen werden. Hier glänzt es wirklich. Sie können sudo konfigurieren damit Sie nur apt-get update ausführen können als root (mit oder ohne Passwort) und alles andere ablehnen. Das würde einen Angreifer zusätzlich daran hindern, irgendetwas anderes zu tun als ... naja ... ein Software-Update durchzuführen.

Es ist wichtig, sich daran zu erinnern, dass Sie sich selbst ins Knie schießen können, wenn Sie Programme auf die Whitelist setzen, die nicht dafür ausgelegt sind, über einen nicht vertrauenswürdigen Benutzer als Root ausgeführt zu werden, selbst wenn Sie es so konfigurieren, dass nur bestimmte Befehle als Root ausgeführt werden können. Ich habe ein reales Beispiel von jemandem gesehen, der versucht hat, VeraCrypt auf diese Weise auszuführen, und erklärt, warum es unsicher ist. Die Idee war, dass VeraCrypt sicher als Root ausgeführt werden kann, also sollte es sicher sein, sudo zu verwenden um es als nicht vertrauenswürdigen, nicht privilegierten Benutzer auf root zu erhöhen. Es stellt sich heraus, dass die Idee fehlerhaft ist und eine triviale Rechteausweitung zulässt!

Sollte die Standardmethode zum Aufrufen von sudo nicht sicherstellen, dass es sich tatsächlich um die vom System bereitgestellte ausführbare Datei handelt (niemand wird jedes Mal /usr/bin/sudo eingeben)?

Die Eingabe des vollständigen Pfads schützt Sie nicht! Sie können ganz einfach eine Funktion erstellen, die ein vorangestelltes / enthält , und es wird die echte ausführbare Datei überschreiben. Selbst wenn die ausführbare Datei sichergestellt hat, dass sie echt ist, und versucht hat, das Sniffing zu unterbinden, könnte ein böswilliger Prozess den bash entführen Tastenanschläge unabhängig von sudo verarbeiten und schnüffeln , was es unmöglich macht, aus seiner Sicht zu erkennen.

$ function /usr/bin/sudo { echo 'hijacked!'; }
$ /usr/bin/sudo id
hijacked!

In einer solchen Umgebung scheint die Verwendung von sudo grundsätzlich unsicher zu sein, und man wäre besser dran, die Anmeldung als root zu aktivieren und sich auf einem separaten TTY anzumelden.

Das ist immer der Fall. Beachten Sie, dass selbst die Anmeldung bei einem anderen TTY nicht absolut sicher ist. Sie sollten SAK, die Secure Attention Key-Kombination, verwenden, um sicherzustellen, dass Sie mit einer echten Anmeldesitzung interagieren (agetty oder logind , zum Beispiel). SAK ist eine Tastenkombination, auf die der Kernel lauscht (und daher nicht vom Userspace unterdrückt werden kann). Wenn es dies erkennt, beendet es jeden Prozess im aktuellen TTY und löst die Anzeige der Anmeldeaufforderung aus. Wenn Sie zu einem echten, nicht kompromittierten TTY gewechselt haben, wird die Eingabeaufforderung nur verschwinden und erneut angezeigt. Wenn Sie sich auf einem entführten TTY befinden, wird der bösartige Prozess beendet und die echte Anmeldeaufforderung zurückgegeben.


Linux
  1. Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0?

  2. Verwenden Sie find sicher mit sudo

  3. Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0

  4. Warum wird auf einigen Linux-Systemen das Root-Dateisystem als /dev/root statt als /dev/<realer Geräteknoten> in mtab angezeigt?

  5. Sollten Websites gemäß der empfohlenen Verwendung in /var/ oder /usr/ leben?

Legen Sie das Kali-Root-Passwort fest und aktivieren Sie die Root-Anmeldung

Ansible SSH-Authentifizierung und Rechteausweitung

Die Dateien /proc/mounts, /etc/mtab und /proc/partitions verstehen

Installieren Sie Binärdateien in /bin, /sbin, /usr/bin und /usr/sbin, Interaktionen mit --prefix und DESTDIR

Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?

Linux /-Ordner und /root-Ordner