Pró-Reitoria de Pós-Graduação e Pesquisa
Lato Sensu em Perícia Digital
Trabalho de Conclusão de Curso
RECUPERAÇÃO DE CÓDIGOS MALICIOSOS PROTEGIDOS
POR CRIPTOGRAFIA
Autor: Eliel Martins
Orientador: Prof. Dr. Paulo Quintiliano da Silva
Brasília - DF
2013
ELIEL MARTINS
RECUPERAÇÃO DE CÓDIGOS MALICIOSOS PROTEGIDOS POR
CRIPTOGRAFIA
Artigo apresentado ao Curso de PósGraduação Latu Senso em Perícia Digital da
Universidade Católica de Brasília, como
requisito parcial para obtenção do certificado
de Especialista em Perícia Digital.
Orientador: Prof. Dr. Paulo Quintiliano da
Silva
Brasília
2013
Artigo de autoria de ELIEL MARTINS, intitulado “RECUPERAÇÃO DE CÓDIGOS
MALICIOSOS PROTEGIDOS POR CRIPTOGRAFIA”, apresentado como requisito parcial
para obtenção do certificado de Especialista em Perícia Digital da Universidade Católica de
Brasília, em 25 de outubro de 2013, defendida e/ou aprovado pela banca examinadora abaixo
assinada:
___________________________________________
Prof. Dr. Paulo Quintiliano da Silva
Orientador
Perícia Digital - UCB
___________________________________________
Prof. MSc. Paulo Roberto Corrêa Leão
Examinador
Perícia Digital - UCB
Brasília
2013
3
RECUPERAÇÃO DE CÓDIGOS MALICIOSOS PROTEGIDOS POR
CRIPTOGRAFIA
ELIEL MARTINS
Resumo:
Este artigo apresenta um estudo sobre como a criptografia pode ser utilizada para a proteção
de códigos maliciosos em arquivos executáveis no formato Portable Executable (PE) para
sistema operacional Microsoft Windows e como recuperar esses arquivos protegidos para
análise de suas funcionalidades. Os crypters foram identificados como ferramentas que
permitem a aplicação desse tipo de proteção, sendo analisadas suas funcionalidades e sua
arquitetura por de códigos fontes de crypters obtidos na internet. Uma pesquisa experimental
empírica foi realizada para comprovar se a proteção de arquivo executável por um crypter
pode impedir sua a recuperação, considerando um cenário de análise estática de
funcionalidade implementadas um arquivo desconhecido. Como subsídios para a pesquisa
foram geradas amostras com dois arquivos executáveis no formato PE diferentes, protegendoos com três crypters. O processo de recuperação dos arquivos originais foi realizado com
ferramentas livres em um ambiente virtualizado. Os arquivos recuperados foram comparados
com os originais para verificar a eficiência da recuperação do arquivos. Com os resultados da
pesquisa foi possível concluir que mesmo que um arquivo seja protegido por um algorítimo
de criptografia, por mais forte que seja, é possível recuperá-lo com o emprego de ferramentas
e técnicas adequadas.
Palavras-chave: Código Malicioso. Criptografia. Crypter. Engenharia Reversa. Malware.
Portable Executable.
1.
INTRODUÇÃO
Malware é um termo genérico para definição de softwares maliciosos que são
responsáveis por grande parte dos incidentes de segurança e invasão de computadores.
Qualquer software que possa causar prejuízos a um usuário, um computador ou uma rede
pode ser considerado um malware, tais como os vírus, trojans, worms, rootkits, scareware e
spywares (Sikorski e Honig, 2012).
Os softwares maliciosos estão cada vez mais sofisticados. Seus autores procuram fazer
suas ferramentas indetectáveis. Praticamente todas as técnicas ofensivas conhecidas têm sido
incorporada nos malwares para tornar cada vez mais difícil se defender deles. Embora seja
raro ver técnicas completamente novas aparecerem pela primeira vez em malwares, seus
autores são rápidos na adoção de novas técnicas, tão logo sejam tornadas públicas, e
rapidamente se adaptam em face de novas técnicas defensivas (Malin et al, 2012).
A criptografia é tradicionalmente utilizada para armazenar informações de forma
segura e manter as comunicações privadas. Criptovirologia, tradução do inglês
"Cryptovirology", é um termo utilizado para definir o estudo de aplicações de criptografia no
desenvolvimento de software malicioso. Trata-se da investigação, de como as ferramentas e
paradigmas modernos de criptografia podem ser usadas para fortalecer, desenvolver e
melhorar novos ataques de softwares maliciosos (Young e Yung, 2004).
4
Há duas formas principais de utilização de criptografia em malwares: a primeira é para
proteger os códigos maliciosos e tornar mais difícil a engenharia reversa, a segunda é garantir
o anonimato das comunicações entre o malware e seu controlador (Anandrao, 2011).
Historicamente, técnicas de criptografia têm sido utilizadas por autores de malwares
desde o início dos anos 1990 para esconder funcionalidades e criar aquivos de aparência
randômica que sejam de difícil detecção por Intrusion Detection System (IDS) e softwares
antivírus. Ao longo do tempo, os malware têm apresentado técnicas cada vez mais
sofisticadas para ocultar algoritmos e as chaves de descriptografia (as vezes até exigem ataque
de força bruta descriptografar o malware), a fim de evitar a detecção e a análise forense
(Davidoff e Ham, 2012).
Ferramentas denominadas de crypter, de baixo custo e comercializadas pela internet,
apresentam funcionalidades para proteção de arquivos executáveis com objetivo de impedir a
engenharia reversa e torná-los indetectáveis por meio da utilização de criptografia.
De acordo com dados do The 2013 Data Breach Investigations Report (Verizon,
2013), houve uma redução de 29% nos incidentes causados por malwares na comparação dos
dados de 2011 e 2012. Dados Internet Security Threat Report 2013 (Symantec, 2013),
também apontam uma redução no número de e-mails contendo malwares, de 1 em cada 239
para 1 em cada 291 e-mails.
Diante dessas informação e considerando que seja realmente possível ocultar códigos
maliciosos por meio de técnicas criptográficas, pode-se questionar se os dados do relatório
refletem uma diminuição na quantidade de malwares produzidos ou diminuição na quantidade
de malwares detectados.
Como recuperar códigos maliciosos protegidos por meio de técnicas criptográficas em
arquivos executáveis no formato Portable Executable (PE) é problema foco desse artigo.
Partindo-se do pressuposto que códigos maliciosos ocultos podem ser recuperados mesmo se
estiverem protegidos por meio de algoritmos criptográficos.
O objetivo geral do artigo é comprovar a eficácia das proteções aplicadas, por
ferramentas que utilizam de criptografia para ocultar códigos maliciosos em arquivos
executáveis no Portable Executable (PE), com intenção de impedir a recuperação do artefato
malicio para fins de análise de suas funcionalidades por engenharia reversa. Para alcançar
esse objetivo o mesmo foi subdivido nos seguintes objetivos específicos:
a. demonstrar a importância do formato PE para a área de prevenção e análise de
malware;
b. identificar, descrever a estrutura e o funcionamento de ferramentas utilizadas
para ocultar códigos maliciosos em arquivos executáveis por meio de
criptografia;
c. recuperar arquivos protegidos por meio de algoritmos criptográfico e ocultos
em arquivos no formato PE; e
d. comparar os arquivos recuperados com os arquivos originais para comprovar a
eficiência das ferramentas de proteção.
Os malwares, que afetam diversos setores da sociedade que dependem de tecnologia
da informação, são vetores utilizados para realização de diversas ações ilícitas, tais como:
obtenção de vantagens financeiras, a coleta de informações confidenciais, vandalismo
eletrônico, a realização de ataques virtuais e a disseminação de spam. Essa pesquisa é
relevante por difundir de conhecimentos sobre técnicas utilizadas para ocultação de códigos
maliciosos e procedimentos para sua recuperação e análise.
5
2.
REFERNCIAL TEÓRICO
Nesta seção são apresentados trabalhos relacionados ao estudo de criptografia aplicada
softwares maliciosos e ao emprego de técnicas de criptoanálise para identificação de
algoritmos criptográficos em malwares.
Uto (2013) apresenta uma metodologia, com base em criptoanálise, com o objetivo de
reduzir esforços com análise estática e dinâmica e recuperação de arquivos criptografados por
malwares. Apresenta também um estudo de caso para ilustração da metodologia proposta
aplicado em três malwares, obtidos de uma grande empresa brasileira, a qual não foi citada,
que tinham por objetivo capturar informações de um hardware de propósito especial que
existia no ambiente dessa empresa. Nesse estudo foram utilizadas mais técnicas de
criptoanálise do que de análise estática e dinâmica de engenharia reversa.
Lyda e Hamrock (2007) apresentam o protótipo de uma ferramenta de análise de
arquivos binários denominada Bintropy, que tem por finalidade estimar a probabilidade de um
arquivo conter bytes compactados ou criptografados por meio de algoritmos baseados em
entropia, ou densidade da informação, que é um método para mensurar incertezas em
sequências de números ou bytes. Essa ferramenta analisa detalhadamente os cabeçalhos de
arquivos PE, provendo estatísticas rápidas da existência de dados randomizados, permitindo a
identificação de malwares compactados ou criptografados. Os resultados da pesquisa indicam
que a ferramenta foi útil para identificação códigos criptografados, sem identificar algoritmos
ou cifras utilizados.
Um estudo sobre como ferramentas e paradigmas modernos de criptografia podem ser
utilizados para fortalecer, desenvolver e aprimorar novos ataques de malwares é apresentado
em Kumar e Kumar (2013). O trabalho é focado no funcionamento de vírus que criptografam
arquivos em computadores comprometidos para tentar extorquir as vítimas, citando os
malwares GPcode e Conflicker. Por fim são sugeridas contra medidas para prevenir e
defender desse tipo de ataque.
Anandrao (2011) faz uma introdução ao emprego de técnicas criptográficas como
meios ofensivos para realizar ataques de extorsão que causam perda de acesso a informação,
perda de confidencialidade e vazamento de informações, tarefas que geralmente a criptografia
impedem. Analisa também as ameaças e ataques que o mau uso da criptografia pode causar
quando combinado com os softwares maliciosos.
2.1. PORTABLE EXECUTABLE
Esta seção descreve resumidamente o layout do Portable Executable (PE), formato de
arquivos para executáveis regulares, bibliotecas (dynamic-link libraries - DLL) e objetos da
família de sistemas operacionais Microsoft Windows, destacando elementos principais para
compreensão do funcionamento dos crypters. Também são apresentados dados estatísticos
para ilustrar a dimensão da utilização do formato PE em malwares.
O formato PE, definido pela Microsoft PE and COFF Specification (Microsoft,
2013a), é uma padrão que descreve a estrutura dos dados e códigos de um programa,
permitindo ao sistema operacional alocar o espaço necessário em memória e iniciar a
execução do programa no ponto de entrada do código. É considerado portável por poder ser
utilizado em várias arquiteturas de computados de 32 e 64 bits.
A Figura 1 representa a estrutura do de uma arquivo PE em dois momentos. O
primeiro quando arquivo esta gravado em sistema de arquivos. O segundo após o arquivos ser
6
mapeado para a memória virtual para ser executado, onde pode notar um aumento dos espaços
entre as seções o arquivo.
a) DOS Header, os primeiros bytes armazenam os caracteres “MZ” (4D 5A em
hexadecimal), que são uma assinatura do DOS que identifica o formato PE;
b) DOS Stub, é um executável embutido que é chamado caso o arquivo não possa ser
executado;
c) NT Header ou PE Header, contem informações sobre os executáveis, incluindo o
ponto de entrada de código (entry point), endereço das tabelas de importação e
exportação, número de seções, entre outras informações;
d) Section Header, contem informações sobre as seções existentes, na proporção de um
por seção;
e) Section, são as seções códigos e dados.
Figura 1: Estrutura de um arquivo PE em disco e carregado na memória
Fonte: http://slimv.tistory.com/entry/PE-File-Format-0x01
7
Conforme dados estatísticos de Symantec (2013), sobre dez famílias, conjunto de
variações de um mesmo malware, mais detectados, que representaram 41,2 % do total de
detecções do ano de 2012, verifica-se que os malwares dessas famílias ou são distribuídos
como arquivos PE ou infectam arquivos nesse formato no sistema operacionais Windows. No
Gráfico 1 estão representados as famílias e os percentuais ocupados por cada uma.
Gráfico 1: Famílias de malwares mais detectados em 2012
Fonte: Symantec (2013)
Gráfico 2: Quantidade de arquivos submetidos para analise em VirusTotal
Fonte: VirusTotal (2013)
Os Gráficos 2 e 3 apresentam estatísticas referente ao período de 7 a 12 de setembro
de 2013 sobre a quantidade e os tipo de arquivos submetidos para a análise no período no site
VirusTotal1. Nas tabelas 1 e 2 são apresentados de forma compilada os dados exibidos nos
1
VirusTotal é um serviço online gratuito oferecido pela Google para analise de arquivos e URLs suspeitos
para identificação de malwares por softwares antivírus e scanners de websistes.
8
gráficos, onde consta que foram submetidos 2.459.062 arquivos no período, sendo que destes
1.341.638 são arquivos no formato PE, representando 54,55% do total de arquivos. Esses
resultados refletem a importância do formato PE para as áreas de análise e combate a
malwares.
Gráfico 3: Tipos de arquivos submetidos para analise em VirusTotal
Fonte: VirusTotal (2013)
Tabela 1 - Compilação de resultados da quantidade arquivos submetidos
Quantidade Total
Quantidade arquivos
únicos
Arquivos únicos
detectados por um ou
mais antivírus
07 Set
377.333
342.238
164.575
08 Set
364.102
329.214
188.912
09 Set
438.949
367.752
230.882
10 Set
363.756
310.101
198.095
11 Set
470.550
405.533
190.867
12 Set
444.372
390.476
255.736
2.459.062
2.145.314
1.229.067
Data
Total
Tabela 2 - Compilação dos tipos arquivos no formato PE submetidos
Tipo
Quantidade
Windows 32 bits EXE
1.142.471
Windows 32 bits DLL
188.990
DOS EXE
10.177
Total
1.341.638
2.2. PROTEÇÃO DE CÓDIGOS MALICIOSOS
Nesta seção são examinadas técnicas e ferramentas utilizadas para proteger códigos
maliciosos em arquivos executáveis com o objetivo de impedir análise com engenharia
reversa ou torná-los indetectáveis pela análise de softwares antivírus.
9
Os desenvolvedores de malware empregam diversas técnicas para impedir que suas
criações sejam analisadas ou detectadas, podendo-se destacar as seguintes: as que impedem a
desmontagem ou disassembler, as que impedem a depuração (debug) do executável, as que
impedem a execução do malware em máquinas virtuais (Sikorski e Honig, 2012), as que
compactam e criptografam o código malicioso (Malin et al, 2012).
A ocultação também é utilizada para evitar que outros criminosos examinem seus
códigos maliciosos, pois oportunistas podem analisar os arquivos para; localizar de onde o
malware está controlando; identificar máquinas que foram infectadas; determinar onde as
informações valiosas capturadas, como conteúdos de keylogers e dados de cartões de crédito,
estão sendo armazenadas. De posse dessas informações podem construir suas próprias botnets
ou auferir lucros ilícitos por meio de condutas fraudulentas por meio da internet (Malin et al,
2012), sem desprendimento de esforço para desenvolvimento de malwares.
A desmontagem consiste em converter um arquivo em linguagem de máquina
(binário) para uma linguagem de montagem (Assembly), uma notação mais legível para
analise visual de código. Com a finalidade de impedir esse processo são implementadas
técnicas por meio de códigos ou dados inseridos no malware para que ferramentas de
desmontagem produzam resultados incorretos, atrasando ou impedindo a análise do código
(Sikorski e Honig, 2012).
A depuração de um programa consiste na sua execução por instrução em ferramenta
destinada a este fim, os depuradores (debuggers), constantemente empregados em análises
malwares. Segundo Sikorski e Honig (2012) existem centenas de técnicas para reconhecer
quando um malware está sobre o controle de um depurador para executar fluxos alternativos,
desviando a atenção do analista, ou mesmo interromper seu funcionamento.
A utilização de máquinas virtuais é uma prática comum em análises de malwares, pois
permitem a rápida criação de ambientes de testes, facilitando o trabalho e provendo maior
segurança. Como a grande maioria dos malwares são desenvolvidos para atingir sistemas
operacionais em máquinas físicas, implementam-se técnicas para detectar quando o malware
está sendo executado em uma máquina virtual, podendo explorar vulnerabilidades dessa
máquina ou interromper seu funcionamento (Sikorski e Honig, 2012).
Duas ferramentas comumente utilizadas para ocultar códigos maliciosos são os
packers, que utilizam algoritmos de compressão para reduzir o tamanho dos executáveis, e os
crypters, que utilizam algoritmos criptográficos para proteger os arquivos executáveis (Malin
et al, 2012). Normalmente essas ferramentas também são a interface para aplicação das
técnicas descritas nos parágrafos anteriores.
Por serem as ferramentas que fazem utilização de criptografia para proteção de
códigos maliciosos os crypters são analisados com mais detalhes na próxima seção.
2.3. CRYPTERS
Nesta sessão são apresentadas a arquitetura, o funcionamento e as principais
funcionalidade dos crypters, tendo como base análises realizadas em códigos fontes de
crypters obtidos em Crypter Source2 e em HackHound3, pelas informações disponibilizadas
pelos sites de comercialização de crypters na internet e pela implementação de referencia
descrita em Ammann (2012).
Um crypter é uma ferramenta projetada para receber arquivo executável como entrada,
criptografá-lo e o anexá-lo a um outro arquivo executável que será o responsável por
descriptografar e executar o arquivo original. Seu objetivo é tentar deixar o malware
2
3
Site que disponibiliza códigos fontes de crypter para fins didático e divulgação de crypter comercializados,
disponível em http://www.cryptersource.com/
Fórum dedicado a segurança e programação de computadores e redes, disponível em http://hackhound.org/
10
indetectável e impedir sua engenharia reversa por meio de um algorítimo criptográfico. O
processo para proteger um malware é apresentado na Figura 2.
Figura 2: Processo de proteção de um arquivo por um crypter
Fonte: Adaptado de http://www.crypters.net/crypter-info/how-does-a-crypter-work/
A arquitetura de um crypter é formada por dois componentes: um cliente e um stub. O
cliente é a interface com o usuário, onde se seleciona o arquivo a ser criptografado. O stub,
também denominado de contêiner por Ammann (2012), é o componente responsável por
descriptografar e executar o arquivo protegido.
No cliente são implementadas funcionalidades para criptografar arquivos executáveis,
realizar a junção de arquivos e geração de stubs. Geralmente também são utilizados para
aplicar outros tipos de proteção ao malware e ao stub, tais como as descritas na seção 2.2.
Segundo Moss at al (2011) e com base nas analises de códigos dos crypter os
algoritmos de criptografia utilizados vão de simples cifras de codificação XOR às cifras
compactas como o Tiny Encryption Algorithm (TEA), sendo encontrado também a utilização
de cifras mais elaboradas como o Advanced Encryption Standard (AES). Há casos em que os
crypters implementam mais de um algorítimo, permitindo seleção de qual utilizar para
proteção do arquivo.
Figura 3: Execução de arquivo protegido por um crypter
O stub é um componente que encapsula o arquivo criptografado, considerando que
esse arquivo seja um malware, é a parte que será analisada por softwares antivírus e que estará
11
visível em um primeiro momento para engenharia reversa cabendo ao analista identifica essa
condição para não analisar o arquivo errado. Na Figura 3 podemos observar as três fases
necessárias para descriptografar e executar um arquivo protegido, sendo que após a execução
o arquivo protegido retorna a primeira fase.
A primeira função essencial de um stub é descriptografar o aquivo protegido, fase
dois, sendo o algoritmo utilizado um ponto fraco do stub. O código de um algoritmo de
criptografia é facilmente identificado, e como não é comum ter esse tipo de algorítimo em
arquivos executáveis, os que possuem podem ser classificados como malwares (Elisan, 2012),
por meio de técnicas heurísticas.
A chave para descriptografar o arquivo geralmente é armazenada no próprio stub,
existindo porém esquemas mais elaborados para sua proteção, como o encontrado em
Ammann (2012), que utiliza um mecanismo de força bruta implementado no stub para
localizar a chave correta. Elisan (2012) identificou esquemas onde é possível gerar uma nova
chave cada vez que o malware é carregado na memória e criptografado para o disco
novamente.
A segunda função essencial de um stub é executar o arquivo descriptografado, fase
três. Na maioria dos códigos examinados essa função é denominada de RunPE, que
implementam o processo descrito por Keong (2004) para carregar dinamicamente o um
arquivo executável na memória. A compreensão desse processo é importante para entender
como stub executa o arquivo protegido e para identificar em que momento o arquivo original
desprotegido pode ser recuperado. Detalhes sobre o funcionamento das função utilizadas
podem ser obtidos em: http://msdn.microsoft.com/en-us/library. O processo é descrito
resumidamente a seguir:
a. Utiliza
a
função
CreateProcess,
no
stub,
com
o
parâmetro
CREATE_SUSPENDED para criar um processo no estado suspenso;
b. Utiliza a função GetThreadContext para obter os valores dos registradores (no
contexto da thread) do processo suspenso. O registrador EBX do processo
suspenso aponta para o Process Environment Block (PEB). O registrador EAX
contêm o ponto de entrada (entry point) do primeiro processo (stub);
c. Obter endereço base do processo suspenso do PEB;
d. Carrega o segundo executável (malware) na memória (utilizando a função
ReadFile) e realiza ajustes manualmente se necessário. Isso é requerido se o
alinhamento do arquivo executável é diferente do alinhamento dele carregado na
memória.
e. Se o segundo processo (malware) tem o mesmo endereço base do processo
suspenso e o tamanho da sua imagem é menor ou igual tamanho da imagem do
processo suspenso, simplesmente utiliza a função WriteProcessMemory para
escrever a imagem do segundo executável (malware) no espaço de memória do
processo suspenso, inciando no endereço base;
f. Caso contrário, desmapear a imagem do primeiro utilizando a função
ZwUnmapViewOfSection (ntdll.dll) e utilizar a função VirtualAllocEx para alocar
memória suficiente para o segundo executável no espaço de memória do processo
suspenso. A função VirtualAllocEx deve ser alimentada com o endereço base do
segundo executável para ter certeza que o Windows fornecerá memória na região
correta. Na sequência, copia a imagem do segundo executável (malware) para o
espaço de memória do processo suspenso iniciando endereço alocado utilizando a
função WriteProcessMemory;
g. Se a operação de desmapear falhar mas o segundo executável for realocado (se
tiver tabela de realocação), então aloca memória suficiente para o segundo
12
executável com base no endereço de memória alocado. Na sequência, copia a
imagem do segundo executável (malware) para o espaço de memória do processo
suspenso iniciando endereço alocado utilizando a função WriteProcessMemory;
h. Altera o endereço base do segundo executável no PEB do processo suspenso.
i. Define o valor do registrador EAX do contexto da thread com o endereço do ponto
de entrada (entry point) do segundo executável (malware).
j. Utiliza a função SetThreadContext para modificar o contexto da thread do
processo suspenso.
k. Chama a função ResumeThread API continuar a execução do processo suspenso.
Para evitar que os stubs sejam identificados como malwares por softwares antivírus,
tornando-os ineficazes para as tarefas que foram projetados, são utilizadas diversas técnicas
para tentar tornar seu código indetectável. Das análises dos códigos fontes foram identificadas
as seguintes técnicas implementadas nos clientes dos crypter utilizadas para produzir stubs
com características diferentes, evitando a detecção com base em assinaturas e tentando evitar
a detecção por meio de técnicas heurísticas:
a) Adição de códigos sem utilidade para modificar o fluxo de execução, incluindo
falsos laços, funções, variáveis, textos e estruturas de controle. São inseridos de
forma randomizada em várias partes do código de forma a não interferir muito no
fluxo execução;
b) Alteração da ordem das estruturas de código, alterando a posição de funções e
variáveis, ou colocando-as até mesmo em outros arquivos ou módulos;
c) Mascaramento das chamadas a Application Programming Interface (API) do
sistema operacional;
d) Alteração de nomes de variáreis por outros gerados aleatoriamente;
e) Criptografia de textos, com mecanismos para descriptografá-los sob demanda;
No Quadro 1 são apresentados exemplos de crypters comercializados pela internet,
com custos para aquisição dos mesmos, incluído suporte técnico e atualizações pelo período
de um ano. Considerando-se que um malware oculto pode causar grandes prejuízos, caso não
seja detectado no momento oportuno, esses custos apresentados podem ser considerados
irrisórios.
Quadro 1 - Crypters comercializados pela internet
Ferramenta
Site
Custo
Aegis Crypter 3.2
http://www.aegiscrypter.com/
U$ 250,00
CypherX Crypter
https://cypherx.org
U$ 497,00
Execrypter total
http://www.execrypter.com.br/
R$ 54,00
RDG Tejon Crypter
http://rdgsoft.8k.com/Tejon.html
U$ 40,00
Sheikh Crypter
http://www.buycrypter.com/
U$ 49,90
Xprotect
http://www.buycrypter.com/
U$ 74,90
3.
PESQUISA EXPERIMENTAL
A pesquisa foi realizada considerando o cenário em que um analista recebe arquivos
executáveis suspeitos, sem nenhuma informação adicional a respeito dos mesmos, tendo como
objetivo realizar análises estáticas para determinar suas funcionalidades. Como os arquivos
recebidos estão protegidos, o analista primeiramente deve localizar e extrair o código original
13
do suposto malware para não incorrer no erro de analisar o programa errado, considerando a
utilização de crypters o analisa inicialmente teria acesso somente ao código do stub. A
localização e a extração do programa original são foco dessa pesquisa.
Para localização e recuperação do arquivo original foi seguindo o seguinte processo,
adaptado de Ligh at al (2011):
a) Localizar o endereço original da primeira instrução do aquivo protegido antes de
ser criptografado, denominado de Original Entry Point (OEP). A seguir são
apresentados em ordem de prioridade de utilização, do mais simples para o mais
complexo, os métodos utilizados para localizar o OEP:
1. Utilizar uma ferramenta automatizada genérica para localização de OEP;
2. Utilizar uma ferramente de depuração, setando pontos de parada em função
que são normalmente chamadas antes da execução de programa;
3. Analisar o código descompilado manualmente. Exige mais tempo e habilidade
do analista;
b) Depurar o programa até alcançar o OEP. Isto permite que o malware seja
executado o suficiente para que ele extrai-lo da memória, mas não a ponto de
começar a execução do código de malicioso.
c) Extrair o arquivo descompactado da memória para um arquivo no disco.
d) Reconstruir a tabela de endereços de importação (Import Address Table - IAT) do
arquivo extraído, caso seja necessário.
Como última alternativa para extrair o arquivo original, caso os procedimentos
anteriores não funcionassem, considerou-se a possibilidade de executar a amostra e extrair o
arquivo original da memória. Para o tipo de cenário considerado nesta pesquisa essa
abordagem não é a mais adequada, uma vez que um artefato malicio for executado, além de
comprometer o sistema de suporte a análise, não se pode prever qual a proporção do código
foi carregada na memória.
3.1. AMBIENTE E FERRAMENTAS
O ambiente de execução da pesquisa foi constituído de uma máquina virtual com
sistema operacional Microsoft Windows XP, executado no software de virtualização
VirtualBox, em máquina real com sistema operacional Debian.
As seguintes ferramentas, todos distribuídas livremente, foram utilizadas nas
atividades da pesquisa experimentar:
a) PeiD - disponível em http://www.aldeid.com/wiki/PEiD, é uma ferramenta
importante para identificação de informações básicas de arquivos suspeitos.
Também detecta os tipos mais comuns de packers, crypters e compiladores, com
mais de 600 tipos diferentes de assinaturas;
b) OllyDbg - disponível em http://www.ollydbg.de, é um disassembler utilizado para
análise estática de binários, podendo acessar toda a estrutura de código de um
programa. É também um depurador (debugger), utilizado para análises dinâmicas,
permitindo a manipulação de um programa em tempo de execução no nível de
linguagem de máquina;
c) Process
Explorer
–
disponível
em
http://technet.microsoft.com/enus/sysinternals/ /bb896653.aspx, é um gerenciador de avançado de processos que
permite identificar bibliotecas utilizadas, arquivos abertos e subprocessos. Permite
também extrair um arquivo da memória;
14
d) Hex Workshop Hex Editor– disponível em http://www.hexworkshop.com/, é
conjunto de ferramentas para desenvolvimento em hexadecimal, com ele e
possível editar dados binários diretamente nos arquivos;
e) NoVirusThanks NPE File Analyzer - disponível em http://www.novirusthanks.org/
/product/npe-file-analyzer/, é um utilitário que permite visualizar e editar arquivos
PE de 32 e 64 bits. Possui funções que permitir analisar toda a estrutura de um
arquivo, comparar estrutura de arquivos, extrair um arquivo de outro, extrair
arquivos da memória, entre outras funcionalidades;
f) LordPE - disponível em http://www.woodmann.com/collaborative/tools/
index.php/LordPE, é uma ferramenta para visualização e edição de arquivos PE;
g) RegShot - disponível em http://sourceforge.net/projects/regshot/, é um utilitário
que permite comparar o estado registro do sistema operacional Windows.
3.2. PROTEÇÃO DE ARQUIVOS
Nesta etapa foram utilizados os crypter apresentados no Quadro 2, numerados para
facilitar a referencia aos mesmos. Foram geradas amostras com dois arquivos diferentes, num
total de seis amostras. O estado das amostras geradas é correspondente a fase três da Figura 2.
Quadro 2: Crypters utilizados na pesquisa
Número
Crypter
Amostras
01
Aegis Crypter 3.2
http://www.aegiscrypter.com/
02
Indetectables crypter
http://www.indetectables.net/
03
Crypter
v3.5
Multi-Tool http://hackhound.org/forums/topic/2568-crypter-multi-tool-v35/?
hl=crypter
Os arquivos utilizados para geração das amostras foram: o primeiro uma aplicação
simples escrita especificamente para essa pesquisa na linguagem Visual Basic 6. O segundo
arquivo é um arquivo identificado como malware pelo VirusTotal 4 como 39/46 mecanismos
antivírus como software malicioso.
O processo de geração das amostras consistiu em utilizar as interfaces gráficas dos
clientes do crypters, selecionar o arquivo a ser protegido e solicitar a criptografia do mesmo.
Não foram aplicadas outras proteções aos arquivos para não tornar demasiadamente
dispendiosa a recuperação do arquivo protegido.
O Quadro 3 apresenta dados sobre as amostras geradas. Comparando os tamanhos dos
arquivos original e das amostras geradas, observa-se um aumento médio de 162,5, 112,5 e
1222,5, para o primeiro, segundo e terceiro crypter, respectivamente. Esse tamanho médio a
mais indica o tamanho do stub gerado pelo crypter.
O valor da coluna entropia foi calculado com a ferramenta PeiD. Considerando dados
estatísticos de experimento realizado por Lyda e Hamrock (2007), em que foram obtidos
valores médios 7.175 para arquivos criptografados, apenas as amostras do primeiro crypter
indicam a presença de dados criptografados. As outras amostras apresentam valores de
executáveis normais.
4
https://www.virustotal.com/pt/file/27a596ed3a49a27754115cd9d5f0b2926ae0d9eb59308e1bf06ac7c78e2efc
48/analysis/
15
Quadro 3: Dados amostras geradas
Amostra
Tamanho arquivo Tamanho amostra
original em KB
em KB
Diferença de
tamanho em KB
Entropia
crypter-01-amostra-1
92
257
165
7,16
crypter-01-amostra-2
41
201
160
7,14
crypter-02-amostra-1
92
205
113
5,11
crypter-02-amostra-2
41
153
112
5,11
crypter-03-amostra-1
92
1317
1225
5,12
crypter-03-amostra-2
41
1261
1220
5,11
3.3. RECUPERAÇÃO DE ARQUIVOS PROTEGIDOS
Inicialmente tentou-se localizar o OEP de forma automatizada com a ferramenta PeiD,
porém não foi possível localizá-lo em nenhuma das amostras, partindo-se então para a
depuração das amostras com o OllyDBG, definindo de pontos de parada em funções do
sistema operacional chamadas antes da execução do programa protegido.
Analisando as funções utilizadas pelas amostras, identificou-se que os três crypters
utilizam o esquema Keong (2004) para carregamento do arquivo descriptografado na
memória, apenas mascarando a chamada a essas ou utilizando versões não documentadas das
mesmas. Para criação de processo em modo suspenso os crypter 01 e 02 utilizam a função
CreateProcessW e CreateProcessA, que são variações da função CreateProcess, utilizada
pelo crypter 03, para trabalhar com o padrão de codificação caracteres Unicode e ANSI,
respectivamente. A função não documentada ZwResumeThread é utilizada em todos os
crypters para continuar a execução do processo suspenso.
As chamadas a essas funções estavam mascaradas por mecanismos não identificados,
dificultando a localização do ponto onde eram chamadas, sendo necessário ama lenta
depuração das das amostras da identificá-las.
Tendo conhecimento da utilização dessas funções foram definidos pontos de parada
com OllyDBG nas funções CreateProcess (ou suas variações) e na função ZwResumeThread,
no endereço de memória 7C90DB20, conforme Figura 4. A transferência da execução do
processo é efetivada na chamada a função KiIntSystemCall, também não documentada.
Figura 4: Ponto de parada na função ZwResumeThread
O terceiro crypter, cujas amostras geradas eram dez maiores do que as dos outros
crypters, foi também o que apresentou maior grau de dificuldade para localizar a chamada
16
correta da função ZwResumeThread, pois a mesma é chamada diversas vezes com parâmetros
falsos, não executando nenhum processo, mas dificultado a localização da chamada correta.
A Figura 5 apresentada uma tela da ferramenta Process Explorer no exato momento
em que a depuração do programa estava parada na função ZwResumeThread, com o processo
nesse ainda estado suspenso.
Figura 5: Estado do processo suspenso no ponto de parada da Figura 4
O Process Explorer possuí funcionalidade para extrair um processo da memória,
porém essa se mostrou menos eficiente do que a existente no LordPE, em que é possível fazer
uma extração parcial do processo, passando como parâmetros o endereço base na memória
(Imagebase) e tamanho a ser extraído do processo. Uma tela do LodePE no momento em que
os processos foram extraídos da memória é apresentada na Figura 6.
Figura 6: Momento da extração do arquivo da memória no LordPE
17
Para verificar a qualidade dos arquivos gerados a partir da extração do processo da
memória foram realizadas dois tipos de comparações com os arquivos originais: execução do
arquivo gerado e a comparação da estrutura do formato PE.
A execução dos arquivos gerados da primeira amostra foi comprovada, por se tratar de
aplicação gráfica, observado sua renderização correta. Para comprovar os resultados da
execução da segunda amostra, que é um arquivo malicioso, foi utilizada a ferramenta
RegShot, comparando-se o estado do registro do Windows após a execução do malware
original com o estado após a execução malware gerando a partir da extração, sendo observado
que foram feitas as mesmas alterações no registro, podendo-se presumir o malware funcionou
corretamente.
As estruturas do formato PE foram comparadas por meio da ferramenta NPE File
Analyzer, sendo constatado que somente o atributo tamanho (File Size) era diferente. Na
Figura 7 é apresentado um exemplo da comparação da estrutura da primeira amostra do
primeiro crypter com o arquivo original.
Figura 7: Exemplo de comparação de arquivos PE
Com essas comparação encerram-se as atividades da pesquisa experimental cumprindo
com o objetivo proposto de recuperar um arquivo executável no formato PE protegido por
meio de criptografia.
4.
METODOLOGIA
Para atingir os objetivos propostos neste artigo, desenvolveu-se inicialmente uma
pesquisa bibliográfica para identificar trabalhos, técnicas e ferramentas relacionadas a
aplicação de técnicas criptográficas para ocultação de códigos maliciosos e as técnicas
existentes para recuperação desse códigos maliciosos.
Posteriormente realizou-se uma pesquisa experimental empírica em um ambiente
controlado para verificar a viabilidade de recuperação de arquivos protegidos por meio de
técnicas criptográficas, e comprovar a eficiência dessa proteção.
18
Figura 8: Metodologia de pesquisa experimental
A pesquisa experimental foi realizada seguindo os passos apresentados na Figura 8,
inciando a preparação do ambiente virtualizado e seleção de ferramentas para suportar as
atividades. Em seguida foi gerado um conjunto de amostras com arquivos protegidos no
formato PE. Posteriormente foram realizadas tentativas para recuperação dos arquivos
originais protegidos, dividindo o fluxo de trabalho de acordo com o resultado obtido. Caso o
arquivo fosse recuperado seria comparado binariamente com seu original, para verificar o
grau de recuperação do arquivo. Caso não fosse possível recuperar o arquivo descrever os
fatores que impediram essa recuperação. Finalizado a pesquisa o ambiente utilizado foi
desativado para evitar a proliferação de artefatos maliciosos manipulados.
5.
CONCLUSÃO
Ao longo desse artigo foram apresentado conceitos e ferramentas relacionados a
proteção de arquivo executáveis por meio de criptografia empregadas para a proteção de
códigos maliciosos em arquivos no formato PE. A relevância desse formato de arquivo para
as áreas de análise malware ficou evidência por meio de dados estatísticos obtidos no site
VirusTotal e dados Internet Security Threat Report 2013: Volume 18 (Symantec , 2013).
Os crypter, comercializadas ou até mesmo distribuídas livremente pela internet, foram
identificadas fazem como ferramentas que fazem uso de criptografia para ocultar códigos
maliciosos em arquivos executáveis, fornecendo uma interface simples e amigável para que
possam ser utilizadas por qualquer pessoa para ocultar um arquivo executável gerando um
outro executável.
As funcionalidades e a arquitetura dos crypters foram analisados por meio de códigos
fontes dessas ferramentas obtidas em diversas fontes na internet, onde foram constatadas que
são constituídos por um cliente (interface com o usuário) e um stub (mecanismo de
descriptografia e execução do arquivo protegido). Foram constatadas que os stubs são
empregadas técnicas de programação polimórfica para que não sejam classificados como
malware.
Uma pesquisa experimental foi realizada para comprovar a efetividade das proteções
aplicadas pelos crypters, considerando um cenário de análise estática de malware para estudar
19
suas funcionalidades, protegendo arquivos executáveis com os crypters e recuperando esses
arquivos posteriormente para comparação com os originais.
Com os resultados da pesquisa experimental, pode-se concluir que a criptografia
aplicada na proteção de arquivos maliciosos não impede a sua recuperação, pois em algum
momento o malware terá que ser carregado na memória para ser executado, comprovando
também a falta de eficácia dos crypters em impedir a recuperação de arquivos protegidos por
meio de criptografia.
Também ficou evidenciado que não importa o tipo e força do algoritmo criptográfico
utilizado, pois em nenhum das amostras analisados foi necessário identificar ou mesmo
localizar as chaves criptográficas para poder recuperar o arquivo protegido.
5.1. TRABALHOS FUTUROS
Existem esquemas de proteção mais complexos do que os oferecidos pelos crypters
analisados, como os oferecidos pelo Themida5, que poderiam ser explorados em outros
trabalhos com enfoque em engenharia reversa de código maliciosos. Embora o Themida seja
comercializado como uma ferramenta de proteção para fins legítimos, é também utilizado
para proteção de malware.
Um outro ponto que poderia ser explorado de outros trabalhos é avaliação da eficácia
das proteções oferecidas pelos crypter contra a identificação dos códigos protegidos de
análises de mecanismos antivírus, e também da classificação de seus stubs como software
maliciosos.
Esse artigo teve foco no formato de arquivos executáveis PE. Estudos similares
poderiam ser realizados para outros formatos como Mach-O (Mach object) 6 dos sistemas
operacionais da Apple, ou formato Executable and Linking Format (ELF)7 padrão de arquivos
executáveis nos sistemas operacionais Unix e similares (Linux, Solaris, IRIX, FreeBSD,
NetBSD, OpenBSD), e nos consoles para videogames PlayStation da Sony.
MALICIOUS CODE RECOVERY PROTECTED BY CRYPTOGRAPHY
Abstract:
This article presents a study on how cryptography can be used for malware protection in the
Portable Executable (PE) executable files format for Microsoft Windows operations system
and how these files protected can be recovered for analysis. The crypters were identified as
tools that allow the application of this type of protection, its features and architecture wore
analyzed by the crypters source codes obtained on the Internet . An experimental research was
conducted to verify if the executable file protection applied by crypters can prevent its
recovery, considering a scenario of functionality static analysis in a unknown file. As
subsidies for research samples were generated with two different executable files in PE
format, one of them classified as malware, protecting them with three crypters. The recovery
process of the original files was done with free tools in a virtualized environment. The
recovered files were compared with the original to verify the efficiency of recovering process.
With the results of the research we concluded that even if a file is protected by an encryption
5
6
7
http://www.oreans.com/themida.php
https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/MachORuntime/Refere
nce/reference.html
http://www.cs.princeton.edu/courses/archive/fall13/cos217/reading/elf.pdf
20
algorithm, however how strong it is, you can retrieve it with the use of appropriate techniques
and tools.
Keywords: Crypter. Cryptography. Malicious code. Malware. Portable Executable. Reverse
Engineer.
6.
REFERÊNCIAS
Ammann , Christian. Hyperion: Implementation of a PE-Crypter. Maio 2012. Disponível
em: <http://www.exploit-db.com/wp-content/themes/exploit/docs/18849.pdf>. Acesso em: 01
setembro 2013.
Kumar, S.Manoj; Kumar, M.Ravi. Cryptoviral Extortion: A virus based approach. IJCTTInternational Journal of Computer Trends and Technology, May 2013.
Anandrao , Shivale Saurabh . Cryptovirology: Virus Approach . International Journal of
Network Security & Its Applications (IJNSA), Vol.3, No.4, July 2011 .
Davidoff , Sherri; Ham, Jonathan. Network Forensics : Tracking Hackers through
Cyberspace . Nova York: Pearson Education , 2012.
Elisan, Christopher. The Evolution of Malware Encryption Part I: Basic Malware
Encryption. Dezembro 2012. Disponível em: <http://blogs.rsa.com/the-evolution-ofmalware-encryption-part-i-basic-malware- encryption/>. Acesso em: 20 maio 2013.
Keong, Tan Chew. Dynamic Forking of Win32 EXE. Abril 2004. Disponível em:
<http://www.security.org.sg/code/loadexe.html>. Acesso em: 01 setembro 2013.
Ligh, Michael Hale; Adair, Steven; Hartstein, Blake; Richard, Matthew. Malware Analyst’s
Cookbook and DVD: Tools and Techniques for Fighting Malicious Code. Indianapolis:
Wiley Publishing, 2011.
Lyda, Robert; Hamrock, James. Using Entropy Analysis to Find Encrypted and Packed
Malware. IEEE Security & Privacy Magazine, March-April 2007, Vol.5(2), pp.40-45.
Malin, Cameron H; Casey, Eoghan; Aquilina, James M. Malware Forensics Field Guide for
Windows Systems: Digital Forensics Field Guides. São Francisco: Elsevier, 2012.
Microsoft Cooperation. Microsoft PE and COFF Specification. Disponível em:
<http://msdn.microsoft.com/en-us/windows/hardware/gg463119.aspx>. Acesso em: 10 agosto
2013a.
Moss, Jeff; Dodge Jr., Ronald C.; Bradley, Tony; Potter, Bruce. Gray Hat Hacking: The
Ethical Hacker’s Handbook. Nova York: McGraw-Hill, 2011.
21
Symantec. Internet Security Threat Report 2013: Volume 18.
Disponível em:
<http://www.symantec.com/security_response/publications/threatreport.jsp>. Acesso em: 21
maio 2013.
Sikorski, Michael e Honig, Andrew. Practical Malware Analysis: The Hands-On Guide to
Dissecting Malicious Software. São Francisco: No Starch Press, 2012.
Uto, Nelson. A Methodology for Retrieving Information from Malware Encrypted
Output Files: Brazilian Case Studies. Future Internet 2013, 5, 140-167.
Verizon. The 2013 Data Breach Investigations Report. Disponível em:
<http://www.verizonenterprise.com/resources/reports/rp_data-breach-investigations-report2013_en_xg.pdf.>. Acesso em: 28 maio 2013.
VirusTotal. File statistics. Disponível em: <https://www.virustotal.com/en/statistics/>.
Acesso em: 12 setembro 2013.
Young, Adam; Yung, Moti. Malicious Cryptography: Exposing Cryptovirology.
Indianapolis: Wiley, 2004.
Download

Eliel Martins