Web Shells de PHP Controladas por Cookies: Técnicas de Sigilo en Hosts Linux
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Los actores de amenazas están abusando de las cookies HTTP como una “clave de activación” encubierta para los web shells PHP en servidores de alojamiento Linux. Los implantes permanecen inactivos hasta que se proporciona un valor específico de cookie, luego decodifican y ejecutan cargas útiles proporcionadas por el atacante. Este enfoque ayuda a reducir indicadores obvios en los registros rutinarios, al tiempo que permite la ejecución remota y persistente de código. El comercio de apoyo común incluye ofuscación en capas, autocuración basada en cron y el uso de utilidades estándar del servidor existentes.
Investigación
Los investigadores revisaron múltiples cuentas de alojamiento comprometidas y encontraron cargadores PHP que solo reconstruyen la capacidad a partir de bloques codificados en Base64 cuando la cookie de activación está presente. La persistencia se mantuvo a través de trabajos cron creados a través de paneles de control de alojamiento (como cPanel) que restablecen periódicamente el web shell si se elimina. La ejecución comúnmente fluía a través de php-fpm y otros trabajadores web, que generaban intérpretes de shell y obtenían cargas útiles secundarias para extender el acceso.
Mitigación
Requieran MFA para paneles de control de alojamiento y rutas de acceso administrativas. Limiten los procesos del servidor web para que no puedan generar shells o invocar utilidades comunes de preparación como base64, curl o wget. Monitoreen de cerca la creación y modificaciones de cron, y alerten sobre escrituras de archivos inesperadas o cambios dentro de los directorios web. El endurecimiento adicional incluye restringir el acceso de shell enjaulado y habilitar protecciones en tiempo real en servidores Linux.
Respuesta
Si se identifica, aísle el host, deshabilite y elimine entradas cron maliciosas, elimine artefactos PHP sospechosos y rote las credenciales para las cuentas de alojamiento afectadas. Conserven y revisen la evidencia, incluidos los valores de cookie de activación y las líneas de comando asociadas, luego apliquen controles de endurecimiento para evitar la reimplementación y el compromiso reiterado.
"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffeb99 classDef builtin fill:#cccccc %% Action Nodes step1_initial_access["<b>Técnica</b> – T1190 Explotación de Aplicación Expuesta al Público<br/><b>Descripción</b>: Vulnerabilidad en una aplicación orientada al web se utiliza para cargar un archivo PHP malicioso y obtener una presencia inicial."] class step1_initial_access action step2_persistence_webshell["<b>Técnica</b> – T1505.003 Componente de Software de Servidor: Web Shell<br/><b>Descripción</b>: El archivo PHP cargado actúa como un web shell proporcionando acceso remoto persistente."] class step2_persistence_webshell action step3_def_evasion_obfuscation["<b>Técnica</b> – T1027.008 Archivos o Información Ofuscados: Cargas Eliminadas<br/><b>Descripción</b>: El código del cargador está empaquetado y eliminado para ocultar su verdadera funcionalidad."] class step3_def_evasion_obfuscation action step3b_def_evasion_api["<b>Técnica</b> – T1027.007 Resolución Dinámica de API<br/><b>Descripción</b>: Los nombres de las funciones se reconstruyen en tiempo de ejecución para evitar la detección estática."] class step3b_def_evasion_api action step4_decode["<b>Técnica</b> – T1140 Desofuscar/Decodificar Archivos o Información<br/><b>Descripción</b>: Los bloques de Base64 se decodifican en el servidor para recrear la carga útil maliciosa."] class step4_decode action step5_unix_shell["<b>Técnica</b> – T1059.004 Intérprete de Comando y Secuencias de Comandos: Shell de Unix<br/><b>Descripción</b>: El web shell genera /bin/sh o bash para ejecutar comandos proporcionados por el atacante."] class step5_unix_shell action step6_cookie_cred["<b>Técnica</b> – Acceso a Credenciales vía Cookie<br/><b>Descripción</b>: La ejecución está controlada por valores específicos de $_COOKIE, permitiendo al atacante controlar cuándo se ejecuta el código."] class step6_cookie_cred action step7_permission_mod["<b>Técnica</b> – T1222.002 Modificación de Permisos de Archivos y Directorios de Linux y Mac<br/><b>Descripción</b>: Los archivos PHP creados se otorgan modos permisivos para permanecer ejecutables y resistir la eliminación."] class step7_permission_mod action step8_ingress_transfer["<b>Técnica</b> – T1105 Transferencia de Herramientas de Ingreso<br/><b>Descripción</b>: curl o wget descargan herramientas adicionales o cargas útiles de segunda etapa en el raíz del web."] class step8_ingress_transfer action step9_persistence_cron["<b>Técnica</b> – T1053.003 Tarea/Trabajo Programado: Cron<br/><b>Descripción</b>: Un trabajo cron a nivel de usuario recrea periódicamente el cargador ofuscado, asegurando una presencia autosanadora."] class step9_persistence_cron action step10_def_evasion_cont["<b>Técnica</b> – Ofuscación Continua y Visibilidad Limitada<br/><b>Descripción</b>: La actividad maliciosa se oculta detrás del tráfico web normal y solo se activa con la cookie correcta, reduciendo la evidencia en los registros."] class step10_def_evasion_cont action %% Tool / Process Nodes tool_php["<b>Herramienta</b> – Intérprete de PHP"] class tool_php tool tool_curl_wget["<b>Herramienta</b> – curl / wget"] class tool_curl_wget tool tool_cron["<b>Herramienta</b> – Programador Cron"] class tool_cron tool process_apache["<b>Proceso</b> – apache2 / phpu2011fpm"] class process_apache process %% Connections step1_initial_access –>|conduce a| step2_persistence_webshell step2_persistence_webshell –>|habilita| step3_def_evasion_obfuscation step3_def_evasion_obfuscation –>|usa| step3b_def_evasion_api step3b_def_evasion_api –>|prepara| step4_decode step4_decode –>|ejecuta| step5_unix_shell step5_unix_shell –>|verifica| step6_cookie_cred step6_cookie_cred –>|establece| step7_permission_mod step7_permission_mod –>|descargas vía| tool_curl_wget tool_curl_wget –>|almacena carga para| step8_ingress_transfer step8_ingress_transfer –>|activa| step9_persistence_cron step9_persistence_cron –>|refuerza| step10_def_evasion_cont step10_def_evasion_cont –>|opera dentro de| process_apache process_apache –>|ejecuta| tool_php "
Flujo de Ataque
Detecciones
Shell Sospechoso a través del Servidor Web [Linux] (vía creación_proceso)
Ver
Se Creó Archivo Cron (vía evento_archivo)
Ver
Posible Manipulación de Cadenas Codificadas en Base64 (vía línea_cmd)
Ver
Detección de Actividad Webshell de PHP Controlada por Cookie [Servidor Web]
Ver
Detección de Ejecución Webshell de PHP Controlada por Cookie en Servidores Linux [Evento de Archivo Linux]
Ver
Detección de Ejecución Webshell de PHP Controlada por Cookie [Creación de Proceso Linux]
Ver
Ejecución de Simulación
Prerrequisito: La Verificación Previa de Telémetria y Línea Base debe haber pasado.
Racional: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTP identificados y pretender generar la telémétrica exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados conducirán a un diagnóstico erróneo.
-
Narrativa de Ataque y Comandos:
Un atacante que ya ha comprometido el servidor web obtiene un webshell PHP malicioso (malicioso.php). Para activarlo, el atacante emite una solicitud HTTP que inyecta una cookie creada. El manejador de PHP del servidor web interpreta la cookie y genera un proceso Bash que ejecuta el archivo del webshell. Para pruebas, simulamos el mismo efecto localmente invocando manualmente Bash con una línea de comandos que incluye “.php”. Esto produce la telemetría exacta que la regla Sigma monitorea (intérprete de shell + “.php” en la línea de comandos).- Crear un webshell PHP de prueba (sin código dañino, solo un inofensivo
phpinfo()para visibilidad). - Ejecutar el webshell vía Bash, embebiendo el
.phpnombre de archivo en la línea de comandos. - Verifique que el evento de creación de procesos aparezca en los registros de auditoría con los campos esperados.
- Crear un webshell PHP de prueba (sin código dañino, solo un inofensivo
-
Script de Prueba de Regresión:
#!/usr/bin/env bash set -euo pipefail # 1. Despliegue un archivo PHP inofensivo (webshell simulado) WEBROOT="/tmp/webshell_test" mkdir -p "$WEBROOT" cat > "$WEBROOT/malicious.php" <<'EOF' <?php // Webshell simulado – carga útil segura echo "Webshell ejecutado en " . date('c') . "n"; ?> EOF # 2. Activar la ejecución a través de un intérprete Bash (la línea de comandos contiene ".php") echo "[*] Ejecutando webshell vía Bash para generar telemetría de detección..." /bin/bash -c "php $WEBROOT/malicious.php" # 3. Pausa brevemente para permitir que auditd vacíe los registros sleep 2 echo "[*] Simulación completa. Revise SIEM para una coincidencia en:" echo " process.name en (bash, sh, dash, jailshell) Y process.command_line contiene '.php'" -
Comandos de Limpieza:
#!/usr/bin/env bash set -euo pipefail WEBROOT="/tmp/webshell_test" echo "[*] Eliminando directorio de prueba de webshell..." rm -rf "$WEBROOT" echo "[*] Limpieza completa."