Verhindern, dass Malware das Sudo-Passwort abruft


10

Ich höre oft Leute, die sudoals eines der Haupthindernisse für Malware, die einen Linux-Computer infiziert, genannt werden.

Das am häufigsten vorkommende Argument scheint wie folgt zu lauten: Zum Ändern der Systemkonfiguration sind Root-Berechtigungen erforderlich, und zum Erlangen von Root-Berechtigungen ist ein Kennwort erforderlich, sodass Malware die Systemkonfiguration nicht ändern kann, ohne nach einem Kennwort zu fragen.

Es scheint mir jedoch, dass auf den meisten Systemen die Eskalation von Berechtigungen standardmäßig trivial ist, sobald Malware ein Administratorkonto infiziert hat - die Malware muss nur warten, bis der Benutzer ausgeführt wird sudo.

Welche Methoden gibt es für Malware, um Root-Rechte zu erlangen, wenn der Benutzer ausgeführt wird sudo, und wie können wir uns davor schützen?

Bearbeiten: Ich bin speziell daran interessiert, mich vor einem kompromittierten Administratorkonto zu schützen. Das heißt, ein Konto mit vollständigen Root-Rechten sudo(z. B. das Benutzerkonto auf einem typischen Desktop-System).


Ein Beispiel für die Art von Dingen, nach denen ich suche, finden Sie in meiner Antwort . Ich hoffe, jemand kann einige der dort aufgeworfenen Sicherheitsrisiken (oder andere, an die er denken kann) näher erläutern und Möglichkeiten zur Minderung dieser Risiken bieten.
Zaz

Sie fragen nach etwas wie UAC oder einer sicheren Aufmerksamkeitssequenz in Windows. Unixy-Systeme haben das nicht. Der Weg für Administratoren besteht darin, ihre Konten nicht für dumme Dinge zu verwenden. Ein paar Dinge, die Sie in Ihrer eigenen Antwort erwähnen, können mit rollenbasierten und obligatorischen Zugriffskontrollsystemen wie SELinux oder Grsecurity verhindert werden. Dort können Sie Richtlinien festlegen, nach denen nicht root-beschreibbare Binärdateien nicht ausgeführt werden können, also keine Trojaner auf dieser Ebene. Übrigens, wenn Sie X nicht vertrauen, dann vertrauen Sie dem System überhaupt nicht, denn X wird mit Superuser-Berechtigungen ausgeführt.
Gegenmodus

Vielen Dank, ich habe mich mit SELinux befasst, aber es scheint eher für große Installationen gedacht zu sein, was viel Zeit für die Verwaltung und Einrichtung erfordert. Ich hatte auf etwas Einfacheres gehofft. Ich bin Entwickler, daher sind strenge Richtlinien zum Ausführen von Programmen auch keine Option.
Zaz

"X läuft mit Superuser-Berechtigungen" - Was? Auf einer Standard - Installation von X , startxfunktioniert gut als normaler Benutzer. Tatsächlich führe ich gerade X als normaler Benutzer aus.
Zaz

Ja, die Lernkurve ist steil. Schauen Sie sich Grsecurity an, es ist einfacher, aber dennoch leistungsstark. ~ Berechtigungen von X: Auf meiner Box ist der X-Server SUID-Root und führt einen Root aus.
Gegenmodus

Antworten:


9

Sobald eine Malware Zugriff auf das Konto eines Benutzers erhalten hat, kann sie:

1. Erstellen Sie einen Bash-Alias ​​(in der aktuellen Shell und in ~/.bashrc) für einen Befehl, der die [sudo] password for $USER:Eingabeaufforderung vortäuscht und das Kennwort des Benutzers stiehlt.

alias sudo='echo -n "[sudo] password for $USER: " && \
            read -r password && \
            echo "$password" >/tmp/sudo-password'

2. In ähnlicher Weise kann eine ausführbare Datei mit dem Namen sudoin platziert ~/.binund die PATHVariable geändert werden, um den gleichen Effekt zu erzielen:PATH="$HOME/.bin:$PATH"

3. Catch-Tastendrücke über den X-Server abfangen, auf das Wort achten sudound dann den Text zwischen den nächsten beiden EnterTastendrücken als Passwort versuchen .

4. Ähnliches kann in jeder Umgebung (Konsole, Wayland , X) mit z $LD_PRELOAD.

5. Wenn Malware eine Shell infiziert, die Anmeldeinformationen verwendet sudo, und diese sudozwischenspeichert, kann die Malware kontinuierlich überprüfen, ob dies sudoohne Kennwort möglich ist:

