Estoy tratando de averiguar si puedo desmantelar un servidor antiguo. Necesito información sobre los procesos automatizados que se ejecutan allí. Hasta ahora probé lo siguiente:
auditctl -a exit,always -F arch=b64 -S execve -k any-commands
En la etapa de análisis de registros, descubrí que faltaban dos elementos de contexto:
- ¿Cómo se ejecutaron esos programas? ¿Qué proceso fue su padre y cuál fue su argv?
- ¿A dónde fue la entrada estándar/la salida estándar? Idealmente, me encantaría ver el comando de shell reconstruido, pero sé que probablemente estoy pidiendo demasiado, por lo que al menos tener el ID del descriptor de tubería sería suficiente (para poder intentar reconstruirlo con mis propios scripts).
¿Cómo puedo abordar un problema así?
Respuesta1
La execve
llamada al sistema reemplaza el proceso actual. Si un programa quiere retener el control después de iniciar otro programa, primero necesita crear un nuevo proceso (usando fork
o vfork
) que luego llame a execve
.
Los descriptores y permisos del archivo abierto se toman cuando se reemplaza la imagen del programa execve
(excepto aquellos marcados con la CLOEXEC
bandera), por lo que los archivos abiertos se heredan del proceso principal durante fork
, luego se modifican entre fork
y execve
(por ejemplo, usando dup2
) y finalmente se filtran durante la execve
llamada.
Por lo tanto, será difícil obtener una imagen completa de los datos de auditoría.