Cómo registrar todas las llamadas al sistema realizadas por un proceso y todos sus descendientes con auditado

13

puedo hacer

auditctl -a always,exit -S all -F pid=1234

Para registrar todas las llamadas al sistema realizadas por pid 1234 y:

auditctl -a always,exit -S all -F ppid=1234

Para sus hijos, pero ¿cómo cubro a los nietos y a sus hijos también (actuales y futuros)?

No puedo confiar en (e) uid / (e) gid que sí cambian.

(tenga en cuenta que el uso stracetampoco es una opción)

Stéphane Chazelas
fuente
44
omg, omg, omg, Stephane haciendo una pregunta ... (Vine aquí solo por el título, pensando strace -s^^ pero luego vi quién preguntaba e inmediatamente supe "¡él ya lo sabe!") ... Stephane, ¿puedes? tal vez: 1) construir la lista de pids usando la opción "árbol" de ps, 2) lanzar auditctl (s) en todos los pids listados en el árbol? (es decir, ¿puede tener múltiples "pid = ...." o múltiples auditctl, cada uno en uno?) o la forma "tonta": auditar todo, y algún tipo de egrep en el "pid | pid | pid" si aparecen en cada línea?) (advertencia: no tengo acceso al cajero automático de Linux, así que no tengo idea de cómo aparecen las informaciones)
Olivier Dulac
un truco que tal vez podría usar (una vez más, no conozco los detalles de auditado, ni puedo intentarlo en este momento): ¿especificar una variable de entorno específica al iniciar el padre superior y auditar todos los procesos que tienen esta variable establecida?
Olivier Dulac
@OlivierDulac, marcar el proceso de alguna manera (que es heredado por los niños) es una cosa que tengo en mente. Pero la lista de cosas con las que las reglas de auditoría pueden coincidir es bastante escasa (ni siquiera sid, pgid ...). Tal vez los SELinux, pero no sé lo primero sobre SELinux. ¿Quizás procesar espacios de nombres?
Stéphane Chazelas
¿Quizás el padre superior puede estar en su propio grupo de procesos? ( en.wikipedia.org/wiki/Process_group )
Olivier Dulac
2
Pensé que tal vez ejecute su programa en un contenedor específico, si esa es una opción para usted. Si entiendo este error correctamente, eso debería funcionar con un kernel ≥3.13. Aparte de eso, no veo ningún método que no sea SELinux y el UID de auditoría . ¿El AUID sería aplicable a su caso de uso?
Gilles 'SO- deja de ser malvado'

Respuestas:

1

Simplemente proponiendo algo sin tener ninguna forma de probarlo ahora ... pero solo adivinando desde la publicación misma

Aquí hay una propuesta de solución:

Suponiendo que el ID de proceso más alto está en $ pid, y que también en Linux ps -Tda el árbol de procesos (no puedo tener acceso a Linux en este momento)

for eachpid in $(ps -T "$pid" | awk '{print $1}' | grep -v 'PID')
do
   auditctl -a always,exit -S all -F pid=$eachpid  >somelog_${eachpid}.log 2>&1
done

Por supuesto, reemplácelo ps -T "$pid"con el equivalente de Linux, si ese no funciona en Linux (o encuéntrelo al activar la salida "pstree -p", el pid estará entre paréntesis)

Olivier Dulac
fuente
2
Gracias, pero eso no cubre a los niños "futuros", y ejecutar eso en un ciclo con frecuencia no cubrirá los procesos de corta duración. Y la reutilización pid también causaría un problema.
Stéphane Chazelas
todos los puntos válidos ... Entonces creo que lo que quiere es probablemente una característica "más buscada", y por lo tanto ya podría estar presente en el nivel de auditoría (pero ciertamente no aparece en este momento en la página de manual): puede tener para ser propuesto (o ... escrito) para una versión futura. No recuerdo alguna forma de "seguir un árbol" de procesos ... pero tal vez podrías implementar uno por 1) hacer que un script haga equivalentes regulares "ps -T", 2) otro script mata al primero tan pronto el pid muere 3) cada vez que la lista de pid de 1) cambia, agrega / elimina el auditctl para esos pids? (no es demasiado difícil de hacer)
Olivier Dulac
1
(mi último comentario no resuelve el pb para procesos de muy corta duración ... esto puede necesitar algo en el nivel del núcleo en sí, y no sé lo suficiente como para decirle si existe algo para eso. Puede valer una pregunta sobre las listas de correo del núcleo)
Olivier Dulac