while : ; do
    echo | sudo -S echo "test" &>/dev/null && break
    sleep 10
done
sudo echo "We now have root access"


Verhütung:

1 & 2. Verwenden \/bin/sudo. Der \ignoriert Aliase und /bin/…ignoriert $PATH. Alternativ können Sie einen Alias ​​wie: hinzufügen ssudo="\/bin/sudo"und immer ssudoanstelle von verwenden sudo. Es ist unwahrscheinlich, dass ein Virus klug genug ist, um diesen Alias ​​neu zuzuordnen.

3. Vermeiden Sie es, Ihr Passwort einzugeben, wenn Sie X11 verwenden. Verwenden Sie stattdessen eine virtuelle Konsole oder Weston .

5. Setzen Sie timestamp_timeout=0ein /etc/sudoers.


Die einzige Möglichkeit, die Möglichkeit des Abhörens des sudoKennworts vollständig auszuschließen, scheint darin zu bestehen, es vollständig zu vermeiden. Melden Sie sich stattdessen als Root bei einer virtuellen Konsole an.

Laut Alexander Peslyak : "Die einzige sichere Verwendung für su [und sudo] besteht darin, von einem privilegierteren Konto zu einem weniger privilegierten zu wechseln ..."


Nebenbei bemerkt hat Sudo einige Gegenmaßnahmen:

  • sudoliest von ttystatt von stdin, alias sudo='tee -a /tmp/sudo-password | sudo'bricht also ab sudo(erfasst aber das Passwort).

sudo fragt nach dem Kennwort des Benutzers, damit die Malware das Kennwort des Benutzers erfasst, auf den sie bereits Zugriff hatte.
Rob

3
@rob: Es hängt tatsächlich davon ab, wie Sie sudokonfiguriert wurden. In beiden Fällen verfügt die Malware jetzt über das erforderliche Kennwort. sudoWenn der Benutzer über Root-Zugriff verfügt, gilt dies auch für die Malware.
Zaz

3

Es gibt keinen wirklichen Schutz.

Der passwortgeschützte Zugriff auf sudo geht auf eine Zeit vor komplexen Shell-Umgebungen mit Befehlen zurück, die von Shims ausgeführt werden. Sobald das Passwort übermittelt wurde, gibt es ein Zeitfenster, in dem ein Shim Befehle über sudo ohne Benachrichtigung und mit vollständiger Systemsteuerung ausführen kann.

Wenn ich Zugriff haben wollte, würde ich eine nützliche Unterlegscheibe für Bash und Zsh und Fish usw. erstellen. Ich würde die ausgeführten Befehle überwachen. Kurz nachdem ein Sudo mit dem Status Null zurückgekehrt ist, würde ich anfangen, "sudo chmod + s / bin / sh" oder andere Gemeinheiten auszugeben.

In dem Moment, in dem sudo ein zufriedenstellendes Kennwort erhalten hat und Sie Shells haben, die Befehle ausführen, um eine Eingabeaufforderung zu erhalten, sind Sie möglicherweise in Schwierigkeiten. Es gibt keinen anderen Schutz als Optimismus.

Andere Antworten haben sich auf den Schutz des Passworts konzentriert. Als Angreifer würde ich mir darüber keine Sorgen machen. Ich würde mich auf die Dauer konzentrieren, nachdem das Passwort vergeben wurde, wenn kein Passwort benötigt wird. Dies ist die riskanteste Zeit, in der der Angreifer am wenigsten tun muss, um das System vollständig zu gefährden.

Vor ihm schützen? Sie müssten Ihre RC-Dateien schützen. Überprüfen Sie alle Shims oder andere Befehle, die in Befehlszeilenansagen verwendet werden. Suchen Sie nach Co-Prozessen, die mit der Shell verbunden sind, und nach Tools, die zum Verwalten der Shell-Umgebung verwendet werden. Hauptverteidigung wären Host-Intrusion-Tools, aber das ist nachträglich. Angriffe verhindern? Nur einfache Shells ohne komplexe automatisierte Konfiguration und aktive Eingabeaufforderungen verwenden - das ist die Umgebung, für die sudo entwickelt wurde.

Ich habe Spiele mit anderen Entwicklern gespielt (1980er Jahre), bei denen wir versucht haben, Dinge zu schreiben, die das Terminal des anderen Entwicklers zum Einfügen von Befehlen erhalten - dies ist im Wesentlichen das gleiche Problem. Und wir haben es viel einfacher gemacht, Tools einzubetten, mit denen Befehle ohne sichtbare Ablaufverfolgung eingefügt werden können. :) :)


