Das Monitoring-Tool Pspy
Die Prozesse anderer Nutzer überwachen
Manchmal braucht es keine komplizierten Zero-Day-Exploits oder Expertenwissen, für tief im Code des Computers verborgene Schwachstellen. Oft werden die einfachsten Angriffsmöglichkeiten bei Sicherheitsprüfungen übersehen. Die Prozesse, die ein Nutzer über Kommandos im Terminal startet, verraten oft genug Informationen, die zur Kompromittierung führen können. Um mehr über Prozesse der Nutzer eines Systems herauszufinden, kann das Tool Pspy eine große Hilfe sein.
Mit Pspy erhalten wir Informationen über gestartete Prozesse jedes Nutzers auf einem Linux-Betriebssystem, ganz ohne dafür Root-Rechte zu benötigen.
In vielen Fällen teilen sich mehrere Nutzer ein System. Die Idee dafür stammt bereits aus den Anfängen des Computers. Früher gab es nur wenige Großrechner, oft an Universitäten. Dort mussten sich viele Studierende das System teilen, indem sie sich über die Terminals am Rechner anmeldeten.
Schnell wurde klar, dass es ein System braucht, was die Rechte der Nutzer verwaltet und voneinander abgrenzt, damit nicht ein Nutzer die Arbeit eines anderen versehentlich oder bewusst sieht, sabotiert oder sogar zerstört.
Das Konzept verschiedener, durch Zugriffsrechte getrennter, Benutzer ist auch in den heutigen Betriebssystemen üblich und wird vor allem wieder wichtig in Cloud- und Shared-Hosting-Umgebungen, da sich diese physisch oft dieselbe Hardware teilen und die Benutzer nur auf der Softwareebene voneinander getrennt werden.
Da die Nutzer sich jedoch das System teilen, gibt es die Möglichkeit bestimmtes Verhalten systeminterner Prozesse und geänderte Dateien mit gemeinsamen Zugriff zu überwachen, um Rückschlüsse auf die Aktivitäten der anderen Nutzer zu ziehen.
Mit Pspy können Kommandozeilenbefehle, die von anderen Nutzern ausgeführt werden, gewissermaßen abgefangen und sichtbar gemacht werden. Das können Kommandos sein, die aktiv eingegeben wurden, um einen Prozess zu starten, oder auch Cron-Jobs. Das ist ein Administrationswerkzeug auf Linux Systemen, welches automatisiert in bestimmten Zeitabständen die gewünschten Prozesse startet.
Die durch Pspy erhaltenen Informationen werden auf dem Bildschirm mit verschiedenen Farben und unter Einbeziehung von Details wie Zeit, Datum, UID, PID usw. angezeigt. Es gibt andere Werkzeuge, um Prozesse aufzulisten, wie z.B. Htop, oder lsof, um die von einem Prozess geöffneten Dateien aufzulisten, aber sie erfordern exklusive Berechtigungen, da sie sensible Informationen enthalten.
Pyspy minimiert die erforderlichen Berechtigungen, sodass auch sensible Informationen ohne Einschränkungen eingesehen werden können.
Aus der Hacker- bzw. IT-Sicherheitsperspektive ist vor allem interessant, dass auf der Kommandozeile sehr oft auch Argumente an die Befehle übergeben werden. Übergibt ein Nutzer also über einen Kommandozeilenbefehl ein Passwort an den zu startenden Prozess, tauch dieser nicht nur im eigenen Verlauf oder anderen Logdateien auf, sondern kann auch potenziell von allen anderen Nutzern des Systems abgefangen und gelesen werden!
Pspy kann sehr einfach heruntergeladen und benutzt werden. Hier im GitHub-Repository sind die ausführbaren Binärdateien zum Download verlinkt:
https://github.com/DominicBreuker/pspy
Es gibt Binärdateien für 32-Bit und für 64-Bit Systeme. Die ausführbaren Dateien sind recht groß, da alle nötigen Bibliotheken statisch eingebunden sind. Das bietet aber den Vorteil, dass sie unabhängig von anderen Code-Bibliotheken sind und auf allen Linux-Distributionen problemlos laufen sollten.
Pspy erhält die Informationen über die gestarteten Prozesse durch das Scannen von procfs (Linux process files system). Dazu wird die inotify-API verwendet, die keine Root-Berechtigungen benötigt, so dass sie ohne Einschränkungen verwendet werden kann. Mit dieser API erhält ein Programm Benachrichtigungen, wenn eine Datei erstellt oder gelöscht wird.
Pspy überwacht damit alle Inhalte des /proc Ordners, in dem Dateien angelegt werden, wenn Prozesse gestartet werden, die unter anderem auch die auf der Kommandozeile übergebenen Parameter enthalten.
In diesem Output von Pspy ist folgendes zu erkennen:
Zuerst das Datum und die Uhrzeit, wann der Prozess gestartet wurde. Die UID ist die ID des Benutzers, welcher den Prozess gestartet hat. In diesem Fall ist es die UID 0, die zum root User gehört. Daneben ist die Prozess ID zu sehen, die das System dem Prozess gibt. Hinter dem Strich kommt das eigentliche Kommando. In diesem Fall wurde folgendes Kommando abgefangen:
/bin/sh -c curl –user fridolin:mypassword123 http://auth.example.com
Hier hat ein unbedachter User eine Website mit dem Kommandozeilentool curl aufgerufen, die eine Authentifizierung erfordert. Durch Pspy konnte das Passwort abgefangen werden.
Bei Arbeiten auf einem geteilten System, zum Beispiel über einen Remote-Zugriff per SSH, könnte es sehr ärgerliche Folgen haben, wenn sich die Nutzer in falscher Sicherheit wiegen und nicht mitbedenken, dass andere User, auch ohne Root-Rechte, ein Auge auf die laufenden Prozesse haben können. Passwörter über die Kommandozeile zu übergeben ist generell keine gute Idee. Mit Pspy kann dieses Problem sehr gut veranschaulicht werden und bewirkt vielleicht bei der/dem einen oder anderen LeserIn ein Umdenken im allzu sorglosen Umgang mit Kommandos im Terminal.