Abuse Elevation Control Mechanism: Sudo and Sudo Caching

Adversaries may perform sudo caching and/or use the suoders file to elevate privileges. Adversaries may do this to execute commands as other users or spawn processes with higher privileges.

Within Linux and MacOS systems, sudo (sometimes referred to as "superuser do") allows users to perform commands from terminals with elevated privileges and to control who can perform these commands on the system. The sudo command "allows a system administrator to delegate authority to give certain users (or groups of users) the ability to run some (or all) commands as root or another user while providing an audit trail of the commands and their arguments."[1] Since sudo was made for the system administrator, it has some useful configuration features such as a timestamp_timeout, which is the amount of time in minutes between instances of sudo before it will re-prompt for a password. This is because sudo has the ability to cache credentials for a period of time. Sudo creates (or touches) a file at /var/db/sudo with a timestamp of when sudo was last run to determine this timeout. Additionally, there is a tty_tickets variable that treats each new tty (terminal session) in isolation. This means that, for example, the sudo timeout of one tty will not affect another tty (you will have to type the password again).

The sudoers file, /etc/sudoers, describes which users can run which commands and from which terminals. This also describes which commands users can run as other users or groups. This provides the principle of least privilege such that users are running in their lowest possible permissions for most of the time and only elevate to other users or permissions as needed, typically by prompting for a password. However, the sudoers file can also specify when to not prompt users for passwords with a line like user1 ALL=(ALL) NOPASSWD: ALL [2]. Elevated privileges are required to edit this file though.

Adversaries can also abuse poor configurations of these mechanisms to escalate privileges without needing the user's password. For example, /var/db/sudo's timestamp can be monitored to see if it falls within the timestamp_timeout range. If it does, then malware can execute sudo commands without needing to supply the user's password. Additional, if tty_tickets is disabled, adversaries can do this from any tty for that user.

In the wild, malware has disabled tty_tickets to potentially make scripting easier by issuing echo \'Defaults !tty_tickets\' >> /etc/sudoers [3]. In order for this change to be reflected, the malware also issued killall Terminal. As of macOS Sierra, the sudoers file has tty_tickets enabled by default.

Angreifer können sudo zwischenspeichern und/oder die Datei suoders verwenden, um die Privilegien zu erhöhen. Angreifer können dies tun, um Befehle als andere Benutzer auszuführen oder Prozesse mit höheren Privilegien zu starten.

In Linux- und MacOS-Systemen erlaubt sudo (manchmal auch als "Superuser do" bezeichnet) Benutzern, Befehle von Terminals mit erhöhten Rechten auszuführen und zu kontrollieren, wer diese Befehle auf dem System ausführen kann. Der sudo-Befehl "ermöglicht es einem Systemadministrator, die Befugnis zu delegieren, bestimmten Benutzern (oder Benutzergruppen) die Möglichkeit zu geben, einige (oder alle) Befehle als root oder als ein anderer Benutzer auszuführen und gleichzeitig einen Prüfpfad für die Befehle und ihre Argumente zu erstellen."(Zitat: sudo man page 2018) Da sudo für den Systemadministrator entwickelt wurde, verfügt es über einige nützliche Konfigurationsfunktionen, wie z.B. timestamp_timeout, die die Zeitspanne in Minuten zwischen den Instanzen von sudo angibt, bevor erneut nach einem Passwort gefragt wird. Der Grund dafür ist, dass sudo in der Lage ist, Anmeldedaten für eine gewisse Zeit zwischenzuspeichern. Sudo erstellt (oder berührt) eine Datei unter /var/db/sudo mit einem Zeitstempel, wann sudo zuletzt ausgeführt wurde, um diese Zeitspanne zu bestimmen. Ausserdem gibt es eine Variable tty_tickets, die jedes neue tty (Terminal-Sitzung) isoliert behandelt. Das bedeutet, dass z.B. die Zeitüberschreitung von sudo auf einem tty keine Auswirkungen auf ein anderes tty hat (Sie müssen das Passwort erneut eingeben).

Die Datei sudoers, /etc/sudoers, beschreibt, welche Benutzer welche Befehle und von welchen Terminals aus ausführen dürfen. Hier wird auch beschrieben, welche Befehle Benutzer als andere Benutzer oder Gruppen ausführen können. Dadurch wird das Prinzip der geringsten Privilegien gewährleistet, so dass Benutzer die meiste Zeit mit ihren niedrigsten Berechtigungen arbeiten und nur bei Bedarf zu anderen Benutzern oder Berechtigungen wechseln, in der Regel durch die Eingabe eines Passworts. In der Datei sudoers kann jedoch auch festgelegt werden, wann Benutzer nicht nach einem Kennwort gefragt werden sollen, und zwar mit einer Zeile wie user1 ALL=(ALL) NOPASSWD: ALL (Zitat: OSX.Dok Malware). Um diese Datei zu bearbeiten, sind allerdings erhöhte Rechte erforderlich.

