Jump to content
Sign in to follow this  
Leandro Fróes

AnalyseMe - Nível 05

Recommended Posts

Boa noite galera, tudo certo??

Adivinhem o que temos pra esse começo de ano?? Isso mesmo, fim de semana debuggando 😉. Queremos também saber o que vocês estão achando, se está muito difícil, muito fácil, se está na medida certa, etc. Lembrando que qualquer feedback é válido.

Um ótimo fim de semana e bom debugging.

Abs

AnalyseMe-05.exe

Share this post


Link to post
Share on other sites
Posted (edited)

Opa, analise abaixo.

Spoiler

Tipo de arquivo: PE EXE
Compilador/linguagem: Microsoft Visual C/C++
Protector/packer: Nenhum
SHA-256: 006cbf5d7911fda29b25d81abd674284ff7c80af1f8cd1b281fa1be51719ab86
Strings interessantes: C:\Users\IEUser\Desktop\App\Release\App4.pdb, FindWindowA, x32dbg, OllyDbg.
                Strings cifradas via XOR:
                B8_Trmdvao#Binfw\MqecnfXVkqpucoFoz#Cugpp Cg`ivjknq_@ID{EPK-`ln == C:\Program Files\Oracle\VirtualBox Guest Additions\DIFxAPI.dll
                B8_silgkwq_Wyqwam11XDpjreppXVonkuqf*s{p                == C:\windows\System32\Drivers\Vmmouse.sys
                Lmymlnb+4,3$(alipcwmbnf? OPME"5*09#Silgkwq#JT"6*19#WV3*        == Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
                ]rb}lmb`.g{a                                == \payload.exe
                ivwt:-,6035*ek`er,lvg-gkwlokaf,aiabv.ali               == http://2016.eicar.org/download/eicar.com


Funções locais maliciosas: 401190 ( Faz checagem se esta rodando em um debugger usando a call IsDebuggerPresent, caso nao esteja, inicia o processo de decifrar as strings em XOR para ser usado na checagem de um possivel ambiente virtualizado.
                    Caso nao esteja rodando em uma VM, faz uma call para  FindWindowA para saber se existe algum programa com o titulo "x32dbg" ou "OllyDbg". Se nao existir nenhum debugger rodando no sistema, continua a rodar
                    realiza o download o sample eicar e escreve nos arquivos temporarios como payload.exe)
            

Chamadas à API do Windows e outras bibliotecas: wininet.dll_InternetReadFile, wininet.dll_InternetOpenUrlA, wininet.dll_InternetOpenUrlA, wininet.dll_InternetOpenA,
                        KERNEL32.dll_ExitProcess, KERNEL32.dll_GetProcessHeap,KERNEL32.dll_HeapAlloc, KERNEL32.dll_GetCommandLineA, KERNEL32.dll_WriteFile,
                        KERNEL32.dll_GetTempPathA, KERNEL32.dll_CloseHandle, KERNEL32.dll_GetModuleHandleA, KERNEL32.dll_lstrcatA, KERNEL32.dll_GetStartupInfoA, KERNEL32.dll_IsDebuggerPresent,
                        USER32.dll_FindWindowA.


Atividades de rede: Monta uma request com o user agent do firefox(Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)) para baixar o sample eicar,  em "http://2016.eicar.org/download/eicar.com"

O que o binário faz em linhas gerais: O malware age como um dropper, faz o download o sample eicar e salva nos arquivos temporarios como payload.exe, antes de realizar a atividade maliciosa, é feito uma checagem para saber se esta sendo
                      executado em um debugger, em um ambiente virtualizado ou se existe algum programa aberto com o nome "x32dbg" ou "OllyDbg" para ter total certeza que nao esta sendo executado nenhum debugger.

O que foi modificado no sistema
: Sample eicar escrito nos arquivos temporarios como payload.exe

Notas adicionais:
    Para remover a checagem do nome da janela, apaguei a call e coloquei instruções NOP no lugar. Mas também poderia ser feito usando o window renamer para realizar um patch no nome da janela.

    Com base nas analises, notei certos pontos interessantes na estrutura do codigo, algumas calls estao sendo feita via valores guardados nos registradores e nao direto ao endereço da função em si, isso pode ser uma indicativa de que o escritor
    do malware esta usando "Function pointers" no lugar de chamar a função diretamente, um recurso que guarda o endereco da função em um ponteiro e depois usa a propia variavel para realizar a chamada, isso pode ser usado para não deixar claro em que ponto esta
    sendo feito uma call. Partes do codigo para decifrar a ofuscação em  XOR são repetidas, o que pode indicar o uso de uma funcao macro para decifrar a string ofuscada.
    
    Não tenho tanta certeza sobre estas notas, se alguém puder opinar sobre elas, agradeco :D

   Codigo em python usado para traduzir strings:
 

As analises estão muito boas, evoluindo naturalmente

Edited by Candeer
Remover bold

Share this post


Link to post
Share on other sites
Em 09/01/2019 em 16:16, Aof disse:

acho que ta meio fraco

Não entendi. Você quis dizer que está fácil demais? Pode dar mais detalhes?

Abraço,

Fernando

Share this post


Link to post
Share on other sites
Em 10/01/2019 em 19:17, Fernando Mercês disse:

Não entendi. Você quis dizer que está fácil demais? Pode dar mais detalhes?

- aumenta a dificuldade de criptografia.

- mudar para outras linguagens de programação

- malwares com packer criado pelo mente binaria, pra dificultar mesmo. heheheh

- mais dificuldades

tipo malwares com um packer muito bom, mas sem nenhuma outra proteção no code.

malwares sem packer mas com anti-reverse muito loka. vai alternando entre parte com mais dificuldades. hahahah

espero que me entenda. hahahah

 

abraco,

aof

 

Share this post


Link to post
Share on other sites

Humm, a tua resposta não parece ser em relação ao desafio 5, mas sim ao futuro do projeto. Vamos lá:

14 horas atrás, Aof disse:

- aumenta a dificuldade de criptografia.

A gente fez XOR com um byte e depois XOR multibyte. Depois focamos em anti-debug e por isso deixamos a ofuscação de strings de lado. Vamos voltar nisso em breve.

14 horas atrás, Aof disse:

- mudar para outras linguagens de programação

Não temos esse interesse agora, porque queremos treinar as bases de Assembly. Linguagens como .Net ou Java fugiriam muito destes conceitos.

14 horas atrás, Aof disse:

- malwares com packer criado pelo mente binaria, pra dificultar mesmo. heheheh

Tempo zero pra investir nisso. Se optarmos por usar packers, vamos nos comerciais mesmo, talvez com pequenas alterações.

14 horas atrás, Aof disse:

- mais dificuldades

A gente tá tentando tornar mais difícil gradualmente. No 5 foi adicionada a checagem de janelas, que não tinha nos anteriores. Estamos tentando adicionar um ou dois itens de dificuldade por vez. Pra gente parece ok.  Nossa intenção é que as pessoas resolvam os desafios. Não que não resolvam. rs

Uma coisa é compreender a análise de quem resolveu, outra é resolver mesmo, na mão. Acreditamos que assim que se aprende mesmo e para mais pessoas poderem estudar assim, temos que ir "devagar e sempre". 😉

Abraço,

Fernando

 

 

Share this post


Link to post
Share on other sites

Meio atrasado mas segue minha análise:

Spoiler

Tipo de arquivo: PE EXE
Compilador/linguagem: Visual Studio C/C++
Protector/packer: Nenhum
SHA-256: 006cbf5d7911fda29b25d81abd674284ff7c80af1f8cd1b281fa1be51719ab86

Strings interessantes: "C:\Program Files\Oracle\VirtualBox Guest Additions\DIFxAPI.dll" ofuscada em 0x402068, "C:\windows\System32\Drivers\Vmmouse.sys" ofuscada em 0x4020A8, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" ofuscada em 0x4020D0, "http://2016.eicar.org/download/eicar.com" ofuscada em 0x402118, "\payload.exe" ofu] em 0x402108;

Funções locais maliciosas: 401190;

Chamadas à API do Windows e outras bibliotecas: IsDebuggerPresent, CreateFileA, FindWindowA, InternetOpenA, InternetOpenUrlA, InternetReadFile, InternetCloseHandle, WriteFile, GetTempPathA, lstrcatA;

Atividades de rede:  Baixa o arquivo em "http://2016.eicar.org/download/eicar.com" usando o user-agent do Firefox;

O que o binário faz em linhas gerais: (1) Verifica o retorno da função IsDebuggerPresent para decidir se continua rodando, em seguida (2) tenta abrir o arquivo "C:\Program Files\Oracle\VirtualBox Guest Additions\DIFxAPI.dll" usando a função CreateFileA com dwDesiredAccess = GENERIC_READ (0x80000000) para descobrir se está rodando em uma VM VirtualBox. Logo depois o programa utiliza a mesma função (3) CreateFileA também com modo GENERIC_READ para abrir o arquivo "C:\windows\System32\Drivers\Vmmouse.sys". Novamente caso o arquivo não exista, o programa segue utilizando (4) a função FindWindowA para tentar achar uma janela aberta com o título "x32dbg" e caso encontre encerra a execução. Passando por essa verificação há uma outra igual (5) mas procurando a janela com título "OllyDbg". Se tudo deu certo o programa inicializa uma conexão de internet (6) com a função InternetOpenA e user-agent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" seguida de uma chamada (7) para InternetOpenUrlA com a URL "http://2016.eicar.org/download/eicar.com". Depois faz a leitura de 68 bytes (0x44) do arquivo remoto recém-aberto com a função (8) InternetReadFile e fecha a comunicação (9) com InternetCloseHandle. Pega o caminho da pasta temporária (10) com GetTempPathA e junta com a string "\payload.exe" (strcat) para criar o arquivo com esse nome na pasta temp com a função (11) CreateFileA e em seguida escrever o conteúdo (12) com WriteFile; 

O que foi modificado no sistema: O arquivo payload.exe pode ser criado dentro da pasta temporária do usuário (caso o sistema satisfaça as verificações do exe);

Vale lembrar que todas as strings utilizadas acima estão ofuscadas no código, para decifrá-las é necessário fazer um XOR dos bytes com a chave [0x01 0x02, 0x03, 0x04, 0x00]. Código python: https://www.mentebinaria.com.br/forums/topic/469-analyseme-nível-03/?do=findComment&comment=1845

Abs,
Rafael

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...