1

Ich bin mir nicht sicher, wie nicht autorisierte Benutzer Methoden anwenden können, um Root-Rechte zu erlangen, aber ich weiß, dass Sie etwas tun können, um sudoein bisschen weniger gefährlich zu werden , wenn Sie das sagen möchten. sudoMit dieser Option können Sie detaillierte Berechtigungen konfigurieren, um Benutzergruppen mit bestimmten Berechtigungen und bestimmten Befehlen zu definieren, die bestimmte Benutzer ausführen können.

SUDO - GRANULÄRE KONTROLLE

  • Benutzerbereich

    Hier können Sie Gruppen für die Benutzer einrichten, für die Sie Befehle angeben. Lässt eine Operationsgruppe einrichten.

    User_Alias  OPS = bob, jdoe 
    

    Dadurch wird die OPS-Gruppe erstellt und die Benutzer mit dem Namen bob und jdoe werden in die Gruppe aufgenommen

  • Cmnd_Alias

    Hier geben wir bestimmte Befehlssätze an. Sie müssen den vollständigen Pfad und alle gewünschten Befehlsoptionen angeben. Lässt die Operationsgruppenbefehle einrichten.

    Cmnd_Alias OPSCMD = /admin/bin/srvbkup, /admin/bin/test 
    

    Dadurch werden die drei angegebenen Befehle zur Befehlsgruppe OPSCMD hinzugefügt.

  • Benutzerberechtigungsspezifikation

    Hier werden wir die Gruppen verwenden, die wir bisher eingerichtet haben.

    OPS  ALL=(root)  OPSCMD 
    

    Als erstes geben wir die Benutzer an. Hier verwenden wir die von uns eingerichtete OPS-Gruppe. Dann bedeutet ALL, dass es für alle Server gilt. Dies ist nur dann nützlich, wenn Sie oder sudo über mehrere Server mit jeweils derselben Konfigurationsdatei ausführen. Als Nächstes geben wir den Benutzer an, unter dem die Operations-Gruppe die angegebenen Befehle ausführen soll. In diesem Fall möchten wir, dass sie als root ausgeführt werden. Zuletzt geben wir die Befehle an, die die OPS-Gruppe ausführen soll, insbesondere verwenden wir die von uns eingerichtete OPSCMD-Gruppe. Wenn Sie nicht möchten, dass sie bei jeder Verwendung von sudo ihr Kennwort eingeben, lautet die Befehlsspezifikation lieber NOPASSWD: OPSCMD.

Härten Sie Ihre sudoRichtlinien so stark ab, wie Sie Ihren Benutzern nicht vertrauen :)


Es tut mir leid, wenn mir die Frage nicht klar war, aber ich bin daran interessiert, mich vor kompromittierten Administratorkonten zu schützen, dh vor Konten mit vollständigen Root-Rechten sudo. Insbesondere denke ich an normale Desktop-Systeme.
Zaz

1

Wenn Sie an einem System interessiert sind, von dem Sie glauben, dass es kompromittiert ist, führen Sie "Rootkit" aus und überprüfen Sie mit "Tripwire" die Integrität des Dateisystems.

Außerdem sollten Sie die Sudo-Berechtigungen verbessern, da nicht alle Benutzer auf alle Root-Befehle zugreifen müssen, sondern über SUDO auf bestimmte Befehle zugreifen können.


0

Schauen Sie sich zunächst die /etc/sudoersDatei an.

Die Syntax wird user MACHINE=COMMANDSformatiert.

Zum Beispiel hat der Root-Benutzer root ALL=(ALL) ALL Dies bedeutet, dass der Root-Benutzer beliebige (alle) Befehle überall ausführen kann.

Wenn Ihr Eintrag auch hat ALL=(ALL), sind Sie fast gleich einem Root-Benutzer. Wenn dies nicht der Fall ist und Sie nur über bestimmte eingeschränkte Berechtigungen verfügen, kann der Angreifer / die Malware nur so viel tun, wie Ihre Sudo-Berechtigung kann.

Tipps, die Ihnen helfen können:

  1. Untersuchen Sie Ihre /etc/sudoersDatei.
  2. Führen Sie einen Sicherheitsscanner wie chkrootkit, rootkit hunter, Config server Exploit scanner, snort usw. aus.
  3. Verwenden Sie den visudoBefehl, um die Berechtigungen Ihrer sudoers-Datei zu bearbeiten und zu ändern.
  4. Führen Sie die Scanner erneut aus.

Referenz: Linux-Manpage von sudoers und sudo man sudoers

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.