Angreifer können auch schlechte Konfigurationen dieser Mechanismen missbrauchen, um die Privilegien zu erweitern, ohne das Passwort des Benutzers zu benötigen. Zum Beispiel kann der Zeitstempel von /var/db/sudo überwacht werden, um zu sehen, ob er in den timestamp_timeout-Bereich fällt. Wenn dies der Fall ist, kann Malware sudo-Befehle ausführen, ohne das Passwort des Benutzers eingeben zu müssen. Wenn ttty_tickets deaktiviert ist, können Angreifer diese Befehle von jedem beliebigen TTY dieses Benutzers aus ausführen.

In freier Wildbahn hat Malware tty_tickets deaktiviert, um das Skripting zu erleichtern, indem sie echo \'Defaults !tty_tickets\' >> /etc/sudoers ausgibt (Zitat: cybereason osx proton). Damit sich diese Änderung auswirkt, gab die Malware auch killall Terminal aus. Ab macOS Sierra ist in der Datei sudoers standardmässig tty_tickets aktiviert.

Les adversaires peuvent effectuer une mise en cache de sudo et/ou utiliser le fichier suoders pour élever les privilèges. Les adversaires peuvent faire cela pour exécuter des commandes en tant qu'autres utilisateurs ou lancer des processus avec des privilèges plus élevés.

