/
Ransomware Containment

Desmistificando técnicas de ransomware usando assemblies.Net: 5 técnicas principais

Os ataques de ransomware prosperam ao evitar a detecção e, em seguida, criptografar os dados em um sistema. Na análise após um ataque de ransomware, muitas vezes lemos sobre como o ataque usou uma combinação de diferentes tipos de arquivos com uma variedade de técnicas.  

Então, o que tudo isso realmente significa? Nesta série, detalharemos tudo usando a estrutura do software.Net para mostrar como esses recursos do ransomware são possíveis.

Na minha série anterior de três partes sobre cargas e beacons de malware, o foco estava na Estrutura de Teste de Penetração Metasploit. Usamos sua carga útil de malware meterpreter pronta para mostrar várias técnicas de ataque. O primeiro artigo examinou como as comunicações maliciosas começam, a infraestrutura do atacante e a análise forense de um ataque. O segundo artigo analisou categorias e tipos de cargas úteis junto com algumas técnicas de manipulação na memória. A parte final dessa série se concentrou nas técnicas de evasão e mitigação.

Nesta série, criaremos nossos próprios arquivos de carga útil individuais (também conhecidos como assemblies) aproveitando a estrutura do software.Net, mas com foco no ransomware. Começaremos dividindo os recursos de ransomware e malware em exemplos de técnicas individuais para entender como eles funcionam sozinhos. Em última análise, algumas dessas técnicas individuais são combinadas em uma única carga útil de ransomware malicioso, com efeitos muitas vezes devastadores.

Técnica 1: Downloaders, droppers e loaders

Começamos analisando como o ransomware ou o malware podem se conectar a uma rede infectada. Essa é a capacidade de se conectar a um sistema remoto, baixar cargas adicionais, colocá-las no sistema comprometido e executá-lo (ou seja, carregá-lo na memória).

Abaixo está um exemplo de um aplicativo de linha de comando (console) .Net que:

  • Atua como um downloader baixando outro aplicativo executável remoto (putty.exe) da Internet
  • Coloca o aplicativo baixado em uma pasta temporária no disco do computador
  • Renomeia o aplicativo para putty_new.exe
  • Executa automaticamente o aplicativo baixado no computador para que ele seja carregado na memória

Quando o teste de carga útil é usado, o que significa ter vários arquivos maliciosos fazendo coisas diferentes, o Stager (pequena carga útil inicial) pode se tornar o downloader e também, vagamente, o dropper do Stage (carga útil principal maior). Também pode ser o carregador do palco. As técnicas empregadas dependerão da avaliação do risco de detecção pelo agente da ameaça, também conhecida como considerações de segurança operacional.

Um downloader é responsável por retirar uma carga útil de uma fonte remota, como um servidor web ou servidor FTP. Isso geralmente é feito pela Internet. Portanto, um downloader exigirá que alguma conexão de rede seja tentada para acessar a fonte remota.

Um conta-gotas, por outro lado, é o principal responsável por entregar ou descartar uma carga útil no sistema da vítima. Portanto, um downloader também pode ser um dropper, mas um dropper pode não necessariamente ser um downloader porque um dropper já pode ter a carga maliciosa incorporada como arquivos executáveis portáteis (PE) ou DLLs. Esses tipos de arquivo serão discutidos posteriormente. Os droppers são comumente usados em ataques; exemplos populares são os ataques à cadeia de suprimentos da Solarwinds e da Kaseya. Ambos envolveram o uso de um software de agente fornecedor comprometido usado como conta-gotas para cargas maliciosas. Este último está sendo usado pelo grupo de ransomware REvil.

Um carregador é responsável por configurar o sistema da vítima para executar outra carga maliciosa, especialmente no caso de cargas úteis somente de memória. Aqui, configurar significa garantir a alocação de espaço de memória necessária, geralmente injetando uma DLL no espaço de memória de outro processo e, em seguida, configurando as permissões de memória corretas. Em seguida, o carregador inicia a carga útil ou executa os threads necessários.

Técnica 2: EXE carregando um arquivo DLL

As cargas de ransomware podem estar na forma de um arquivo EXE ou DLL. A seguir, veremos como um arquivo executável do Windows, também conhecido como arquivo EXE, pode carregar o que é conhecido como arquivo DLL (biblioteca de vínculo dinâmico) para aproveitar o código que ele contém.

