Friday, January 22, 2010

Google Chrome Forensics

A algum tempo atrás o Google anunciou um novo browser no mercado. Com tantas opções disponíveis, o Chrome logo se destacou pela interface absurdamente limpa, tal como o buscador de tanto sucesso da empresa.






Neste artigo vou falar um pouco sobre o Chrome e como ele armazena alguns dados, como histórico da navegação e também histórico de downloads, por exemplo.


O Google armazena o histórico do navegador Chrome em um banco de dados SQLite, não muito diferente do Firefox. No entanto, a estrutura do arquivo de banco de dados é bastante diferente.

Chrome armazena seus arquivos nos seguintes locais:

  • Linux: /home/$USER/.config/google-chrome/
  • Linux: /home/$USER/.config/chromium/
  • Windows Vista e Windows 7: C:\Users\[USERNAME]\AppData\Local\Google\Chrome
  • Windows XP: C:\Documents and Settings\[USERNAME]\Local Settings\Application Data\Google\Chrome
Existem duas versões diferentes do Google Chrome para Linux, nos pacotes oficial distribuído pela Google, que armazena os dados no diretório do Google Chrome e distribuições do Linux versão Chromium.

O arquivo de dados que contém o histórico de navegação é armazenado na pasta padrão como "History" e pode ser examinada através de qualquer navegador Sqllite existente (como sqlite3). As tabelas disponíveis são:  

  • downloads
  • presentation
  • urls
  • keyword_search_terms
  • segment_usage
  • visits
  • meta
  • segments
As tabelas mais relevantes para o histórico de navegação são: URLs (contém todas as URLs visitadas), VISITS (contém, entre outras informações, o tipo de visita e os timestamps) e finalmente os "DOWNLOADS" (contém uma lista dos arquivos baixados).

Se formos analisar a tabela de urls por exemplo, usando sqlite3 podemos ver:

sqlite.schema urls
CREATE TABLE urls(id INTEGER PRIMARY KEY,url LONGVARCHAR,title LONGVARCHAR,visit_count INTEGER DEFAULT 0 NOT NULL,
typed_count INTEGER DEFAULT 0 NOT NULL,last_visit_time INTEGER NOT NULL,hidden INTEGER DEFAULT 0 NOT NULL,
favicon_id INTEGER DEFAULT 0 NOT NULL);
CREATE INDEX urls_favicon_id_INDEX ON urls (favicon_id);
CREATE INDEX urls_url_index ON urls (url);
  
E a tabela de visitas:
sqlite.schema visits
CREATE TABLE visits(id INTEGER PRIMARY KEY,url INTEGER NOT NULL,visit_time INTEGER NOT NULL,from_visit INTEGER,transition INTEGER DEFAULT 0 NOT NULL,segment_id INTEGER,is_indexed BOOLEAN);
CREATE INDEX visits_from_index ON visits (from_visit);
CREATE INDEX visits_time_index ON visits (visit_time);
CREATE INDEX visits_url_index ON visits (url);
Assim, podemos construir uma query SQL para obter algumas informações sobre o hábito de navegação do usuário.

SELECT urls.url, urls.title, urls.visit_count, urls.typed_count, urls.last_visit_time, urls.hidden, visits.visit_time, visits.from_visit, visits.transition
FROM urls, visits
WHERE
 urls.id = visits.url
Esta query SQL retorna todos os URLs que o usuário visitou juntamente com a contagem de visitas, o tipo e a data e hora.

Se formos analisar as informações de data / hora da tabela de VISITS nós podemos ver que eles são formatados como o número de microssegundos desde a meia-noite UTC de 1 de janeiro de 1601.

Se dermos uma olhada no esquema da tabela de DOWNLOADS, veremos :
CREATE TABLE downloads (id INTEGER PRIMARY KEY,full_path LONGVARCHAR NOT NULL,url LONGVARCHAR NOT NULL,
start_time INTEGER NOT NULL,received_bytes INTEGER NOT NULL,total_bytes INTEGER NOT NULL,state INTEGER NOT NULL);
 
E ao examinar a hora (o start_time), podemos ver que ele é armazenado no formato Epoch.

Há mais uma coisa interessante para mencionar na tabela VISITS . É a coluna "transition". Este valor descreve como a URL foi carregado no navegador.


(In)felizmente o navegador Chrome tem um modo de privacidade chamado "modo incognito". Este recurso pode ser acessado pressionando as teclas CTRL + SHIFT + N com o navegador em foco.


Em brebe irei postar como fazer este trabalho utilizando a ferramenta EnCase, da Guidance.

Ate lá!

1 comment:

Anonymous said...

EXCELENTE MATÉRIA!

Post a Comment