Identifique automaticamente os recursos de malware com o CAPA

O capa é a mais nova ferramenta de código aberto da equipe FLARE para analisar programas maliciosos. Nossa ferramenta fornece uma estrutura para a comunidade codificar, reconhecer e compartilhar comportamentos que vimos em malware. Independentemente do seu histórico, quando você usa capa, você invoca décadas de experiência cumulativa de engenharia reversa para descobrir o que um programa faz. Neste post você aprenderá como a capa funciona, como instalar e usar a ferramenta e por que você deve integrá-la ao seu fluxo de trabalho de triagem a partir de hoje.

Problema

Analistas eficazes podem entender e priorizar rapidamente arquivos desconhecidos em investigações. No entanto, determinar se um programa é malicioso, o papel que ele desempenha durante um ataque e seus recursos potenciais requer pelo menos habilidades básicas de análise de malware. E, muitas vezes, é preciso um engenheiro reverso experiente para recuperar a funcionalidade completa de um arquivo e adivinhar a intenção do autor.

Especialistas em malware podem rapidamente triar binários desconhecidos para obter os primeiros insights e orientar mais etapas de análise. Analistas menos experientes, por outro lado, muitas vezes não sabem o que procurar e têm problemas para distinguir o habitual do incomum. Infelizmente, ferramentas comuns como strings /FLOSS ou PE viewers exibem o menor nível de detalhes, sobrecarregando seus usuários para combinar e interpretar pontos de dados.

Triagem de Malware 01-01

Para ilustrar isso, vamos ver o Lab 01-01 da Análise Prática de Malware (PMA) disponível aqui. Nosso objetivo é entender a funcionalidade do programa. A Figura 1 mostra as strings do arquivo e a tabela de importação com valores interessantes destacados.


Figura 1: Strings interessantes e informações de importação de exemplo malware do PMA Lab 1-1

Com esses dados, os engenheiros reversos podem supor sobre as strings e funções de API importadas para adivinhar a funcionalidade do programa — mas não mais. A amostra pode criar um mutex, iniciar um processo ou se comunicar pela rede — potencialmente para endereço IP 127.26.152.13. As importações winsock (WS2_32) nos fazem pensar na funcionalidade da rede, mas os nomes não estão disponíveis aqui porque são, como é comum, importados pela ordinal.

Analisar dinamicamente esta amostra pode confirmar ou refutar suspeitas iniciais e revelar funcionalidades adicionais. No entanto, os relatórios de sandbox ou ferramentas de análise dinâmica estão limitados a capturar o comportamento dos caminhos de código exercidos. Isso, por exemplo, exclui qualquer funcionalidade acionada após uma conexão bem sucedida com o servidor de comando e controle (C2). Normalmente não recomendamos analisar malware com uma conexão ao vivo com a Internet.

Para realmente entender este arquivo, precisamos fazer engenharia reversa. A Figura 2 mostra a descompilação do IDA Pro da função principal do programa. Embora usemos a descompilação em vez de desmontagem para simplificar nossa explicação, conceitos semelhantes se aplicam a ambas as representações.


Figura 2: Funcionalidade-chave na função principal descompilada do PMA Lab 1-1

Com uma compreensão básica da programação e da API do Windows, observamos a seguinte funcionalidade. O malware:

  • cria um mutex para garantir que apenas uma instância esteja em execução
  • cria um soquete TCP; indicados pelas constantes 2 = AF_INET, 1 = SOCK_STREAM,e 6 = IPPROTO_TCP
  • conexões ao endereço IP 127.26.152.13 na porta 80
  • envia e recebe dados
  • compara os dados recebidos com as strings do sono e do executivo
  • cria um novo processo

Embora nem todos os caminhos de código possam ser executados em cada execução, dizemos que o malware tem a capacidade de executar esses comportamentos. E, combinando as conclusões individuais, podemos argumentar que o malware é um backdoor que pode executar um programa arbitrário especificado por um servidor C2 codificado. Essa conclusão de alto nível nos permite escopo de uma investigação e decidir como responder à ameaça.

Automatização da identificação de recursos

É claro que a análise de malware raramente é tão direta. Os artefatos de intenção podem ser espalhados através de um binário que contém centenas ou milhares de funções. Além disso, a engenharia reversa tem uma curva de aprendizado bastante íngreme e requer uma compreensão sólida de muitos conceitos de baixo nível, como linguagem de montagem e internos do sistema operacional.

No entanto, com bastante prática, podemos reconhecer recursos em programas simplesmente a partir de padrões repetitivos de chamadas de API, strings, constantes e outros recursos. Com capa, demonstramos que algumas de nossas principais conclusões de análise são realmente viáveis para realizar automaticamente. A ferramenta fornece uma maneira comum, mas flexível, de codificar o conhecimento especializado e disponibilizá-lo para toda a comunidade. Quando você executa capa, ele reconhece características e padrões como um poder humano, produzindo conclusões de alto nível que podem conduzir etapas investigativas subsequentes. Por exemplo, quando capa reconhece a capacidade de comunicação HTTP não criptografada, essa pode ser a dica que você precisa para pivotar em logs proxy ou outros traços de rede.

