H2HC8 - The Gardener Project

Transcrição

H2HC8 - The Gardener Project
The Gardener Project
Finding Binary
Planting Footprints in
the Garden of your PC
Tony Rodrigues, CISSP, CFCP
inv.forense no gmail
www.octanelabs.net
Quem sou ?
• Tony Rodrigues, CISSP, CFCP, Security+
• Gestor/TI e Consultor em Segurança de
Informações
• Perito/Investigador/Pesquisador em
Computação Forense do OctaneLabs
• Blog: http://forcomp.blogspot.com
Line Up Só de Feras !
Tony
Zoom 500x
Tony
Zoom 1000000x
Tony
Micróbios causam Dor de Barriga ...
Portanto, não durma na minha
palestra !!!
Agenda
• Introdução
– O que é Binary Planting
– O que não é Binary Planting
• Implicações da
Vulnerabilidade
• Binary Planting nos Detalhes
• Forense de Binary Planting
• Projeto Jardineiro
• Conclusões
O que é Binary Planting ?
• Ataque que consiste em executar
código arbitrário na máquina da
vítima, plantando em locais
específicos arquivos maliciosos
para que sejam dinamicamente
carregados como parte legítima de
aplicações vulneráveis
Trabalhando dinamicamente bem
Estática ou implícita
Dinâmica ou explícita
LoadLibraryEx
Atacando com o Binary Planting
DLL maliciosa
O que não é Binary Planting
• Não é sobrescrita de arquivos
– Se fosse possível sobrescrever, o alvo
seria o executável, ora ...
• Não é DLL Preloading ou DLL unsafe
Loading
– O problema não afeta somente DLLs
• Não é DLL Hijacking ou DLL
Spoofing
– Em alguns casos, a DLL não existe no
sistema operacional
O que não é Binary Planting
• Não depende só de Engenharia Social
– Não se trata de enganar o usuário
para clicar em um .exe
• Não afeta somente o Windows
– Outros SOs possuem mecanismos
semelhantes
• Chamadas dinâmicas de código
• Localização de bibliotecas pelo nome
Características
• Ataque do tipo Non-Control-Data
– Executa código sem destruir o fluxo
normal
• Exploração Local e Remota
• Muitas aplicações vulneráveis
• Não requer privilégios
administrativos
• Antiga, bastante conhecida
• Práticas ruins de Programação +
Comportamento inadequado do SO =
Ownado
Podemos ignorar essa vulnerabilidade ?
• Exploit depende de poucos fatores
– Não envolve muitas ações do usuário
– Em alguns casos, basta abrir um
arquivo de dados
• A quantidade de aplicações
vulneráveis é enorme
– Prática costumeira de carregar a DLL
para ver se ela existe ainda é muito
usada
– DLL Chain Loading
– PlugIns, AddOns, etc
Prática ruim ainda é endossada
Prática ruim ainda é endossada
Novinho em
folha !
You can test for the presence of the functions
associated with a feature. To test for the
presence of a function in a system DLL, call
the LoadLibrary function to load the DLL. Then
call the GetProcAddress function to determine
whether the function of interest is present in the
DLL.
Andrew !! find this guy and ...
Podemos ignorar essa vulnerabilidade ?
• Ações de mitigação dos fabricantes
foram não eliminaram os riscos
– Hotfix MS CWDIllegalInDLLSearch
– Problemas na expansão de variáveis na
PATH
• Correção real do bug é extremamente
custoso
– Estima-se em milhões de linhas a serem
analisadas
Podemos ignorar essa vulnerabilidade ?
• Exploits vão na contramão do que o
usuário está acostumado/ensinado
– O usuário aciona arquivos comuns de
dados (musicas, vídeos, documentos, etc)
• Ataque funciona em Protected Mode
sem emitir nenhum alerta
– Possível sem usar duplo-clique
– Ataques combinados
• Clickjacking
• Carpet Bomb
Ataque baseado em Binary Planting
Novinho
em folha !
Pequena Grande Lista de Aplicações Vulneráveis
Outra Lista de Aplicações Vulneráveis
Outra Lista de Aplicações Vulneráveis
Software de Forense –
Ooops !
Outra Lista de Aplicações Vulneráveis
Software de Segurança –
Oh-Oh ...
E para quem dizia que BP era inofensivo ...
Stuxnet
usou !
Stuxnet e Binary Planting
•
The threat then scans subfolders under the hOmSave7 folder. In each of them,
Stuxnet drops a copy of a DLL it carries within its resources. This DLL has a
particular name (we’ll refer to it as “xyz.dll”).
•
Stuxnet then modifies a Step7 data file located within the project folder
structure. Following this final step, the infection process is complete.
•
When an infected project is opened with Simatic manager, the modified data file
will trigger a search for the previously mentioned xyz.dll file. The following
folders are searched in the following order:
– The S7BIN folder of the Step7 installation folder
– The %System% folder
– The %Windir%\system folder
– The %Windir% folder
– Subfolders of the project’s hOmSave7 folder
•
If the xyz.dll file is not found in one of the first four above locations, the
malicious DLL will be loaded and executed by the manager. This DLL file acts as
a decryptor and loader for the copy of the main DLL located in
xutils\listen\xr000000.mdx. This strategy is very similar to the DLL Preloading
Attacks that emerged in August
Eis então ...
Binary Planting 101
Chamando dinamicamente uma DLL
• Carregando uma DLL
– LoadLibrary()
– LoadLibraryEx()
• Path absoluta ou relativa
– LoadLibrary(“c:\Windows\System32\xxx.dll”);
– LoadLibrary(“xxx.dll”)
Essa chamada é
vulnerável
Ordem de Busca de DLL
1. Diretório de onde a aplicação foi iniciada
2. Windows\System32
3. Windows\System
4. Windows
5. Diretório Corrente (CWD ou .)
6. Diretórios da PATH
Dá para manipular
maliciosamente
Exemplificando
•
LoadLibrary(“xyz.dll”)
1.
Diretório de onde a aplicação foi iniciada
2.
Windows\System32
3.
Windows\System
4.
Windows
5.
Diretório Corrente (CWD ou .)
6.
Diretórios da PATH
Localizou em
c:\Common\xyz.dll
Explorando
•
Atacante prepara xyz.dll maliciosa
•
Manipula CWD, apontando para o local da xyz.dll maliciosa
•
Ela é executada
•
LoadLibrary(“xyz.dll”)
1.
Diretório de onde a aplicação foi iniciada
2.
Windows\System32
3.
Windows\System
4.
Windows
5.
Diretório Corrente (CWD ou .)
6.
Diretórios da PATH
Mas a maliciosa será
encontrada primeiro e
executada
A xyz.dll legítima está
aqui em
c:\Common\xyz.dll
Manipulando o CWD
• Duplo-clique em um arquivo no Explorer
• Caixas de diálogo de Abrir Arquivo ou Salvar
Como
• Última localização de abertura ou salva de
arquivo
• Comando CD do command
• Atalhos
• CreateProcess e ShellExecute
Manipulando o CWD
Ataque local
Manipulando o CWD Remotamente
• Pode ser feito
– Acessando compartilhamentos SMB
• Comum estar bloqueado externamente no firewall
• Útil como ataque interno
– Acessando via WebDAV
• Muitas vezes liberado para acesso externo
• Ao alcance de atacantes remotos
Compartilhando via SMB
WebDAV a serviço do Binary Planting
WebDAV a serviço do Binary Planting
BP com outros arquivos
• Afeta executáveis com path relativa
– CreateProcess(“Programa.exe”)
– ShellExecute(“Programa.exe”)
– _spawn*p* e _exec*p*
• São ainda mais vulneráveis
– CWD é o segundo a ser buscado no CreateProcess
– CWD é o primeiro a ser buscado nos outros !
BP acontece também com não-executáveis
• Java Runtime Environment (JRE)
– Suporta arquivos de configuração
• .hotspotrc e .hotspot_compiler
– Esses arquivos são carregados do CWD
• Parâmetro OutOfMemoryError
– Indica um comando para ser executado caso dê erro
de memória
BP acontece também com não-executáveis
• Explorando
– Criamos um .hotspotrc com o parâmetro
OutOfMemoryError apontando para um .exe malicioso
– Criamos uma página html que instancia uma classe
java que sempre causa estouro de memória
– Colocamos no mesmo diretório a página html, a
classe java, o arquivo malicioso e o .hotspotrc
– O usuário é motivado a carregar a página html
• Isso faz o CWD do browser apontar para nosso
diretório
• O JRE vai herdar esse CWD e ler o .hotspotrc de lá
BP acontece também com não-executáveis
Duplo clique
aciona
carrega
classe
JRE
provoca
.hotspotrc
malicioso
.exe malicioso
Binary Planting e Componentes COM
• Componentes ficam configurados no Registry
– São acionados pelo GUID (CoCreateInstance)
– O registry indica o binário que será acionado
– Special Folders fornecem formas avançadas de exploração
Path relativa ==
vulnerável
BP x COM
• Explorando
– Atacante cria um diretório remoto, adicionando o
GUID específico de Special Folder
– Atacante coloca nesse diretório a dll maliciosa
• Deskpan.dll no WinXP
• EhTrace.dll no Win7
– Ataque possibilitado por
• duplo clique (diretório malicioso vira CWD)
• dois cliques simples (necessita de clickjacking)
– Não emite nenhum alerta do browser !
BP x COM – IE9 Protected Mode
– Usuário navega por página maliciosa que obfusca
acesso ao diretório com BP+GUID de Special Folder
• Primeiro clique torna o arquivo selecionado e altera o
CWD
• Segundo clique aciona Impressão desse arquivo
– Operação não causa alertas
• VERCLSID.exe instancia GUID do Special Folder
– Está na Lista Branca do browser !
– GUIDs específicos chamam PSISDECD.dll que chama
ehtrace.dll
– A ehtrace.dll maliciosa é carregada do diretório do
atacante
Hotfix MS
• CWDIlegalInDLLSearch
– Chave de Registry que permite evitar a busca de DLLs no
CWD
• Também pode impedir a carga de DLLs em WebDAV ou UNC
remotos
– Configurações gerais e por programa
– Ajuda a mitigar o problema em aplicações não corrigidas
• SetDllDirectory
– Função de API que altera a ordem de busca de DLLs
– Ajuda a mitigar o problema sem grandes alterações no
fonte
SetDllDirectory
• Ordem de busca SetDLLDirectory(“c:\qqpath\”)
– diretório onde a aplicação foi executada
– c:\qqpath\
– Windows\System32
– Windows\System
– Windows
– PATH
SetDllDirectory
• Ordem de busca SetDLLDirectory(“”)
• Retira completamente o CWD da busca
– diretório onde a aplicação foi executada
– Windows\System32
– Windows\System
– Windows
– PATH
Problemas do Hotfix
• Ajuda mas não resolve completamente
• Bug das variáveis que não expandem na PATH
– Afetam várias versões de Windows
– Ex: %CommonProgramFiles% deve expandir para
c:\Program Files\Common Files
– Se a variável não se expandir, ela vira uma path
relativa
• O atacante pode criar remotamente diretórios iguais à
path não expandida
• O Binary Planting funcionará caso haja chamada a uma
DLL que não exista
Explorando mesmo com Hotfix
• Atacante cria diretório remoto com
– Arquivo de dados da aplicação vulnerável
– Subdiretórios %SystemRoot%\System32\Wbem (literalmente
com os sinais de %)
– Coloca nesse subdir a DLL maliciosa
• O usuário é estimulado a clicar no arquivo de
dados
– Isso torna o diretório remoto como o CWD
• Se %SystemRoot%\System32\Wbem estiver na
PATH e %SystemRoot% não expandir
– Ataque com sucesso !
Forense de
Binary Planting
Que importância tem ?
• Descobrir a causa raiz é importante
– Um dos objetivos em Computação Forense
– Faz parte do Follow Up em Resposta a Incidentes
• Em IR
– Sem descobrir a causa raiz, o incidente se repetirá
– Incidentes repetidos -> CSO sem emprego ...
• Em Computação Forense
– Ao descobrir a causa raiz, pode-se evitar alegações
de negligência do usuário (phishing)
Mapeamento dos vestígios – SysInternals ProcMon
Vestígios na Memória
• Processos que foram alvos possuem
módulos carregados remotamente
– Ou então fora do local habitual
• Os módulos maliciosos carregados podem
ser recuperados
– Fuzzy Hash pode ajudar na identificação
de módulos maliciosos
Vestígios na Memória
• Arquivos de dados abertos pelo
processo
– Módulo (DLL) carregada a partir do mesmo
diretório de um arquivo de dados
• Conexões de Rede
– Poderá indicar a origem do arquivo de
dados e da DLL maliciosa
Vestígios de Rede
• Necessitam de monitoramento prévio para
captura
• Pacotes coletados irão conter
– Arquivo de dados da aplicação
– DLL carregada remotamente
– Origem do ataque
• Obviamente, ataques locais não deixam esse
vestígio ... :O
Vestígios de Disco
• Aplicações vulneráveis podem ser
localizadas no disco
– Filtragem por “known bad”
– ACROS Security disponibiliza
hashset
Vestígios de Disco
• Arquivos maliciosos plantados estarão presente
no disco
– Eles são carregados para um diretório de cache
webdav da máquina
• Vista/Win7:
\Windows\ServiceProfiles\LocalService\AppData\Local
\Temp\TfsStore\Tfs_DAV
• WinXP: :\Documents and
Settings\LocalService\Local Settings\Temporary
Internet Files
Vestígios do Sistema Operacional
• Recent Files
– Em caso de acionamento por duplo clique, o
atalho criado referenciará uma path remota
• Em ataques locais resta a correlação de paths
• Prefetch
– O arquivo binário carregado (DLL) terá path
remota
– Poderá ter também referencia remota ao
arquivo de dados
• Em ataques locais resta a correlação de paths
Vestígios do Sistema Operacional
• Registry
– Path remota no MRU do Open/Save As
• Ou na MRU da aplicação explorada
– Arquivo executado indicado no UserAssist
– Path remota no ShellBags
UserAssist
ShellBags
MRUs – Programa executado
MRUs – Arquivo de dados acessado
Projeto
Jardineiro
Projeto Jardineiro
• Foco em Pesquisa Forense de Binary
Planting
– Ferramentas
– Localização de novos artefatos
• Jardineiro
– Aplicativo Forense
– Correlação de vestígios
• Humus
– Aplicativo de busca estática de
aplicações vulneráveis
Jardineiro – Aplicativo
• Investigador fornecerá
– Dump de memória; e/ou
– Pcap do monitoramento de rede; e/ou
– Imagem Forense; e/ou
– Artefatos específicos
• Arquivos de Registry
• Arquivos de Atalho do Recent
• Arquivos de Prefetch
• Aplicação examinará artefatos fornecidos
– Por correlação, irá indicar a presença de BP
Desafios da Análise Dinâmica
• Exige monitoramento completo
– Algumas funções podem não ser ativadas
imediatamente (Slow Binary Planting)
– Alguns sw não identificam vulnerabilidades
justamente por isso
• Ex: SMSNIFF x DLLHijackAuditor
– Extensões não registradas impedem
identificação dinâmica automatizada
• É a base do DLLHijackAuditorKit
Nirsoft SMSniff é vulnerável
DLLHijackAuditor
Não identificou
automaticamente
DLLHijackAuditor
Só localizou após intervenção
DLLHijackAuditorKit
• Criado por HD Moore/Metasploit
• Testa apenas tipos de extensões registradas
– Vulnerabilidade pode ser acionada por Open
File em arquivo não registrado ...
• SMSniff x DLLHijackAuditorKit
– Extensão .ssp do SMSniff raramente está
registrada
– Arquivo .cfg pode estar registrado a muitas
outras aplicações
– Não vai acusar vulnerabilidade
Humus
• Investigação estática de Aplicações
vulneráveis
– Seguirá .exe e DLLs dependentes
– Indicará aplicações e componentes com a
vulnerabilidade de Binary Planting
– Não requer execução da aplicação
Status do projeto
• Sendo lançado hoje no H2HC8 !
• Necessita de colaboradores
– Coders
• Perl, Python, C, Assembly ???
– Testers
• Voluntários ?!?
Conclusão
Binary Planting é um problema
significativo porque:
Pode ser explorado facilmente
Pode ser explorado remotamente
Há muitas aplicações vulneráveis
Correções efetivas podem ser inviáveis
O Jardineiro é um projeto de código livre
para Forense de Binary Planting
O projeto precisa de colaboradores !
Referências
•
DllHijackAuditorKit
– http://blog.metasploit.com/2010/08/better-faster-stronger.html
•
DLLHijackAuditor
– http://securityxploded.com/dllhijackauditor.php
•
Binary Planting - The Official Web Site
– http://www.binaryplanting.com/
• ACROS Security Blog
– http://blog.acrossecurity.com/
•
CWDIllegalInDllSearch
– http://support.microsoft.com/kb/2264107
•
Remote Binary Planting
– Hack In The Box Amsterdam 2011
•
Automatic Detection of Vulnerable Dynamic Component Loadings
– http://www.cs.ucdavis.edu/research/tech-reports/2010/CSE-2010-2.pdf
•
Exploit Database
– http://www.exploit-db.com/dll-hijacking-vulnerable-applications/
Referências II
•
Corelan Team
– http://www.corelan.be/index.php/2010/08/25/dll-hijacking-kb-2269637the-unofficial-list/
•
Universal way to bypass Group Policy by Limited User
– http://dsecrg.blogspot.com/2011/07/universal-way-to-bypass-grouppolicy-by.html
•
Stuxnet Infection of Step 7 Projects
– http://www.symantec.com/connect/blogs/stuxnet-infection-step-7projects
•
Windows Applications Insecure Library Loading
– http://secunia.com/advisories/windows_insecure_library_loading/
•
Operating System Version
– http://msdn.microsoft.com/en-
us/library/windows/desktop/ms724832(v=vs.85).aspx
Sugestões de Leitura
http://forcomp.blogspot.com
http://www.e-evidence.info
OctaneLabs
• O que é OctaneLabs ???
• Grupo de Pesquisa Open
Source em Computação
Forense e Resposta a
Incidentes
OctaneLabs
• Objetivos
• Fomentar a pesquisa em
Computação Forense no Brasil
• Promover Projetos Open Source
com foco em Computação
Forense e Investigação
Digital
• Ministrar Treinamentos em CF
• Consultoria, Perícia e
Investigação Digital
OctaneLabs
• Projetos em andamento
• MUFFIN
• Byte Investigator
• Data Juicer
• Jardineiro
• Myriad
• Projetos esperando por você
• Slacker++
• FSJuicer
• Langoliers
We Want YOU !
www.octanelabs.net
@octanelabs
Obrigado !
inv.forense arroba
gmail ponto com
(Tony Rodrigues)