SUID/SGID-Missbrauch erkennen: Rechteausweitung unter Linux

Kurzfassung: Das SUID-Bit lässt ein Programm mit den Rechten seines Eigentümers laufen, meist root - unabhängig davon, wer es startet. Genau das macht es zum klassischen Weg der Rechteausweitung unter Linux: Ein Angreifer missbraucht ein vorhandenes SUID-Bordmittel (GTFOBins) oder setzt das SUID-Bit selbst auf eine Shell-Kopie. Erkennung aus Verteidigersicht: die Rechtetransition (uid ungleich euid) und der chmod-Syscall in auditd, die Eltern-Kind-Beziehung in Sysmon for Linux Event 1 und die SUID-Enumeration per find. Drei sigma-cli-validierte Sigma-Regeln, Härtung, eine Analysten-Checkliste und der Test im Lab. Serie "Angriff erkennen".

SUID/SGID-Missbrauch erkennen heißt, den Moment zu sehen, in dem aus einem normalen Nutzer root wird. Nach dem ersten Zugriff über eine Unix-Shell ist die Rechteausweitung der nächste Schritt, und SUID-Programme sind dafür einer der zuverlässigsten Wege, weil sie auf jedem System vorhanden sind und das Prinzip seit Jahrzehnten unverändert ist. Das SUID-Bit (Set User ID) und das SGID-Bit (Set Group ID) sind an sich nötig - passwd oder ping brauchen sie. Gefährlich werden sie, wenn ein SUID-Programm mehr kann als es soll oder wenn ein Angreifer das Bit selbst setzt. Dieser Beitrag aus der Serie "Angriff erkennen" zeigt aus Verteidigersicht, wo das Spuren hinterlässt, mit Logquellen, drei Sigma-Regeln, der Härtung, einer Checkliste und dem Test. Die Telemetrie-Grundlagen stehen unter Linux-Sicherheitsmonitoring.

Einordnung in ATT&CK: MITRE führt den Missbrauch von SUID und SGID als T1548.001 (Abuse Elevation Control Mechanism: Setuid and Setgid) unter der Taktik Privilege Escalation. In dieser Serie steht der Beitrag in der Spalte Privilege Escalation. Die vorgeschaltete Suche nach SUID-Dateien gehört zu T1083 (File and Directory Discovery); die dritte Regel unten ist entsprechend mit attack.discovery getaggt, die ersten beiden mit attack.privilege-escalation und attack.t1548.001.

Was der Angreifer tut

Der Weg über SUID hat wenige, klar abgegrenzte Varianten. Bewusst auf der Ebene des Prinzips, nicht als Anleitung:

  • Vorhandenes SUID-Bordmittel missbrauchen. Manche Programme mit SUID-Bit lassen sich dazu bringen, eine Shell zu starten oder beliebige Dateien zu lesen und zu schreiben. Steht das Bit, laufen diese Aktionen mit den Rechten des Eigentümers, meist root. Welche Programme das können, ist in GTFOBins dokumentiert.
  • SUID-Bit selbst setzen. Hat der Angreifer schon einmal Root-Rechte, setzt er das SUID-Bit per chmod auf eine Kopie der Shell oder ein eigenes Programm. Danach genügt ein normaler Nutzer-Aufruf, um wieder root zu werden - eine einfache, dauerhafte Hintertür.
  • Aufklärung zuerst. Vor dem Missbrauch sucht der Angreifer die vorhandenen SUID-Dateien, klassisch mit find / -perm -4000. Das ist der Recon-Schritt, der die Angriffsfläche sichtbar macht.
  • Das Prinzip dahinter. Beim Start eines SUID-Programms bleibt die reale Benutzerkennung (uid) erhalten, die effektive (euid) wechselt auf den Eigentümer. Diese Abweichung von uid und euid ist die verräterische Spur.

Der gemeinsame Nenner ist entweder ein frisch gesetztes SUID-Bit oder ein SUID-Programm, das eine Shell startet. Beides ist gut erkennbar.

Welche Logquellen die Technik zeigt

  • auditd (die wichtigste Quelle). Zwei Spuren: Erstens der chmod-Syscall, der das SUID-Bit setzt - eine passende Regel ist -a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a1&04000 -k setuid. Zweitens die execve-Datensätze, in denen sich bei einem SUID-Programm die reale und die effektive Benutzerkennung unterscheiden (uid ungleich euid) - der direkte Beleg einer Rechtetransition.
  • Sysmon for Linux. Event 1 (Prozesserstellung) liefert die Eltern-Kind-Beziehung und die Kommandozeile, mit der sich das GTFOBins-Muster erkennen lässt: ein Bordmittel wie find oder vim als Elternprozess einer Shell.
  • Dateiebene. Ein neu gesetztes SUID-Bit ist eine Attributänderung, die der chmod-Syscall in auditd sichtbar macht. Ein regelmäßiger Abgleich der SUID-Dateien gegen eine Baseline deckt auch Bits auf, die zwischen zwei Messungen hinzukamen.
  • Prozess-Telemetrie für Recon. Die SUID-Suche per find erscheint mit ihrer Kommandozeile in auditd (execve) und Sysmon for Linux Event 1.

