
OSXCollector é um conjunto de ferramentas de coleta e análise de evidências forenses para OSX.
Coleção Forense
O script de coleção é executado em uma máquina potencialmente infectada e gera um arquivo JSON que descreve a máquina de destino. O OSXCollector reúne informações de listas, bancos de dados SQLite e sistema de arquivos local.
Análise Forense
Armado com a coleção forense, um analista pode responder à pergunta como:
- Esta máquina está infectada?
- Como esse malware chegou lá?
- Como posso prevenir e detectar mais infecções?
O Yelp automatiza a análise da maioria das execuções do OSXCollector, convertendo sua saída em um resumo facilmente legível e acionável das coisas suspeitas . Confira o projeto Filtros de Saída OSXCollector para aprender como aproveitar ao máximo a análise de saída automatizada do OSXCollector.
Performing Collectionosxcollector.py
é um único arquivo Python que é executado sem nenhuma dependência em uma máquina OSX padrão. Isso facilita muito a execução da coleção em qualquer máquina – sem preocupações com a mistura, pip, arquivos de configuração ou variáveis de ambiente. Basta copiar o arquivo único para a máquina e executá-lo: sudo osxcollector.py
é tudo o que é preciso.
$ sudo osxcollector.py
Wrote 35394 lines.
Output in osxcollect-2014_12_21-08_49_39.tar.gz
Se você acabou de clonar o repositório GitHub, osxcollector.py
está dentro do osxcollector/
diretório, então você precisa executá-lo como:
$ sudo osxcollector/osxcollector.py
IMPORTANTE: verifique se o python
comando na sua máquina Mac OS X usa o interpretador Python padrão fornecido com o sistema e não é substituído, por exemplo, pela versão Python instalada através do brew. O OSXCollector depende de algumas ligações nativas do Python para bibliotecas do OS X, que podem não estar disponíveis em outras versões do Python que não aquela originalmente instalada no seu sistema. Como alternativa, você pode executar osxcollector.py
explicitamente especificando a versão do Python que gostaria de usar:
$ sudo /usr/bin/python2.7 osxcollector/osxcollector.py
A saída JSON do coletor, juntamente com alguns arquivos úteis, como logs do sistema, foi empacotada em um arquivo .tar.gz para transferência para um analista. osxcollector.py
também possui muitas opções úteis para alterar o funcionamento da coleção:
-i INCIDENT_PREFIX
/--id=INCIDENT_PREFIX
: Define um identificador usado como prefixo do arquivo de saída. O valor padrão éosxcollect
.$ sudo osxcollector.py -i IncontinentSealord Wrote 35394 lines. Output in IncontinentSealord-2014_12_21-08_49_39.tar.gz
Seja criativo com nomes de incidentes, pois é mais fácil rir da dor.-p ROOTPATH
/--path=ROOTPATH
: Define o caminho para a raiz do sistema de arquivos para executar a coleção. O valor padrão é/
. Isso é ótimo para executar a coleção na imagem de um disco.$ sudo osxcollector.py -p '/mnt/powned'
-s SECTION
/--section=SECTION
: Executa apenas uma parte da coleção completa. Pode ser especificado mais de uma vez. A lista completa de seções e subseções é:version
system_info
kext
startup
launch_agents
scripting_additions
startup_items
login_items
applications
applications
install_history
quarantines
downloads
downloads
email_downloads
old_email_downloads
chrome
history
archived_history
cookies
login_data
top_sites
web_data
databases
local_storage
preferences
firefox
cookies
downloads
formhistory
history
signons
permissions
addons
extension
content_prefs
health_report
webapps_store
json_files
safari
downloads
history
extensions
databases
localstorage
extension_files
accounts
system_admins
system_users
social_accounts
recent_items
mail
full_hash$ sudo osxcollector.py -s 'startup' -s 'downloads'
-c
/--collect-cookies
: Coleta o valor dos cookies. Por padrão, o OSXCollector não descarta o valor de um cookie, pois pode conter informações confidenciais (por exemplo, ID da sessão).-l
/--collect-local-storage
: Colete os valores armazenados no armazenamento local dos navegadores da web. Por padrão, o OSXCollector não despeja os valores, pois eles podem conter informações confidenciais.-d
/--debug
: Ativa pontos de interrupção detalhados de saída e python. Se algo estiver errado com o OSXCollector, tente isso.$ sudo osxcollector.py -d
Detalhes da coleção
O coletor gera a.tar.gz
contendo todos os artefatos coletados. O arquivo contém um arquivo JSON com a maioria das informações. Além disso, um conjunto de logs úteis dos logs do sistema de destino está incluído.
Chaves comuns a
cada registro
Cada linha do arquivo JSON registra 1 parte de informação . Existem algumas chaves comuns que aparecem em todos os registros JSON:
osxcollector_incident_id
: Um ID exclusivo compartilhado por cada registro.osxcollector_section
: A seção ou tipo de dados que esse registro contém.osxcollector_subsection
: A subseção ou descritor mais detalhado do tipo de dados que esse registro mantém.
Registros de arquivo
Para registros que representam arquivos, existem várias chaves úteis:
atime
: O tempo de acesso ao arquivo.ctime
: A hora de criação do arquivo.mtime
: O horário da modificação do arquivo.file_path
: O caminho absoluto para o arquivo.md5
: Hash MD5 do conteúdo do arquivo.sha1
: Hash SHA1 do conteúdo do arquivo.sha2
: Hash SHA2 do conteúdo do arquivo.
Para registros representando arquivos baixados:
xattr-wherefrom
: Uma lista que contém os URLs de origem e de referência do arquivo baixado.xattr-quarantines
: Uma sequência que descreve qual aplicativo baixou o arquivo.
Registros SQLite
Para registros que representam uma linha de um banco de dados SQLite:
osxcollector_table_name
: O nome da tabela da qual a linha vem.osxcollector_db_path
: O caminho absoluto para o arquivo SQLite.
Para registros que representam dados associados a um usuário específico:
osxcollector_username
: O nome do usuário
Registros de data e hora O OSXCollector tenta converter registros de data e hora em seqüências de data / hora legíveis por humanos no formato YYYY-mm-dd hh:MM:ss
. Ele usa heurísticas para identificar automaticamente vários registros de data e hora:
- segundos desde a época
- milissegundos desde a época
- segundos desde 01-01-2001
- segundos desde 1601-01-01
version
Seção Seções
A versão atual do OSXCollector.
system_info
seção
Coleta informações básicas sobre o sistema:
- nome do sistema
- nome do nó
- liberação
- versão
- máquina
kext
seção
Coleta as extensões do Kernel de:
/System/Library/Extensions
/Library/Extensions
startup
seção
Coleta informações sobre os LaunchAgents , LaunchDaemons, ScriptingAdditions, StartupItems e outros itens de logon em:
/System/Library/LaunchAgents
/System/Library/LaunchDaemons
/Library/LaunchAgents
~/Library/LaunchAgents
/Library/LaunchDaemons
/System/Library/ScriptingAdditions
/Library/ScriptingAdditions
/System/Library/StartupItems
/Library/StartupItems
~/Library/Preferences/com.apple.loginitems.plist
Mais informações sobre a inicialização do Max OS X podem ser encontradas aqui: http://www.malicious-streams.com/article/Mac_OSX_Startup.pdf
applications
seção
Hashes aplicativos instalados e reúne o histórico de instalações de:
/Applications
~/Applications
/Library/Receipts/InstallHistory.plist
quarantines
seção
Quarentena são basicamente as informações necessárias para mostrar a mensagem ‘Tem certeza de que deseja executar isso?’ quando um usuário está tentando abrir um arquivo baixado da Internet. Para obter mais detalhes, consulte a explicação do Suporte da Apple para quarentenas: http://support.apple.com/kb/HT3662
Esta seção também coleta informações da verificação de malware baseado em hash XProtect para arquivos de quarentena. A lista está em: /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/XProtect.plist
XProtect também adiciona versões mínimas para plug-ins da Internet. Essa lista está em:/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/XProtect.meta.plist
downloads
seção
Hashes arquivos baixados de todos os usuários em:
~/Downloads
~/Library/Mail Downloads
~/Library/Containers/com.apple.mail/Data/Library/Mail Downloads
chrome
seção
Coleta as seguintes informações do navegador Google Chrome:
- História
- História arquivada
- Biscoitos
- Extensões
- Dados de login
- Melhores sites
- Dados da Web
Esses dados são extraídos da ~/Library/Application Support/Google/Chrome/Default
firefox
seção
Coleta informações dos diferentes bancos de dados SQLite em um perfil do Firefox:
- Biscoitos
- Transferências
- Histórico do formulário
- História
- Signons
- Permissões
- Addons
- Extensões
- Preferências de Conteúdo
- Relatório de saúde
- Loja Webapps
Essas informações são extraídas de ~/Library/Application Support/Firefox/Profiles
Para obter mais detalhes sobre a pasta de perfil do Firefox, consulte a seção http://kb.mozillazine.org/Profile_folder_-_FirefoxColeta informações dos diferentes plists e bancos de dados SQLite em um perfil do Safari:
safari
- Transferências
- História
- Extensões
- Bases de dados
- Armazenamento local
accounts
seção
Coleta informações sobre as contas dos usuários:
- administradores do sistema:
/private/var/db/dslocal/nodes/Default/groups/admin.plist
- usuários do sistema:
/private/var/db/dslocal/nodes/Default/users
- contas sociais:
~/Library/Accounts/Accounts3.sqlite
- itens recentes dos usuários:
~/Library/Preferences/com.apple.recentitems.plist
mail
seção
Hashes arquivos nos diretórios do aplicativo de email:
~/Library/Mail
~/Library/Mail Downloads
full_hash
seção
Hashes todos os arquivos no disco. Todos eles. Isso não é executado por padrão. Deve ser acionado com:
$ sudo osxcollector.py -s full_hash
Análise manual básica A análise
forense é um pouco de arte e um pouco de ciência. Todo analista verá uma história um pouco diferente ao ler a saída do OSXCollector. Isso faz parte do que torna a análise divertida.
Geralmente, a coleta é realizada em uma máquina de destino porque algo é hinky: o antivírus encontrou um arquivo que não gosta, a inspeção profunda de pacotes observou uma chamada, o monitoramento do ponto de extremidade notou um novo item de inicialização. Os detalhes desse alerta inicial – um caminho de arquivo, um carimbo de data / hora, um hash, um domínio, um IP etc. – são suficientes para prosseguir. Registros de
data e hora
Simplesmente cumprimentar alguns minutos antes e depois de um registro de data e hora funciona muito bem:
$ cat INCIDENT32.json | grep '2014-01-01 11:3[2-8]'
Histórico do navegador
Está lá. Uma ferramenta como o jq pode ser muito útil para obter resultados sofisticados:
$ cat INCIDENT32.json | grep '2014-01-01 11:3[2-8]' | jq 'select(has("url"))|.url'
Um único usuário
$ cat INCIDENT32.json | jq 'select(.osxcollector_username=="ivanlei")|.'
Análise automatizada
O projeto OSXCollector Output Filters contém filtros que processam e transformam a saída do OSXCollector. O objetivo dos filtros é facilitar a análise da saída do OSXCollector.
Dicas de Desenvolvimento
A funcionalidade do OSXCollector é armazenado em um único arquivo:osxcollector.py
. O coletor deve ser executado em uma instalação simples do OS X sem nenhum pacote ou dependência adicional.
Certifique-se de que todos os testes do OSXCollector sejam aprovados antes de editar o código-fonte. Você pode executar os testes usando:make test
Após fazer alterações no código-fonte, executemake test
novamente para verificar se suas alterações não interromperam nenhum dos testes.
Licença
Este trabalho está licenciado sob a GNU General Public License e uma derivação dehttps://github.com/jipegit/OSXAuditor
Postagem no blog
- OSXCollector: Coleção forense e análise automatizada para OS X de Ivan Leichtling
Apresentações
- OSXCollector: Coleta e análise automatizada de evidências forenses para OS X por Kuba Sendor @ BruCON 0x07
- Squashing Rotten Apples: Análise e análise forense automatizada para Mac OS X com OSXCollector por Kuba Sendor @ BSides Manchester 2015
- OSXCollector por Ivan Leichtling @ Encontro de agosto de Macbrained
- OSXCollector – Coleta e análise automatizada de evidências forenses para OS X por Ivan Leichtling @ OpenNSM
- OSXCollector – Coleta e análise automatizada de evidências forenses para OS X por Ivan Leichtling @ Duo Tech Talk ( publicação no blog )
Apresentações externas
- Arqueologia OSX: Tornando-se Indiana Jones com OSXCollector e Strata por Chris Henderson & Justin Larson @ SAINTCon 2015
Recursos
Deseja saber mais sobre a análise forense do OS X?
- Sarah Edward’s mac4n6.com – As melhores apresentações em Mac forense.
Algumas outras ferramentas interessantes:
- KnockKnock – KnockKnock é um script python de linha de comando que exibe binários persistentes do OS X configurados para serem executados automaticamente em cada inicialização.
- Grr – Google Rapid Response: análise forense remota ao vivo para resposta a incidentes
- osquery – instrumentação, monitoramento e análise de sistema operacional com SQL