Blog bem humorado, na Lingua Portuguesa, destinado a assuntos de Segurança de Informações com ênfase em Resposta a Incidentes e Forense/Investigação Computacional.
domingo, 30 de março de 2008
Ajudinha em Perícia de Gravações
Pensando nisso, estava verificando que muitas vezes uma gravação de áudio é usada em juízo como prova. Em alguns casos, o conteúdo é questionado e pede-se a perícia da gravação, a fim de determinar sua autenticidade e integridade. Acontece que o MP3 player vem, já há algum tempo, substituindo aqueles gravadores pequenos nessas gravações. Esse fato pode ajudar na perícia porque, além dos resultados da análise do perito, temos agora pelo menos mais um artefato a considerar no estudo da integridade e autenticidade da evidência.
O fato é que a tecnologia comum usada nesses MP3 players é a de gerar um arquivo .WAV com baixa "resolução" de som, ou seja, com uma taxa de amostragem baixa. Com isso, o som digitalizado não fica um primor de qualidade, mas dá para o gasto e usa pouco espaço de armazenamento. O pulo do gato está justamente aqui: armazenamento.
Um MP3 player tem, em sua maioria, um dispositivo de memória muito parecido com o de um pen drive. Na maioria das vezes, há uma mídia formatada com FAT. O arquivo gerado, como qualquer outro arquivo em um Sistema de Arquivos FAT, possui MAC times, ou seja, possui registro das datas de criação, modificação e último acesso. O ponto aqui é que um aparelho MP3 não registra horas, já que não tem um relógio. Para simplificar, percebi que as gravações são colocadas em um diretório criado de fábrica. Ao armazenar a gravação em um .WAV, esse arquivo recebe as mesmas MAC times do diretório, o que significa que um ponto a pesquisar será o fato de que a MAC time do arquivo terá de estar necessariamente idêntica ao do diretório criado. Se tudo estiver certinho, todo o diretório terá arquivos .WAV com mesmas MAC times. Se o arquivo tiver datas de ultima modificação diferente dos demais, pode ser indicativo de manipulação. Datas diferentes para último acesso podem indicar que o arquivo foi acessado por fora do MP3 player.
O meu MP3 player, um Sandisk de 512 Mb, cria um diretorio VOICES para armazenar as gravações e todas as MAC times estão refletindo as MAC times desse diretório. Você gostaria de compartilhar dados de algum dispositivo MP3 ?
Até o próximo post !
Forense no CNASI
Precisamos de mais eventos que abordem e divulguem a Forense Computacional. Tive o cuidado de perceber que, nas três palestras que abordaram o assunto, a sala estava completamente lotada, prova de que o assunto tem bastante interessados.
Alguém mais esteve por lá e gostaria de comentar ?
Até o próximo post !
domingo, 2 de março de 2008
Live CDs
Helix | FCCU | FDTK | |
Versão atual | 1.9a | 12 | 1.0 |
Base do SO | Knoppix | Debian | Ubuntu |
Uso em Windows | Sim | Não | Não |
Aquisição GUI | Linen | ||
Adepto | |||
Air | Air | Air | |
GuyMager | |||
Aquisição CLI | SDD | sdd | sdd |
dd | dd | dd | |
dcfldd | dcfldd | dcfldd | |
rdd | rdd | ||
dd_rescue | dd_rescue | dd_rescue | |
dd_rhelp | dd_rhelp | dd_rhelp | |
dds2tar | |||
Análise e investigação | SleuthKit | SleuthKit | SleuthKit |
PyFLAG | PyFLAG | ||
Autopsy | Autopsy | Autopsy | |
Faust | |||
Allin1 | |||
Timeline | mac-robber | mac-robber | |
mac_grab | |||
Debugging | Fenris | ||
Limpeza de arquivos | wipe | wipe | wipe |
Carving | foremost | foremost | foremost |
Scalpel | Scalpel | ||
magicrescue | magicrescue | magicrescue | |
Recuperação | fatback | fatback | fatback |
e2recover | |||
testdisk | testdisk | testdisk | |
NTFSTools | |||
Scrounge-NTFS | |||
e2undel | e2undel | e2undel | |
recover | recover | ||
e2retrieve | |||
myrescue | |||
recoverdm | |||
safecopy | |||
setmax | setmax | ||
disktype | disktype | disktype | |
hash | md5deep | md5deep | md5deep |
sha1deep | sha1deep | sha1deep | |
2hash | |||
ssdeep | ssdeep | ||
Análise de Internet | Pasco | Pasco | Pasco |
Galleta | Galleta | Galleta | |
mork.pl | mork.pl | ||
cookie_cruncher.pl | cookie_cruncher.pl | ||
browser-history-viewer | |||
Arquivos windows | Rifiuti | Rifiuti | Rifiuti |
GrokEvt | |||
dumpster_dive.pl | |||
antiword | antiword | ||
mdbtools | mdbtools | ||
tnef | tnef | tnef | |
fccu-docprop | fccu-docprop | ||
fccu.evtreader | fccu.evtreader | ||
clit | |||
SlackSpace | Bmap | ||
Snapshot | Ftimes | Ftimes | |
Antivirus | chkrootkit | chkrootkit | chkrootkit |
rkhunter | rkhunter | rkhunter | |
F-Prot | |||
Clamav | Clamav | ||
Análise de Rede | ChaosReader | ||
tcpxtract | tcpxtract | tcpxtract | |
ngrep | |||
netwox | |||
tcpick | |||
tcptrack | |||
tcpflow | |||
netdude | |||
dsniff | |||
hunt | |||
snifit | |||
ethercap | |||
driftnet | |||
karpski | |||
nast | |||
scapy | |||
chatsniff | |||
msn-capture | |||
imsniff | |||
darkstat | |||
prismstumbler | |||
Hardware | lshw | lshw | lshw |
discover | discover | ||
scsitools | |||
scsiadd | |||
blktool | |||
Logs | logsh | ||
logfinder | |||
Busca por textos | Glimpse | ||
glark | glark | ||
sgrep | |||
Esteganografia | Outguess | Outguess | Outguess |
stegdetect | stegdetect | stegdetect | |
Análise de Registry | regviewer | ||
Reglookup | |||
Senhas | Chntpw | Chntpw | Chntpw |
cmospwd | |||
pwl | |||
john theripper | john the ripper | ||
lcrack | |||
crack | |||
samdump | |||
bkhive | |||
pgpcrack | |||
nasty | |||
fcrackzip | fcrackzip | ||
medussa | medussa | ||
hydra | |||
E-mail | grepmail | ||
readpst | readpst | readpst | |
ripole | |||
eindeutig | eindeutig | ||
Análise de Figuras/Fotos | Retriever | ||
Vinetto | Vinetto | ||
recoverjpeg | recoverjpeg | ||
FBI | FBI | ||
exiftags | exiftags | ||
exif | exif | ||
metacam | |||
jhead | jhead | ||
dcraw | dcraw | ||
jpeginfo | jpeginfo | ||
RecoverPhotos | |||
exifprobe | exifprobe | ||
FTP | lftp | lftp | lftp |
Criptografia | truecrypt | ||
cryptcat | cryptcat | cryptcat | |
bcrypt | bcrypt | ||
ccrypt | ccrypt | ||
Compressão de arquivos | lzop | lzop | lzop |
gzrecover | gzrecover | ||
zoo | zoo | ||
p7zip | p7zip | ||
orange | orange | ||
spantape | |||
unshield | unshield | ||
unrar | unrar | unrar | |
unace | unace | ||
mscompress | mscompress | ||
star | star | ||
nomarch | |||
Formatos de imagens | libewf | libewf | libewf |
mount-ewf | mount-ewf | ||
afflib | afflib | afflib | |
Análise de memória | ptfinder | ||
MetlStorm firewire | |||
Honeypot | Amun | ||
Análise de Malware | nephentes | nephentes | |
mwcollect |
Comentários ?
Até o próximo post !
Ata Notarial em parábolas ...
Você tem um filho e um sobrinho que estão discutindo na frente do vídeo game, quando você chega em casa, depois do trabalho. A gritaria toda entre os dois é porque cada um diz ser a própria vez de jogar com o melhor controle. Joãozinho diz que Zezinho usou o melhor controle muito mais do que ele durante o dia, enquanto Zezinho diz que estava compensando porque no dia anterior tiveram de ir dormir mais cedo e ele foi prejudicado.
Você, cansado, olha para um e para o outro e não tem a menor idéia de quem está correto, simplesmente porque cada um deles parece ter razão. Então, a sua esposa passa e você imagina: "posso perguntar a ela, já que ela deve ter visto...". Você interrompe os passos quando já estava indo na direção dela, simplesmente porque percebe que ela poderia ser tendenciosa, afinal, ela pode ter visto mas Joãozinho se trata do filhinho querido ... Como você não quer ter problemas com sua irmã, a dúvida continua.
Repentinamente, sua mãe aparece com sua caneca favorita de chá e três biscoitos daqueles de água e sal, indo em direção a varanda. Você percebe que está salvo, já que ela, apesar de não entender nada de videogame nem controle, também esteve de olho nos moleques e pode dizer: O Joãozinho usou esse grandão bacana aqui o dia todo ! Você sabe que o que ela disse é confiável, afinal, ambos são netos. Você então decide quem joga, fica tranquilo e sua noite segue em paz ...
A avó da história é o Tabelião. A Ata Notarial é uma espécie de descrição de tudo que ele viu acontecendo na frente dele.
Processos onde perícias são exigidas vão levantar questões de ambas as partes; Em alguns momentos, o que for alegado com base na análise forense realizada será questionado quanto a sua veracidade, integridade, etc. A quem o Juiz vai dar crédito ? Em alguém que ele pode confiar como isento nesse processo. Alguém que tem fé pública. Esse alguém é o Tabelião, e a Ata Notarial é o documento que vai atestar para o Juiz o que aconteceu. Baseado nisso, ele pode realizar melhor o seu julgamento.
Até o próximo post !
sexta-feira, 29 de fevereiro de 2008
FDTK 1.0
Pretendo lançar uma avaliação em breve desse liveCD aqui no Blog. Por hora, tome cuidado se for usá-lo em uma aquisição forense. Reparei que ele está montando todos os discos que detecta, o que vai contra as melhores práticas e abre a possibilidade de alteração indevida em uma mídia, criando problemas de integridade. Tenho certeza de que os autores vão corrigir isso na versão 1.01.
Há um ponto que não pode passar despercebido aqui. Esse LiveCD é um marco para a Forense Computacional no Brasil. Espero que seja a primeira de muitas versões e que os autores possam trabalhar nesse projeto com seriedade e compromisso. Será de grande benefício para toda a nossa comunidade.
Até o próximo post !
sábado, 23 de fevereiro de 2008
Imagens Forenses VI
Em um dos artigos sobre imagens forenses, eu comentei sobre como poderíamos montar imagens raw (.dd) divididas em pedaços menores. Por exemplo, você pode manter 5 arquivos de 2Gb (imagem.dd1, imagem.dd2 e por aí vai) ao invés de um único arquivo de 10Gb (imagem.dd). Isso facilita nos backups para DVDs (imagens costumam ser muito grandes) e é fundamental quando estamos lidando com o sistema de arquivos FAT, que não suporta arquivos com mais de 2Gb.
O método mais conhecido é remontar as partes antes do uso. O comando cat pode fazê-lo:
# cat imagem.dd* > imgcompleta.dd
O problema é que esse comando demora para finalizar e requer no mínimo o mesmo tamanho do arquivo inteiro como espaço livre no HD.
Quem deu alguma esperança nesse assunto foi a turma que desenvolveu o pyFLAG. Esse pacote, desenvolvido inicialmente pela Polícia Australiana, internamente aceita imagens de vários formatos, incluindo imagens split raw e imagens no formato Expert Witness (.E01).
Nas suas versões mais novas, o pyFLAG passou a disponibilizar utilitários que conseguem montar as imagens e deixá-las acessíveis. Dessa forma, tendo o pyFLAG instalado, aumentamos as nossas possilibidades, já que podemos montar vários tipos através desses utilitários. De acordo com a documentação, fazemos:
# pyflag_launch
Para montar uma imagem ewf de nome imagem.E01 no mounting point /mnt:
# pyflag_launch /pyflaginst/utilities/ fuse_loopback_subsystem.py /mnt -i ewf -filename imagem.E01
Para montar a primeira partição de uma imagem raw física que está particionada em vários arquivos (imagem.dd1, imagem.dd2, imagem.dd3, ...). Supondo que a imagem começa no setor 63, o comando fica:
# pyflag_launch /pyflaginst/utilities/ fuse_loopback_subsystem.py /mnt -i advanced -filename imagem.dd* -offset 63s
Em todos os casos, logo após comando acima, você achará um arquivo chamado mountme em /mnt. Esse arquivo poderá ser montado normalmente como uma imagem raw, via loopback:
# mount -o ro,loop mountme /outro/mounting/point
A má notícia ...
Nem tudo são flores, não é mesmo ? A má notícia dessa técnica é que a versão do pyFlag instalada no Helix 1.9a é a 0.80, bastante antiga e não tem as funcionalidades comentadas acima. A versão atual do pyFLAG é a 0.86RC1, lançada em 31 de janeiro de 2008.
O FCCU 12 infelizmente não veio com o pyFLAG.
O FDTK, um live CD Forense lançado recentemente como trabalho de fim de curso por dois estudantes brasileiros, vem com a versão 0.84 do pyFLAG; eu fiz os testes desse utilitário lá e ele não rodou como esperado.
A esperança é que conversei no Forum do Helix com o Drew Farrey, o responsável pela compilação do Helix, e ele me garantiu que o Helix 2.0 está no forno e vai vir arrebentando com tudo, inclusive com a versão mais nova do pyFlag. Também pretendo conversar com os criadores do FDTK para ver o que está dando errado com o pyFlag.
Enquanto isso, nada de imagens raw splitted ou montagem do ewf ... Ou alguém tem a solução para esses problemas ? Compartilhe conosco nos comentários !
Até o próximo post !
terça-feira, 12 de fevereiro de 2008
Carving
Vamos a um exemplo prático:
Uma feira de negócios é montada em um grande pavilhão. Para demarcar o local destinado ao estande de cada empresa, os organizadores dividem o espaço útil (as vias e corredores não contam) pelo tamanho mínimo de um estande, e com isso determinam que quantos estandes terá a feira. O espaço útil é então separado e dividido nos blocos de estandes.
Para facilitar a localização de cada estande, a organização associa letras aos corredores, e um número crescente a cada estande. Assim, o quarto estande do terceiro corredor seria o estande C4, e foi comprado pela empresa XXX. Na porta do pavilhão há uma lista com o nome de cada empresa em ordem alfabética e sua respectiva localização. Observamos, inclusive, que há empresas que compraram 3 estandes, para poder exibir seu material com mais liberdade.
Nessa pequena analogia, temos o seguinte:
- O pavilhão é a mídia, o HD.
- Os organizadores fazem o papel do sistema operacional.
- A divisão do pavilhão em corredores e unidades de locação (os estandes) é a formatação do disco.
- Uma empresa expositora seria um arquivo.
- A associação das letras e números seriam um endereço alocável.
- Uma empresa comprando um estande seria um arquivo alocado.
- A lista colocada na porta do pavilhão é a tabela de alocação do sistema de arquivos.
- Um estande não alugado é um setor livre para ser alocado.
- Uma empresa que aluga 3 estandes é um arquivo que ocupa 3 setores.
Pois bem, se você chega ao portão do pavilhão a procura da empresa XXX, você a procura na lista, verifica o endereço dela (C4) e se dirige até o local. Esse é o mesmo processo, de maneira resumida, é o que acontece quando se quer acessar determinado arquivo.
Agora, imagine o que aconteceria se a tal lista da entrada se perdesse ? O processo normal de busca da empresa não funcionaria mais, já que a lista sumiu.
Em termos de sistema de arquivos, é possível que a tabela seja corrompida, ou ainda que apenas uma parte do HD seja recuperada, e essa parte não tem a tabela de alocação. Nesses casos, entra em ação a técnica de carving, para achar arquivos no que parece um monte de bytes.
Como isso é feito ?
A técnica mais usada é baseada nos chamados magic numbers, são sequências de bytes que estão sempre presentes no arquivo, em geral no seu cabeçalho. Esses bytes funcionam como uma assinatura: Se forem achados, alguns itens são verificados e a estrutura é confirmada. Em geral, os programas de carving extraem os arquivos identificados das imagens para um diretório, disponibilizando-os para uso. Os arquivos JPEG sempre começam com ffd8 ffe0, por exemplo. Uma vez identificado que é o início de um JPEG, o cabeçalho é dissecado e o fim do arquivo determinado.
O grande problema é que em um sistema de arquivos nem sempre um arquivo ocupa setores contíguos. Conhecido como fragmentação de arquivos, isso acontece, por exemplo, quando um arquivo cujo tamanho ocupa 5 setores está para ser escrito no disco e encontra 3 setores contíguos livres, um setor já ocupado por um outro arquivo, e em seguida mais dois setores livres. O sistema operacional vai alocar o arquivo nesses 5 setores, marcando na tabela que esse arquivo ficou fragmentado. Tal situação ficaria mais ou menos assim:
Arquivo 1: AAAAA
Arquivo 2: B
No disco: AAABAA
Seguindo a técnica, os bytes do arquivo 2 vão parar no meio do arquivo 1 recuperado, estragando tudo !
Várias técnicas vem sendo pesquisadas para reduzir ou eliminar esse problema, e inclusive há um concurso anual de algoritmos e desafios envolvendo carving.
Algo que com certeza vai ajudar bastante é a técnica de montar hashsets dos arquivos conhecidos por setor. Essa técnica é baseada na filtragem de arquivos conhecidos por reconhecimento de seus hashes, como a biblioteca NSRL, só que, nesse caso, cada arquivo conhecido teria associado a ele o hashset de cada setor que esse arquivo ocupa em um disco. Durante uma operação de carving baseada nessa técnica, os setores seriam separados e reconhecidos contra a base de hashsets pelos seus hashes. No exemplo acima, calcularíamos o hash de cada um dos 6 setores, e depois o algoritmo verificaria o seguinte:
- O setor 1 é o primeiro setor do arquivo conhecido A
- O setor 2 é o segundo setor do arquivo conhecido A
- O setor 3 é o terceiro setor do arquivo conhecido A
- O setor 4 é o primeiro setor (ou único, no caso) do arquivo conhecido B
- O setor 5 é o quarto setor do arquivo conhecido A
- O setor 6 é o quinto setor do arquivo conhecido A
Facilita bastante. Logicamente, essa técnica tem alguns problemas; Os arquivos que não ocuparem um setor inteiro, bem como o último setor de um arquivo, não terão como serem reconhecidos, pois o calculo do hash seria influenciado pelo slack space (aquele espaço do setor que o arquivo não ocupou). Outro problema é que os hashsets serão criados para arquivos de programas, e não teremos obviamente hashsets para arquivos de fotos do usuário do HD, ou os seus documentos criados no editor de textos, por exemplo. Isso ajudará a eliminar setores, mas ainda pode não ser uma técnica definitiva.
Alguém tem alguma novidade com relação a essa técnica, ou conhece alguma iniciativa de montar hashsets para isso ? Por favor, compartilhe conosco nos comentários.
Até o próximo post !