Wie mache ich einen Prozess für andere Benutzer unsichtbar?

19

Wie können Sie einen Prozess starten und ihn für den topBefehl unsichtbar machen ? Der Prozess wird von einem normalen Benutzer (nicht root) gestartet und sollte für andere normale Benutzer nicht sichtbar sein.

Debugger
quelle
1
Diese Art der Niederlage ist das Ziel von top und wäre viel zu leicht zu missbrauchen. Warum nicht einfach den Prozess umbenennen? this_is_not_the_process_you_are_looking_for?
Ich verstehe, was ist mit dem Verstecken des Benutzers?
5
Bitte teilen Sie uns mit, dass Sie nicht versuchen, ein Root-Kit zu schreiben. Können Sie Ihr Szenario erläutern, damit wir möglicherweise eine bessere Sicherheitsarchitektur vorschlagen können, anstatt eine, die allgemein als "schlechtes" Verhalten gilt?
Caleb
2
Sie können grsecurity oder SELinux verwenden . Für beide ist ein Root-Eingriff für die Ersteinrichtung erforderlich.
Gilles 'SO - hör auf, böse zu sein'

Antworten:

11

Der topBefehl liest die Daten aus proc, die direkt vom Kernel bereitgestellt werden. Um Prozesse auszublenden, müssen Sie Code im Kernel verwenden, um die Maskierung durchzuführen.

Abgesehen von der Verwendung eines Sicherheitsframeworks wie SELinux und grsecurity (wie in den anderen Antworten erwähnt) ist der Code im Rootkit-Stil Ihre einzige verbleibende Option. Ich sage "style", weil ein "Rootkit" an sich nicht schlecht ist, sondern wie es verwendet wird. Es gibt durchaus berechtigte Gründe, Prozesse vor anderen Benutzern zu verbergen, weshalb diese Funktion in Sicherheitsframeworks vorhanden ist.

Der grundlegende Weg, den Sie gehen müssen, um dies zum Laufen zu bringen, besteht darin, sich in die Funktion (en) im Linux-Kernel einzuklinken (oder sie zu hijacken, je nachdem, wie Sie sie betrachten), die die /proc/pid/Daten verteilen . Ich demonstriere eine Methode zum Einbinden in Linux-Kernelfunktionen in einem Sicherheitsmodul, das ich geschrieben habe:

https://github.com/cormander/tpe-lkm

Der "High-Level" -Code dafür befindet sich in der hijack_syscalls()Methode in security.c, und die Detailmagie dahinter befindet sich in der hijacks.cDatei.

Sie finden die gewünschten Funktionen wahrscheinlich im fs/proc/Verzeichnis des Quellcodes des Linux-Kernels. Denken Sie daran, dass Linux kein stabiles ABI bietet. Daher muss sich Ihr Code etwas ändern, damit er in verschiedenen Versionen des Linux-Kernels funktioniert. Denken Sie auch daran, dass Sie vollständigen Root-Zugriff auf den Computer benötigen, um diesen Code einfügen zu können.

AKTUALISIEREN:

Wenn Sie das pid_getattrKernel-Symbol mit zusätzlichem Code umschließen, ist dies ganz einfach. Ich habe kürzlich etwas hinzugefügt, das Prozesse im obigen Kernel-Modul verbirgt:

https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3

Sie könnten etwas Ähnliches tun, indem Sie die Prozesse eines bestimmten Benutzers oder einer bestimmten Gruppe für niemanden außer root und diesem Benutzer sichtbar machen. Es ist etwas komplexer, es nach Prozessnamen zu tun, aber möglich. Schauen Sie sich die exe_from_mm()Funktion an. Beachten Sie, dass die Verwendung innerhalb von möglicherweise Auswirkungen auf die Leistung hat pid_getattr.

Corey Henderson
quelle
4

Es scheint die beiden Hauptoptionen.

  • Selinux arbeitet, indem es verschiedene Leute in verschiedene Sicherheitsdomänen einsetzt und sie in gewisser Weise mit Sandboxen versieht, damit sie nicht die anderen sehen können. Dies wird in dieser Frage behandelt . Da sich Selinux schnell zum De-facto-Sicherheits-Framework in der Linux-Welt entwickelt, ist dies wahrscheinlich die Richtung, in die Sie schauen sollten.

  • Das andere ist die von Marioosh erwähnte und in dieser Frage gestellte Unsicherheit . In einigen Distributionen gibt es alternative Kernelpakete mit Grsecurity-Patches. Wenn dies bei Ihnen der Fall ist, können Sie die Verwendung prüfen.

Wenn Sie dies aus irgendeinem Grund ohne das Hinzufügen eines Sicherheitsframeworks wie selinux oder grsecurity tun möchten, erklären Sie bitte, warum Sie kein Root-Kit schreiben.

Caleb
quelle
1

Es ist nicht so einfach auf Standard-Linux-Box. Schau dir die Sicherheit an , aber es erfordert das Patchen des Kernels usw.

Marioosh
quelle
2
Ich denke, das gehört zum Standard eines Selinux-Kernels.
user606723
0

Sie können einen entsprechenden Befehl schreiben, der genauso funktioniert top, aber keine Prozesse anzeigt, die mit einem bestimmten Namen übereinstimmen. Alternativ können Sie den Quellcode des topBefehls abrufen und entsprechend ändern. Sie können dann den topBefehl in /usr/sbin(oder wo immer er ist) durch Ihre Version ersetzen .

LawrenceC
quelle
2
Das Ersetzen von 'top' hindert einen Benutzer nicht daran, das zu tun, was top tut.
Tim Post
2
Nein, aber die Frage lautete, wie Prozesse für den topBefehl unsichtbar gemacht werden sollen .
LawrenceC