[BLOG] Série Especial “Entendendo os Ataques Cibernéticos”
Introdução
A injeção de shellcode é uma técnica de exploração fundamental que tem sido usada por invasores há décadas. No entanto, à medida que as defesas se tornaram mais sofisticadas, os invasores tiveram que desenvolver novas técnicas para evitar a detecção. Uma dessas técnicas é a pré-alocação de shellcode, uma abordagem sorrateira que pode contornar algumas das mitigações de segurança mais comuns. Este artigo explora como a pré-alocação de shellcode funciona e como ela pode ser usada para evitar a detecção.
O Básico da Injeção de Shellcode
Em um ataque de injeção de shellcode tradicional, um invasor explora uma vulnerabilidade em um programa para injetar um pequeno pedaço de código malicioso (o shellcode) no espaço de memória do programa. O invasor então redireciona a execução do programa para o shellcode, que é executado com os mesmos privilégios do programa. Para fazer isso, o invasor normalmente precisa alocar um novo bloco de memória para o shellcode, copiá-lo para a memória e, em seguida, executar o shellcode. A função VirtualAlloc do Windows é comumente usada para alocar memória para o shellcode.
Surge a Pré-alocação de Shellcode
A pré-alocação de shellcode é uma variação da injeção de shellcode tradicional que visa evitar a detecção, evitando a necessidade de alocar um novo bloco de memória no momento da exploração. Em vez disso, o invasor pré-aloca memória no processo de destino antes que a exploração seja acionada. Isso pode ser feito de várias maneiras. Por exemplo, um invasor pode explorar uma vulnerabilidade que permite que ele grave em um local de memória pré-alocado. Ou, um invasor pode usar uma técnica como o “bombardeio de memória” para alocar uma grande quantidade de memória e, em seguida, procurar uma área que possa ser usada para armazenar o shellcode.
Depois que a memória é pré-alocada, o invasor pode copiar o shellcode para a memória e, em seguida, acionar a exploração. Como a memória já está alocada, o invasor não precisa chamar VirtualAlloc ou qualquer outra função de alocação de memória, o que pode ajudar a evitar a detecção por produtos de segurança que monitoram essas funções.
Benefícios para os Invasores
A pré-alocação de shellcode oferece vários benefícios para os invasores:
- Evasão de Detecção: Ao evitar chamadas para funções de alocação de memória, a pré-alocação de shellcode pode ajudar os invasores a evitar a detecção por produtos de segurança.
- Confiabilidade: A pré-alocação de memória pode tornar as explorações mais confiáveis, garantindo que haja um local para o shellcode ser armazenado
Antivírus convencionais, baseados principalmente em assinaturas, heurísticas simples e monitoramento de APIs críticas, na maioria das vezes têm grande dificuldade em detectar pré-alocação de shellcode. A pré-alocação evita exatamente os eventos que esses antivírus monitoram, e por isso é considerada uma técnica de evasão eficaz. Pré-alocação de shellcode é projetada justamente para escapar de antivírus convencionais, e geralmente consegue.
Eles falham porque:
- Não monitoram etapas preparatórias,
- Não analisam memória passivamente,
- Dependem de assinaturas e heurísticas simples,
- Não correlacionam eventos ao longo do tempo.
Somente soluções mais modernas de EDR/XDR têm chances reais de bloquear esse tipo de técnica, especialmente aquelas baseadas em modelos comportamentais, porque elas conseguem detectar:
- Grandes regiões de memória RW pré-alocadas;
- Inconsistências entre alocação e uso;
- Execução em regiões “não pertencentes a módulos”;
- Cadeias de eventos que correlacionam pré-alocação + execução.
Isso exige:
- Telemetria contínua de memória,
- Correlação de eventos,
- Análise heurística avançada.
Mitigações
Apesar de sua natureza sorrateira, existem várias mitigações que podem ser usadas para se defender contra a pré-alocação de shellcode:
- Monitoramento de Alocação de Memória: Os produtos de segurança podem monitorar a alocação de memória para detectar padrões suspeitos, como a alocação de grandes blocos de memória executável.
- Randomização do Layout do Espaço de Endereçamento (ASLR): O ASLR torna mais difícil para um invasor prever onde a memória será alocada, o que pode dificultar a pré-alocação de memória.
- Prevenção de Execução de Dados (DEP): O DEP impede a execução de código em áreas de memória que não estão explicitamente marcadas como executáveis, o que pode impedir a execução de shellcode, mesmo que ele seja pré-alocado com sucesso.
- Sandboxing: Executar aplicações em um sandbox pode limitar a capacidade de um invasor de pré-alocar memória em outros processos.
Como a [CYLO] pode ajudar
A Cylo oferece plataformas de detecção e correlação que identificam comportamentos de memória suspeitos, incluindo:
- Criação silenciosa de regiões executáveis;
- Modificações incomuns de permissões de memória;
- Desvios de fluxo em regiões não associadas a módulos legítimos;
- Correlação com técnicas MITRE ATT&CK relacionadas a injeção e execução.
Com o Cortex XSIAM, é possível correlacionar múltiplos sinais fracos — como pré-alocação, escrita de payload e alteração de permissões — formando um alerta único com contexto completo de ameaça.
Conclusão
A pré-alocação de shellcode é uma técnica de evasão sorrateira que pode ser usada para contornar algumas das mitigações de segurança mais comuns. No entanto, ao usar uma abordagem de defesa em profundidade que inclui monitoramento de alocação de memória, ASLR, DEP e sandboxing, as organizações podem reduzir significativamente o risco de serem comprometidas por essa técnica.
Referências
[1] Medium. (2022). Red Teaming 101: Executing Malicious Shellcode with C. Medium. https://medium.com/@lsecqt/red-teaming-101-executing-malicious-shellcode-with-c-a-guide-for-beginners-439bff63721d
[2] SANS Institute. (2025). Interesting Technique to Launch a Shellcode. SANS Institute. https://isc.sans.edu/diary/32238
[3] Cynet. (2025). Process Injection Techniques. Cynet. https://www.cynet.com/attack-techniques-hands-on/process-injection-techniques/