Desmistificando técnicas de ransomware usando assemblies.Net: um ataque em vários estágios
Em parte um desta série, analisamos exemplos de recursos de programação que podem ser usados pelo ransomware em suas técnicas maliciosas. Em seguida, em parte dois, também examinamos os fundamentos da Microsoft .Net estrutura de software e conjuntos associados de EXE e DLL para entender como esses recursos são possíveis.
Nesta parte final, combinaremos tudo o que foi discutido até agora em um conjunto de cargas úteis em estágios para demonstrar os fundamentos de um ataque de carga útil em vários estágios.
Configuração de carga útil e ataque
Começamos definindo as cargas que serão usadas para o ataque. Todos os recursos anteriores, incluindo os novos, serão levados em consideração para criar as cargas úteis escalonadas. Isso é para demonstrar em geral como as diferentes táticas e técnicas que vimos até agora podem ser reunidas, como é normalmente o caso do ransomware.
Vamos usar as seguintes cargas úteis:
- Aplicação EXE inicial: carga útil do Stager
- EXE principal do ransomware: Carga útil do estágio 1
- 2e DLL principal de ransomware: carga útil do estágio 2
O uso de várias cargas para realizar tarefas diferentes neste exemplo de ataque constitui um ataque em vários estágios. Analisando a série anterior sobre cargas úteis e beacons de malware, parte dois discutiu os tipos de cargas maliciosas com mais detalhes. Lá, expliquei a diferença entre os tipos de carga útil escalonada e escalonada. Em resumo, um stager geralmente é um aplicativo executável inicial menor que pode atuar como baixador, dropper e/ou payload para um arquivo de carga útil principal mais capaz e geralmente maior, conhecido como stage. O objetivo da carga útil do stager é configurar o palco principal. Neste exemplo de ataque, usando o teste de carga útil conforme descrito acima, as diferentes cargas terão as várias tarefas a seguir:
A carga útil do Stager EXE fará o seguinte:
- Técnicas de evasão
- Baixa dois arquivos de “texto” para o disco. Esses arquivos são, na verdade, um EXE e uma DLL.
- Lance o 2e Arquivo EXE
- O encenador então sai
- O Running 2e EXE (estágio 1) carrega a DLL (estágio 2)
As cargas de EXE e DLL do Stage-1 e Stage-2 executam então as seguintes ações maliciosas de ransomware:
- Técnicas de evasão
- Descoberta
- Manipulação de processos
- Enumeração de unidades e arquivos
- Criptografia de arquivos
Stager: Executável de carga útil inicial (EXE)
O ataque começa com nossa carga inicial, o stager entregue à máquina da vítima. Muitas vezes, isso ocorre por meio de técnicas de engenharia social, como phishing. Depois que a carga inicial for entregue e executada, ela começará a executar o conjunto malicioso de instruções.
Evasão
Primeiro, ele aguardará um tempo especificado sem realizar nenhuma ação. Essa é uma técnica de evasão projetada para superar a análise de ameaças de máquinas virtuais. Depois disso, ele baixará um executável conhecido da Internet, como um aplicativo de bloco de notas. Isso é um engodo e outra tática de evasão para evitar a detecção.

Outras técnicas podem incluir a verificação de cliques do mouse ou a verificação de diretórios de documentos em busca de evidências de arquivos associados ao uso normal de um sistema de computador, em vez de uma máquina virtual sandbox usada para análise de ameaças.
Baixador, dropper e carregador
Depois que essas ações iniciais de evasão forem executadas, a carga útil do stager (inicial) executará novamente uma terceira ação de hibernação. Ele aguardará novamente por um tempo especificado antes de continuar com o próximo conjunto de instruções, que será baixar os arquivos de carga útil do estágio. Esses arquivos são hospedados remotamente pelo atacante, conforme mostrado abaixo.

O programador então faz o download de dois arquivos de texto “notepadlog0120231224.txt” e “notepadlog0120231513.txt”. A próxima fase é mostrada em texto vermelho no exemplo abaixo.
Observe que os links de download dos arquivos de carga útil são, na verdade, ofuscados usando a codificação base64, que foi discutida como a quarta técnica na primeira parte desta série.

