Determinando httpd PHP Scripts con Auditd

14

Background

Tengo un problema en mi servidor donde un agujero permite que los archivos PHP maliciosos se escriban en cualquier directorio de escritura mundial debajo de la raíz web. Actualmente no está causando ningún daño, ya que tengo todos estos directorios bloqueados para que no sirvan scripts PHP (o cualquier otra cosa a menos que sean imágenes / videos para algunos de ellos), y recibo un aviso por correo electrónico tan pronto como se cree algo en ellos, pero obviamente quiero arreglarlo.

Tomé varias medidas, como garantizar que las instalaciones de Joomla y Wordpress en el servidor estén actualizadas, pero aún así continúa. Hay un sitio cliente en el servidor que ejecuta una versión bastante antigua de un sistema de comercio electrónico, que sospecho que puede ser el culpable.

Pregunta

Así que configuré auditd para monitorear todos estos directorios de escritura mundial, y espero que el problema vuelva a aparecer para recopilar algunos registros, pero ya tengo algunas entradas de registro para observar la actividad normal que se ha producido.

Es como sospechaba, y por supuesto, cuando un script PHP escribe en un archivo, todo lo que auditd muestra para el exe es /usr/sbin/httpd . Vea la salida de muestra a continuación. Es potencialmente posible tener una idea de de qué sitio proviene el problema según el CWD , pero eso podría cambiarse y no es confiable. También sería útil saber el script específico.

Entonces, me pregunto si es posible que auditd registre el nombre del script (edición: o quizás la pila de llamadas) que está generando la acción a través de /usr/sbin/httpd , o algo parecido a esa información.

  

time- > Wed Nov 30 14:36:30 2016

     

type = PATH msg = audit (1480516590.911: 180239): item = 1 name="/ home / web / www.example.com / html / cache / example.php" inode = 539842913 dev = 08: 05 mode = 0100644 ouid = 48 ogid = 48 rdev = 00: 00 objtype = CREATE

     

type = PATH msg = audit (1480516590.911: 180239): item = 0 name="/ home / web / www.example.com / html / cache /" inode = 539833631 dev = 08: 05 mode = 040777 ouid = 634 ogid = 634 rdev = 00: 00 objtype = PADRE

     

type = CWD msg = audit (1480516590.911: 180239): cwd="/ home / web / www.example.com / html"

     

type = SYSCALL msg = audit (1480516590.911: 180239): arch = c000003e syscall = 2 success = yes exit = 36 a0 = 7f9baf272550 a1 = 241 a2 = 1b6 a3 = 9 ppid = 26483 pid = 30957 auid = 4294967295 uid = 48 gid = 48 euid = 48 suid = 48 fsuid = 48 egid = 48 sgid = 48 fsgid = 48 tty = (none) ses = 4294967295 comm="httpd" exe="/ usr / sbin / httpd"="write_to_open_web_directories"

    
pregunta SuperDuperApps 30.11.2016 - 18:41
fuente

1 respuesta

1

auditd no puede realizar un seguimiento de la pila u obtener otra información porque solo se invoca en llamadas al sistema o acceso a archivos. El seguimiento de la pila solo es accesible desde el espacio de usuario, y requeriría desenrollar la pila, lo que incurriría en una sobrecarga significativa .

Como se menciona en los comentarios, puede agregar %P a la configuración del registro de acceso para obtener PID para la correlación con auditd , o registrar las solicitudes completas desde mod_security .

También puede modificar mod_php o usar un LD_PRELOAD para agregar información a las solicitudes relevantes en el archivo abierto.

    
respondido por el David 17.01.2018 - 06:26
fuente

Lea otras preguntas en las etiquetas