Wie verstecke ich Prozessargumente vor anderen Benutzern?

7

Vor einiger Zeit habe ich die grsecurity- Kernel-Patches verwendet, mit denen Prozessargumente vor anderen Nicht-Root-Benutzern ausgeblendet werden konnten. Grundsätzlich ist dies nur /proc/*/cmdlineder Modus 0600 und psbehandelt dies ordnungsgemäß, indem gezeigt wird, dass der Prozess vorhanden ist, nicht jedoch seine Argumente.

Das ist nett, wenn jemand auf einem Mehrbenutzer-Computer läuft vi christmas-presents.txt, um das kanonische Beispiel zu verwenden.

Gibt es eine unterstützte Möglichkeit, dies in Ubuntu zu tun, außer durch die Installation eines neuen Kernels?

(Ich bin mit der Technik vertraut, mit der einzelne Programme ihre Argumentation ändern können, aber die meisten Programme tun dies nicht und es ist sowieso rassig. Dieser Stackoverflow-Benutzer scheint die gleiche Frage zu stellen, scheint aber tatsächlich nur sehr verwirrt zu sein.)

Poolie
quelle

Antworten:

8

Die einzige Möglichkeit, dies derzeit zu tun, besteht darin, jeden Benutzer in einen separaten Container zu legen (siehe Klonen mit CLONE_NEWPIDund CLONE_NEWNS) und einen neuen /procin den Container einzubinden. ( lxc wird einiges davon für Sie erledigen.)

Es ist jedoch geplant, grsecurity-Funktionen auf den Ubuntu-Kernel und den Upstream-Kernel zu portieren. Wenn Sie können, melden Sie sich bitte für etwas an und helfen Sie aus.

Kees Cook
quelle
6

Bis einschließlich Natty ist es nicht möglich, die Berechtigungen für die /proc/$pid/cmdlineDateien mit dem Standardkernel zu ändern. Die Berechtigungsbits sind in den Kernel integriert. Derzeit müssten Sie einen maßgeschneiderten Kernel mit diesen Patches erstellen.

Wenn die Patches einfach sind, um diese Funktionalität zu aktivieren, kann es sich lohnen, sie in der Ubuntu Kernel Team-Liste ( [email protected] ) zu veröffentlichen, und wir können sie für die Aufnahme in zukünftige Versionen in Betracht ziehen.

Andy
quelle
6

Es gibt jetzt eine hidepidMount-Optionprocfs , mit der Sie Argumente vor anderen Benutzern ausblenden und optional einer Gruppe erlauben können, alle Prozesse anzuzeigen:

Die erste Mount-Option heißt "hidepid" und ihr Wert definiert, wie viele Informationen zu Prozessen für Nicht-Eigentümer verfügbar sein sollen:

hidepid = 0 (Standard) bedeutet das alte Verhalten - jeder kann alle weltweit lesbaren / proc / PID / * -Dateien lesen.

hidepid = 1 bedeutet, dass Benutzer möglicherweise nicht auf Verzeichnisse / proc / PID / zugreifen, sondern auf ihre eigenen. Vertrauliche Dateien wie cmdline, sched * und status sind jetzt vor anderen Benutzern geschützt. Da die in proc_pid_permission () durchgeführten Berechtigungsprüfungen und die Berechtigungen der Dateien unberührt bleiben, werden Programme, die die Modi bestimmter Dateien erwarten, nicht verwechselt.

hidepid = 2 bedeutet hidepid = 1 plus alle / proc / PID / sind für andere Benutzer unsichtbar. Es bedeutet nicht, dass es verbirgt, ob ein Prozess existiert (es kann auf andere Weise gelernt werden, z. B. durch töten von -0 $ PID), aber es verbirgt Prozess-euid und egid. Es erschwert die Aufgabe des Eindringlings, Informationen über laufende Prozesse zu sammeln, ob ein Dämon mit erhöhten Berechtigungen ausgeführt wird, ob ein anderer Benutzer ein vertrauliches Programm ausführt, ob andere Benutzer überhaupt ein Programm ausführen usw.

gid = XXX definiert eine Gruppe, die alle Prozessinformationen erfassen kann (wie im Modus hidepid = 0). Diese Gruppe sollte verwendet werden, anstatt Nicht-Root-Benutzer in die Sudoers-Datei oder so etwas zu setzen. Nicht vertrauenswürdige Benutzer (wie Dämonen usw.), die die Aufgaben im gesamten System nicht überwachen sollen, sollten jedoch nicht zur Gruppe hinzugefügt werden.

hidepid = 1 oder höher soll den Zugriff auf procfs-Dateien einschränken, wodurch möglicherweise vertrauliche private Informationen wie genaue Tastenanschläge angezeigt werden:

http://www.openwall.com/lists/oss-security/2011/11/05/3

hidepid = 1/2 unterbricht nicht die Überwachung von Userspace-Tools. ps, top, pgrep und conky behandeln EPERM / ENOENT ordnungsgemäß und verhalten sich so, als ob der aktuelle Benutzer der einzige Benutzer ist, der Prozesse ausführt. pstree zeigt den Prozessunterbaum an, der den Prozess "pstree" enthält.

Poolie
quelle
1

Vor Jahren habe ich die folgenden zwei Kernel-Patches veröffentlicht:

Diese beiden Patches funktionieren immer noch für den aktuellen stabilen Vanillekern von kernel.org. Bei Interesse kann ich den aktuellen Patch posten. Fragen Sie mich nicht, warum niemals jemand eine Option zum Ausblenden von Prozessen in den Upstream-Kernel aufgenommen hat.

Warnung: Diese Patches verbergen Prozesse anderer Benutzer mit Ausnahme von root vollständig.


quelle
-2

Sie können verhindern, dass sie auf den Systemmonitor und oben zugreifen, indem Sie ihre Berechtigungen in den Benutzer- und Gruppeneinstellungen ändern. Ich bin nicht sicher, ob dies eine vollständige Lösung sein wird, aber es sollte ausreichen, dies für die meisten gängigen Benutzer zu blockieren.

RolandiXor
quelle
1
Welche Einstellung ist das? Wenn ich Benutzer und Gruppen starte und dann auf Erweitert klicke, werden eine Reihe von Einstellungen angezeigt, die verschiedenen Unix-Gruppen entsprechen, aber nichts über das Ausführen des Systemmonitors oder von oben. Natürlich könnte ich diese Programme ändern, aber das ist etwas zu schwach.
Poolie
Ich denke, wenn Sie sie daran hindern, das System zu verwalten, blockiert es sie. Ich kann dies derzeit leider nicht bestätigen, da ich der einzige Benutzer auf meinem Laptop bin :(
RolandiXor
1
Ich bin mir ziemlich sicher, dass dies die Mitgliedschaft in einer Gruppe steuert. Dies administ standardmäßig die Gruppe von Benutzern, die sudo unter Ubuntu rooten dürfen. Wenn wir diese Funktion zur Prozesszugriffskontrolle hätten, könnten nur diese Benutzer die Befehlszeilen anderer Benutzer sehen. Aber wir tun es anscheinend nicht.
Poolie