Web Shells PHP Controladas por Cookie: Técnicas Furtivas em Hospedagem Linux
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Atores de ameaça estão abusando de cookies HTTP como uma “chave de ativação” oculta para web shells PHP em servidores de hospedagem Linux. Os implantes permanecem inativos até que um valor específico de cookie seja fornecido, então decodificam e executam cargas úteis fornecidas pelo atacante. Essa abordagem ajuda a reduzir indicadores óbvios em logs rotineiros, enquanto possibilita a execução remota de código persistente. Técnicas de suporte comuns incluem ofuscação em camadas, autorrecuperação baseada em cron e uso de utilitários padrão do servidor.
Investigação
Pesquisadores revisaram várias contas de hospedagem comprometidas e encontraram carregadores PHP que apenas reconstróem a capacidade a partir de blobs codificados em Base64 quando o cookie de gatilho está presente. A persistência foi mantida por meio de tarefas cron criadas via painéis de controle de hospedagem (como o cPanel) que periodicamente restauram o web shell se ele for removido. A execução geralmente seguia através do php-fpm e outros trabalhadores web, que acionavam interpretadores de shell e buscavam cargas úteis secundárias para estender o acesso.
Mitigação
Exigir MFA para painéis de controle de hospedagem e caminhos de acesso administrativos. Restringir processos do servidor web para que não possam iniciar shells ou invocar utilitários de estágio comuns como base64, curl, ou wget. Monitorar a criação e mudanças de cron de perto, e alertar sobre gravações ou alterações de arquivos inesperadas dentro de diretórios web. Reforço adicional inclui restringir o acesso à shell de prisão e ativar proteções em tempo real em servidores Linux.
Resposta
Se identificado, isolar o host, desabilitar e remover entradas cron maliciosas, deletar artefatos PHP suspeitos e rotacionar credenciais para contas de hospedagem afetadas. Preservar e inspecionar evidências, incluindo valores de cookies de gatilho e linhas de comando associadas, então aplicar controles de reforço para prevenir reimplantação e reconquista.
"graph TB %% Definições de Classe classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffeb99 classDef builtin fill:#cccccc %% Nós de Ação step1_initial_access["<b>Técnica</b> – T1190 Exploração de Aplicativo de Acesso Público<br/><b>Descrição</b>: Vulnerabilidade em um aplicativo voltado para a web é aproveitada para carregar um arquivo PHP malicioso e ganhar posição inicial."] class step1_initial_access action step2_persistence_webshell["<b>Técnica</b> – T1505.003 Componente de Software do Servidor: Web Shell<br/><b>Descrição</b>: O arquivo PHP carregado atua como um web shell fornecendo acesso remoto persistente."] class step2_persistence_webshell action step3_def_evasion_obfuscation["<b>Técnica</b> – T1027.008 Arquivos ou Informações Ofuscadas: Cargas Removidas<br/><b>Descrição</b>: O código do carregador é empacotado e despojado para esconder sua verdadeira funcionalidade."] class step3_def_evasion_obfuscation action step3b_def_evasion_api["<b>Técnica</b> – T1027.007 Resolução Dinâmica de API<br/><b>Descrição</b>: Os nomes das funções são reconstruídos em tempo de execução para evitar detecção estática."] class step3b_def_evasion_api action step4_decode["<b>Técnica</b> – T1140 Deofuscate/Decode Arquivos ou Informações<br/><b>Descrição</b>: Blobs de Base64 são decodificados no servidor para recriar a carga maliciosa."] class step4_decode action step5_unix_shell["<b>Técnica</b> – T1059.004 Comando e Interpretador de Script: Shell Unix<br/><b>Descrição</b>: O web shell aciona /bin/sh ou bash para executar comandos fornecidos pelo atacante."] class step5_unix_shell action step6_cookie_cred["<b>Técnica</b> – Acesso à Credencial via Cookie<br/><b>Descrição</b>: A execução é condicionada por valores específicos $_COOKIE, permitindo que o atacante controle quando o código é executado."] class step6_cookie_cred action step7_permission_mod["<b>Técnica</b> – T1222.002 Modificação de Permissões de Arquivo e Diretório Linux e Mac<br/><b>Descrição</b>: Arquivos PHP criados recebem modos permissivos para permanecerem executáveis e resistentes à remoção."] class step7_permission_mod action step8_ingress_transfer["<b>Técnica</b> – T1105 Transferência de Ferramenta de Ingresso<br/><b>Descrição</b>: curl ou wget baixam ferramentas adicionais ou cargas de segunda etapa no diretório raiz."] class step8_ingress_transfer action step9_persistence_cron["<b>Técnica</b> – T1053.003 Tarefa/Trabalho Agendado: Cron<br/><b>Descrição</b>: Uma tarefa cron em nível de usuário recria periodicamente o carregador ofuscado, garantindo uma posição autossustentável."] class step9_persistence_cron action step10_def_evasion_cont["<b>Técnica</b> – Continuação de Ofuscação e Visibilidade Limitada<br/><b>Descrição</b>: A atividade maliciosa é escondida atrás do tráfego web normal e só é ativada pelo cookie correto, reduzindo as evidências de log."] class step10_def_evasion_cont action %% Nós de Ferramenta / Processo tool_php["<b>Ferramenta</b> – Interpretador PHP"] class tool_php tool tool_curl_wget["<b>Ferramenta</b> – curl / wget"] class tool_curl_wget tool tool_cron["<b>Ferramenta</b> – Agendador Cron"] class tool_cron tool process_apache["<b>Processo</b> – apache2 / phpu2011fpm"] class process_apache process %% Conexões step1_initial_access –>|leva 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 –>|executa| step5_unix_shell step5_unix_shell –>|verifica| step6_cookie_cred step6_cookie_cred –>|define| step7_permission_mod step7_permission_mod –>|baixa via| tool_curl_wget tool_curl_wget –>|armazena carga para| step8_ingress_transfer step8_ingress_transfer –>|aciona| step9_persistence_cron step9_persistence_cron –>|reforça| step10_def_evasion_cont step10_def_evasion_cont –>|opera dentro| process_apache process_apache –>|executa| tool_php "
Fluxo de Ataque
Detecções
Shell Suspeito via Servidor Web [Linux] (via criação_de_processo)
Ver
Arquivo Cron Foi Criado (via evento_de_arquivo)
Ver
Possível Manipulação de Strings Codificadas em Base64 (via linha_de_comando)
Ver
Detecção de Atividade de Webshell PHP Controlado por Cookie [Servidor Web]
Ver
Detecção de Execução de Webshell PHP Controlado por Cookie em Servidores Linux [Evento de Arquivo Linux]
Ver
Detecção de Execução de Webshell PHP Controlado por Cookie [Criação de Processo Linux]
Ver
Execução da Simulação
Pré-requisito: O Check de Telemetria e Linha de Base Pré-voo deve ter passado.
Justificativa: Esta seção detalha a execução precisa da técnica adversária (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visar a gerar a telemetria exata esperada pela lógica de detecção. Exemplos abstratos ou não relacionados levarão a um diagnóstico incorreto.
-
Narrativa do Ataque e Comandos:
Um atacante que já comprometeu o servidor web obtém um webshell PHP malicioso (malicious.php). Para ativá-lo, o atacante emite uma solicitação HTTP que injeta um cookie personalizado. O manipulador PHP do servidor web interpreta o cookie e inicia um processo Bash que executa o arquivo do webshell. Para teste, simulamos o mesmo efeito localmente, invocando manualmente o Bash com uma linha de comando que inclui “.php”. Isso produz a telemetria exata que a regra Sigma monitora (interpretador de shell + “.php” na linha de comando).- Criar um webshell PHP fictício (sem código prejudicial, apenas um
phpinfo()inofensivo para visibilidade). - Execução do webshell via Bash, incorporando o
.phpnome de arquivo na linha de comando. - Verificar que o evento de criação de processo aparece nos logs de auditoria com os campos esperados.
- Criar um webshell PHP fictício (sem código prejudicial, apenas um
-
Script de Teste de Regressão:
#!/usr/bin/env bash set -euo pipefail # 1. Implantar um arquivo PHP inofensivo (webshell simulado) WEBROOT="/tmp/webshell_test" mkdir -p "$WEBROOT" cat > "$WEBROOT/malicious.php" <<'EOF' EOF # 2. Acionar execução via um interpretador Bash (linha de comando contém ".php") echo "[*] Executando webshell via Bash para gerar telemetria de detecção..." /bin/bash -c "php $WEBROOT/malicious.php" # 3. Pausar brevemente para permitir que auditd descarregue logs sleep 2 echo "[*] Simulação completa. Verifique o SIEM para uma correspondência em:" echo " process.name in (bash, sh, dash, jailshell) E process.command_line contém '.php'" -
Comandos de Limpeza:
#!/usr/bin/env bash set -euo pipefail WEBROOT="/tmp/webshell_test" echo "[*] Removendo diretório de webshell de teste..." rm -rf "$WEBROOT" echo "[*] Limpeza completa."