EXE e DLL são dois tipos de assemblies do.Net que contêm instruções de código de programação de computador e informações associadas (metadados). Essas instruções e metadados são reunidos em um único arquivo resultante — montagem EXE ou DLL.Net. Esses dois tipos de arquivos permitem que o código de programação do computador seja executado (EXE) em um sistema Windows ou armazenado como um arquivo de biblioteca (DLL), que pode então ser “emprestado” e lido por outros arquivos. No caso de uma DLL, esse processo é muito parecido com o modo como várias pessoas podem pegar o mesmo livro emprestado de uma biblioteca em momentos diferentes para ler seu conteúdo. Na segunda parte desta série, exploraremos esses dois conjuntos com mais detalhes em relação ao .Net. estrutura de software.

Por enquanto, aqui está um exemplo muito simples para demonstrar o uso desses dois tipos de assemblies.Net — um executável (EXE) que executa seu próprio código e depois carrega e lê o código externo de um arquivo DLL. O executável então passa alguma entrada para o código DLL carregado. Finalmente, a DLL usa a entrada recebida do EXE para exibir uma mensagem de volta para o usuário que executa o aplicativo. Abaixo está o código em ação:

Esse aplicativo simples também demonstra a relação entre os conjuntos EXE e DLL.Net. Esse tipo de relacionamento é usado legitimamente por muitos aplicativos e sistemas operacionais (bibliotecas compartilhadas), incluindo o próprio sistema operacional Windows. O Windows empacota grande parte de seu próprio código como DLLs para que ele possa ser compartilhado por diferentes aplicativos.

A imagem abaixo mostra o código de programação do EXE e da DLL no exemplo anterior. O código é escrito usando a linguagem de programação C#, que é uma das linguagens suportadas pelo .Net. Na imagem, as referências do código DLL são destacadas para dar ênfase:

As DLLs são um meio eficaz de escrever um trecho de código uma vez, de forma que possa ser usado várias vezes por diferentes executáveis como uma biblioteca compartilhada ou dinâmica. Como resultado disso, ele também é muito usado por muitas famílias de malware e ransomware. Técnicas como carregamento lateral de DLL e sequestro de DLL são técnicas maliciosas comuns que aproveitam a relação entre esses assemblies.Net.

Técnica 3: Reconhecer e lançar binários vivos fora da terra

Continuamos com uma combinação de técnicas importantes: a capacidade de reunir informações úteis sobre um sistema alvo (Discovery) e, ao mesmo tempo, lançar outros binários ou executáveis nesse sistema (Spawning). Na imagem aqui, nosso executável personalizado inicial lança um executável ou binário nativo no sistema Windows de destino, mostrando um ataque Living Off the Land (LoTL).

O exemplo mostra nosso aplicativo C# inicial em execução e, em seguida, coletando algumas informações úteis sobre o sistema de destino, mostradas pelo texto verde na saída. Observe as informações da unidade coletadas. Essas informações podem ser aproveitadas pelo ransomware para direcionar arquivos nessas unidades e, em seguida, serem exfiltradas antes da criptografia para uma demanda de resgate geralmente pesada.

O aplicativo continua lançando um executável externo do sistema — o prompt de comando do Windows (cmd.exe) executável. O aplicativo personalizado então passa alguns comandos do Windows para que o processo Windows cmd.exe seja exibido (mostrado em texto vermelho), neste caso, informações sobre a versão do sistema Windows. Para o benefício deste artigo, o aplicativo C# personalizado exibe a saída das ações que executa, bem como informações sobre o processo iniciado. Essa capacidade de iniciar outros aplicativos externos também é útil para iniciar processos de vítimas para, eventualmente, injetar código malicioso.

Técnica 4: Codificação de dados

Outra técnica útil é a codificação de dados. Esse é o processo de usar um algoritmo para representar dados de uma forma diferente. Por exemplo, um tipo de codificação, base64, é usado legitimamente em algumas solicitações da Web para transmitir dados de um lado para o outro, como autorização HTTP e autenticação básica em chamadas de API. No entanto, o mesmo exemplo de codificação base64 também pode ajudar a ocultar certos textos e comandos usados por um programa malicioso ou carga útil. Ele pode ser usado para ofuscar partes do código, como URLs de retorno de chamada ou um arquivo. Essa técnica é mostrada abaixo em nosso programa C# autônomo.

