[ B L O G ]

Artigos relacionados a Inteligência de Ameaças Cibernéticas by [ CYLO ]​

16. Quando o JIT Vira Vetor de Ataque: Entendendo e Mitigando o JIT Spraying

[BLOG] Série Especial “Entendendo os Ataques Cibernéticos”

Introdução

A compilação Just-In-Time (JIT) é uma técnica amplamente utilizada por linguagens modernas, como JavaScript e C#, para melhorar o desempenho de aplicações ao converter código intermediário em código de máquina nativo durante a execução. No entanto, os mesmos mecanismos que tornam o JIT eficiente também podem ser explorados por invasores.

O chamado JIT spraying é uma técnica de ataque que se aproveita do comportamento previsível do compilador JIT para contornar defesas fundamentais, como a Randomização do Layout do Espaço de Endereçamento (ASLR) e a Prevenção de Execução de Dados (DEP). Este artigo explora como o JIT spraying funciona e apresenta técnicas eficazes para mitigar esse vetor de ataque.

O Ataque de JIT Spraying

Um compilador JIT funciona traduzindo código intermediário, como bytecode JavaScript, em instruções nativas no momento da execução. Esse código gerado é armazenado em regiões de memória explicitamente marcadas como executáveis, pois precisa ser executado diretamente pela CPU.

O JIT spraying [1] explora exatamente esse comportamento. Um invasor constrói entradas cuidadosamente elaboradas, como scripts JavaScript, que ao serem compiladas pelo JIT resultam em grandes blocos de código de máquina contendo padrões previsíveis ou até trechos de shellcode. Em seguida, uma segunda vulnerabilidade, como um buffer overflow ou use-after-free, é explorada para redirecionar o fluxo de execução para essas regiões de memória.

É interessante lembrar que o DEP – Data Execution Prevention (Prevenção de Execução de Dados) e ASLR – Address Space Layout Randomization (Randomização do Layout do Espaço de Endereçamento) são mecanismos de segurança do sistema operacional, criados para dificultar a exploração de vulnerabilidades de memória (no final desse artigo há referências confiáveis e bem reconhecidas [3] a [6] para aqueles que desejarem aprofundar sobre essas técnicas).

Entretanto, como o código JIT já é legítima e intencionalmente executável, o DEP não bloqueia sua execução. Além disso, ao pulverizar o heap com múltiplas instâncias do mesmo padrão de código, o atacante reduz drasticamente a eficácia do ASLR, aumentando a probabilidade de sucesso do redirecionamento de execução. Isso torna o JIT spraying uma técnica poderosa e difícil de mitigar apenas com defesas tradicionais.

Técnicas de Mitigação

Diversas abordagens foram desenvolvidas para reduzir o risco associado ao JIT Spraying [2]:

  • Desabilitar o JIT: A mitigação mais direta é desativar completamente o compilador JIT. Embora eficaz do ponto de vista de segurança, essa abordagem pode causar degradação significativa de desempenho, tornando-se inviável para muitas aplicações modernas.
  • Endurecimento do JIT: O endurecimento do compilador JIT busca reduzir a previsibilidade do código gerado:
    • Randomização de Constantes: introduz variação nos valores constantes do código gerado, dificultando a construção de sprays confiáveis.
    • Inserção e Alinhamento de NOPs: a introdução de instruções de não operação pode quebrar sequências úteis ao shellcode.
    • Randomização do Código Gerado: pequenas variações na saída do compilador dificultam a previsão da disposição do código na memória.
  • Randomização do Código Gerado: pequenas variações na saída do compilador dificultam a previsão da disposição do código na memória.
  • Políticas de Execução no Sistema Operacional: Alguns sistemas operacionais oferecem mecanismos adicionais de proteção. Distribuições como o Red Hat Enterprise Linux incluem parâmetros de kernel e políticas de segurança que aplicam restrições extras à execução de código JIT, contribuindo para a mitigação desse tipo de ataque em nível sistêmico.

Conclusão

O JIT spraying representa uma ameaça relevante para aplicações que dependem intensamente de compilação Just-In-Time. Ao explorar características legítimas do JIT, essa técnica consegue contornar defesas clássicas de memória. No entanto, a adoção combinada de endurecimento do compilador, isolamento do processo JIT e políticas de execução mais restritivas pode reduzir significativamente o risco de exploração. À medida que o uso de JIT se torna cada vez mais comum, é essencial que desenvolvedores e administradores compreendam esses riscos e adotem estratégias proativas de proteção.

Como a CYLO pode ajudar

A CYLO pode apoiar organizações na mitigação de ataques baseados em JIT spraying ao integrar visibilidade profunda de execução, análise comportamental e resposta automatizada a incidentes em ambientes que utilizam compilação Just-In-Time. Por meio da adoção de plataformas modernas de XDR e SIEM de nova geração, como o Cortex XSIAM em seu portfólio, a CYLO auxilia na detecção de padrões anômalos associados à geração e execução de código JIT, como regiões de memória executável criadas dinamicamente, comportamento atípico de navegadores, runtimes ou aplicações gerenciadas e correlação desses eventos com falhas de memória exploráveis. Além disso, a CYLO atua na definição de estratégias de hardening de sistemas, criação de playbooks de resposta automatizada e apoio técnico na implementação de políticas de execução e proteção em nível de sistema operacional, reduzindo de forma significativa a superfície de ataque associada a vetores avançados como o JIT spraying.

Referências

[1] Palo Alto Networks. (2024). Exploit Protection (4) – Content Update Release Notes. Palo Alto Networks.https://docs-cortex.paloaltonetworks.com/r/Cortex-XDR/Cortex-XDR-and-Traps-Content-Update-Release-Notes-Version-1360/Exploit-Protection-4

[2] ReasonLabs Cyberpedia. (n.d.). What is JIT Hardening?. ReasonLabs Cyberpedia. https://cyberpedia.reasonlabs.com/EN/jit%20hardening.html

[3] Wikipedia – Data Execution Prevention (DEP)

https://en.wikipedia.org/wiki/Data_Execution_Prevention

[4] Microsoft Learn – Data Execution Prevention

https://learn.microsoft.com/en-us/windows/win32/memory/data-execution-prevention

[5] OWASP – Buffer Overflow Prevention

https://owasp.org/www-community/attacks/Buffer_overflow_attack

[6] Intel Developer Zone – Execute Disable Bit

https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html

Scroll to Top