Apresentando capa

Quando executamos o capa contra o nosso programa de exemplo, a saída da ferramenta na Figura 3 quase fala por si só. A tabela principal mostra todas as capacidades identificadas nesta amostra, com cada entrada à esquerda descrevendo uma capacidade. O namespace associado à direita ajuda a agrupar recursos relacionados. Capa fez um trabalho fantástico e descreveu todas as capacidades do programa que discutimos na seção anterior.


Figura 3: capa análise do PMA Lab 1-1

Descobrimos que capa muitas vezes proporciona resultados surpreendentemente bons. É por isso que queremos que Capa seja sempre capaz de mostrar as evidências usadas para identificar uma capacidade. A Figura 4 mostra a saída detalhada da Capa para a conclusão do “soquete TCP”. Aqui, podemos inspecionar os locais exatos no binário onde Capa encontrou as características relevantes. Veremos a sintaxe das regras um pouco mais tarde – enquanto isso, podemos supor que elas são feitas de uma árvore lógica que combina características de baixo nível.


Figura 4: Detalhes de correspondência de recursos para a regra “criar soquete TCP” no exemplo malware

Como funciona a capa

capa consiste em dois componentes principais que triagem algoritmicamente programas desconhecidos. Primeiro, um mecanismo de análise de código extrai recursos de arquivos, como strings, desmontagem e fluxo de controle. Em segundo lugar, um motor lógico encontra combinações de recursos que são expressos em um formato de regra comum. Quando o motor lógico encontra uma correspondência, o capa relata a capacidade descrita pela regra.

Extração de recursos

O mecanismo de análise de código extrai recursos de baixo nível de programas. Todas as características são consistentes com o que um humano pode reconhecer, como strings ou números, e permitem que Capa explique seu trabalho. Esses recursos geralmente se enquadram em duas grandes categorias: recursos de arquivo e recursos de desmontagem.

Os recursos do arquivo são extraídos dos dados brutos do arquivo e de sua estrutura, por exemplo, o cabeçalho do arquivo PE. Esta é uma informação que você pode notar rolando por todo o arquivo. Além das sequências discutidas acima e APIs importadas, estas incluem funções exportadas e nomes de seção.

Os recursos de desmontagem são extraídos de uma análise estática avançada de um arquivo – isso significa desmontar e reconstruir o fluxo de controle. A Figura 5 mostra recursos selecionados de desmontagem, incluindo chamadas de API, mnemônicos de instrução, números e referências de string.


Figura 5: Exemplos de recursos de arquivo em um segmento de código desmontado do PMA Lab 1-1

Como a análise avançada pode distinguir entre funções e outros escopos em um programa, o capa pode aplicar sua lógica em um nível apropriado de detalhes. Por exemplo, ele não fica confuso quando as APIs não relacionadas são usadas em diferentes funções, uma vez que as regras do Capa podem especificar que elas devem ser combinadas com cada função de forma independente.

Projetamos capa com extração flexível e extensível em mente. Os backends adicionais de análise de código podem ser integrados facilmente. Atualmente, a versão independente capa conta com o quadro de análise da Vivisect. Se você estiver usando o IDA Pro, você também pode executar capa usando o backend IDAPython. Observe que, às vezes, as diferenças entre os mecanismos de análise de código podem resultar em conjuntos de recursos divergentes e, portanto, resultados diferentes. Felizmente, isso geralmente não é um problema sério na prática.

regras capa

Uma regra capa usa uma combinação estruturada de recursos para descrever uma capacidade que pode ser implementada em um programa. Se todos os recursos necessários estiverem presentes, o capa conclui que o programa contém o recurso.

as regras da capa são documentos YAML que contêm metadados e uma árvore de declarações para expressar sua lógica. Entre outras coisas, a linguagem de regras suporta operadores lógicos e contagem. Na Figura 6, a regra “criar soquete TCP” diz que os números 6, 1 e 2, e chamadas para qualquer um dos soquetes de funções de API ou WSASocket devem estar presentes no escopo de um único bloco básico. O código de montagem do grupo de blocos básicos em um nível muito baixo, tornando-os um lugar ideal para combinar segmentos de código bem relacionados. Além de dentro de blocos básicos, capa suporta correspondência na função e no nível do arquivo. O escopo de função une todos os recursos em uma função desmontada, enquanto o escopo do arquivo contém todos os recursos em todo o arquivo.


Figura 6: lógica de regra capa para identificar criação de soquetes TCP