Dans les systèmes Linux et MacOS, sudo (parfois appelé "superuser do") permet aux utilisateurs d'exécuter des commandes à partir de terminaux avec des privilèges élevés et de contrôler qui peut exécuter ces commandes sur le système. La commande sudo "permet à un administrateur système de déléguer l'autorité pour donner à certains utilisateurs (ou groupes d'utilisateurs) la possibilité d'exécuter certaines (ou toutes) commandes en tant que root ou un autre utilisateur tout en fournissant une piste d'audit des commandes et de leurs arguments." (Citation : sudo man page 2018) Puisque sudo a été fait pour l'administrateur système, il dispose de quelques fonctionnalités de configuration utiles telles qu'un timestamp_timeout, qui est la quantité de temps en minutes entre les instances de sudo avant qu'il ne demande à nouveau un mot de passe. Ceci est dû au fait que sudo a la capacité de mettre en cache les informations d'identification pendant un certain temps. Sudo crée (ou touche) un fichier à /var/db/sudo avec un horodatage de la dernière exécution de sudo pour déterminer ce délai. En outre, il existe une variable tty_tickets qui traite chaque nouveau tty (session de terminal) de manière isolée. Cela signifie que, par exemple, le timeout sudo d'un tty n'affectera pas un autre tty (vous devrez retaper le mot de passe).

Le fichier sudoers, /etc/sudoers, décrit quels utilisateurs peuvent exécuter quelles commandes et depuis quels terminaux. Il décrit également quelles commandes les utilisateurs peuvent exécuter en tant qu'autres utilisateurs ou groupes. Cela fournit le principe du moindre privilège, de sorte que les utilisateurs s'exécutent avec les permissions les plus basses possibles la plupart du temps et ne s'élèvent à d'autres utilisateurs ou permissions que si nécessaire, généralement en demandant un mot de passe. Cependant, le fichier sudoers peut également spécifier quand ne pas inviter les utilisateurs à entrer un mot de passe avec une ligne comme user1 ALL=(ALL) NOPASSWD : ALL (Citation : OSX.Dok Malware). Des privilèges élevés sont toutefois nécessaires pour modifier ce fichier.

Les adversaires peuvent également abuser des mauvaises configurations de ces mécanismes pour élever les privilèges sans avoir besoin du mot de passe de l'utilisateur. Par exemple, l'horodatage de /var/db/sudo peut être surveillé pour voir s'il tombe dans la plage timestamp_timeout. Si c'est le cas, le malware peut alors exécuter les commandes sudo sans avoir besoin de fournir le mot de passe de l'utilisateur. En outre, si tty_tickets est désactivé, les adversaires peuvent le faire à partir de n'importe quel tty pour cet utilisateur.

Dans la nature, les logiciels malveillants ont désactivé le tty_tickets pour faciliter potentiellement le scriptage en émettant echo \'Defaults !tty_tickets\' >> /etc/sudoers (Citation : cybereason osx proton). Pour que ce changement soit pris en compte, le malware a également émis killall Terminal. À partir de macOS Sierra, le fichier sudoers a tty_tickets activé par défaut.

Gli avversari possono eseguire sudo caching e/o usare il file suoders per elevare i privilegi. Gli avversari possono farlo per eseguire comandi come altri utenti o generare processi con privilegi superiori.

Nei sistemi Linux e MacOS, sudo (a volte chiamato "superuser do") permette agli utenti di eseguire comandi da terminali con privilegi elevati e di controllare chi può eseguire questi comandi sul sistema. Il comando sudo "permette ad un amministratore di sistema di delegare l'autorità per dare a certi utenti (o gruppi di utenti) la capacità di eseguire alcuni (o tutti) i comandi come root o un altro utente fornendo al contempo una traccia di controllo dei comandi e dei loro argomenti."(Citazione: sudo man page 2018) Poiché sudo è stato creato per l'amministratore di sistema, ha alcune utili caratteristiche di configurazione come un timestamp_timeout, che è la quantità di tempo in minuti tra le istanze di sudo prima che richieda nuovamente una password. Questo perché sudo ha la capacità di memorizzare le credenziali per un periodo di tempo. Sudo crea (o tocca) un file a /var/db/sudo con un timestamp di quando sudo è stato eseguito l'ultima volta per determinare questo timeout. Inoltre, c'è una variabile tty_tickets che tratta ogni nuova tty (sessione terminale) in modo isolato. Questo significa che, per esempio, il timeout di sudo di una tty non avrà effetto su un'altra tty (si dovrà digitare nuovamente la password).

Il file sudoers, /etc/sudoers, descrive quali utenti possono eseguire quali comandi e da quali terminali. Descrive anche quali comandi gli utenti possono eseguire come altri utenti o gruppi. Questo fornisce il principio del minimo privilegio, per cui gli utenti funzionano con i permessi più bassi possibili per la maggior parte del tempo e si elevano ad altri utenti o permessi solo quando necessario, tipicamente richiedendo una password. Tuttavia, il file sudoers può anche specificare quando non chiedere la password agli utenti con una riga come user1 ALL=(ALL) NOPASSWD: ALL (Citazione: OSX.Dok Malware). Sono però necessari privilegi elevati per modificare questo file.

Gli avversari possono anche abusare di cattive configurazioni di questi meccanismi per aumentare i privilegi senza bisogno della password dell'utente. Per esempio, il timestamp di /var/db/sudo può essere monitorato per vedere se rientra nell'intervallo timestamp_timeout. Se lo fa, allora il malware può eseguire comandi sudo senza bisogno di fornire la password dell'utente. Inoltre, se tty_tickets è disabilitato, gli avversari possono farlo da qualsiasi tty per quell'utente.

In natura, il malware ha disabilitato tty_tickets per rendere potenzialmente più facile lo scripting emettendo echo \'Defaults !tty_tickets\' >> /etc/sudoers (Citazione: cybereason osx proton). Affinché questo cambiamento si rifletta, il malware emetteva anche killall Terminal. A partire da macOS Sierra, il file sudoers ha tty_tickets abilitato di default.

Login
ID: T1548.003
Sub-technique of:  T1548
Platforms: Linux, macOS
Permissions Required: User
Effective Permissions: root
Version: 1.0
Created: 30 January 2020
Last Modified: 27 March 2020
Translations:  DE FR IT EN
Provided by LAYER 8

Procedure Examples

ID Name Description
S0154 Cobalt Strike

Cobalt Strike can use sudo to run a command.[4]

S0281 Dok

Dok adds admin ALL=(ALL) NOPASSWD: ALL to the /etc/sudoers file.[5]

S0279 Proton

Proton modifies the tty_tickets line in the sudoers file.[6]

Mitigations

ID Mitigation Description
M1028 Operating System Configuration

Ensuring that the tty_tickets setting is enabled will prevent this leakage across tty sessions.

M1026 Privileged Account Management

By requiring a password, even if an adversary can get terminal access, they must know the password to run anything in the sudoers file. Setting the timestamp_timeout to 0 will require the user to input their password every time sudo is executed.

M1022 Restrict File and Directory Permissions

The sudoers file should be strictly edited such that passwords are always required and that users can't spawn risky processes as users with higher privilege.

Detection

ID Data Source Data Component
DS0017 Command Command Execution
DS0022 File File Modification
DS0009 Process Process Creation
Process Metadata

On Linux, auditd can alert every time a user's actual ID and effective ID are different (this is what happens when you sudo). This technique is abusing normal functionality in macOS and Linux systems, but sudo has the ability to log all input and output based on the LOG_INPUT and LOG_OUTPUT directives in the /etc/sudoers file.

Unter Linux kann auditd jedes Mal einen Alarm auslösen, wenn die tatsächliche ID und die effektive ID eines Benutzers unterschiedlich sind (das passiert, wenn Sie sudo ausführen). Diese Technik missbraucht die normale Funktionalität in macOS- und Linux-Systemen, aber sudo hat die Fähigkeit, alle Ein- und Ausgaben auf der Grundlage der Direktiven LOG_INPUT und LOG_OUTPUT in der Datei /etc/sudoers zu protokollieren.

Sous Linux, auditd peut alerter chaque fois que l'ID réel et l'ID effectif d'un utilisateur sont différents (c'est ce qui se passe lorsque vous sudo). Cette technique abuse des fonctionnalités normales des systèmes macOS et Linux, mais sudo a la capacité de consigner toutes les entrées et sorties sur la base des directives LOG_INPUT et LOG_OUTPUT dans le fichier /etc/sudoers.

Su Linux, auditd può avvisare ogni volta che l'ID effettivo di un utente e l'ID effettivo sono diversi (questo è quello che succede quando si sudo). Questa tecnica abusa della normale funzionalità nei sistemi macOS e Linux, ma sudo ha la capacità di registrare tutti gli input e output in base alle direttive LOG_INPUT e LOG_OUTPUT nel file /etc/sudoers.

References