Detecção de exploração do CVE-2021-44228 (Log4j2) no Elastic Security

blog-security-detection-720x420.png

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

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.

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.

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
Regra de detecção ao usar eventos transmitidos do Endgame
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*")

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.


  • 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.tenable.com/blog/cve-2021-44228-proof-of-concept-for-critical-apache-log4j-remote-code-execution-vulnerability

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

https://logging.apache.org/log4j/2.x/security.html#

https://github.com/christophetd/log4shell-vulnerable-app