Das Muster im Log

Ein chmod, das ein SUID-Bit setzt, ist außerhalb von Paketinstallationen fast nie legitim - besonders verdächtig, wenn das Ziel in /tmp, /dev/shm oder einem Home-Verzeichnis liegt oder eine Kopie einer Shell ist. Das zweite Muster ist ein bekanntes Bordmittel, das als Elternprozess einer Shell auftaucht: find, vim, awk oder env, die /bin/sh starten, sind das klassische GTFOBins-Signal. Das dritte ist die SUID-Suche per find kurz nach einem frischen Shell-Zugriff. Einzeln sind diese Signale unterschiedlich stark; zusammen in kurzer Folge auf demselben System ergeben sie das Bild einer Rechteausweitung. Am genauesten ist die uid-ungleich-euid-Spur in auditd, weil sie die Transition direkt belegt.

Drei Sigma-Regeln

Die Regeln sind mit sigma-cli validiert und nutzen die Linux-Logquelle process_creation. Die erste fängt das Setzen des SUID-Bits, die zweite das GTFOBins-Muster, die dritte die SUID-Enumeration. Die Übersetzung ins SIEM steht unter Sigma-Regeln.

1. SUID- oder SGID-Bit per chmod gesetzt (T1548.001). Das deutlichste Signal, weil außerhalb von Installationen kaum legitim.

Sigma
title: SUID- oder SGID-Bit per chmod gesetzt
id: be6ce006-b899-4dbf-9c05-5ff53a049d13
status: experimental
description: Erkennt das Setzen des SUID- oder SGID-Bits auf eine Datei per chmod.
  Ein Angreifer macht so ein Programm (oft eine Shell-Kopie) dauerhaft mit den
  Rechten seines Eigentuemers ausfuehrbar und legt sich damit eine Hintertuer zur
  Rechteausweitung an (Setuid and Setgid).
references:
  - https://attack.mitre.org/techniques/T1548/001/
author: blue-team.net
tags:
  - attack.privilege-escalation
  - attack.t1548.001
logsource:
  product: linux
  category: process_creation
detection:
  selection_img:
    Image|endswith: '/chmod'
  selection_mode:
    CommandLine|contains:
      - 'u+s'
      - 'g+s'
      - '+s '
      - '4755'
      - '6755'
      - '4711'
      - '2755'
  condition: selection_img and selection_mode
falsepositives:
  - Paketinstallationen und Setup-Skripte, die legitim SUID-Programme einrichten
level: high

2. SUID-fähiges Bordmittel startet eine Shell (T1548.001). Das GTFOBins-Muster als Eltern-Kind-Beziehung.

Sigma
title: SUID-faehiges Bordmittel startet eine Shell (GTFOBins)
id: b206fa2c-0baa-483e-8544-e3c2513eafd9
status: experimental
description: Erkennt ein bekanntes Bordmittel, das haeufig mit SUID-Bit vorliegt und
  dann eine Shell starten kann (GTFOBins-Muster wie find, vim oder awk). Steht das
  SUID-Bit, laeuft die Shell mit den Rechten des Eigentuemers, meist root. Die
  Eltern-Kind-Beziehung Bordmittel zu Shell ist das Signal.
references:
  - https://attack.mitre.org/techniques/T1548/001/
author: blue-team.net
tags:
  - attack.privilege-escalation
  - attack.t1548.001
logsource:
  product: linux
  category: process_creation
detection:
  selection_parent:
    ParentImage|endswith:
      - '/find'
      - '/nmap'
      - '/vim'
      - '/vi'
      - '/less'
      - '/more'
      - '/awk'
      - '/gawk'
      - '/env'
      - '/perl'
  selection_shell:
    Image|endswith:
      - '/sh'
      - '/bash'
      - '/dash'
  condition: selection_parent and selection_shell
falsepositives:
  - Skripte, die diese Werkzeuge legitim mit einer Shell kombinieren - nach Kontext und Konto pruefen
level: medium

3. Enumeration von SUID- und SGID-Dateien (T1083). Der Recon-Schritt davor - als Frühwarnung in Kombination mit einem frischen Shell-Zugriff zu werten.

Sigma
title: Enumeration von SUID- und SGID-Dateien
id: 5c199b3b-9ae2-4936-8641-7c3af08f26f0
status: experimental
description: Erkennt die Suche nach SUID- und SGID-Dateien per find mit -perm. Das
  ist der typische Aufklaerungsschritt vor einer Rechteausweitung ueber ein
  SUID-Bordmittel. Einzeln harmlos, in Verbindung mit einem frischen Shell-Zugriff
  aber ein fruehes Warnsignal.
references:
  - https://attack.mitre.org/techniques/T1083/
author: blue-team.net
tags:
  - attack.discovery
  - attack.t1083
