Vulnerabilidades de segurança: como os invasores entram e se espalham pela sua rede.
Imagine o seguinte cenário:
Em um dia agitado, você corre para o supermercado local para comprar um sanduíche rápido e uma bebida entre reuniões. No estacionamento, você deixa sua carteira no banco de trás, mas se lembra de apertar o botão da chave para trancar seu carro novo.
Acontece que o seu modelo de carro tem uma falha de software em que o controle remoto da chave só trava as duas portas da frente, mas não as duas de trás. Então, enquanto você está na loja, um ladrão repara na carteira e tenta entrar pela porta dos fundos. Para sua agradável surpresa, a porta se abre e eles têm acesso à sua carteira!
Esse cenário é a história de uma vulnerabilidade de segurança em miniatura. A falha era pequena e, por si só, não causava absolutamente nada. Isso se tornou um problema no momento em que alguém percebeu a que tinha acesso.
O software funciona da mesma maneira. Uma falha concede tempo ao atacante com base no resultado que produz, e esse resultado molda cada movimento subsequente.
Os atacantes tratam uma vulnerabilidade como ponto de partida. Por trás disso, eles encadeiam uma série de etapas previsíveis: encontram a falha, executam o código que controlam, assumem o controle da máquina e se espalham a partir daí. Agora, essa cadeia é executada na velocidade de uma máquina, e a automação continua reduzindo a distância entre uma primeira exploração e um problema em toda a rede.
Você pode acompanhar a cadeia de ataque do ponto de vista do atacante, desde a primeira fraqueza até o objetivo final, para que os defensores possam ver onde interceptá-la.
O que um exploit bem-sucedido proporciona a um atacante?
As vulnerabilidades são de três tipos principais. Uma falha pode estar no código, na forma como um sistema está configurado ou na camada de identidade e usuário. Independentemente do tipo em que comece, uma exploração bem-sucedida tende a levar a um ou mais resultados.
- Execução arbitrária de código (ACE). Uma exploração bem-sucedida que resulta no acesso do atacante ao fluxo normal do programa da aplicação vulnerável. Em seguida, eles redirecionam o fluxo para executar o código do atacante em vez do código original do aplicativo. A Execução Remota de Código (RCE) é um subconjunto do ACE: o mesmo ataque executado através de uma rede.
- Elevação de privilégios (EoP). Isso permite que um invasor obtenha privilégios superiores aos que possuía inicialmente. Por exemplo, os atacantes usam o EoP para migrar de uma conta de usuário padrão para uma conta administrativa. Ferramentas populares como o Mimikatz permitem a escalação de privilégios.
- Divulgação de informações (DI). Uma vulnerabilidade que permite ao atacante obter informações que ele não deveria poder ver, geralmente dados pessoais sensíveis ou detalhes sobre a segurança do sistema.
- Burlando o recurso de segurança. Uma vulnerabilidade que contorna as medidas de segurança que bloqueariam o acesso a uma parte sensível de um sistema ou pacote de software.
Para um atacante, uma vulnerabilidade e sua exploração são apenas um meio para um fim: uma maneira de iniciar uma invasão e obter vantagem.
Tenha isso em mente durante a etapa intermediária técnica: cada passo após a exploração da vulnerabilidade é executado em conexões de rede, e os defensores podem escolher quais delas permanecerão abertas.
Como os agentes maliciosos exploram uma vulnerabilidade para iniciar uma violação de segurança?
O atacante tentará injetar código malicioso na memória por meio de uma aplicação vulnerável, como por exemplo, através de um estouro de buffer. Isso permite que eles redirecionem o fluxo normal do programa para o código malicioso do atacante, também conhecido como shellcode.
Agora, o código malicioso do agente da ameaça (shellcode) assume o controle da máquina para obter uma posição inicial e estabelecer um centro de comando e controle (C&C ou C2). Neste ponto, o invasor conseguiu iniciar a violação.
Cada etapa desempenha um papel crucial na cadeia de ataque como um todo:
- Descoberta de vulnerabilidades. Este é o processo de encontrar uma fragilidade na forma como um sistema ou software é desenvolvido ou como está sendo utilizado. Isso pode incluir engenharia reversa, fuzzing, análise de código (estática e dinâmica) ou análise de dependências.
- Explorar uma vulnerabilidade do programa. Exploits são trechos de código nativo ou de baixo nível que exploram com sucesso uma vulnerabilidade. Isso pode incluir explorações que levam à execução de código arbitrário (ACE), bypass, elevação de privilégios (EoP) ou divulgação de informações (ID).
- Shellcode. Shellcode é um código malicioso específico de baixo nível ou um ataque especialmente elaborado que tenta sequestrar o fluxo normal de um programa em execução e redirecioná-lo para um código malicioso do atacante também em execução na memória. Isso pode incluir estouros de buffer, pulverização de heap, sequestro de VTable ou programação orientada a retorno (ROP).
- Inverter a casca. Um shell reverso inicia uma conexão de volta à infraestrutura de escuta do atacante para obter acesso não autorizado ao programa ou sistema vulnerável. Isso pode incluir comandos (cmd), bash para baixar exploits adicionais e payloads mais sofisticados, como os para escalonamento de privilégios.
- Carga útil de malware. Os payloads de malware são executáveis maliciosos ou exploits mais sofisticados e complexos que permitem o avanço do ataque além do ponto de apoio inicial. As capacidades e ações que um malware adicional proporciona em um sistema comprometido vão muito além do que um pequeno trecho de shellcode, geralmente comum, é projetado para oferecer. Isso pode incluir ataques em várias etapas por meio de uma exploração de escalonamento de privilégios local e, em seguida, malware para movimentação lateral semelhante a um worm.
Os passos 2 a 4 acima ocorrem todos na memória. Um atacante explora uma vulnerabilidade de um programa, usa shellcode para assumir o controle do seu fluxo de controle e instala um shell reverso. Você pode analisar isso usando a estrutura de memória virtual de um processo (um executável em execução). Essa estrutura possui cinco partes principais: a pilha, o heap, os dados, a BSS (Seção de Barramento de Sub-rede) e as seções de texto.

