Com a criação de programas complexos concebidos para ser executado no endpoint, podemos automatizar certas técnicas de engenharia reversa a fim de detectar malware. Isto é onde as coisas começam a ficar interessantes, e também um pouco prolixo para explicar.
Existem muitos tipos de arquivo lá fora, que podem conter códigos maliciosos. Aqui estão alguns exemplos.
A fim de trabalhar com todos esses diferentes formatos de arquivo, analisadores são frequentemente necessários. Analisadores de identificar e extrair estruturas incorporados úteis a partir dos respectivos recipientes. Exemplos de estruturas incorporadas incluem coisas como recursos (sons, gráficos, vídeos e dados), cabeçalhos PE, seções PE, assinaturas Authenticode, manifestos Android e código compilado.
Em termos simples, um analisador divide um arquivo de entrada em suas partes constituintes, e fornece-los como uma estrutura de dados facilmente acessível a Lógica de Detecção. Um grande número de formatos de arquivo são complexos e contêm dezenas de casos de canto. Ao analisar um arquivo e, em seguida, fornecendo uma estrutura de dados para a Lógica de Detecção, evitamos ter que replicar código de análise complexa, uma e outra. Nós também podemos ter certeza de que o código é robusto e com bom desempenho.
Arquivos (do tipo variável) são frequentemente incorporado dentro de arquivos maliciosos. Por exemplo, um PDF malicioso pode conter incorporado código flash, código executável, shellcode, ou scripts. Muitas vezes, esses arquivos incorporados são criptografados ou ofuscado. Assim, quando o arquivo malicioso é aberto ou executado, ele decifra objetos contidos dentro de si, escreve-os para a memória ou disco, e então executa-los. Os próprios executáveis maliciosos costumam usar packers off-the-shelf ou protetores, como UPX ou ASPack, para ofuscar seu código e estruturas. Na maioria dos casos, vários empacotadores são aplicados em cima uns dos outros, e, em muitos casos, a ofuscação costume, escrito pelo autor software malicioso, também é utilizado. Chegar ao código real dentro de um executável malicioso é semelhante ao descascar as camadas de uma cebola.
O problema com arquivos compactados é que todos eles parecem bastante similares. E alguns executáveis não maliciosos também utilizam packers. A fim de identificar corretamente maldade, muitas vezes você tem que remover essas camadas.
Removendo packers off-the-shelf é bastante simples - reconhecendo protetores padrão é simples, como são os métodos de decodificação-los. Desembalar ofuscação personalizado é mais complicado. Uma maneira de desvendar ofuscação costume é extrair o código de decifração e blocos de dados a partir do próprio malware, executar a coisa toda em uma caixa de areia, e permitir próprio código da malwares para descompactar a imagem para você. Outro truque comum é a de escrever uma rotina que analisa desmontagem de código do malware, extrai a chave de criptografia e localização dos dados a serem trabalhados, e em seguida extrai a imagem.
Descascar todas as camadas defensivas de um executável malicioso permite que a Lógica de Detecção para analisar o código de malware real escondido dentro. A partir daqui o céu é o limite em termos de como você processa ainda mais a imagem resultante. Essas mesmas técnicas são usadas para puxar objetos a partir de arquivos não-PE, tais como PDFs e documentos do MS Office, e truques de descriptografia semelhantes podem ser usados para ofuscar coisas como Java Script malicioso.
Criando este tipo de Lógica de Detecção, por vezes, pode ser demorado. No entanto, as recompensas são definitivamente vale a pena. Lógica de Detecção genérica escrita desta forma não só é capaz de capturar um grande número de arquivos maliciosos, que tem uma boa vida de prateleira. Em muitos casos, as novas variantes da mesma família malwares são detectados por um único bem escrito genérico, sem modificações. Se você vá para a mapa do mundo, você vai notar que a maioria, se não todas as nossas 10 maiores detecções são geralmente genéricas escritos manualmente.
Para ser honesto, o que tenho escrito aqui só arranha a superfície do que pode e está sendo feito com essas tecnologias. Tenha em mente que a Lógica de Detecção também tem acesso a informações a partir de coisas como consultas nuvem e rastreamento de origem do arquivo e pode trabalhar em qualquer tipo de fluxo de dados, incluindo espaço de memória e os dados de rede de entrada, e provavelmente você pode entender por que o tema é tão complexo. Uma explicação em profundidade provavelmente encher um livro.
Existem muitos tipos de arquivo lá fora, que podem conter códigos maliciosos. Aqui estão alguns exemplos.
- Documentos como PDF ou formatos MS Office.
- Executáveis para vários sistemas operacionais e arquiteturas, tais como PE, ELF, Mach-O, e dotnet.
- Pacotes de aplicativos e pacotes como APK, feixes OS aplicação X (.app) e Flash (SWF).
- As imagens de disco, tais como ISO e DMG.
- Compilado bytecode, como classe Java ou dex Android.
- Marcação, como HTML ou XML.
- Scripts, como Visual Basic, JavaScript e shell scripts específicos do sistema operacional.
- Recipientes, como zip, 7z, e RAR.
A fim de trabalhar com todos esses diferentes formatos de arquivo, analisadores são frequentemente necessários. Analisadores de identificar e extrair estruturas incorporados úteis a partir dos respectivos recipientes. Exemplos de estruturas incorporadas incluem coisas como recursos (sons, gráficos, vídeos e dados), cabeçalhos PE, seções PE, assinaturas Authenticode, manifestos Android e código compilado.
Em termos simples, um analisador divide um arquivo de entrada em suas partes constituintes, e fornece-los como uma estrutura de dados facilmente acessível a Lógica de Detecção. Um grande número de formatos de arquivo são complexos e contêm dezenas de casos de canto. Ao analisar um arquivo e, em seguida, fornecendo uma estrutura de dados para a Lógica de Detecção, evitamos ter que replicar código de análise complexa, uma e outra. Nós também podemos ter certeza de que o código é robusto e com bom desempenho.
Arquivos (do tipo variável) são frequentemente incorporado dentro de arquivos maliciosos. Por exemplo, um PDF malicioso pode conter incorporado código flash, código executável, shellcode, ou scripts. Muitas vezes, esses arquivos incorporados são criptografados ou ofuscado. Assim, quando o arquivo malicioso é aberto ou executado, ele decifra objetos contidos dentro de si, escreve-os para a memória ou disco, e então executa-los. Os próprios executáveis maliciosos costumam usar packers off-the-shelf ou protetores, como UPX ou ASPack, para ofuscar seu código e estruturas. Na maioria dos casos, vários empacotadores são aplicados em cima uns dos outros, e, em muitos casos, a ofuscação costume, escrito pelo autor software malicioso, também é utilizado. Chegar ao código real dentro de um executável malicioso é semelhante ao descascar as camadas de uma cebola.
O problema com arquivos compactados é que todos eles parecem bastante similares. E alguns executáveis não maliciosos também utilizam packers. A fim de identificar corretamente maldade, muitas vezes você tem que remover essas camadas.
Removendo packers off-the-shelf é bastante simples - reconhecendo protetores padrão é simples, como são os métodos de decodificação-los. Desembalar ofuscação personalizado é mais complicado. Uma maneira de desvendar ofuscação costume é extrair o código de decifração e blocos de dados a partir do próprio malware, executar a coisa toda em uma caixa de areia, e permitir próprio código da malwares para descompactar a imagem para você. Outro truque comum é a de escrever uma rotina que analisa desmontagem de código do malware, extrai a chave de criptografia e localização dos dados a serem trabalhados, e em seguida extrai a imagem.
Descascar todas as camadas defensivas de um executável malicioso permite que a Lógica de Detecção para analisar o código de malware real escondido dentro. A partir daqui o céu é o limite em termos de como você processa ainda mais a imagem resultante. Essas mesmas técnicas são usadas para puxar objetos a partir de arquivos não-PE, tais como PDFs e documentos do MS Office, e truques de descriptografia semelhantes podem ser usados para ofuscar coisas como Java Script malicioso.
Criando este tipo de Lógica de Detecção, por vezes, pode ser demorado. No entanto, as recompensas são definitivamente vale a pena. Lógica de Detecção genérica escrita desta forma não só é capaz de capturar um grande número de arquivos maliciosos, que tem uma boa vida de prateleira. Em muitos casos, as novas variantes da mesma família malwares são detectados por um único bem escrito genérico, sem modificações. Se você vá para a mapa do mundo, você vai notar que a maioria, se não todas as nossas 10 maiores detecções são geralmente genéricas escritos manualmente.
Para ser honesto, o que tenho escrito aqui só arranha a superfície do que pode e está sendo feito com essas tecnologias. Tenha em mente que a Lógica de Detecção também tem acesso a informações a partir de coisas como consultas nuvem e rastreamento de origem do arquivo e pode trabalhar em qualquer tipo de fluxo de dados, incluindo espaço de memória e os dados de rede de entrada, e provavelmente você pode entender por que o tema é tão complexo. Uma explicação em profundidade provavelmente encher um livro.