Detecção de exploração do CVE-2021-44228 (Log4j2) no Elastic Security
OBSERVAÇÃO IMPORTANTE:
- Para entender como a Elastic está avaliando no momento o risco interno dessa vulnerabilidade em nossos produtos, consulte os anúncios relevantes aqui.
- Este blog foi atualizado (14/12/2021) com mais detalhes para melhorar a detecção e a busca de ameaças desde sua publicação inicial.
Visão geral
Este post do blog resume o CVE-2021-44228 e indica aos usuários do Elastic Security detecções para encontrar explorações ativas de vulnerabilidade em seu ambiente.
Haverá atualizações com mais detalhes neste post à medida que novas informações surgirem sobre o assunto. Esta versão foi atualizada em 14 de dezembro de 2021, terça-feira. As atualizações do Apache devem ser investigadas diretamente na página de segurança do Log4j2.
Resumo do CVE-2021-44228 (Log4Shell)
O Log4j2 é um framework de logging de open source incorporado a muitas aplicações baseadas em Java tanto em sistemas quanto em servidores de usuário final. No final de novembro de 2021, Chen Zhaojun da Alibaba identificou uma vulnerabilidade de execução de código remoto que acabou sendo comunicada com o código CVE ID: CVE-2021-44228 e divulgada publicamente em 10 de dezembro de 2021. A vulnerabilidade é explorada pela desserialização imprópria de entradas do usuário que passam pelo framework. Isso permite a execução do código remoto e pode abrir caminho para ataques com vazamento de dados sensíveis, como variáveis de ambiente, ou com execução de software malicioso no sistema pretendido.
A vulnerabilidade identificada afeta todas as versões do Log4j2 a partir da versão 2.0-beta9 até a versão 2.14.1. Os métodos anteriores para resolver o problema resultaram em várias versões tentativas e, por fim, foram geradas recomendações para atualizar o framework para o Log4j2 2.15.0-rc2 quando este post foi publicado.
Devido à natureza simplificada da disseminação da exploração que foi observada, a mitigação deve ser considerada crítica em qualquer ambiente em que foi identificado software que usa versões vulneráveis do Log4j2.
Detecção de exploração do Log4Shell no Elastic Security
Os usuários do Elastic Security podem usar a seguinte regra para a detecção de correlação de evento para identificar exploração ativa da vulnerabilidade do Log4j2. Dependendo do formato dos dados de evento baseados em host, você pode precisar modificar essa detecção para combinar os campos de dados.
Regra de detecção ao usar os dados do Endpoint
sequence by host.id with maxspan=1m
[network where event.action == "connection_attempted" and
process.name : "java" and
/*
outbound connection attempt to
LDAP, RMI or DNS standard ports
by JAVA process
*/
destination.port in (1389, 389, 1099, 53, 5353)] by process.pid
[process where event.type == "start" and
/* Suspicious JAVA child process */
process.parent.name : "java" and
process.name : ("sh",
"bash",
"dash",
"ksh",
"tcsh",
"zsh",
"curl",
"perl*",
"python*",
"ruby*",
"php*",
"wget")] by process.parent.pid
Regra de detecção ao usar os dados do Auditbeat
sequence by agent.id with maxspan=1m
[network where event.action == "connected-to" and
process.name : "java" and
/*
outbound connection attempt to
LDAP, RMI or DNS standard ports
by JAVA process
*/
destination.port in (1389, 389, 1099, 53, 5353)] by process.pid
[process where event.type == "start" and
/* Suspicious JAVA child process */
process.parent.name : "java" and
process.name : ("sh",
"bash",
"dash",
"ksh",
"tcsh",
"zsh",
"curl",
"perl*",
"python*",
"ruby*",
"php*",
"wget")] by process.parent.pid
Regra de detecção ao usar eventos transmitidos do Endgame
sequence by agent.id with maxspan=1m
[network where event.category == "network" and
process.name : "java" and
/*
outbound connection attempt to
LDAP, RMI or DNS standard ports
by JAVA process
*/
destination.port in (1389, 389, 1099, 53, 5353)] by process.pid
[process where event.type == "start" and
/* Suspicious JAVA child process */
process.parent.name : "java" and
process.name : ("sh",
"bash",
"dash",
"ksh",
"tcsh",
"zsh",
"curl",
"perl*",
"python*",
"ruby*",
"php*",
"wget")] by process.parent.pid
Essa regra de detecção procura uma sequência de uma tentativa de conexão de saída para portas padrão para LDAP, RMI e DNS (alvos de abuso frequente via ataques de injeção de JAVA/JNDI observados recentemente), seguida de um processo filho da mesma instância de processo Java.
Agora vamos demonstrar como essa regra detecta a exploração da vulnerabilidade do log42j:
A captura de tela acima mostra um invasor explorando a vulnerabilidade com carga útil codificada em Base64 visando uma aplicação vulnerável de exemplo criada por Christophe Tafani-Dereeper.
Esta captura de tela mostra a detecção de uma exploração ativa do CVE-2021-44228 no Elastic Security que detalha as visualizações do alerta e da linha do tempo da exploração.
A captura de tela acima mostra na investigação do alerta de detecção que o Java executou um script de shell para baixar e executar um script de bash.
Atualização: Melhorias de detecção e busca
Execução de comandos shell suspeitos via Java
Com base em classes Java maliciosas observadas publicamente e fornecidas via exploração do log4j, você pode buscar scripts de shell suspeitos e inserir os comandos de transferência da ferramenta:
process where event.type == "start" and
process.parent.name : "java*" and
/* Ingress tools transfer via common shell command interpreters */
/* linux or macos */
(
(process.name : ("sh", "bash", "python*") and
process.command_line : ("*curl*|*sh*", "*wget*|*bash", "*curl*|*bash*", "*curl*|*bash*", "*http*|*sh*", "*python*http*")) or
/* windows */
(process.name : ("powershell.exe", "pwsh.exe", "cmd.exe") and
process.command_line : ("*.downloadstring*", "*.downloadfile*", "*.downloaddata*", "*BitsTransfer*", "* -enc*", "* IEX*", "*wp-content*", "*wp-admin*", "*wp-includes*", "*$*$*$*$*$*", "*^*^*^*^*^*^*^*^*^*", "*.replace*", "*start-process*", "*http*", "*cmd*powershell*")))
Execução de arquivo não confiável via JAVA
Identifica quando um intérprete JAVA cria um arquivo executável (PE/ELF) e este é executado em seguida.
Regra de detecção ao usar os dados do Endpoint
sequence by host.id with maxspan=5m
[ file where event.type != "deletion" and
process.name : ("java", "java.exe", "javaw.exe") and
(file.extension : ("exe", "com", "pif", "scr") or
/* Match Windows PE files by header data (MZ) */
file.Ext.header_bytes : ("4d5a*", "7f454c46*")) and
not file.path : ("?:\\Program Files\\*",
"?:\\Program Files (x86)\\*") ] by file.path
[ process where event.type == "start" and
not process.code_signature.trusted == true ] by process.executable
sequence by agent.id with maxspan=5m
[ file where event.type != "deletion"
process.name : ("java", "java.exe", "javaw.exe")] by file_path
[ process where event.type == "start" and
not process.code_signature.trusted == true] by process_path
Atividade CoinMiner potencial
Processe com a linha de comando comum ao minerador de criptomoedas (as campanhas mais observadas que aproveitam a exploração do log4j são os mineradores de moedas):
process where event.type == "start" and
process.command_line :
("* pool.*", "*-u*--coin*", "*.xmr.*", "*.xmr1.*",
"*stratum*", "*elitter.net*", "*cryptonight*",
"*-a scrypt*", "*stratum1*", "*-userpass*", "*-max-cpu-usage*",
"*qhor.net*", "*-wallet*pool*", "*--donate-level*", "*supportxmr.com*")
Outras detecções de exploração de posts relevantes :
Tentativa de desabilitar IPTables ou o Firewall
Violação do histórico da linha de comando Bash
Exclusão de arquivos do log do sistema
Detecções da comunidade
Muitos membros da comunidade trocaram ideias sobre a disseminação da exploração da vulnerabilidade e, a partir daí, surgiram insights sobre vários métodos de detecção anteriores que os analistas podem aproveitar para identificar se os sistemas em uso foram explorados ou estão sendo explorados ativamente:
- Uma série de cargas úteis foi compartilhada pela equipe GreyNoise e incluem cargas úteis com variantes codificadas e decodificadas para analistas que procuram explorar logs armazenados em seus sistemas. Essa série foi complementada com uma lista de IPs marcados iniciais que tentaram explorar a vulnerabilidade.
- Florian Roth da Nextron Systems fez uma série de verificações de exploração local usando grep / zgrep em paralelo a algumas assinaturas YARA iniciais em um Gist listado na conta Github dele. Florian também divulgou um método para gerar Thinkst CanaryTokens para testar sistemas que você pode gerenciar quanto à exploração.
- Rob Fuller (Mubix) compartilhou uma lista de hashes de arquivos conhecidos nas versões vulneráveis do framework aqui.
Estratégias de mitigação adicionais
Além da orientação recomendada pela equipe do Apache em relação à implantação das últimas versões com patches do framework do Log4j2 a ser atualizado, várias mitigações foram amplamente sugeridas para evitar a exploração:
- A Fastly sugeriu verificar se sua versão do Log4j é compatível com a execução do JVM com JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true para desativar a funcionalidade de pesquisa para o servidor remoto. Isso se aplica às versões 2.10.0 a 2.15.0.
- Recomenda-se manter a conectividade entre sistemas potencialmente vulneráveis e recursos externos limitada a aplicações e/ou serviços confiáveis para evitar movimento lateral de um host vulnerável ou exploração pela rede.
A equipe do Elastic Security agradece.
Gostaríamos de agradecer a todas as equipes de segurança de todo o mundo pelos esforços incansáveis hoje e durante todo o fim de semana, em especial nossos colegas mencionados neste post. É essencial termos uma comunicação aberta e mantermos a colaboração na comunidade de segurança para que a segurança dos usuários seja garantida quando houver eventos de vulnerabilidade sérios e invasivos. Saibam que estamos aqui acompanhando vocês em cada passo desse caminho.
Se você já usa o Elastic Security, pode acessar esses recursos no próprio produto. Caso esteja começando agora no Elastic Security, dê uma olhada em nossos guias Quick Start (pequenos vídeos de treinamento para você começar rapidamente) ou nossos cursos gratuitos de treinamento sobre fundamentos. Você pode começar com uma avaliação gratuita do Elastic Cloud por 14 dias. ou pode baixar a versão autogerenciada do Elastic Stack também gratuitamente.
Material de referência
https://www.lunasec.io/docs/blog/log4j-zero-day/
https://www.crowdstrike.com/blog/log4j2-vulnerability-analysis-and-mitigation-recommendations/
https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/
https://www.greynoise.io/viz/query/?gnql=CVE-2021-44228