A carga inicial converte a base64 internamente em tempo real nos links de download originais.
Os dois arquivos de texto baixados são, na verdade, um executável (EXE) e uma biblioteca de vínculo dinâmico (DLL), respectivamente, disfarçados de arquivos de texto. Essas são as cargas úteis de estágio 1 e estágio 2 para este exemplo de ataque de ransomware em vários estágios. Após downloads bem-sucedidos, esses arquivos são renomeados para seus tipos originais.

A carga útil do stager então inicia a carga executável do estágio 1 para iniciar o ataque real do ransomware. O stager agora completou sua finalidade e sai quando a carga útil do estágio 1 é carregada na memória e começa a ser executada. Então, conforme discutido na primeira técnica em primeira parte desta série, essa carga de estágio inicial é o baixador e o dropper para a carga útil de EXE e DLL de estágio 1 e o carregador somente para a carga útil de estágio 1. A carga útil da DLL será carregada como uma carga útil de estágio 2 pela carga EXE de estágio 1 em execução, portanto, um ataque de carga útil de vários estágios.
Executável de estágio 1 (EXE)
Depois que a execução for passada para o executável de estágio 1, ele primeiro dormirá por um determinado período de tempo, conforme mostrado abaixo.

Em seguida, ele excluirá o arquivo de carga útil do stager”payload_initial_stager.exe” do sistema de arquivos como forma de remover qualquer evidência. No exemplo abaixo, o arquivo foi excluído e não está mais no diretório.

A carga útil do estágio 1 agora está pronta para executar seu conjunto de ações para continuar o resto do ataque.
Descoberta
Em seguida, ele executará algumas técnicas de descoberta no sistema infectado. Essas técnicas de descoberta permitem que um agente de ameaças entenda um pouco mais sobre o sistema infectado. O Discovery ajuda o operador da ameaça a fazer algumas considerações cruciais de segurança operacional para garantir o sucesso geral do ataque. Neste exemplo, a carga útil do estágio 1 executa uma verificação da lista de processos. Alguns processos que podem ser interessantes serão processos de Detecção e Resposta de Endpoint (EDR), antivírus (AV) ou de máquina virtual. Isso ajuda a entender a probabilidade de a carga ser detectada.

Com base nos resultados das informações de descoberta, um agente de ameaças pode tomar algumas decisões importantes de segurança operacional. Por exemplo, se um processo EDR conhecido for encontrado no sistema ou a carga detectar processos da máquina virtual, a carga útil poderá ser instruída a sair para evitar a detecção.

Como alternativa, o agente da ameaça pode decidir empregar técnicas adicionais de evasão para evitar o EDR ou até mesmo tentar usar outros meios para encerrar completamente o processo de EDR.
O Discovery também ajuda a determinar o quão valioso o sistema comprometido pode ser. Por exemplo, é um servidor de banco de dados de produção ou um sistema de pagamento com dados valiosos do cliente? Quanto mais crítico for o sistema para uma empresa, maior a probabilidade de um resgate ser pago por ele.
Manipulação de processos: binários Living-off-the-Land (LoTL)
Outro conjunto de informações úteis são as informações relacionadas ao sistema, como sistema operacional, idioma local e hotfixes e atualizações instaladas ou ausentes no sistema. Esse tipo de informação pode ajudar a planejar ataques adicionais, como explorações de vulnerabilidades.
Supondo que o processo de EDR não tenha sido encontrado, a carga útil continuará porque o agente da ameaça pode estar confiante em lidar com outros. Portanto, depois de verificar as informações do processo, a carga executável do estágio 1 usa a técnica Living-off-the-Land e inicia um prompt de comando separado do Windows, conforme mostrado no exemplo abaixo.

Depois que o prompt de comando é iniciado, a carga passa alguns comandos do Windows para que ela seja executada. Esse comando gerará informações do sistema, como tipo de sistema, informações do processador, tempo de atividade e hotfixes. Um instantâneo da saída é mostrado em texto vermelho no exemplo abaixo.

