Kit de Engenharia Reversa para Analistas de Ameaças: Ferramentas Essenciais para Análise de Malware
Descubra um conjunto abrangente de ferramentas gratuitas e pagas para engenharia reversa de malware, cobrindo análise estática e dinâmica. O artigo detalha softwares como IDA Pro, Ghidra, x64dbg e sandboxes, essenciais para analistas de cibersegurança.
MundiX News·09 de julho de 2026·15 min de leitura·👁 1 views
Olá novamente, sou Maxim Motikov, analista de ciberameaças na "Garda". No meu artigo anterior, explorei como descompilar malware escrito em Python. Hoje, abordarei o tema de um "reverse engineering kit", um conjunto de ferramentas que me auxilia nas tarefas de análise de malware (ВПО - вредоносное программное обеспечение) quando o software habitual pode não estar disponível.
Ferramentas como o IDA Pro podem custar cerca de mil dólares por ano. Se você precisar adquirir suporte para todas as arquiteturas importantes, o preço pode ultrapassar dez mil dólares. Cada descompilador é vendido separadamente; você compra o suporte para x86 e x64, mas precisa pagar extra por ARM. É como comprar um carro sem rodas. Felizmente, o IDA Pro não é a única opção. Atualmente, existem inúmeras ferramentas gratuitas que permitem analisar malware com a mesma eficácia, desde que se compreenda em quais tarefas cada uma se destaca.
Antes de mergulharmos no software, vamos começar com o hardware, que é a base de qualquer laboratório de análise respeitável. Para a engenharia reversa de vírus, é conveniente ter duas máquinas virtuais: uma para análise estática e outra para análise dinâmica. Por que duas máquinas? Cada tarefa exige um conjunto específico de ferramentas e uma configuração de rede particular, e explicarei o motivo.
Para análise estática, mantenho uma VM Windows 10 x64 com pelo menos 8 GB de RAM, 120 GB de disco e uma ponte de rede (acesso à internet). O espaço em disco é necessário porque o Windows moderno e o conjunto de utilitários consomem dezenas de gigabytes. Por exemplo, em uma de minhas máquinas, mais de 80% dos 120 GB já estão ocupados. Parte desse espaço é utilizada pelo Visual Studio, que, embora raramente usado, é necessário para compilar alguns plugins. A análise estática não envolve a execução de código malicioso, portanto, esta máquina opera com uma rede aberta. O acesso à internet é crucial para um plugin do IDA (hashDB), cuja base de dados de checksums está hospedada em um servidor remoto. Sem internet, o plugin não consegue encontrar correspondências. Todas as outras ferramentas de análise estática funcionam perfeitamente offline.
Com a análise dinâmica, a situação é o oposto. Claro, também utilizamos uma VM Windows 10 x64, com pelo menos 8 GB de RAM e 80 GB de disco. No entanto, a rede está completamente desativada. Se um malware tiver acesso à rede durante a análise dinâmica, ele pode se espalhar, receber comandos adicionais do C2 (Comando e Controle) ou exfiltrar dados coletados. Existe também um risco menos óbvio: alguns vírus são capazes de detectar se estão sendo executados em um sandbox ou sob um debugger. O malware sinaliza isso para o servidor e recebe imediatamente um comando para permanecer inativo ou se autodestruir. Portanto, para evitar ter que reiniciar toda a análise, sempre desconecto a máquina dinâmica da rede.
Ferramentas para Análise Estática
Começo o trabalho com qualquer novo malware pela análise estática. Primeiro, examino a estrutura do arquivo, analiso strings, estudo imports, procuro constantes criptográficas e escrevo regras YARA. Somente depois, se for necessário entender o comportamento da amostra dinamicamente, passo para a segunda VM. Para análise estática, desenvolvi um conjunto bastante consistente de utilitários, alguns dos quais são de código aberto, mas também há ferramentas pagas. Abaixo, detalho cada uma.
IDA Pro
Descompiladores e disassemblers, em sua maioria, resolvem as mesmas tarefas. A escolha da ferramenta geralmente depende da plataforma utilizada pela equipe, e não da superioridade objetiva de um software sobre outro. Conheço o IDA Pro desde a época da faculdade. Quando entrei na empresa como engenheiro de reversão, todos lá também usavam IDA, então não havia motivo para aprender algo novo.
Além da versão paga do IDA, existe uma versão gratuita (IDA Free). Ela é suficiente para análises básicas. Consegue desmontar a funcionalidade principal e construir um grafo de dependência de funções. O que falta nela é um descompilador e suporte a scripts Python para automação; em outras palavras, plugins não funcionarão. No entanto, para a tarefa de abrir um arquivo executável e visualizar o código-fonte, o IDA Free cumpre bem o seu papel.
O IDA também possui uma função conveniente para colaboração. Um servidor é configurado, e várias pessoas podem visualizar o mesmo código simultaneamente e fazer alterações. Para projetos em equipe, isso é uma vantagem significativa. No entanto, essa opção está disponível apenas na versão paga do programa.
Quero destacar os plugins que utilizo sobre o IDA. Todos são de código aberto e podem ser modificados livremente. Ninguém reclamará, talvez até agradeçam se você adicionar funcionalidade e enviar um patch para o GitHub.
Plugins para IDA Pro
HashDB: Com base em um checksum encontrado no código, o plugin busca correspondências em um vasto banco de dados de hashes prontos, coletados na internet a partir de diversos algoritmos e constantes. Esta utilidade é muito útil na análise de vírus, pois hashes aparecem constantemente.
O HashDB permite adicionar algoritmos personalizados e checksums encontrados com sua decriptografia. A desvantagem é que todo o banco de dados é armazenado na internet, e esta é a única razão pela qual não posso isolar completamente a VM estática da rede.
Yarka: Um plugin para geração automática de regras YARA a partir do código desmontado. Eu o utilizo principalmente de forma pontual. Por exemplo, se encontro no código não apenas uma string suspeita, mas um algoritmo suficientemente único, eu o seleciono no IDA, e o Yarka transforma esse trecho de código em uma regra pronta. Por "unicidade" neste contexto, entendo não a complexidade, mas a originalidade do algoritmo. Por exemplo, uma vez me deparei com um ransomware que transmitia dados pela rede não com um algoritmo conhecido como AES, mas com um XOR auto-desenvolvido com iteração por tabela.
Além do Yarka, também utilizo a utilidade YarGen. Ao contrário do Yarka, ele opera em massa. Basta fornecer uma pasta com amostras de malware como entrada, e ele gera um conjunto de regras YARA com base nas strings encontradas. Essencialmente, o Yarka serve para transformar um algoritmo específico encontrado em uma regra, enquanto o YarGen serve para criar rapidamente rascunhos para um lote inteiro de amostras.
Find Crypt: Este plugin funciona com assinaturas YARA e procura no código constantes criptográficas para determinar o algoritmo de criptografia ou hash. Há uma nuance aqui: se o invasor modificar as constantes, o plugin provavelmente será inútil. No entanto, tudo o que está descrito nos padrões GOST e nas especificações estrangeiras, o Find Crypt identificará sem problemas.
A propósito, ainda não me deparei com criptografia modificada em meu trabalho, mas acredito que, como o próprio plugin é de código aberto e escrito em Python, nada impede que, se desejar, você mesmo desenvolva suas próprias constantes e as adicione à sua base.
ClassInformer: Ao trabalhar com um grande volume de código, é fácil perder classes, especialmente se elas estiverem localizadas na seção de dados e você simplesmente não lhes der atenção no fluxo geral de análise. Portanto, para obter uma lista de todas as classes encontradas no código desmontado, preciso do plugin ClassInformer, que exibe as classes em uma única lista. Assim, para cada classe, você pode ver o número de funções e ir diretamente para a desejada.
Em uma das amostras recentes, havia muitas classes virtuais, e, ao examinar o arquivo manualmente, perdi uma funcionalidade importante. Felizmente, o ClassInformer me salvou a tempo. Ele listou todas as classes do binário – as padrão do C++ e as personalizadas (veja a captura de tela abaixo).
Ghidra como Alternativa Open Source ao IDA
Se você não tem condições de adquirir a versão paga do IDA, pode usar o Ghidra. É um desenvolvimento de código aberto da Agência de Segurança Nacional dos EUA (NSA). No entanto, o Ghidra é mais voltado para a engenharia reversa de bootloaders, dispositivos IoT e código de microcontroladores, enquanto o IDA se destaca na análise de programas x86, x64 e ARM convencionais.
Sinceramente, quase não usei o Ghidra. Não tenho uma explicação racional clara para isso. Provavelmente, o motivo é que as pessoas não gostam muito de mudar as ferramentas com as quais começaram sua jornada profissional. Aparentemente, fiquei "preso" ao IDA por muito tempo para pular para outro software de forma rápida e indolor. Achei a interface do Ghidra inconveniente e confusa, mas isso é provavelmente uma questão de hábito.
Para resumir e abstrair das preferências pessoais: o IDA me parece mais conveniente para a engenharia reversa clássica de arquivos executáveis para x86, x64 e ARM, pois é atualizado com mais frequência. O Ghidra é totalmente gratuito, conveniente para a engenharia reversa de bootloaders e IoT, mas, na minha opinião, requer mais tempo para dominar a interface.
Esqueci de mencionar que o Ghidra também possui uma ferramenta para trabalho em equipe. Um servidor é iniciado, vários clientes se conectam a ele, e várias pessoas trabalham simultaneamente no mesmo arquivo, ou seja, em termos de funcionalidade, é semelhante ao que o IDA oferece.
Detect It Easy (DiE)
Eu trabalho principalmente com arquivos PE e frequentemente preciso determinar o tipo de binário, bem como suas características principais. Portanto, a primeira coisa que abro ao examinar uma nova amostra é a utilidade Detect It Easy (DiE). Ela imediatamente exibe informações básicas. Por exemplo, o formato do arquivo, tamanho, bem como quais funções ele exporta e importa. Geralmente, esses dados são suficientes para entender com o que estou lidando.
Na captura de tela acima, uma análise de uma amostra real. O DiE identificou imediatamente o tipo de arquivo, a arquitetura e com o que ele foi compilado.
PEStudio
Este é um análogo do DiE, mas com um foco diferente. Enquanto o DiE se concentra mais em qual ambiente o arquivo foi compilado (ele destaca o compilador, linker e detalhes técnicos semelhantes), o PEStudio examina os sinais de malware. Em particular, flags, classificação por banco de dados de arquivos conhecidos, cabeçalhos. A ferramenta avalia o arquivo do ponto de vista de sua segurança, e não de sua origem técnica. Por exemplo, a captura de tela abaixo mostra a análise do arquivo payload.bin no PEStudio. É visível que 35 de 72 antivírus já o detectam, e a entropia elevada indica empacotamento ou criptografia interna.
PEView
Outra utilidade gratuita – PEView. Não posso dizer que seja um "must-have", mas às vezes essa utilidade é útil. Comparado ao IDA, este instrumento tem uma interface francamente desatualizada, então o utilizo com extrema raridade. Por exemplo, se preciso ver rapidamente o deslocamento das tabelas de importação e exportação, o PEView ajuda muito. Na captura de tela abaixo, é mostrado como o PEView analisa o cabeçalho do payload.bin por campos. As seções e seus deslocamentos são visíveis sem iniciar o IDA.
Strings
Strings faz parte do pacote Sysinternals (um conjunto de utilitários lançado pela Microsoft). A utilidade exibe todas as strings encontradas no binário. Quando isso é necessário? Por exemplo, ao desenvolver regras YARA, e simplesmente para uma visualização inicial do arquivo. Às vezes, algo útil é encontrado diretamente nas strings.
O Strings tem uma vantagem específica sobre o Detect It Easy. Por exemplo, se o DiE exibe no máximo cerca de 10 mil strings, o Strings revela todo o conteúdo do binário. Nomes de seções, fragmentos de strings, lixo do cabeçalho – toda essa riqueza é coletada pelo instrumento em um arquivo separado. Isso pode ser muito conveniente para análises posteriores. Um exemplo do funcionamento da utilidade foi mostrado na captura de tela abaixo.
Binwalk
Utilizo esta ferramenta quando o arquivo analisado consiste apenas em um conjunto de bytes e não se sabe o que é. O Binwalk determina o tipo de conteúdo: bootloader, arquivo PE ou, talvez, ELF para Linux. Adicionalmente, ele pode exibir a entropia do arquivo. Isso permite separar as áreas onde os dados estão criptografados ou empacotados das áreas com o descompactador.
Na minha prática, as tarefas para o Binwalk aparecem raramente. Mas talvez eu simplesmente não tenha tido tanta sorte.
CyberChef
Com o CyberChef, você pode criptografar, descriptografar, fazer XOR, em suma, realizar qualquer operação com partes dos dados. Vale ressaltar que o CyberChef é um projeto web de código aberto, e você não deve carregar nada confidencial nele. Mas para a análise de malware em si, isso geralmente não é um problema. Vírus são distribuídos abertamente, não há muito o que esconder, e na vasta maioria dos casos, as amostras para análise são obtidas de fontes abertas.
Principalmente, uso o CyberChef para converter de Base64 para um formato legível por humanos. Quase tudo no tráfego de rede é transmitido em Base64, e para entender o que está escrito em uma string, ela precisa primeiro ser decodificada.
Além disso, se uma chave de criptografia estiver embutida no programa e a carga útil estiver criptografada, digamos, com AES, você pode inserir o algoritmo, a chave e o próprio texto cifrado no CyberChef, e ele descriptografará os dados. Quase todos os algoritmos de criptografia e hash conhecidos são implementados lá. Algoritmos personalizados e auto-desenvolvidos, é claro, ele não processará, mas isso é raramente encontrado em amostras reais.
Uma vantagem adicional do CyberChef é que ele constrói cadeias de operações. Em particular, descriptografar, depois fazer XOR, depois fazer outra coisa, e tudo isso acontece em uma única janela sem alternar entre utilitários.
Editores Hexadecimais
Às vezes, durante a análise de malware, preciso descer ao nível de bytes brutos. Por exemplo, para visualizar a estrutura do arquivo sem interpretação, verificar manualmente o checksum em uma área específica ou garantir que o valor corresponda ao que é visto no disassembler, uso um editor hexadecimal.
Neste trabalho, dois instrumentos me ajudam: o pago WinHex e o gratuito HxD. O último uso como opção de backup caso não tenha uma versão funcional do WinHex à mão. A funcionalidade básica do HxD é suficiente para visualizar bytes, calcular o checksum em um trecho ou converter um valor do sistema hexadecimal para decimal. A propósito, tanto no WinHex quanto no HxD, existem extensões especiais para essas tarefas.
VS Code
Um editor de texto comum com alguns plugins (realce de sintaxe para regras YARA e Python). É simplesmente um editor conveniente para visualizar e editar arquivos com regras e scripts.
YARA-X
Eu escrevo regras YARA, então sempre preciso ter à mão uma ferramenta para verificar sua funcionalidade separadamente antes de carregá-las no IDA. Eu uso o YARA-X do VirusTotal. Vale ressaltar que o IDA tem uma biblioteca embutida para verificar regras, mas carregar dados lá para uma verificação rápida de uma única regra é inconveniente. E o YARA-X é uma ferramenta gratuita e permite verificar uma regra diretamente do console em poucos minutos.
Capa
O Capa analisa o binário e mostra quais capacidades ele possui. Por exemplo, quais técnicas de ataque MITRE estão envolvidas, como o arquivo se comporta. Com sua ajuda, posso ver todos os detalhes, até mesmo capacidades específicas como acesso ao PEB, ofuscação de strings via XOR ou verificação de execução em máquina virtual.
Ele pode ser executado como uma utilidade separada do console, ou através do plugin capa-explorer diretamente dentro do IDA, e então os resultados serão vinculados a funções específicas no código desmontado.
Por exemplo, o Capa mostra em segundos que um arquivo malicioso possui proteção contra execução em sandbox ou em máquina virtual (verificação da presença de VMware ou VirtualBox), ou que ele criptografa dados via XOR, cria processos e oculta sua presença na máquina da vítima. Os mesmos dados estão disponíveis dentro do IDA.
Windows Dependencies
Windows Dependencies é um análogo estático do Dependency Walker (uma ferramenta para análise dinâmica de malware). O Windows Dependencies analisa os módulos importados e suas funções, mas, ao contrário do Dependency Walker, faz isso exclusivamente de forma estática, sem a capacidade de rastrear o que acontece durante a execução real do arquivo.
Por exemplo, o Windows Dependencies mostra quais DLLs um arquivo utiliza e quais funções delas importa.
Análise Dinâmica
Agora, vamos falar sobre o conjunto de utilitários para análise dinâmica. Ainda não tive tempo de testar tudo da minha lista de desejos em amostras reais. Além disso, mantenho algumas ferramentas de reserva para tarefas específicas.
X64dbg
Gostaria de começar com um debugger de aplicativos de usuário. Este é, talvez, meu principal auxiliar para análise dinâmica de malware. Ele possui uma vasta funcionalidade. Por exemplo, você pode escrever seus próprios scripts, personalizar o espaço de trabalho; em suma, a flexibilidade é muito superior às ferramentas padrão da Microsoft.
Acima, demonstrei como o x64dbg se comporta no momento em que a execução do programa é suspensa. À esquerda, o código desmontado; à direita, os registradores; embaixo, o dump de memória. Nos comentários das instruções, já são visíveis os endereços desreferenciados e as strings da amostra.
WinDbg
Este também é um debugger, mas com a capacidade de depurar no nível do kernel. Para ser justo, drivers que operam no nível do kernel não são frequentes na minha prática, então abro o WinDbg raramente.
No entanto, o WinDbg pode ser útil quando a amostra contém um driver: um debugger de usuário comum não conseguirá acessá-lo, mas o WinDbg permite trabalhar com código executado em modo privilegiado. No restante, é menos conveniente que o x64dbg. A interface não é das mais amigáveis: afinal, é um produto padrão da Microsoft, mas é preciso trabalhar com o que se tem.
Process Monitor
Um gerenciador de tarefas aprimorado para monitoramento detalhado de ações no Windows. Por exemplo, ele mostrará quais chaves de registro estão sendo lidas, quais arquivos estão sendo abertos, quais processos estão acessando o quê.
O Process Monitor registra tudo em tempo real. Na captura de tela acima, é possível ver como o ctfmon.exe consulta o registro, e parte das requisições retorna NAME NOT FOUND – isso já é um indicador potencial.
Process Explorer
Esta ferramenta substituiu o obsoleto Dependency Walker. O Process Explorer exibe a árvore de processos, descritores e DLLs que são carregados durante a execução de um programa malicioso. Essencialmente, a utilidade executa o arquivo e imediatamente vê quais módulos ele carrega durante a execução, quais processos e threads ele cria, quanta memória eles consomem. Se o malware adicionou algo, o Process Explorer registrará isso.
A utilidade é especialmente indispensável quando um arquivo gera processos filhos em seu próprio espaço e causa o dano principal através deles. Com o Process Explorer, posso ver toda essa cadeia.
RegShot
Tira dois snapshots do registro. O primeiro – antes de executar a amostra, e o segundo – depois. Em seguida, compara ambas as versões. O resultado mostra quais chaves foram adicionadas e quais foram removidas, o que mudou no sistema durante o tempo de execução do malware. Por exemplo, na captura de tela acima, o RegShot comparou dois snapshots do registro com uma diferença de um minuto e meio. Durante esse tempo, mais de 20 mil chaves foram adicionadas ao sistema, quatro foram removidas, além disso, entre as novas, apareceram entradas sobre lets.exe e letsvpn – rastros do pacote de instalação Valley RAT, através do qual o malware se espalha. Após a instalação, ele baixa a carga útil principal como um arquivo separado, que chamei de payload.bin.
Sandboxes
A maioria das ferramentas de análise dinâmica listadas acima pode ser usada individualmente ou combinada através de um sandbox para ver imediatamente as alterações no registro, a lista de processos em execução e subprocessos, e a atividade de rede.
Meus favoritos entre os sandboxes são ANY.RUN e Triage. Eles permitem executar arquivos suspeitos e obter um relatório sobre as alterações no sistema, e ambos possuem planos gratuitos. No entanto, eles têm uma limitação: apenas pesquisas públicas podem ser realizadas lá. Isso significa que qualquer pessoa com um link com o número exclusivo de sua pesquisa pode ver o que exatamente você analisou. O modo privado em tais serviços geralmente é pago. Considerando que trabalhamos com dados abertos, o plano pago ainda não me foi útil.
No entanto, vale ressaltar que ANY.RUN e Triage não são ferramentas intercambiáveis. Cada um tem sua própria lógica de funcionamento, e eu escolho entre eles dependendo da tarefa atual.
Por exemplo, o ANY.RUN fornece um sistema operacional interativo diretamente no navegador. Neste sandbox, você pode clicar em tempo real, baixar arquivos por link, executar anexos de e-mail, clicar em botões na interface do malware e ver imediatamente como o sistema reage. Digamos que eu vá ao ANY.RUN se precisar entender o que o vírus faz imediatamente após a execução ou o que acontece após clicar em um determinado botão.
O Triage funciona de maneira um pouco diferente. Ele executa a amostra por conta própria e fornece um relatório detalhado pronto, que inclui a reação do sistema e o tráfego de rede. Nenhuma interatividade, mas é rápido e adequado para análise em massa. Por exemplo, quando é necessário executar várias amostras e comparar automaticamente os resultados.
Na maioria dos casos, trabalho com o Triage, e só quando preciso "tocar" no malware manualmente em tempo real, mudo para o ANY.RUN.
Existem também CAPE e Cuckoo Sandbox, mas ainda não testei esses sandboxes. O CAPE é excelente para implantação autônoma em suas próprias instalações. Quando chegar a hora de pesquisas confidenciais, planejo migrar para ele, pois sandboxes públicos não são adequados para tais tarefas. O Cuckoo Sandbox é um sandbox clássico de código aberto, amplamente utilizado por pesquisadores.
Conclusão
Produtos de código aberto cobrem as tarefas de ferramentas comerciais padrão em quase todos os lugares. Sem dúvida, em alguns casos, é preciso se conformar com uma interface menos conveniente, em outros, com funcionalidade reduzida, mas, no geral, é possível realizar engenharia reversa de malware de forma completa sem a compra de licenças caras.
E embora para análise estática meu conjunto principal seja construído em torno do IDA e seus plugins, acredito que se você precisar de uma alternativa totalmente gratuita, o Ghidra e as utilidades listadas acima para análise de arquivos PE e busca de strings serão uma alternativa totalmente funcional.
Para análise dinâmica, minhas ferramentas diárias são o x64dbg e o conjunto Sysinternals. Eles são totalmente gratuitos, assim como os sandboxes, que economizam muito tempo.
E você, qual conjunto de ferramentas utiliza?
🛡️⚡
Pare de pesquisar. Comece a hackear.
O MundiX é seu copiloto de pentest com IA: comandos exatos, análise de outputs e próximo passo na kill chain — em segundos.
Sem cartão para começar · Planos a partir de R$49/mês
Olá novamente, sou Maxim Motikov, analista de ciberameaças na "Garda". No meu artigo anterior, explorei como descompilar malware escrito em Python. Hoje, abordarei o tema de um "reverse engineering kit", um conjunto de ferramentas que me auxilia nas tarefas de análise de malware (ВПО - вредоносное программное обеспечение) quando o software habitual pode não estar disponível.
Ferramentas como o IDA Pro podem custar cerca de mil dólares por ano. Se você precisar adquirir suporte para todas as arquiteturas importantes, o preço pode ultrapassar dez mil dólares. Cada descompilador é vendido separadamente; você compra o suporte para x86 e x64, mas precisa pagar extra por ARM. É como comprar um carro sem rodas. Felizmente, o IDA Pro não é a única opção. Atualmente, existem inúmeras ferramentas gratuitas que permitem analisar malware com a mesma eficácia, desde que se compreenda em quais tarefas cada uma se destaca.
Antes de mergulharmos no software, vamos começar com o hardware, que é a base de qualquer laboratório de análise respeitável. Para a engenharia reversa de vírus, é conveniente ter duas máquinas virtuais: uma para análise estática e outra para análise dinâmica. Por que duas máquinas? Cada tarefa exige um conjunto específico de ferramentas e uma configuração de rede particular, e explicarei o motivo.
Para análise estática, mantenho uma VM Windows 10 x64 com pelo menos 8 GB de RAM, 120 GB de disco e uma ponte de rede (acesso à internet). O espaço em disco é necessário porque o Windows moderno e o conjunto de utilitários consomem dezenas de gigabytes. Por exemplo, em uma de minhas máquinas, mais de 80% dos 120 GB já estão ocupados. Parte desse espaço é utilizada pelo Visual Studio, que, embora raramente usado, é necessário para compilar alguns plugins. A análise estática não envolve a execução de código malicioso, portanto, esta máquina opera com uma rede aberta. O acesso à internet é crucial para um plugin do IDA (hashDB), cuja base de dados de checksums está hospedada em um servidor remoto. Sem internet, o plugin não consegue encontrar correspondências. Todas as outras ferramentas de análise estática funcionam perfeitamente offline.
Com a análise dinâmica, a situação é o oposto. Claro, também utilizamos uma VM Windows 10 x64, com pelo menos 8 GB de RAM e 80 GB de disco. No entanto, a rede está completamente desativada. Se um malware tiver acesso à rede durante a análise dinâmica, ele pode se espalhar, receber comandos adicionais do C2 (Comando e Controle) ou exfiltrar dados coletados. Existe também um risco menos óbvio: alguns vírus são capazes de detectar se estão sendo executados em um sandbox ou sob um debugger. O malware sinaliza isso para o servidor e recebe imediatamente um comando para permanecer inativo ou se autodestruir. Portanto, para evitar ter que reiniciar toda a análise, sempre desconecto a máquina dinâmica da rede.
Ferramentas para Análise Estática
Começo o trabalho com qualquer novo malware pela análise estática. Primeiro, examino a estrutura do arquivo, analiso strings, estudo imports, procuro constantes criptográficas e escrevo regras YARA. Somente depois, se for necessário entender o comportamento da amostra dinamicamente, passo para a segunda VM. Para análise estática, desenvolvi um conjunto bastante consistente de utilitários, alguns dos quais são de código aberto, mas também há ferramentas pagas. Abaixo, detalho cada uma.
IDA Pro
Descompiladores e disassemblers, em sua maioria, resolvem as mesmas tarefas. A escolha da ferramenta geralmente depende da plataforma utilizada pela equipe, e não da superioridade objetiva de um software sobre outro. Conheço o IDA Pro desde a época da faculdade. Quando entrei na empresa como engenheiro de reversão, todos lá também usavam IDA, então não havia motivo para aprender algo novo.
Além da versão paga do IDA, existe uma versão gratuita (IDA Free). Ela é suficiente para análises básicas. Consegue desmontar a funcionalidade principal e construir um grafo de dependência de funções. O que falta nela é um descompilador e suporte a scripts Python para automação; em outras palavras, plugins não funcionarão. No entanto, para a tarefa de abrir um arquivo executável e visualizar o código-fonte, o IDA Free cumpre bem o seu papel.
O IDA também possui uma função conveniente para colaboração. Um servidor é configurado, e várias pessoas podem visualizar o mesmo código simultaneamente e fazer alterações. Para projetos em equipe, isso é uma vantagem significativa. No entanto, essa opção está disponível apenas na versão paga do programa.
Quero destacar os plugins que utilizo sobre o IDA. Todos são de código aberto e podem ser modificados livremente. Ninguém reclamará, talvez até agradeçam se você adicionar funcionalidade e enviar um patch para o GitHub.
Plugins para IDA Pro
HashDB: Com base em um checksum encontrado no código, o plugin busca correspondências em um vasto banco de dados de hashes prontos, coletados na internet a partir de diversos algoritmos e constantes. Esta utilidade é muito útil na análise de vírus, pois hashes aparecem constantemente.
O HashDB permite adicionar algoritmos personalizados e checksums encontrados com sua decriptografia. A desvantagem é que todo o banco de dados é armazenado na internet, e esta é a única razão pela qual não posso isolar completamente a VM estática da rede.
Yarka: Um plugin para geração automática de regras YARA a partir do código desmontado. Eu o utilizo principalmente de forma pontual. Por exemplo, se encontro no código não apenas uma string suspeita, mas um algoritmo suficientemente único, eu o seleciono no IDA, e o Yarka transforma esse trecho de código em uma regra pronta. Por "unicidade" neste contexto, entendo não a complexidade, mas a originalidade do algoritmo. Por exemplo, uma vez me deparei com um ransomware que transmitia dados pela rede não com um algoritmo conhecido como AES, mas com um XOR auto-desenvolvido com iteração por tabela.
Além do Yarka, também utilizo a utilidade YarGen. Ao contrário do Yarka, ele opera em massa. Basta fornecer uma pasta com amostras de malware como entrada, e ele gera um conjunto de regras YARA com base nas strings encontradas. Essencialmente, o Yarka serve para transformar um algoritmo específico encontrado em uma regra, enquanto o YarGen serve para criar rapidamente rascunhos para um lote inteiro de amostras.
Find Crypt: Este plugin funciona com assinaturas YARA e procura no código constantes criptográficas para determinar o algoritmo de criptografia ou hash. Há uma nuance aqui: se o invasor modificar as constantes, o plugin provavelmente será inútil. No entanto, tudo o que está descrito nos padrões GOST e nas especificações estrangeiras, o Find Crypt identificará sem problemas.
A propósito, ainda não me deparei com criptografia modificada em meu trabalho, mas acredito que, como o próprio plugin é de código aberto e escrito em Python, nada impede que, se desejar, você mesmo desenvolva suas próprias constantes e as adicione à sua base.
ClassInformer: Ao trabalhar com um grande volume de código, é fácil perder classes, especialmente se elas estiverem localizadas na seção de dados e você simplesmente não lhes der atenção no fluxo geral de análise. Portanto, para obter uma lista de todas as classes encontradas no código desmontado, preciso do plugin ClassInformer, que exibe as classes em uma única lista. Assim, para cada classe, você pode ver o número de funções e ir diretamente para a desejada.
Em uma das amostras recentes, havia muitas classes virtuais, e, ao examinar o arquivo manualmente, perdi uma funcionalidade importante. Felizmente, o ClassInformer me salvou a tempo. Ele listou todas as classes do binário – as padrão do C++ e as personalizadas (veja a captura de tela abaixo).
Ghidra como Alternativa Open Source ao IDA
Se você não tem condições de adquirir a versão paga do IDA, pode usar o Ghidra. É um desenvolvimento de código aberto da Agência de Segurança Nacional dos EUA (NSA). No entanto, o Ghidra é mais voltado para a engenharia reversa de bootloaders, dispositivos IoT e código de microcontroladores, enquanto o IDA se destaca na análise de programas x86, x64 e ARM convencionais.
Sinceramente, quase não usei o Ghidra. Não tenho uma explicação racional clara para isso. Provavelmente, o motivo é que as pessoas não gostam muito de mudar as ferramentas com as quais começaram sua jornada profissional. Aparentemente, fiquei "preso" ao IDA por muito tempo para pular para outro software de forma rápida e indolor. Achei a interface do Ghidra inconveniente e confusa, mas isso é provavelmente uma questão de hábito.
Para resumir e abstrair das preferências pessoais: o IDA me parece mais conveniente para a engenharia reversa clássica de arquivos executáveis para x86, x64 e ARM, pois é atualizado com mais frequência. O Ghidra é totalmente gratuito, conveniente para a engenharia reversa de bootloaders e IoT, mas, na minha opinião, requer mais tempo para dominar a interface.
Esqueci de mencionar que o Ghidra também possui uma ferramenta para trabalho em equipe. Um servidor é iniciado, vários clientes se conectam a ele, e várias pessoas trabalham simultaneamente no mesmo arquivo, ou seja, em termos de funcionalidade, é semelhante ao que o IDA oferece.
Detect It Easy (DiE)
Eu trabalho principalmente com arquivos PE e frequentemente preciso determinar o tipo de binário, bem como suas características principais. Portanto, a primeira coisa que abro ao examinar uma nova amostra é a utilidade Detect It Easy (DiE). Ela imediatamente exibe informações básicas. Por exemplo, o formato do arquivo, tamanho, bem como quais funções ele exporta e importa. Geralmente, esses dados são suficientes para entender com o que estou lidando.
Na captura de tela acima, uma análise de uma amostra real. O DiE identificou imediatamente o tipo de arquivo, a arquitetura e com o que ele foi compilado.
PEStudio
Este é um análogo do DiE, mas com um foco diferente. Enquanto o DiE se concentra mais em qual ambiente o arquivo foi compilado (ele destaca o compilador, linker e detalhes técnicos semelhantes), o PEStudio examina os sinais de malware. Em particular, flags, classificação por banco de dados de arquivos conhecidos, cabeçalhos. A ferramenta avalia o arquivo do ponto de vista de sua segurança, e não de sua origem técnica. Por exemplo, a captura de tela abaixo mostra a análise do arquivo payload.bin no PEStudio. É visível que 35 de 72 antivírus já o detectam, e a entropia elevada indica empacotamento ou criptografia interna.
PEView
Outra utilidade gratuita – PEView. Não posso dizer que seja um "must-have", mas às vezes essa utilidade é útil. Comparado ao IDA, este instrumento tem uma interface francamente desatualizada, então o utilizo com extrema raridade. Por exemplo, se preciso ver rapidamente o deslocamento das tabelas de importação e exportação, o PEView ajuda muito. Na captura de tela abaixo, é mostrado como o PEView analisa o cabeçalho do payload.bin por campos. As seções e seus deslocamentos são visíveis sem iniciar o IDA.
Strings
Strings faz parte do pacote Sysinternals (um conjunto de utilitários lançado pela Microsoft). A utilidade exibe todas as strings encontradas no binário. Quando isso é necessário? Por exemplo, ao desenvolver regras YARA, e simplesmente para uma visualização inicial do arquivo. Às vezes, algo útil é encontrado diretamente nas strings.
O Strings tem uma vantagem específica sobre o Detect It Easy. Por exemplo, se o DiE exibe no máximo cerca de 10 mil strings, o Strings revela todo o conteúdo do binário. Nomes de seções, fragmentos de strings, lixo do cabeçalho – toda essa riqueza é coletada pelo instrumento em um arquivo separado. Isso pode ser muito conveniente para análises posteriores. Um exemplo do funcionamento da utilidade foi mostrado na captura de tela abaixo.
Binwalk
Utilizo esta ferramenta quando o arquivo analisado consiste apenas em um conjunto de bytes e não se sabe o que é. O Binwalk determina o tipo de conteúdo: bootloader, arquivo PE ou, talvez, ELF para Linux. Adicionalmente, ele pode exibir a entropia do arquivo. Isso permite separar as áreas onde os dados estão criptografados ou empacotados das áreas com o descompactador.
Na minha prática, as tarefas para o Binwalk aparecem raramente. Mas talvez eu simplesmente não tenha tido tanta sorte.
CyberChef
Com o CyberChef, você pode criptografar, descriptografar, fazer XOR, em suma, realizar qualquer operação com partes dos dados. Vale ressaltar que o CyberChef é um projeto web de código aberto, e você não deve carregar nada confidencial nele. Mas para a análise de malware em si, isso geralmente não é um problema. Vírus são distribuídos abertamente, não há muito o que esconder, e na vasta maioria dos casos, as amostras para análise são obtidas de fontes abertas.
Principalmente, uso o CyberChef para converter de Base64 para um formato legível por humanos. Quase tudo no tráfego de rede é transmitido em Base64, e para entender o que está escrito em uma string, ela precisa primeiro ser decodificada.
Além disso, se uma chave de criptografia estiver embutida no programa e a carga útil estiver criptografada, digamos, com AES, você pode inserir o algoritmo, a chave e o próprio texto cifrado no CyberChef, e ele descriptografará os dados. Quase todos os algoritmos de criptografia e hash conhecidos são implementados lá. Algoritmos personalizados e auto-desenvolvidos, é claro, ele não processará, mas isso é raramente encontrado em amostras reais.
Uma vantagem adicional do CyberChef é que ele constrói cadeias de operações. Em particular, descriptografar, depois fazer XOR, depois fazer outra coisa, e tudo isso acontece em uma única janela sem alternar entre utilitários.
Editores Hexadecimais
Às vezes, durante a análise de malware, preciso descer ao nível de bytes brutos. Por exemplo, para visualizar a estrutura do arquivo sem interpretação, verificar manualmente o checksum em uma área específica ou garantir que o valor corresponda ao que é visto no disassembler, uso um editor hexadecimal.
Neste trabalho, dois instrumentos me ajudam: o pago WinHex e o gratuito HxD. O último uso como opção de backup caso não tenha uma versão funcional do WinHex à mão. A funcionalidade básica do HxD é suficiente para visualizar bytes, calcular o checksum em um trecho ou converter um valor do sistema hexadecimal para decimal. A propósito, tanto no WinHex quanto no HxD, existem extensões especiais para essas tarefas.
VS Code
Um editor de texto comum com alguns plugins (realce de sintaxe para regras YARA e Python). É simplesmente um editor conveniente para visualizar e editar arquivos com regras e scripts.
YARA-X
Eu escrevo regras YARA, então sempre preciso ter à mão uma ferramenta para verificar sua funcionalidade separadamente antes de carregá-las no IDA. Eu uso o YARA-X do VirusTotal. Vale ressaltar que o IDA tem uma biblioteca embutida para verificar regras, mas carregar dados lá para uma verificação rápida de uma única regra é inconveniente. E o YARA-X é uma ferramenta gratuita e permite verificar uma regra diretamente do console em poucos minutos.
Capa
O Capa analisa o binário e mostra quais capacidades ele possui. Por exemplo, quais técnicas de ataque MITRE estão envolvidas, como o arquivo se comporta. Com sua ajuda, posso ver todos os detalhes, até mesmo capacidades específicas como acesso ao PEB, ofuscação de strings via XOR ou verificação de execução em máquina virtual.
Ele pode ser executado como uma utilidade separada do console, ou através do plugin capa-explorer diretamente dentro do IDA, e então os resultados serão vinculados a funções específicas no código desmontado.
Por exemplo, o Capa mostra em segundos que um arquivo malicioso possui proteção contra execução em sandbox ou em máquina virtual (verificação da presença de VMware ou VirtualBox), ou que ele criptografa dados via XOR, cria processos e oculta sua presença na máquina da vítima. Os mesmos dados estão disponíveis dentro do IDA.
Windows Dependencies
Windows Dependencies é um análogo estático do Dependency Walker (uma ferramenta para análise dinâmica de malware). O Windows Dependencies analisa os módulos importados e suas funções, mas, ao contrário do Dependency Walker, faz isso exclusivamente de forma estática, sem a capacidade de rastrear o que acontece durante a execução real do arquivo.
Por exemplo, o Windows Dependencies mostra quais DLLs um arquivo utiliza e quais funções delas importa.
Análise Dinâmica
Agora, vamos falar sobre o conjunto de utilitários para análise dinâmica. Ainda não tive tempo de testar tudo da minha lista de desejos em amostras reais. Além disso, mantenho algumas ferramentas de reserva para tarefas específicas.
X64dbg
Gostaria de começar com um debugger de aplicativos de usuário. Este é, talvez, meu principal auxiliar para análise dinâmica de malware. Ele possui uma vasta funcionalidade. Por exemplo, você pode escrever seus próprios scripts, personalizar o espaço de trabalho; em suma, a flexibilidade é muito superior às ferramentas padrão da Microsoft.
Acima, demonstrei como o x64dbg se comporta no momento em que a execução do programa é suspensa. À esquerda, o código desmontado; à direita, os registradores; embaixo, o dump de memória. Nos comentários das instruções, já são visíveis os endereços desreferenciados e as strings da amostra.
WinDbg
Este também é um debugger, mas com a capacidade de depurar no nível do kernel. Para ser justo, drivers que operam no nível do kernel não são frequentes na minha prática, então abro o WinDbg raramente.
No entanto, o WinDbg pode ser útil quando a amostra contém um driver: um debugger de usuário comum não conseguirá acessá-lo, mas o WinDbg permite trabalhar com código executado em modo privilegiado. No restante, é menos conveniente que o x64dbg. A interface não é das mais amigáveis: afinal, é um produto padrão da Microsoft, mas é preciso trabalhar com o que se tem.
Process Monitor
Um gerenciador de tarefas aprimorado para monitoramento detalhado de ações no Windows. Por exemplo, ele mostrará quais chaves de registro estão sendo lidas, quais arquivos estão sendo abertos, quais processos estão acessando o quê.
O Process Monitor registra tudo em tempo real. Na captura de tela acima, é possível ver como o ctfmon.exe consulta o registro, e parte das requisições retorna NAME NOT FOUND – isso já é um indicador potencial.
Process Explorer
Esta ferramenta substituiu o obsoleto Dependency Walker. O Process Explorer exibe a árvore de processos, descritores e DLLs que são carregados durante a execução de um programa malicioso. Essencialmente, a utilidade executa o arquivo e imediatamente vê quais módulos ele carrega durante a execução, quais processos e threads ele cria, quanta memória eles consomem. Se o malware adicionou algo, o Process Explorer registrará isso.
A utilidade é especialmente indispensável quando um arquivo gera processos filhos em seu próprio espaço e causa o dano principal através deles. Com o Process Explorer, posso ver toda essa cadeia.
RegShot
Tira dois snapshots do registro. O primeiro – antes de executar a amostra, e o segundo – depois. Em seguida, compara ambas as versões. O resultado mostra quais chaves foram adicionadas e quais foram removidas, o que mudou no sistema durante o tempo de execução do malware. Por exemplo, na captura de tela acima, o RegShot comparou dois snapshots do registro com uma diferença de um minuto e meio. Durante esse tempo, mais de 20 mil chaves foram adicionadas ao sistema, quatro foram removidas, além disso, entre as novas, apareceram entradas sobre lets.exe e letsvpn – rastros do pacote de instalação Valley RAT, através do qual o malware se espalha. Após a instalação, ele baixa a carga útil principal como um arquivo separado, que chamei de payload.bin.
Sandboxes
A maioria das ferramentas de análise dinâmica listadas acima pode ser usada individualmente ou combinada através de um sandbox para ver imediatamente as alterações no registro, a lista de processos em execução e subprocessos, e a atividade de rede.
Meus favoritos entre os sandboxes são ANY.RUN e Triage. Eles permitem executar arquivos suspeitos e obter um relatório sobre as alterações no sistema, e ambos possuem planos gratuitos. No entanto, eles têm uma limitação: apenas pesquisas públicas podem ser realizadas lá. Isso significa que qualquer pessoa com um link com o número exclusivo de sua pesquisa pode ver o que exatamente você analisou. O modo privado em tais serviços geralmente é pago. Considerando que trabalhamos com dados abertos, o plano pago ainda não me foi útil.
No entanto, vale ressaltar que ANY.RUN e Triage não são ferramentas intercambiáveis. Cada um tem sua própria lógica de funcionamento, e eu escolho entre eles dependendo da tarefa atual.
Por exemplo, o ANY.RUN fornece um sistema operacional interativo diretamente no navegador. Neste sandbox, você pode clicar em tempo real, baixar arquivos por link, executar anexos de e-mail, clicar em botões na interface do malware e ver imediatamente como o sistema reage. Digamos que eu vá ao ANY.RUN se precisar entender o que o vírus faz imediatamente após a execução ou o que acontece após clicar em um determinado botão.
O Triage funciona de maneira um pouco diferente. Ele executa a amostra por conta própria e fornece um relatório detalhado pronto, que inclui a reação do sistema e o tráfego de rede. Nenhuma interatividade, mas é rápido e adequado para análise em massa. Por exemplo, quando é necessário executar várias amostras e comparar automaticamente os resultados.
Na maioria dos casos, trabalho com o Triage, e só quando preciso "tocar" no malware manualmente em tempo real, mudo para o ANY.RUN.
Existem também CAPE e Cuckoo Sandbox, mas ainda não testei esses sandboxes. O CAPE é excelente para implantação autônoma em suas próprias instalações. Quando chegar a hora de pesquisas confidenciais, planejo migrar para ele, pois sandboxes públicos não são adequados para tais tarefas. O Cuckoo Sandbox é um sandbox clássico de código aberto, amplamente utilizado por pesquisadores.
Conclusão
Produtos de código aberto cobrem as tarefas de ferramentas comerciais padrão em quase todos os lugares. Sem dúvida, em alguns casos, é preciso se conformar com uma interface menos conveniente, em outros, com funcionalidade reduzida, mas, no geral, é possível realizar engenharia reversa de malware de forma completa sem a compra de licenças caras.
E embora para análise estática meu conjunto principal seja construído em torno do IDA e seus plugins, acredito que se você precisar de uma alternativa totalmente gratuita, o Ghidra e as utilidades listadas acima para análise de arquivos PE e busca de strings serão uma alternativa totalmente funcional.
Para análise dinâmica, minhas ferramentas diárias são o x64dbg e o conjunto Sysinternals. Eles são totalmente gratuitos, assim como os sandboxes, que economizam muito tempo.
E você, qual conjunto de ferramentas utiliza?
📤 Compartilhar & Baixar
🧰 Ferramentas recomendadas
Divulgação: alguns links são patrocinados. Podemos receber comissão se você comprar — sem custo extra para você. Só indicamos o que faz sentido para a comunidade.