Jump to content

Leandro Fróes

Mente Binária
  • Posts

    183
  • Joined

  • Last visited

  • Country

    Brazil

Recent Profile Visitors

5,986 profile views

Leandro Fróes's Achievements

17

Reputation

  1. Depois de muita espera a NSA anunciou oficialmente a inclusão de um debugger no Guidra na sua versão 10.0. Depois de muita discussão sobre esta possibilidade o time de desenvolvimento do framework lançou uma release beta da versão 10.0 ontem! Neste momento o debugger suporta analisar aplicações em userland e consegue debuggar tanto binários Windows quanto Linux (utilizando o gdb neste caso). Para quem quer começar logo de cara o Guidra disponibiliza um tutorial de início rápido em Help -> Guidra Functionality -> Debugger -> Getting Started: Existem várias formas de iniciar o debugger, desde clicando com o Botão direito -> Open With -> Debugger até direto da sua Project Window do Guidra clicando no ícone de "bug" debaixo de "Tool Chest", como mostrado abaixo: Uma vez que a ferramenta é inicializada você deve importar o arquivo a ser depurado para a ferramenta. Uma das formas de fazer isto é simplesmente o arrastando da Project Window. Uma fez carregado podemos ver a cara do mais novo debugger do Guidra: Algumas das funcionalidades são: debugging remoto utilizando GDB e windbg, rodar o debugger direto no programa do qual você está analizando estaticamente e tracing de memória. Além disso ele também conta com as funcionalidades básicas de um debugger como utilização de breakpoints, listagem de regiões de memória mapeadas, estados dos registradores e uma interface de linha de comando própria. Todas as funcionalidades listadas aqui possuem sua própria View, isto é, sua própria janela dentro da ferramenta: Vale lembrar que esta release está em sua versão beta e tem como objetivo principal coletar o feedback da comunidade. Caso queira dar uma testada e/ou dar um feedback pra galera do Guidra basta baixar a release clicando no botão abaixo 😉.
  2. E lá vai mais uma do horsicq! No dia de hoje horsicq, criador de inúmeras ferramentas de análise incluindo o incrível Detect It Easy (DIE), lançou a primeira release do seu novo projeto, um analisador de arquivos MachO chamado XMachOViewer. Para quem já utilizou o DIE vai notar uma grande semelhança no design e usabilidade. Já aquelas que não estão familiarizados com as ferramentas do horsicq (deveriam, sério!) fiquem tranquilos, todas são bem simples e intuitívas de se usar. Ao contrário do DIE o XMachOViewer tem foco exclusivo em binários MachO. Em relação à funcionalidades a ferramenta consegue fazer tudo que o Detect It Easy faz e ainda mais, tudo isso com uma console exclusiva e mais detalhada: Dentre as funcionalidades novas temos a busca por padrões de criptografia (Base64, RSA, etc), muito útil para análise de malware, por exemplo: Name demangling (precisamos dizer o quanto isso é útil? 😄) : E também uma funcionalidade de hashing (por que não, né?): Além disso, devido à natureza interativa da ferramenta ela permite você editar o arquivo diretamente, bastando apenas selecionar o campo que deseja e começar a digitar: A versão 0.01 está pronta para download e com certeza vale uma conferida:
  3. Nova release da ferramenta frida chega com diversas correções e facilidades em relação à suas dependências e a forma com que estas são manipuladas. Para quem não sabe do que se trata frida é um toolkit de engenharia reversa utilizado para instrumentar sua análise através de scripts, hookings, tracing e muito mais! Além disso o toolkit é portável e suportado em ambientes Windows, macOS, GNU/Linux, iOS, Android, e QNX. As mudanças mais importantes desta release giram em torno das dependências da ferramenta que agora estão todas atualizadas e em sua melhor versão. Com tais melhorias agora está muito mais fácil para quem quiser buildar o frida em suas versões anteriores direto do código fonte, o que aparentemente era um problema anteriormente. Além disso agora ficou muito mais fácil analisar problemas dentro das próprias dependências do frida. Imagine que uma função específica (Thread.backtrace(), por exemplo) está causando algum problema e você gostaria de depurá-la. Tendo em mente que ela pertence à biblioteca libunwind você poderia buildar o toolkit da seguinte forma: *Neste caso estamos buidando para nosso sistema local. Agora imagine que você já buidou o frida e quer apenas mexer na biblioteca em questão: A partir disto você pode continuar fazendo modificações em "deps/libunwind" (no nosso exemplo no caso) e executar uma compilação incremental executando novamente o comando para compilar: Fora toda essa nova granularidade foram aplicadas correções no suporte para iOS 14.2, suporte para size_t e ssize_t em funções nativas, suporte à inprocess injection em ambientes Windows e muito mais. Para fazer o download, é só clicar no botão abaixo, que te leva direto para a página de releases do projeto, onde você pode escolher qual versão quer baixar! 😉
  4. ImHex é um editor hexadecimal gráfico multiplataforma e seu principal objetivo é ajudar na engenharia reversa e programação. O editor conta com inúmeras funcionalidades como por exemplo busca por strings, cópia de bytes em diversos formatos (C string, Python, etc), disassembling, hashing e muito mais. Além disso, o editor possibilita a criação das suas próprias templates para serem mapeadas no editor hexa (baseado em um formato de arquivo, por exemplo) através de uma linguagem de patterns: Dentre as novas funcionalidades adicionadas na nova release estão alguns itens da linguagem de script como por exemplo "alignTo", que alinha um valor com o que você determinar e "nextAfter", que pega o endereço logo depois de uma variável: Esta release também adicionou uma funcionalidade chamada Data Processor, que faz a ferramenta pré-processar os dados do arquivo sendo analisado de forma gráfica antes da análise do visualizador hexadecimal, permitindo a definição de valores e operações em regiões/bytes específicos: Lembrando que o ImHex possui suporte à plugins e não só o Data Processing, mas também outras funcionalidades podem ser estendidas do jeito que você quiser! Também foram adicionadas algumas outras funcionalidades como cores e utilização do teclado, assim como um conversor de base e habilidade de setar um endereço base no editor hexa: A release foi bem grande e com certeza merece uma olhada. Para fazer o download, é só clicar no botão abaixo, que te leva direto para a página de releases do projeto, onde você pode escolher qual versão quer baixar! 😉
  5. A mais nova release do capa, framework de código aberto com foco em analisar as funcionalidades maliciosas de arquivos/shellcodes, veio com uma quantidade gigantesca de novas regras, melhorias e correções. Além de 50 novas regras também foi adicionado suporte à SMDA utilizando python3, classificação e mapeamento de TTPs (Tactics, Techniques and Procedures) em algumas das regras, scripts de exemplo utilizando capa como uma biblioteca em python dentre outras funcionalidades: Dentre as novas regras adicionadas estão criação tarefas agendadas via linha de comando, alocação de memória com permissão de leitura e escrita, captura de IP público, patching da linha de comando do processo e muito mais! Obviamente não podemos considerar a análise como verdade sempre, tendo em vista que existem funções que podem ser utilizadas por softwares legítimos, mas ainda assim a ferramenta ajuda e muito tendo em vista que o processo é todo automático e estático! Lembrando que por enquanto a ferramenta suporta apenas análise de arquivos no formato PE e a limitação de sua funcionalidade é baseada nas regras das quais o capa utiliza. Se você vive em outro planeta e não testou esta ferramenta ainda essa é a sua chance! Se você já testou/usa no seu dia a dia vale a pena atualizar e continuar utilizando?! 😄
  6. A FireEye lançou nesta sexta-feira a release da versão 1.70 da flare-floss (FireEye Labs Obfuscated String Solver), ferramenta focada em identificar e desofuscar strings escondidas dentro de um arquivo, utilizando desde reconhecimento baseado em heurística até brute-forcing e emulação. Até o momento a ferramenta suporta apenas análise de binários Windows (PE). A ideia da ferramenta veio do fato de que os malwares atuais utilizam diversas técnicas diferentes para proteger strings importantes de um malware, como por exemplo URL, IP, configuração, paths, etc: Dentre os novos itens desta release está a adição de um um parâmetro para saída em JSON e correções em funcionalidades como suporte para IDA 7.4+ e no algoritmo de reconhecimento de strings. A funcionalidade de output em JSON é particularmente interessante no ponto de vista de automação, onde poderíamos usar todas as strings desofuscadas pela ferramenta como input para um script do qual se conecta com outra ferramenta, por exemplo: A ferramenta possui várias outras funcionalidades como por exemplo desofuscar strings em shellcodes e funções específicas do binário e também criação de scripts para o radare e IDA à fim de serem utilizados em seus arquivos ".r2" e ".idb":
  7. A Fireeye liberou faz pouco tempo uma ferramenta extremamente interessante de instrumentação e emulação de arquivos. Conhecida como speakeasy esta ferramenta emula arquivos dinamicamente tanto em kernel-land quanto em user-land. Sua última release adicionou novas chamadas de API em sua engine de emulação como por exemplo GetLogicalDrives e WNetGetConnection, assim como melhorias na emulação de shellcodes. Ao contrário de uma sandbox, que precisa virtualizar todo o sistema operacional, esta ferramenta emula apenas componentes específicos do Windows (chamadas de API, objetos, threads, registros, etc) a fim de entender o comportamento do arquivo executado e tentar identificar as ação relevante executadas: Além de arquivos completos podemos emular também um ambiente que será responsável pela execução de shellcodes: A ferramenta é feita em Python3 e pode ser executada tanto como uma ferramenta de linha de comando como também uma biblioteca, abrindo espaço para instrumentação/automação. Além disso, a ferramenta também pode se executada via container utilizando docker e também em qualquer ambiente em cloud, tendo em vista que não precisamos configura-la, apenas instalar e rodar. Pelo fato do sistema operacional não ser emulado por completo nem todas as chamadas de API serão suportados no ponto de vista de emulação. Com esta "limitação" em mente os desenvolvedores criaram uma forma bem prática de adicionar os hooks que estão faltando (não sendo emulados), permitindo que qualquer pessoa que tenha interesse possa mitigar este problema. Para mais informações vale dar uma olhada no REAME do projeto 😉. E para aqueles que nos acompanharam semana passada quando falamos do IntelOwl vale lembrar que ele também utiliza o speakeasy!
  8. No dia 19 de Janeiro, o usuário cha5126568 abriu uma issue no github do famoso x64dbg e relatou que a última versão do packer Themida não estava sendo detectada pelo debugger, podendo resultar na execução com sucesso de um software malicioso, por exemplo. Além de relatar o ocorrido o usuário também deixou sua análise e possíveis resoluções para se evitar o bypass: Para quem não está familiarizado o ScyllaHide é um plugin do x64dbg de código aberto. Este plugin tem como objetivo impedir que técnicas de Anti-Debugging, frequentemente utilizadas não só por softwares maliciosos mas também por programas legítimos como Anti-Cheat de jogos, sejam executadas corretamente. O problema relatado foi o fato da última versão do Themida estar utilizando as funções GetForegroundWindow/NtUserGetForegroundWindow e depois GetWindowText/InternalGetWindowText à fim de descobrir o nome da janela do sistema sendo utilizada no momento da execução (neste caso, a janela do debugger em si), fazendo com que o packer identificasse o debugger e parasse de executar. Após alguns dias de discussão o usuário Mattiwatti, um dos principais desenvolvedores do plugin ScyllaHide, trouxe uma resolução para o problema relatado na issue. A solução encontrada foi fazer um hooking da função NtUserGetForegroundWindow, impedindo que a checagem do packer seja feita. Por mais que a correção tenha foco em Windows 10 ela se aplica muito bem à sistemas mais antigos, sem falar que o hook só funciona caso a janela retornada pela chamada da função retorne a janela de um debugger, garantindo maior precisão na execução. Para quem estiver interessado no código em si vale dar uma olhada no commit referente à esta nova release.
  9. Para aqueles que procuram uma forma rápida e simples de se montar uma infraestrutura de análise e pesquisa esta notícia é pra você! O IntelOwl é uma plataforma de OSINT (Open-Source Intelligence) e Threat Intelligence de código aberto, com sua última release publicada nesta manhã corrigindo bugs e adicionando novos analisadores ao seu arsenal. A ideia do framework é utilizar seus analisadores e em uma única chamada de API coletar o máximo de informações sobre um arquivo/IP/URL/domínio determinado pelo usuário. Estes analisadores vão desde serviços externos como VirusTotal e Shodan até analisadores estáticos da própria ferramenta e sandboxes customizadas por você mesmo! Dashboard principal do IntelOwl Página de scan de arquivos Com uma instalação bem simples e utilizando docker, o IntelOwl se mostra não só portável, mas também flexível, permitindo integração com serviços como Cuckoo, Yara e MISP. A tabela a seguir tenta mostrar de forma simples, porém objetiva algumas das principais vantagens e desvantagens sobre o IntelOwn: Lembrando que esta tabela está resumida e independente dela com certeza vale dar uma testada na ferramenta 😉 .
  10. Fala Edvan, Que louco você está migrando depois de tanto tempo! Sendo bem sincero eu não acho que tenha uma receita de bolo e mesmo que tivesse, seria diferente de pessoa para pessoa. Não só Análise de Malware, mas toda a área de SI no geral abrange basicamente tudo da computação, literalmente tudo: arquitetura, SO, programação, redes, web, etc. Ou seja, a migração de qualquer um desses lugares para área de SI é muito interessante tendo em vista que você já entra com um background de algo que será muito útil no seu dia a dia/processo de aprendizagem. Sua área por exemplo é necessária em TODAS as áreas de SI, incluindo Análise de Malware e com certeza vai ti ajudar muito. Eu particularmente gosto de encarar SI como a forma que vemos as coisas porque no fim do dia, não importa a área, sempre vamos ter que aprender coisas novas. Com SI não é diferente, a questão é que a forma com que usamos o que aprendemos (redes, por exemplo) é aplicada de uma forma "diferente" da normal, com um foco diferente, etc. Resumindo, tente sempre solidificar suas bases que o caminho pra ter essa "mentalidade de SI" vai ser mais natural (não automático obviamente, mas um passo de cada vez!). Falando de uma pós, certificação, etc pra mim pelo menos não faz diferença alguma, mas, se fizer pra você, vai fundo, o importante é você aprender mais e mais e se sentir bem com isso ?. Eu indico a leitura desse artigo que o Fernando escreveu à muito tempo atrás. Lá tem várias referências legais pra caramba que você pode usar nos seus estudos. Além disso, mas ai parece que você já tá indo com tudo, eu recomendo com certeza todos os vídeos do Papo Binário, principalmente os Cursos começando pelo de C e o CERO. Fora o artigo e os cursos eu também indico o livro de Engenharia Reversa que o Fernando escreveu pois ele é bem focado pra quem está começando e é o único sobre o tema em português. Por último vou deixar algumas dicas que funcionam muito bem pra mim e talvez ti ajudem também: Tente sempre aplicar tudo o que você estuda: eu particularmente gosto de programar e uso isso pra aprender muita coisa (C me ajuda muito); Participe de eventos de segurança: lá você aprende, conhece gente nova, troca experiências, enfim, é bom demais; Procure se antenar na área: falando especificamente de Análise de Malware procure saber os novos malwares que estão surgindo, novas campanhas, leia análises e relatórios de ataques. Pode parecer complicado no início mas isso vai ti ajudar muito no seu processo de aprendizagem; Ajude o próximo: a melhor forma de se aprender algo é ensinando; Nunca assuma que você sabe tudo: só uma frase de efeito mesmo hehe mas nunca se esqueça disso, isto é, sempre esteja aberto pra aprender mais e caso você tenha dúvida se aquilo é verdade ou não, comprove você mesmo ? Espero ter ajudado de alguma forma. Abs.
  11. Se você é da área de Segurança da Informação ou simplesmente tem interesse pelo assunto já deve ter notado que todo dia temos notícias de novos malwares surgindo, sejam eles malwares completamente novos ou variantes de um malware já conhecido. Com isto em mente, faz algum tempo que as empresas de segurança, inteligência e até mesmo pesquisadores independentes passaram a buscar métodos de automatizar não só a análise destes malwares, mas também a administração e armazenamento do arquivo em si, suas características e relacionamentos com outros arquivos demais entidades (domínios, campanhas, endereços IP, etc). Obviamente a análise automatizada não substitui a análise humana, mas já é uma ajuda e tanto considerando o número de malwares surgindo diariamente. Para cada uma destas necessidades descritas anteriormente existe uma ou mais ferramentas/plataformas que podem ser utilizadas para cumprir estes objetivos. Dentre elas estão plataformas de sandboxing como Hybrid-Analysis e AnyRun, ferramentas de análise estática de arquivos como o DIE (Detect It Easy), pev, yara, capa, e também repositórios de malware como o VirusShare e o Malware Bazaar. Não podemos negar que todas estas ferramentas/plataformas ajudam e muito no nosso dia a dia, mas ainda assim não conseguiríamos organizar nossas informações e centralizá-las em um único lugar de forma automática, tendo em vista que as as soluções descritas acima são isoladas e não conectam umas com as outras de forma nativa. A plataforma que chegou mais próximo de atingir as quatro exigências (isto é: análise automatizada, administração, armazenamento, relacionamento com demais entidades) foi uma plataforma chamada Virus Total, também conhecido como VT, atualmente administrado pelo Google. Virus Total O Virus Total trouxe para a comunidade uma forma simples e rápida de análise de IoCs (Indicator of Compromise) e também uma API bem simples de se utilizar para fins de automação. Dentre as diversas funcionalidades da plataforma estão inclusas análise estática, checagem de assinatura utilizando uma lista gigantesca de Anti-Virus, descrição das características gerais do IoC e comentários da comunidade. Além disso, ele também possui uma versão paga (bem cara por sinal) onde você pode fazer hunting de malwares utilizando regras de Yara, download de arquivos, buscas baseadas em histórico, visualização gráfica e uma API bem mais robusta e permissiva. É importante deixar claro que o termo IoC não se refere apenas à arquivos e seus hash, mas também à URL, domínios e IP. Ou seja, o VT realmente acaba se tornando uma opção super viável para começar qualquer tipo de investigação. O cenário atual de Segurança da Informação Com o passar do tempo não só a comunidade, mas também o mercado de Segurança da Informação no geral passou a notar que a única forma de se posicionar contra os ataques atuais é através de contribuição. Pelo mesmo motivo que gerou a necessidade de se criar formas automatizadas de análise, a contribuição se mostra cada dia mais que necessária pois ela não impõe limites, muito pelo contrário, ela dá liberdade o suficiente para você contribuir da forma que quiser. Um ótimo exemplo que mostra o exercício da contribuição e o quão valioso isto pode ser é o próprio Linux, que desde sua primeira versão foi liberado para receber contribuições e hoje é um dos maiores projetos existentes na área de tecnologia, com milhares de contribuidores ao redor do mundo. Com isto em mente, podemos notar uma desvantagem no VT: o espaço para contribuição é limitado. Desafios Como já comentado anteriormente, as principais funcionalidades são suportadas apenas na versão paga e infelizmente não são todos que podem pagar pelo valor do serviço. Um dos principais motivos dessa limitação é fato do código não ser aberto, isto é, estamos presos às funcionalidades que o time do VT disponibiliza. Se o código fosse disponível para a comunidade, resolveríamos tanto o problema monetário quanto a limitação de funcionalidades disponíveis. Uma outra porta que seria aberta no cenário descrito acima é a seguinte: Imagine que você, sua empresa, seu time ou um grupo de amigos estão com um projeto em mãos que envolve análise, classificação, categorização ou qualquer tipo de manipulação de malware. Com o código em mãos você teria liberdade de fazer a instalação da plataforma localmente ou em um servidor do qual você controla, limitando o acesso à quem você quiser e como quiser. A comunidade Tendo estes desafios em mente, a comunidade começou a criar alternativas para resolver alguns problemas encontrados no cenário atual. A ideia do artigo não é de forma alguma dizer que uma plataforma é melhor que outra ou que o Virus Total está errado em trabalhar no modelo que trabalha, muito pelo contrário, o objetivo aqui é mostrar as várias formas que temos de se chegar no mesmo objetivo. Uns mais flexíveis, outros com mais conteúdo disponível, mas todos conseguem te ajudar a chegar no mesmo lugar: Saferwall: Este é o projeto mais maduro que temos atualmente quando o assunto é análise automatizada e contribuição da comunidade. Robusto e flexível para ser instalado em diversos ambientes, o Saferwall consegue entregar informações estáticas de arquivos, detecções baseadas em assinaturas de alguns antivírus, identificações de packers e download dos arquivos submetidos anteriormente. Além disso, o Saferwall possui uma plataforma aberta e que aceita colaboração, além de disponibilizar o código para você instalar onde e como bem entender. Dentre as formas de instalação estão inclusas o minikube (indicado para ambientes de testes), em nuvem utilizando AWS e On-Premise. Freki: O projeto Freki foi criado por uma única pessoa, mas não deixa a desejar quando o assunto é funcionalidade e fácil instalação. Com possibilidade de ser instalado utilizando Docker, este projeto possui não só análise estática dos arquivos PE submetidos, mas também disponibiliza sua própria API e puxa informações do VT para garantir que não falte nada. Aleph: focando bastante na parte de inteligência, o projeto Aleph entrega para você não só informações estáticas dos arquivos submetidos, mas também análise dinâmica utilizando sandbox, visualização gráfica dos resultados e uma saída em JSON formatada para ser utilizada em backends como Elasticsearch, por exemplo. Além disso, o Aleph também consegue mapear as técnicas utilizadas pelo malware utilizando o MITRE ATT&CK Framework. Eu realmente aconselho você dar uma olhada na palestra da MBConf v3 sobre o Aleph para saber mais sobre o projeto. A tabela à seguir foi criada para facilitar a visualização das funcionalidades descritas acima. É importante deixar claro que a versão do VT utilizada para a criação da tabela é a gratuita: VirusTotal Saferwall Freki Aleph Análise Estática ✔️ ✔️ ✔️ ✔️ Análise Dinâmica X ✔️ X ✔️ Suporte à múltiplos SO ✔️ ✔️ X ✔️ Análise de IoC de rede ✔️ X X X Código Aberto X ✔️ ✔️ ✔️ Download de arquivos X ✔️ ✔️ ✔️ Instalação local X ✔️ ✔️ ✔️ Controle total do backend X ✔️ ✔️ ✔️ API ✔️ ✔️ ✔️ X Como podemos ver, todos estes projetos são de código aberto, o que permite a seus usuários livre contribuição. Caso você tenha interesse em contribuir para alguns desses projetos, aqui vai uma dica: nenhum deles possui ainda análise de URL/IP/domínio de forma isolada, isto é, independente do arquivo. Tenho certeza que uma contribuição deste tipo seria bem vinda. ? Conclusão Ajudando estes projetos nós não só melhoramos a ferramenta/plataforma em si, mas ajudamos todos que a utilizam e também construímos um sistema livre e aberto de análise, inteligência e investigação. Se você é da área ou simplesmente curte contribuir, não deixe de dar uma olhada em cada um destes projetos e, se possível, contribuir com eles. Lembrando que quando falamos de contribuição, não há limites. Pode ser um commit, uma ideia, ajuda monetária ou um simples OBRIGADO aos desenvolvedores e contribuidores por disponibilizarem projetos tão úteis para a comunidade.
  12. @Quer Vinho Opa, na verdade você esqueceu de colocar o \n (isto é, o caracter que representa uma nova linha) dentro das aspas para que o printf interprete o resultado propriamente. Por padrão a printf entende o que você passar como primeiro parâmetro pra função como um const char *, então neste caso você não precisa especificar %s como o "formatador": printf("Mente Binaria eh foda! =)\n");
  13. Opa, poderia ser mais específico? O que quer saber exatamente? Dependendo do que você quer saber não tem necessidade de ler toda uma documentação.
  14. Opa, Eu acredito que antes de usar qualquer ferramenta é importante entender o que ela está fazendo e como ela faz. Se você está tendo dificuldade em entender o que está rolando quer dizer que tem algo faltando, algum entendimento sobre algo. Exatamente como você falou, você precisa entender melhor o que está rolando "por trás dos panos". É super normal estarmos mexendo em algo e não entendermos direito aquilo, e é justamente por isso que temos que focar na base da computação e no seu caso, a base de redes, coisa que nenhum "curso de hacking" vai ti ensinar ?. Acho legal você dar uma estudada na base de redes: o que é um IP, o que é uma porta, por que eles são assim, o que é um socket e por ai vai. Com o tempo você vai ver que ferramentas são só ferramentas, que ajudam a gente a fazer um trabalho, tornam ele mais prático, mas pra saber exatamente o que está acontecendo, pra utilizar a ferramenta direito, só entendendo de fato os conceitos que a envolvem. Queria ti indicar esse arquivo aqui que temos no portal sobre como se tornar um bom profissional de segurança, isto é, como começar em tudo! Espero ter ajudado em algo. Abs.
  15. Faz algum tempo que ando botando mais a mão na massa na parte prática da análise de malware e nos conceitos que a envolvem. Este fato somado com minha paixão por tomar notas nos meus estudos acaba resultando na criação de alguns relatórios. Com isto em mente, decidi colocar aqui a análise do último sample no qual trabalhei, de um ransomware chamado Nephilin. Overview O Nephilin é uma variante do Nefilim, um Ransomware que acabou ficando bem conhecido no mês de fevereiro/março devido ao fato de ser uma variante do conhecido Nemty, que costumava trabalhar com operações de RaaS (Ransomware as a Service - um modelo de negócio utilizado por criminosos que facilita muito a distribuição de Ransomwares. Basicamente o criador do malware recruta pessoas para usarem o Ransomware e recebe uma parte de seus lucros, facilitando assim a distribuição e a entrada de pessoas não experientes no crime). Por mais que as formas de operação sejam diferentes, há similaridades de código entre essas três famílias de malware. Análise Estática O sample analisado foi compilado para x86 e não possui nenhuma técnica que possa dificultar nossa análise como por exemplo packers/protectors e o uso de ASLR. No entanto, este binário é assinado com um certificado válido: Olhando os imports podemos notar que a Import Directory Table possui apenas uma entrada, a da kernel32.dll, levantando a suspeita da utilização de runtime linking, ou seja, o loader não resolve o endereço das funções em tempo de carregamento, pois eles são resolvidos em tempo de execução: Podemos suspeitar ainda mais pelo fato do nome algumas DLLs estarem na lista de strings do binário, assim como o nome de algumas funções que não são exportadas pela kernel32.dll: Não vou me preocupar muito com esta parte estática da análise, tendo em vista que a ideia deste artigo é cair de cabeça em cada funcionalidade do malware, isto é, executá-lo e ir analisando seu comportamento. Análise Dinâmica A primeira função que o malware chama é a que vai criar todo o contexto de criptografia para gerar uma chave que será a chave utilizada para descriptografar a Ransom Note: Dentro desta função existem várias funções que permitem trabalhar com criptografia no Windows. A primeira função criptográfica chamada é a CryptAcquireContext, responsável por criar um handle para um key container dentro de um Cryptographic Service Provider (CSP). Após pegar o handle, o tamanho de uma string é calculado para posteriormente se criar e retornar um Hash Object dentro do CSP criado anteriormente. Esta string tem 66 bytes de tamanho (0x42 em hexa) e é uma string lotada de "a". A função CryptCreateHash cria o Hash Object especificando o tipo como SHA1 e, logo depois, a função CryptHashData tira o hash do que está dentro de um buffer de tamanho 66 bytes sendo passado como parâmetro: Por fim, o SHA1 gerado é derivado, para a geração de uma chave RC4. Como podemos ver quase todas as funções estão sendo importadas dinamicamente. ? O que acontece após a função que gera esta chave RC4 é a criação de um Mutex com o nome "sofos delaet sosos": Em seguida, uma string em base64 aparece e é decodada com a função CryptStringToBinary, resultando em uma chave pública RSA: "BgIAAACkAABSU0ExAAgAAAEAAQDNFw18bUF1x32DZaZt4gnQtAnv5XH60d9B6UgIbVfRdHPeyEljZLKlGBKFPTsh+8xsDHe/9vynuOlnuPt91grReMAwcTDVkxBh/PDkf3Jq0bnFgZAWbgMvGX6lApXTDcTArf4US63VI3z8YPyDNJwEvBEWI13ywob8ECLsrD/C6BPkYG0mBU1ccixzOgkgad0iDvwS/C8iyW1Mi0PCoBa+3TCTVwt0Zpy/HceV5U7SevG7RRN5HrErv54Ihg6kTPPhdxkYdO+CUND19aLqh8MAVLRuP5hR6b6r7cjBNAW2+USaaMyT/llNXdPdySbatLlH6Mau4z1eqzYc7hMB2f+6" Há depois uma tentativa de pegar um handle para um CSP onde o key container tem o nome "rsa session" e, sem sucesso, o binário cria um novo chamado "skr skr skr": Agora a chave pública decodada anteriormente será importada para o contexto "skr skr skr": Ações padrão da maioria dos ransomwares incluem desabilitar a checagem de erros durante o boot, desabilitar o modo de recuperação, deletar backups, etc. O Nephlin faz isso através de uma chamada à função ShellExecuteA() passando uma linha com o cmd.exe como parâmetro: "C:\\asdfgsdgasd\\..\\Windows\\asdgagsahsfahfhasahfsd\\..\\System32\\cmd.exe" "/c bcdedit /set {default} bootstatuspolicy ignoreallfailures & bcdedit /set {default} recoveryenabled no & wbadmin delete catalog -quiet & wmic shadowcopy delete" Aqui foi utilizada uma abordagem um tanto curiosa, tendo em vista que o malware considera diretórios que provavelmente não existirão no sistema de arquivos da vítima ("asdgagsahsfahfhasahfsd", por exemplo) e sobe um nível no filesystem utilizando ".." para acessar de fato o que importa, ou seja, o caminho real seria simplesmente "C:\Windows\System32\cmd.exe" ? Neste momento acontece uma checagem em relação à como o malware foi executado na linha de comando. Se foi passado algum parâmetro, ele checa pra ver se é um arquivo ou diretório. Se for um arquivo, ele chama direto a função que encripta. Caso seja um diretório, ele chama a função que checa uma lista de exclusão dos tipos de arquivos que ele não quer encriptar e esta função chama então a função que encripta. É interessante notar que com essas checagens o ransomware pode ser usado em diversos cenários e não simplesmente para encriptar o sistema completamente. Ex: para manualmente testar se ele está funcionando (antes da possível invasão), ser executado manualmente após a invasão visando diretórios/arquivos específicos, etc: Se nenhum parâmetro for passado via linha de comando, o binário começa a mapear os drives que estão no sistema e pegar seus tipos, buscando especificamente por drives fixos, removíveis (pen drives, etc) e mapeamentos de rede: Após pegar o drive o seu nome é concatenado com a string "NEPHILIN-DECRYPT.txt", à fim de criar a Ransom Note na raiz do Drive em questão: Após a chamada à CreateFile, podemos ver a Ransom Note sendo criada, mas vazia por enquanto: Antes do conteúdo ser de fato escrito no arquivo, ele precisa ser decodado, tendo em vista que é uma string em base64 (sim, outra string em base64): Abaixo está o buffer que contém o conteúdo da Ransom Note em base64: Após decodar o base64 o buffer aparenta estar encriptado, e de fato está: A função CryptDecrypt utiliza a chave RC4 gerada anteriormente para decriptar o conteúdo do buffer em questão. Podemos ver o conteúdo em clear text após a execução da função: Por fim podemos ver a função WriteFile, que irá escrever o conteúdo no arquivo "NEPHILIN-DECRYPT.txt" criado anteriormente: Agora que a Ransom Note foi criada, o processo de criptografia começa. O meio utilizado é através da criação de outra thread, isto é, para cada drive encontrado, uma nova thread é criada. A função CreateThread recebe como parâmetro para indicar seu início o endereço de uma função, que por sua vez chama a função que checa a lista de exclusão e depois começa a criptografia. Além disso, o nome do drive escolhido no momento é passado como parâmetro para esta função. Esta lista de exclusão é basicamente um lista que contém nomes de arquivos, diretórios e extensões das quais o malware não irá encriptar. Para cada arquivo encontrado o malware irá comparar com as especificações desta lista e, caso não bata, a função de criptografia será chamada: Criptografia A criptografia pode começar de 3 formas diferentes, como mencionado anteriormente: passando um arquivo como parâmetro pela linha de comando, passando um diretório ou mapeando os drives e criando threads. Um trecho da função que faz as devidas checagens pode ser observada abaixo: Se o arquivo checado não estiver na lista de exclusão, a função de criptografia é chamada: O processo de criptografia se inicia com a abertura do arquivo em questão e a obtenção do seu tamanho. Depois disso, há duas chamadas para a função SystemFunction036 para gerar números aleatórios. Basicamente esta função é um alias para a função RtlGenRandom, que recebe como parâmetro um buffer e o tamanho do número aleatório que você quer gerar. O tamanho escolhido são 16 bytes (0x10): Tendo 2 buffers de 10 bytes de tamanho cada, com os devidos números aleatórios gerados anteriormente, há duas chamadas à CryptEncrypt, uma para cada buffer. Aqui a chave pública RSA é utilizada para encriptar o buffer em questão, resultando em outros dois buffers de 256 bytes cada. O conjunto de funções a seguir faz a mesma operação, mas apontando para lugares diferentes. A função SetFilePointerEx é utilizada para apontar para o fim do arquivo (baseando-se no tamanho obtido anteriormente) e depois a função WriteFile é utilizada para escrever os 256 bytes encriptados lá. A próxima chamada à SetFilePointerEx agora aponta para o fim do arquivo + 256 bytes e então escreve o segundo buffer encriptado onde o ponteiro está apontando. Neste momento as checagens de tamanho de arquivo começam, assim como as chamadas de função e loops que envolvem a criptografia. A primeira checagem feita é se o arquivo é maior que 64MB e, caso seja, as funções que criptografam o arquivo começam a ser chamadas de 125KB em 125KB. Caso o arquivo seja menor há uma outra checagem para ver se ele é menor que 1.2MB e caso ele não seja as funções de criptografia rodam em cima de 600KB apenas e finalizam. Caso o arquivo seja menor que 1.2MB ele é encriptado "de uma vez" e depois finaliza. Para cada arquivo é gerada uma chave randômica com a função SystemFunction036 e depois esta é encriptada com a chave RSA pública. Esta abordagem dificulta bastante a criação de um decryptor, tendo em vista que a chave será sempre aleatória. Por outro lado, se tivemos a chave RSA privada em mãos a aleatoriedade não teria efeito nenhum pois para cada arquivo teríamos a chave responsável pela sua criptografia. Por fim a extensão ".NEPHILIN" é adicionada ao arquivo aberto: Uma coisa importante a se notar é que se a criptografia foi executada para um arquivo ou diretório específico tanto a Ransom Note quanto o wallpaper do Ransomware não são criados. Podemos observar que as funções de mapeamento de drives (que contém a criação da Ransom Note) e criação do papel de parede são ignoradas devido ao salto incondicional JMP: E por fim... Considerando ainda que não foram especificados arquivos e diretórios, a função responsável por criar a imagem do papel de parede é chamada. Há várias funções aqui e estas utilizam funções gráficas do Windows para editar a imagem em questão: Uma das funções chamadas nesta função responsável por criar a imagem é justamente a função de decoda o base64 da Ransom Note, pois o que é escrito no papel de parede é a mesma coisa da Ransom Note. Após várias funções gráficas para preparar a imagem o arquivo é finalmente criado em %TEMP%, com nome god.jpg e seu conteúdo é escrito no arquivo: Após configurar a imagem como papel de parede, o malware chama sua última função, que é responsável por fechar todos os handles e contextos de criptografia ainda pendentes: Depois disso, o processo simplesmente sai retornando 0. Lista de exclusão: NEPHILIN-DECRYPT.txt $RECYCLE.BIN NTDETECT.COM MSDOS.SYS IO.SYS boot.ini AUTOEXEC.BAT ntuser.dat desktop.ini CONFIG.SYS BOOTSECT.BAK program files program files (x86) windows ntldr RECYCLER bootmgr programdata appdata .dll .NEPHILIM .exe .log .cab .cmd .com .cpl .ini .url .ttf .mp3 .pif .mp4 .msi .lnk Espero que o estudo desta análise seja proveitoso assim como foi para mim e qualquer dúvida/feedback estou à disposição! Abraços!
×
×
  • Create New...