Com este artigo completamos a série de publicações dedicadas à análise de software malicioso. EM
Hoje Ilya Pomerantsev, especialista em análise de malware do CERT Group-IB, falará sobre a primeira etapa da análise de malware - descompactação semiautomática de amostras do AgentTesla usando o exemplo de três minicasos da prática dos especialistas do CERT Group-IB.
Normalmente, o primeiro estágio na análise de malware é a remoção da proteção na forma de compactador, criptografador, protetor ou carregador. Na maioria dos casos, esse problema pode ser resolvido executando o malware e realizando um dump, mas há situações em que esse método não é adequado. Por exemplo, se o malware for um criptografador, se ele proteger suas regiões de memória contra dump, se o código contiver mecanismos de detecção de máquina virtual ou se o malware for reinicializado imediatamente após ser iniciado. Nesses casos, utiliza-se o chamado desempacotamento “semiautomático”, ou seja, o pesquisador tem total controle do processo e pode intervir a qualquer momento. Vamos considerar este procedimento usando três amostras da família AgentTesla como exemplo. Este é um malware relativamente inofensivo se você desabilitar o acesso à rede.
Amostra nº 1
O arquivo de origem é um documento do MS Word que explora a vulnerabilidade CVE-2017-11882.
Como resultado, a carga é baixada e iniciada.
Análise da árvore de processos e marcadores comportamentais mostra injeção no processo RegAsm.exe.
Existem marcadores comportamentais característicos do AgentTesla.
A amostra baixada é a executável . NET-arquivo protegido por um protetor Reator .NET.
Vamos abri-lo no utilitário dnSpy x86 e siga para o ponto de entrada.
Indo para a função Deslocamento de data e hora, encontraremos o código de inicialização para o novo . NET-módulo. Vamos colocar breakpoint na linha que nos interessa e execute o arquivo.
Em um dos buffers retornados você pode ver a assinatura MZ (0x4D 0x5A). Vamos salvá-lo.
Um arquivo executável despejado é uma biblioteca dinâmica que é um carregador, ou seja, extrai a carga útil da seção de recursos e a inicia.
Ao mesmo tempo, os próprios recursos necessários não estão presentes no lixão. Eles estão na amostra pai.
Utilitário dnSpy possui duas funcionalidades extremamente úteis que nos ajudarão a criar rapidamente um “Frankenstein” a partir de dois arquivos relacionados.
- O primeiro permite “colar” uma biblioteca dinâmica na amostra pai.
- A segunda é reescrever o código da função no ponto de entrada para chamar o método desejado da biblioteca dinâmica inserida.
Salvamos nosso “Frankenstein”, conjunto breakpoint na linha que retorna um buffer com recursos descriptografados e produz um dump por analogia com o estágio anterior.
O segundo dump está escrito em VB.NET um arquivo executável protegido por um protetor familiar para nós ConfusorEx.
Depois de remover o protetor, usamos as regras YARA escritas anteriormente e nos certificamos de que o malware descompactado é realmente AgentTesla.
Amostra nº 2
O arquivo de origem é um documento do MS Excel. Uma macro integrada causa a execução de código malicioso.
Como resultado, o script do PowerShell é iniciado.
O script descriptografa o código C# e transfere o controle para ele. O código em si é um bootloader, como também pode ser visto no relatório do sandbox.
A carga útil é um executável . NET-arquivo.
Abrindo o arquivo em dnSpy x86, você pode ver que está ofuscado. Removendo ofuscação usando o utilitário de4ponto e retorne à análise.
Ao examinar o código, você poderá encontrar a seguinte função:
As linhas codificadas são impressionantes EntryPoint и invocar. Nós colocamos breakpoint para a primeira linha, execute e salve o valor do buffer byte_0.
O dump é novamente um aplicativo em . NET e protegido ConfusorEx.
Removemos o ofuscamento usando de4ponto e carregue para dnSpy. Pela descrição do arquivo entendemos que estamos diante de Carregador CyaX-Sharp.
Este carregador possui ampla funcionalidade anti-análise.
Essa funcionalidade inclui ignorar os sistemas de proteção integrados do Windows, desabilitar o Windows Defender, bem como mecanismos de detecção de sandbox e máquina virtual. É possível carregar a carga da rede ou armazená-la na seção de recursos. O lançamento é realizado por injeção em seu próprio processo, em uma duplicata de seu próprio processo ou em processos MSBuild.exe, vbc.exe и RegSvcs.exe dependendo do parâmetro escolhido pelo invasor.
No entanto, para nós eles são menos significativos do que AntiDump-função que adiciona ConfusorEx. Seu código fonte pode ser encontrado em
Para desativar a proteção, aproveitaremos a oportunidade dnSpy, que permite editar IL-código.
Salvar e instalar breakpoint para a linha de chamada da função de descriptografia de carga útil. Está localizado no construtor da classe principal.
Lançamos e despejamos a carga útil. Usando as regras YARA escritas anteriormente, garantimos que este é o AgentTesla.
Amostra nº 3
O arquivo fonte é o executável VB Nativo PE32-arquivo.
A análise de entropia mostra a presença de uma grande quantidade de dados criptografados.
Ao analisar o formulário de candidatura em Descompilador VB você pode notar um fundo pixelado estranho.
Gráfico de entropia bmp-image é idêntico ao gráfico de entropia do arquivo original e o tamanho é 85% do tamanho do arquivo.
A aparência geral da imagem indica o uso de esteganografia.
Prestemos atenção na aparência da árvore de processos, bem como na presença de um marcador de injeção.
Isso indica que a descompactação está em andamento. Para carregadores do Visual Basic (também conhecidos como VBKrypt ou VBInjetor) uso típico código shell para inicializar a carga útil, bem como para realizar a injeção em si.
Análise em Descompilador VB mostrou a presença de um evento Ver no formulário FegatassocAirballoon2.
Vamos para IDA profissional para o endereço especificado e estude a função. O código está fortemente ofuscado. O fragmento que nos interessa é apresentado a seguir.
Aqui, o espaço de endereço do processo é verificado em busca de uma assinatura. Esta abordagem é extremamente duvidosa.
Primeiro, o endereço inicial da digitalização 0x400100. Este valor é estático e não é ajustado quando a base é deslocada. Em condições ideais de estufa, indicará o fim PE-o cabeçalho do arquivo executável. Porém, o banco de dados não é estático, seu valor pode mudar e a busca pelo endereço real da assinatura necessária, embora não cause estouro de variável, pode demorar muito.
Em segundo lugar, o significado da assinatura iWGK. Acho óbvio que 4 bytes é muito pequeno para garantir a exclusividade. E se você levar em conta o primeiro ponto, a probabilidade de errar é bastante alta.
Na verdade, o fragmento necessário está anexado ao final do encontrado anteriormente bmp-fotos por deslocamento 0xA1D0D.
Atuação código shell realizado em duas etapas. O primeiro decifra o corpo principal. Neste caso, a chave é determinada pela força bruta.
Despejar o descriptografado código shell e observe as linhas.
Primeiro, agora conhecemos a função para criar um processo filho: CreateProcessInternalW.
Em segundo lugar, tomamos conhecimento do mecanismo de fixação no sistema.
Voltemos ao processo original. Vamos colocar breakpoint em CreateProcessInternalW e continuar a execução. A seguir vemos a conexão NtGetContextThread/NtSetContextThread, que altera o endereço inicial de execução para o endereço ShellCode.
Conectamos ao processo criado com um depurador e ativamos o evento Suspender ao carregar/descarregar a biblioteca, retome o processo e aguarde o carregamento . NET-bibliotecas.
Uso adicional ProcessHacker regiões de despejo contendo descompactado . NET-aplicativo.
Paramos todos os processos e excluímos a cópia do malware que foi incorporada ao sistema.
O arquivo despejado é protegido por um protetor Reator .NET, que pode ser facilmente removido usando um utilitário de4ponto.
Usando as regras YARA escritas anteriormente, garantimos que este é o AgentTesla.
para resumir
Assim, demonstramos detalhadamente o processo de descompactação semiautomática de amostras usando três minicasos como exemplo, e também analisamos malware com base em um caso completo, descobrindo que a amostra em estudo é AgentTesla, estabelecendo sua funcionalidade e um lista completa de indicadores de compromisso.
A análise do objeto malicioso que realizamos exige muito tempo e esforço, e esse trabalho deve ser realizado por um funcionário especial da empresa, mas nem todas as empresas estão preparadas para contratar um analista.
Um dos serviços prestados pelo Laboratório de Computação Forense e Análise de Códigos Maliciosos do Grupo-IB é a resposta a incidentes cibernéticos. E para que os clientes não percam tempo aprovando documentos e discutindo-os em meio a um ataque cibernético, o Grupo-IB lançou Retentor de Resposta a Incidentes, um serviço de resposta a incidentes pré-assinatura que também inclui uma etapa de análise de malware. Mais informações sobre isso podem ser encontradas
Se você quiser estudar mais uma vez como as amostras do AgentTesla são descompactadas e ver como um especialista do CERT Group-IB faz isso, você pode baixar a gravação do webinar sobre este tópico
Fonte: habr.com