Ich versuche herauszufinden, ob ich einen alten Server außer Betrieb nehmen kann. Ich benötige Informationen über die dort laufenden automatisierten Prozesse. Bisher habe ich Folgendes versucht:
auditctl -a exit,always -F arch=b64 -S execve -k any-commands
Beim Analysieren des Protokolls fiel mir auf, dass zwei Kontextteile fehlten:
- Wie wurden diese Programme ausgeführt? Welcher Prozess war ihr übergeordnetes Programm und was war sein ArgV?
- Wo sind die Standardeingabe/Standardausgabe hin? Am liebsten würde ich den Shell-Befehl rekonstruiert sehen, aber ich weiß, dass ich wahrscheinlich zu viel verlange, also würde mir zumindest die Pipe-Deskriptor-ID genügen (damit ich versuchen kann, ihn mit meinen eigenen Skripten zu rekonstruieren).
Wie kann ich ein solches Problem angehen?
Antwort1
Der execve
Systemaufruf ersetzt den aktuellen Prozess. Wenn ein Programm nach dem Start eines anderen Programms die Kontrolle behalten möchte, muss es zuerst einen neuen Prozess erstellen (mit fork
oder vfork
), der dann aufruft execve
.
Die offenen Dateideskriptoren und Berechtigungen werden übernommen, wenn das Programmabbild in ersetzt wird execve
(mit Ausnahme derjenigen, die mit dem CLOEXEC
Flag markiert sind), sodass offene Dateien während vom übergeordneten Prozess geerbt , dann zwischen und fork
geändert (z. B. mit ) und schließlich während des Aufrufs gefiltert werden.fork
execve
dup2
execve
Daher wird es schwierig sein, anhand der Prüfdaten ein vollständiges Bild zu erhalten.