strace, um den Sudo-Kennwortstandort zu ermitteln

573
ǝɲǝɲbρɯͽ

strace / dtrace / ltrace ... nützlich für viele Dinge, von der Suche nach versteckten Zugriffsverletzungen bis hin zur Netzwerk-Socket-Ablaufverfolgung, aber es wird möglicherweise nicht alles angezeigt.

Ich konnte nicht mit strace herausfinden (es kam wieder heraus, als ich heute versuchte, eine andere Frage zu beantworten ), wo Sudo Klartextpasswörter im Systemspeicher zuordnet und speichert. Die verlinkte Frage bezieht sich, wenn es sich bei Ihnen um Neuigkeiten handelt.

Das nächste, was ich mit Spuren wie diesem erhalten habe (dies könnte ein schlechtes Beispiel sein, wenn man ein gestapeltes Sudo verwendet; ich habe ein paar Dinge ausprobiert):

$ sudo strace -ff -o mem sudo -s Enter password... 

sind Linien wie folgt:

mem.14471:stat("/etc/profile.d/gnome-ssh-askpass.sh", ) = 0 mem.14471:access("/etc/profile.d/gnome-ssh-askpass.sh", R_OK) = 0 mem.14471:open("/etc/profile.d/gnome-ssh-askpass.sh", O_RDONLY) = 3 mem.14471:read(3, "SSH_ASKPASS=/usr/libexec/openssh"..., 70) = 70 

und ich glaube, ich habe versucht, diese einzeln zu ermitteln, und sogar die env-Variable in / usr / libexec / openssh-askpass durch eine eigene Strace ersetzt, ohne Erfolg.

Ich kann Strassen lesen und dekodieren. Ich kann den zugewiesenen Handles, Rückkehrcodes und Speicherzuordnungen folgen. Was ich nicht finden kann, ist eine Verzweigung, die das sudo-Kennwort (bis zu 7-mal) im Speicher reserviert und speichert, während sudo aktiv ist. Der Nachweis, dass der Benutzer das Passwort hat, wird über LiME Forensics auf CentOS angewendet.

Gibt es alternativ einen besseren Ansatz, z. B. das Zuweisen von Prozessspeicherzuordnungen?

1

1 Antwort auf die Frage

3
grawity

strace wird so etwas wie dieses nicht zeigen. Am nächsten kommen Sie mit den brk()oder mmap(MAP_ANONYMOUS)-Anrufen, mit denen glibc einen ganzen neuen Speicherbereich erfasst . Der Rest verwendet keine Systemaufrufe, sondern nur direkten Speicherzugriff.

Sie könnten ltracefür Userspace-Bibliotheksaufrufe versuchen .

Oder suchen Sie einfach die Kennwortabfrage im Quellcode und sehen Sie nach, was mit den Ergebnissen geschieht. Fügen Sie ein paar hinzu printf(), um die Speicheradressen anzuzeigen.

Vielen Dank. Ich erinnerte mich daran, dass ich wusste / gelesen hatte, dass strace möglicherweise nicht auf alle Systemaufrufe (möglicherweise unter SEL) zugreifen kann und nicht zu 100% sicher war. das sieht aus wie es antwortet, was mir gefehlt hat. Ich schätze die Zielklärung, das, was tatsächlich passiert, und die zusätzliche Richtung. ǝɲǝɲbρɯͽ vor 8 Jahren 0
Recht; ob es Zugriff auf Systemaufrufe hat oder nicht, Sie suchen immer noch nach etwas, das in erster Linie kein Systemaufruf ist ... grawity vor 8 Jahren 1