Neste exemplo de aplicativo específico, o código usa algum texto que, nesse caso, é a URL “https://listener.malware.bad”, o converte em uma matriz de bytes de computador e, em seguida, executa o algoritmo de codificação base64 nos bytes para convertê-lo no texto ASCII alfanumérico de “Ahr0chm6ly9saxn0zw5lci5tywx3yxjllMjhza==” mostrado na seção de codificadores da tela do aplicativo acima. Esse processo pode ser revertido programaticamente para recuperar o texto original, conforme mostrado na seção do decodificador. Ao fazer isso, o URL fica oculto à vista de todos e não pode ser imediatamente determinado pelo que é — um URL malicioso.

Técnica 5: Criptografia

Finalmente, analisamos a criptografia. Criptografar arquivos em um sistema comprometido é o que tornou sinônimo de ransomware. Novamente, esse é um recurso legítimo de proteger dados em repouso que, como a maioria das outras técnicas, passou a ser usado para fins maliciosos em ransomware.

No exemplo abaixo, temos um aplicativo de criptografia C#. Primeiro, ele faz uma cópia do arquivo destinado à criptografia e depois criptografa a cópia, deixando o original intacto.

Aqui, o conteúdo original do arquivo original, Data1.txt, é copiado para outro arquivo, Data1-Encrypted.txt, e então esse novo arquivo é criptografado.

A criptografia é uma das principais técnicas usadas pelo ransomware e forma a base para manter os sistemas comprometidos como resgate. Também pode ser útil para ocultar cargas úteis ou carregadores de malware em trânsito ou em repouso para evitar a detecção.

Leia a parte 2 da série em 22 de maio

O próximo artigo explorará a estrutura de software.Net da Microsoft e a linguagem de programação C# associada como referência para algumas das táticas e técnicas mostradas aqui e como elas são finalmente facilitadas.

Saiba mais sobre como a segmentação Zero Trust da Illumio pode ajudar você a conter violações de ransomware.

Tópicos relacionados

No items found.

Artigos relacionados

Desmistificando técnicas de ransomware usando assemblies.Net: um ataque em vários estágios
Ransomware Containment

Desmistificando técnicas de ransomware usando assemblies.Net: um ataque em vários estágios

Aprenda os fundamentos de um ataque de carga útil em vários estágios usando um conjunto de cargas úteis em estágios.

Hive Ransomware: como limitar sua ação com a segmentação Illumio Zero Trust
Ransomware Containment

Hive Ransomware: como limitar sua ação com a segmentação Illumio Zero Trust

Saiba mais sobre o ransomware Hive e como a Illumio pode ajudar a mitigar os riscos impostos à sua organização.

Redução de ransomware 101: movimento lateral entre terminais
Ransomware Containment

Redução de ransomware 101: movimento lateral entre terminais

Saiba mais sobre como o ransomware se espalha por meio do movimento lateral entre os terminais e como a microssegmentação Zero Trust pode conter o raio da explosão.

Cargas úteis de malware & Beacons: tipos de cargas maliciosas
Cyber Resilience

Cargas úteis de malware & Beacons: tipos de cargas maliciosas

Compreender tipos distintos de cargas úteis e analisar um exemplo de código malicioso que elas podem empregar.

Cargas úteis de malware & Beacons: como as comunicações maliciosas começam
Cyber Resilience

Cargas úteis de malware & Beacons: como as comunicações maliciosas começam

Os beacons de malware são a forma como um invasor pode executar malware por meio de um script. Reconhecê-los ajuda a desenvolver estratégias de detecção e contenção.

Cargas úteis de malware & Beacons: técnicas para mitigar o impacto
Cyber Resilience

Cargas úteis de malware & Beacons: técnicas para mitigar o impacto

Na parte final desta série, nos concentramos em algumas das técnicas de ofuscação usadas para disfarçar cargas úteis de malware e examinamos as técnicas de mitigação que as organizações podem empregar.

Suponha que a violação seja feita.
Minimize o impacto.
Aumente a resiliência.

Pronto para saber mais sobre a segmentação Zero Trust?