logsource:
  product: linux
  category: process_creation
detection:
  selection_img:
    Image|endswith: '/find'
  selection_perm:
    CommandLine|contains: '-perm'
  selection_bits:
    CommandLine|contains:
      - '4000'
      - '2000'
      - '6000'
      - '-u+s'
      - '-g+s'
  condition: selection_img and selection_perm and selection_bits
falsepositives:
  - Administrative Audits und Sicherheits-Scanner, die regelmaessig nach SUID-Dateien suchen
level: low

Härtung

  • nosuid beim Mounten. Dateisysteme, auf denen Nutzer schreiben können - /tmp, /var/tmp, /home, /dev/shm und Wechseldatenträger - mit der Option nosuid einhängen. Dann wirkt ein dort gesetztes SUID-Bit nicht.
  • SUID-Inventar führen. Alle SUID- und SGID-Dateien einmal erfassen (find / -perm -4000 -o -perm -2000) und unnötige Bits entfernen. Jede Abweichung von dieser Baseline ist ein Alarm.
  • Capabilities statt SUID. Wo möglich, feingranulare Linux-Capabilities statt eines vollen SUID-root einsetzen, damit ein missbrauchtes Programm nicht gleich alle Rechte hat.
  • Dateiintegrität überwachen. Ein FIM-Werkzeug wie AIDE, das auch Berechtigungsbits prüft, meldet ein neu gesetztes SUID-Bit zuverlässig.

Der Test

Die Erkennung lässt sich im Lab gefahrlos prüfen, auf einer isolierten VM mit auditd (chmod- und execve-Regeln) und Sysmon for Linux:

  • Für Regel 1 eine Kopie der Shell anlegen und mit chmod u+s das SUID-Bit setzen. Der chmod-Syscall in auditd und die Kommandozeilen-Regel müssen greifen.
  • Für Regel 2 ein Bordmittel mit gesetztem SUID-Bit eine Shell starten lassen und prüfen, dass Sysmon for Linux Event 1 die Eltern-Kind-Beziehung zeigt und auditd die Abweichung von uid und euid meldet.
  • Für Regel 3 ein find / -perm -4000 -type f absetzen und den Treffer prüfen.
  • Breiter wird der Test mit den Fällen zu T1548.001 aus Atomic Red Team.

Fehlalarme und Tuning

  • Paketinstallationen. Installer setzen legitim SUID-Bits (passwd, sudo, mount, ping). Diese Änderungen fallen in Wartungsfenster und lassen sich über den Paketmanager-Prozess zuordnen.
  • Bordmittel im Normalbetrieb. find und awk starten in Skripten auch legitim andere Programme. Der Fokus liegt auf einer echten Shell als Kind und auf einem Kontext ohne offensichtlichen Skript-Hintergrund.
  • Sicherheits-Scanner. Audit- und Härtungswerkzeuge suchen regelmäßig nach SUID-Dateien. Ihre Konten und Zeitpläne gehören als Baseline hinterlegt, damit Regel 3 nicht dauernd auslöst.
  • Pfad entscheidet. Ein SUID-Bit auf einem Programm in /tmp, /dev/shm oder einem Home-Verzeichnis ist fast immer bösartig, eines in /usr/bin aus einem bekannten Paket meist harmlos.

Analysten-Checkliste

  • Welches Programm hat das SUID-Bit bekommen, und in welchem Pfad liegt es (/tmp, /dev/shm, Home sind sehr verdächtig)?
  • Wer ist Eigentümer der Datei - root?
  • GTFOBins-Muster: Startet ein Bordmittel wie find, vim oder awk eine Shell?
  • Zeigt auditd eine Abweichung von uid und euid beim Start des Programms?
  • Gab es kurz davor eine SUID-Enumeration per find?
  • Welches Konto und welcher vorangehende Shell-Zugriff führen zu dem Ereignis?

Fazit

SUID-Missbrauch ist eine der ältesten und zuverlässigsten Rechteausweitungen unter Linux und zugleich gut erkennbar, weil sie an zwei klaren Stellen Spuren hinterlässt: beim Setzen des Bits per chmod und beim Start eines SUID-Programms, das eine Shell öffnet. Wer den chmod-Syscall und die uid-ungleich-euid-Transition in auditd erfasst, das GTFOBins-Muster in Sysmon for Linux sieht und ein SUID-Inventar mit nosuid-Mounts pflegt, nimmt dem Angreifer diesen Weg nach oben. Der Zugang davor läuft meist über eine Unix-Shell, ein verwandter Weg der Rechteausweitung über Sudo. Weitere Techniken dieser Taktik führt das Lexikon nach Taktik unter Privilege Escalation.

NH

$ whoami

Norbert Hofmann

Cyber Defense Analyst im Security Operations Center eines Managed Security Service Providers. Red und Blue Teaming, Malware-Analyse, Incident Response und Security-Awareness-Trainings. Finalist bei „Deutschlands bester Hacker“ 2022, mehrere CVE-Einträge für WordPress-Plugins.