A Figura 7 destaca os metadados de regras que permitem que o Capa exiba resultados significativos e de alto nível para seus usuários. O nome da regra descreve a capacidade identificada enquanto o namespace o associa a uma técnica ou categoria de análise. Já vimos o nome e o namespace na tabela de capacidades da saída da Capa. A seção de metadados também pode incluir campos como autor ou exemplos. Usamos exemplos para referenciar arquivos e deslocamentos onde sabemos que um recurso está presente, permitindo testes de unidade e validação de cada regra. Além disso, as regras da Capa servem como ótima documentação para comportamentos vistos em malware do mundo real, então sinta-se livre para manter uma cópia por perto como referência. Em um post futuro, discutiremos outras meta informações, incluindo o suporte do Capa para as frameworks ATT&CK e o Malware Behavior Catalog.


Figura 7: Regra meta informação

Instalação

Para tornar o uso do capa o mais fácil possível, fornecemos executáveis autônomos para Windows, Linux e OSX. A ferramenta está escrita em Python e o código-fonte está disponível no nosso GitHub. Instruções adicionais e atualizadas de instalação estão disponíveis no repositório capa.

As versões mais recentes do FLARE-VM (disponível no GitHub) também incluem capa.

Uso

Para identificar recursos em um programa execute capa e especifique o arquivo de entrada:

Capa suspeita.exe

capa suporta arquivos Windows PE (EXE, DLL, SYS) e shellcode. Para executar capa em um arquivo shellcode, você deve especificar explicitamente o formato e a arquitetura do arquivo, por exemplo, para analisar o shellcode de 32 bits:

  • $capa -f sc32 shellcode.bin

Para obter informações detalhadas sobre os recursos identificados, o Capa suporta dois níveis adicionais de verbosidade. Para obter a saída mais detalhada sobre onde e por que capa compatível com regras use a opção verbose muito:

  • $capa -vv suspeito.exe

Se você quiser se concentrar apenas em regras específicas, você pode usar a opção tag para filtrar em campos na seção meta de regra:

  • $capa -t “create TCP socket” suspeito.exe

Exibir a ajuda da Capa para ver todas as opções suportadas e consolidar a documentação:

  • $capa -h

Contribuindo

Esperamos que o Capa traga valor para a comunidade e estimule qualquer tipo de contribuição. Seus comentários, ideias e pedidos de atração são muito bem-vindos. O documento contribuinte é um ótimo ponto de partida.

As regras são a base do algoritmo de identificação de Capa. Queremos tornar fácil e divertido escrevê-los. Se você tiver alguma ideia de regra, por favor abra um problema ou ainda melhor enviar uma solicitação de retirada para capa-rules. Dessa forma, todos podem se beneficiar do conhecimento coletivo de nossa comunidade de análise de malware.

Para separar nosso trabalho e discussões entre o código fonte capa e as regras suportadas, usamos um segundo repositório do GitHub para todas as regras que vêm incorporadas no capa. O repositório principal da capa incorpora o repositório de regras como um submodulo git. Consulte o repositório de regras para obter mais detalhes, incluindo a documentaçãodo formato deregra.

Conclusão

Neste post de blog, introduzimos a mais nova contribuição da equipe FLARE para a comunidade de análise de malware. capa é uma estrutura de código aberto para codificar, reconhecer e compartilhar comportamentos vistos em malware. Achamos que a comunidade precisa desse tipo de ferramenta para lutar contra o volume de malware que encontramos durante investigações, caça e triagem. Independentemente do seu histórico, quando você usa capa, você invoca décadas de experiência cumulativa para descobrir o que um programa faz.

Experimente capa em sua próxima análise de malware. A ferramenta é extremamente fácil de usar e pode fornecer informações valiosas para analistas forenses, respondentes de incidentes e engenheiros reversos. Se você gosta da ferramenta, se der em problemas usando-a ou tiver quaisquer outros comentários, entre em contato conosco através da página do GitHub de projetos.

Referências

Publicado originalmente em July 16, 2020 | by Willi BallenthinMoritz Raabe

Fonte: https://www.fireeye.com/blog/threat-research/2020/07/capa-automatically-identify-malware-capabilities.html

Curso - Engenharia Reversa na Forense Digital

Aqui você compreenderá a utilização da Engenharia Reversa aplicada em Forense Digital, bem como a Análise de Malware.

O curso aborda diversos conceitos de forma prática. O estudo é baseado, em sua maioria, no .NET e .NET Core, pois é uma tecnologia que está sempre em evolução, sendo adicionada inclusive em Linux e MAC, ou seja, com o .NET Core, agora é multiplataforma.

Analisando este ambiente, podemos entender que é de extrema importância e urgente necessidade aprender a dissecar malwares desenvolvidos em alguma linguagem do .NET e .NET Core, com C#, VB, etc…