Gibt es eine (kompatibel) Art und Weise zu Parodie (als root) der Unix-Socket (Dateisystem-Buchsen) Peer Anmeldeinformationen, die durch getsockopt()
erhalten werden kann, Option SO_PEERCRED
?UNIX-Sockets: Ist es möglich, getsockopt() SO_PEERCRED zu fälschen?
Hintergrund:
ich zu einer Server-Anwendung anschließen müssen (was ich nicht ändern kann), die die UID
des Prozesses überprüft, die über SO_PEERCRED
ihm verbindet. Ich möchte die Informationen spoofen, um in der Lage zu sein, mit der Anwendung als root zu verbinden, auch.
UPDATE
Um die Frage zu klären,:
Ich bin für eine nicht-invasive Art und Weise der Suche, dass der Server eine bestimmte Peer UID
/GID
sieht. Lösungen werden entmutigt, die den Kern (oder um die Verwendung von Kernel-Module), oder die ändert den Serverprozess oder dessen Belade-/Verknüpfungsprozess in irgendeiner Weise (LD_PRELOAD
, Systemruf interceptions etc.) ändern müssen.
Grundsätzlich sollte die Lösung funktionieren, wenn auf einem beliebigen Linux (oder Unix im Allgemeinen) Server ohne besondere Anforderungen ausgeführt wird. Der Serverprozess wird möglicherweise bereits ausgeführt.
Wenn Sie 'root' sind, warum nicht nur' setuid'? Sie können dies über einen vollständig kontrollierten untergeordneten Prozess tun, sodass Sie vermeiden können, dass die Berechtigung tatsächlich verloren geht. – nneonneo
Ich bin mir nicht sicher, aber unter Linux gibt es einen oktalen Wert Präfix Flags in '/ proc//fdinfo/'. –
alk
Können Sie den Start des Serverprozesses steuern, dh können Sie ein LD_PRELOAD verwenden, um die Bibliotheksfunktion/syscall thunk zu ändern, um die gemeldeten Anmeldeinformationen zu ändern? –