Biblioteca de links dinâmicos (DLL) de estágio 2
Conforme discutido nos artigos anteriores, um arquivo DLL contém código de computador que não pode ser executado sozinho. Então, em nosso exemplo, o EXE de estágio 1 também usa código na DLL de estágio 2 para finalizar o resto do ciclo de ataque.
Carga de DLL de estágio 1 de carregamento de EXE de estágio 2
Depois que a carga EXE de estágio 1 concluir suas ações, ela continuará carregando a carga de DLL de estágio 2. A carga útil da DLL contém o código que será usado nos estágios finais do ataque, que é verificar as unidades no sistema e, em seguida, criptografar os arquivos selecionados nessas unidades.

O código DLL primeiro executa uma verificação de unidade para encontrar as unidades no sistema infectado, listando informações úteis sobre cada uma. Na tela acima, são de particular interesse as informações sobre as unidades do sistema que estão prontas para acesso versus as que não estão. Isso ajuda a direcionar os arquivos nas unidades corretas para criptografia e evitar erros ao tentar operar em unidades que são somente para leitura ou não podem ser acessadas.
Criptografia
Neste ponto, a criptografia do resgate está pronta para ser executada. O código de criptografia na DLL de estágio 2 primeiro verifica uma lista de arquivos de texto no diretório. Isso ocorre porque criptografaremos somente arquivos de texto nesta última demonstração. Em seguida, a carga útil exibe todos os arquivos de texto encontrados.

Os arquivos descobertos são então criptografados pela carga. As extensões de arquivo também foram alteradas para”.criptografado” para mostrar os arquivos de texto criptografados.

Abaixo, também podemos ver as imagens de antes e depois do diretório em que os arquivos de texto estão localizados, mostrando as alterações após a criptografia.

Finalmente, vem a nota de resgate: Isso normalmente alerta o usuário sobre o fato de que seus arquivos foram criptografados. Ele também os instrui sobre como pagar o resgate e obter a chave de descriptografia para descriptografar os arquivos. Em muitos casos, pagar o resgate não garante automaticamente o acesso à chave de decodificação.

Observe que, em nosso exemplo, optamos por colocar todo o código de criptografia em um arquivo DLL que se tornou nossa carga útil de estágio 2. Isso ocorre principalmente porque, conforme discutido nos artigos anteriores, uma DLL é um arquivo de biblioteca, o que significa que ela pode ser reutilizada. Por exemplo, se, como atacante, optarmos por usar uma carga EXE de estágio 1 completamente diferente, talvez devido a novos aprimoramentos de evasão no futuro, não precisaremos reescrever a parte de criptografia do nosso código de carga para finalizar essa nova campanha de ataque. Podemos simplesmente emparelhar nossa nova carga com o arquivo DLL de estágio 2 existente e fazer com que o novo EXE carregue a DLL para criptografar arquivos.
Mitigação contra ransomware
Em última análise, o ransomware empregará três fronteiras principais de infecção, execução e persistência.
Eles podem ser amplamente categorizados como:
- Sistema de arquivos
- Registro
- Memória
- Rede (remota e local — movimento lateral)
Os defensores devem, portanto, buscar criar os conjuntos de ferramentas certos e utilizá-los da maneira correta para uma mitigação eficaz da segurança. Em parte três da série anterior sobre cargas úteis e beacons de malware, há uma análise mais detalhada da mitigação de defesa em profundidade, baseada na filosofia de supor violação e resiliência cibernética.
Esta série de três partes demonstrou como as diferentes táticas e técnicas usadas pelo malware e, especificamente, pelo ransomware podem surgir. Ao compreender essas diferentes táticas e técnicas, os defensores podem estar em melhor posição para avaliar suas políticas e defesas cibernéticas existentes para obter contramedidas eficazes.
Quer saber mais sobre como proteger sua organização contra ransomware e violações? Entre em contato conosco hoje.