A seção sobre a pilha será de particular interesse. Na segunda parte, vamos analisar essas seções de memória com mais detalhes, usando como exemplo uma das seguintes técnicas de exploração.
Principais técnicas para explorar vulnerabilidades
Algumas das principais técnicas de exploração incluem:
- Ataquesbaseados em identidade direcionados a contas comprometidas.
- Ataques de falhas lógicas que exploram falhas díspares na lógica de programação para criar uma vulnerabilidade explorável.
- Buffer overflow, que ocorre quando um buffer é sobrescrito, sobrescrevendo o endereço de retorno.
- Os ataques de "heap spray" tentam preencher (pulverizar) o heap com código malicioso executável, o que aumenta as chances de execução desse código após a exploração da vulnerabilidade. Os ataques de heap spray tentam contornar as proteções de memória ASLR (Address Space Layout Randomization).
Uma vez que um agente malicioso explora uma vulnerabilidade e obtém uma vantagem inicial, ele já percorreu metade de uma estratégia previsível. Agora eles precisam usar esse acesso para transitar de máquina em máquina, espalhar o ataque e atingir seus objetivos.
Como os agentes maliciosos exploram uma vulnerabilidade para disseminar uma violação de segurança?
A fase de propagação do ataque ocorre em território mais familiar. Normalmente, segue a segunda metade das táticas e técnicas da estrutura MITRE ATT&CK. Esses quatro passos dão continuidade aos cinco primeiros — nove passos no total.
- Descoberta. Descobrir significa aprender mais sobre o sistema em que eles pousaram e a rede à qual ele está conectado. Isso pode incluir descoberta de contas, informações de rede, descoberta de navegadores e descoberta de infraestrutura em nuvem.
- Movimento lateral. O movimento lateral significa conectar-se a sistemas remotos e assumir o controle deles para se espalhar pela rede. Isso pode incluir sequestro de RDP/SSH, compartilhamentos administrativos, SMB, ataque pass-the-hash, ferramentas de implantação de software e técnicas de exploração indevida de recursos naturais.
- Comando e controle. Comando e controle é a forma como os atacantes se comunicam e controlam os sistemas infectados por meio de sua própria infraestrutura de escuta. Isso pode incluir canais de shell reverso, canais da web, algoritmos de geração de domínio (DGA), canais de texto DNS e fronting de domínio (CDN).
- Objetivos. Os objetivos são as metas finais do ataque. Isso pode incluir roubo ou exfiltração de dados (pyexfil ou icmpexfil), ransomware, negação de serviço ou botnets.
Principais técnicas para alargar uma brecha
Os atacantes raramente precisam de ferramentas exóticas para se espalharem. Os mesmos caminhos que permitem aos administradores gerenciar sistemas e às equipes compartilhar arquivos também abrem brechas de segurança entre máquinas:
- Portas e protocolos administrativos. RDP, SSH e WinRM dão aos atacantes o mesmo controle remoto que eles dão às equipes de TI.
- Compartilhamento de arquivos e pastas. As pastas compartilhadas SMB movem malware com a mesma facilidade com que movem documentos.
- Instrumentação. Ferramentas como o WMI permitem que invasores executem comandos em sistemas remotos sem instalar um único arquivo novo.
- Canais baseados na web. O tráfego HTTP e DNS permite que o comando e o controle se ocultem no ruído da navegação normal.
Por que o fluxo de ataque importa mais do que a falha
Novas vulnerabilidades surgem mais rápido do que qualquer equipe consegue corrigi-las, e as que causam mais danos raramente são as que têm a pontuação mais alta. O que determina o dano é tudo o que acontece depois que a vulnerabilidade é explorada: até onde o atacante pode ir, quantos sistemas ele consegue atingir e quanto tempo ele tem para trabalhar.
Isso é uma boa notícia para os defensores, porque a fase de dispersão é a parte previsível. Descoberta, movimentação lateral, comando e controle, e o objetivo final, tudo depende de conexões entre sistemas que a maioria das redes permite por padrão. Feche esses caminhos e um ponto de apoio permanecerá um ponto de apoio. A segmentação, o controle rigoroso sobre portas e protocolos administrativos e a visibilidade clara de como as cargas de trabalho se comunicam entre si podem transformar uma cadeia de nove etapas em uma que termina na quinta etapa.
Lembre-se do carro no estacionamento. O ladrão só importava porque uma porta se abriu. A segmentação é como você mantém todas as outras portas trancadas, mesmo quando uma fechadura falha.
Os atacantes agora automatizam toda essa sequência e a executam na velocidade da máquina. A detecção e a resposta ainda são importantes e funcionam melhor quando o raio da explosão já é pequeno. Conter a brecha no ponto de entrada é o que dá à equipe de segurança o tempo necessário para agir.
Na segunda parte, vamos nos aprofundar em explorações de memória, como strings e entradas especialmente criadas funcionam dentro de uma exploração e as técnicas que os defensores podem usar para impedi-las.
Experimente a segmentação do Illumio. Para ver como você pode fechar as vias de movimento lateral e conter as brechas no ponto de entrada.





