- Back to Home »
- Análise Forense , Browsers , Cache , Cookies , Firefox , Javascript Object Notation Format , JSON , Mozilla Firefox , Mozilla Foundation , Nirsoft , profiles.ini , SQLite , sqlite3 »
- Análise Forense em Browsers - Mozilla Firefox
quarta-feira, 19 de fevereiro de 2014
Neste tópico vamos ver como partes fundamentais de analise forense em browsers Mozilla Firefox, vulgarmente conhecidos por Firefox.
Breve história do Firefox:
Mozilla Firefox é um browser livre e multiplataforma desenvolvido pela Mozilla Foundation que conta com a ajuda de centenas de colaboradores.
A intenção da fundação é desenvolver um browser leve, seguro, intuitivo e altamente extensível.
Com mais de 25 milhões de downloads nos primeiros 99 dias após o lançamento, o Firefox tornou-se uma das aplicações em código-livre mais usadas por utilizadores domésticos.
Atingiu marca de 50 milhões de downloads em 29 de abril de 2005, aproximadamente 6 meses após o lançamento da versão 1.0.
A 26 de julho de 2005, o Firefox alcançou os 75 milhões de downloads, e a 19 de outubro de 2005 alcançou os 100 milhões de downloads, antes de completar o primeiro ano da versão 1.0 .
Em 26 de julho de 2012 estariam disponíveis cerca de 17.000 add-ons e já contavam com 3 bilhões de downloads.
O Firefox destaca-se como alternativa ao Microsoft Internet Explorer e reativou a chamada Guerra dos browsers.
Segundo a StatCounter, atualmente cerca de 20,01% de todos os utilizadores da Internet de todo o mundo utilizam o Firefox, sendo o terceiro browser mais usado.
O browser tem tido sucesso particular na Indonésia, Alemanha e Polónia, onde ele é o browser mais popular com 58%, 45% e 44% do mercado de participação.
Análise:
Como dito em cima o Firefox é um browser open-source multiplataforma, existem versões em Windows, Linux e Mac OSX.
Diretórios de interesse do Firefox:
Windows XP e versões anteriores:
C:\Documents and Settings\%username\Local Settings\Application Data\Mozilla\Firefox\Profiles
Windows Vista e 7:
C:\Users\%username%\%appdata%\Mozilla\Firefox\Profiles
Windows 8:
C:\Users\%username%\AppData\Roaming\Mozilla\Firefox\Profiles
Linux:
/home/$username/.mozilla/firefox/Profiles
Mac OS X:
/Users/$username/Library/Application Support/Firefox/Profiles/
Profiles.ini:
Neste diretório encontra-se um ficheiro de nome 'profiles.ini', este ficheiro contém informação e server para gerir perfis do Firefox. O ficheiro está em texto simples, e pode ser facilmente aberto, visualizado e editado utilizando um editor de texto tipo Notepad.
O exemplo que se segue mostra o conteúdo do profiles.ini para um único perfil:
Caminho Linux: /home/$username/.mozilla/firefox/profiles.ini
[General]
StartWithLastProfile=1
[Profile0]
Name=default
IsRelative=1
Path=ozxfg1g3.default
Quando o Firefox começa este ficheiro ajuda a determinar que diretório de utilizador carregar. Como é possível verificar a variável path aponta para o diretório que contem os dados do perfil.
Em ambientes com contas múltiplas, a variável StartWithLastProfile=1 faz com que o Firefox salte a pergunta que perfil quer utilizar e usa o ultimo perfil usado por defeito. Com ambientes múltiplos existem perfis adicionais e o ultimo a ser usado está indicado pela variável Default=1, como é possível verificar no exempla abaixo:
[General]
StartWithLastProfile=1
[Profile0]
Name=default
IsRelative=1
Path= profiles/ozxfg1g3.default
[Profile1]
Name=alicew
IsRelative=0
Path=Profiles/1w0ed5ct.emanuel
Default=1
[Profile2]
Name=sheldon
IsRelative=0
Path=Dfgh5ty.dadinho
De acordo com o exemplo anterior a variável IsRelative=1 refere que ozxfg1g3.default é o diretório por defeito do Firefox.
IsRelative=0 refere a outros perfis personalizados.
StartWithLastProfile=1 valida a opção "Não voltar a perguntar no arranque - Don't ask at start up". Neste exemplo o último perfil usado foi o 1w0ed5ct.emanuel porque a variável Default=1 .
Basicamente isto é tudo o que há a saber sobre gestão de perfis no Firefox.
Dentro de um diretório de perfil especifico pode-se encontrar ficheiros e subdiretórios. O Firefox guarda dados em ficheiros base de dados SQLite. Estes ficheiros são aqueles que têm o grosso das provas numa pesquisa forense.
Formhistory.sqlite - Contém dados sobre o histórico de usernames, inputs submetidos e inputs em caixas de pesquisa, etc...
Places.sqlite - Contém todo o histórico de páginas visitadas.
Download.sqlite - Contém informação sobre os ficheiros descarregados.
Cookies.sqlite - Contém informação sobres os cookies dos sites visitados.
Signons.sqlite - Contém as passwords salvas no Firefox.
Formhistory.sqlite:
Este ficheiro de base de dados do tipo SQLite contém nomes, usernames, emails, e todos os tipos de inputs introduzidos pelo utilizador. Para podermos abrir este tipo de ficheiro necessitamos de uma ferramenta que abra e interprete SQLite, o sqlite3 faz esse trabalho.
A base de dados Formhistory.sqlite contém as colunas:
id; fieldname; value; timesUsed; firstUsed; lastUsed;
Fazemos uma query simples:
select * from moz_formhistory;
Que nos devolve o seguinte resultado:
1|searchbar-history|chrome download|1|1360055150428512|1360055150428512
2|searchbar-history|skype|1|1360055164035421|1360055164035421
3|username|Un0wn_X|1|1360208052290891|1360208052290891
É possível ter o output em .csv, usando os seguintes passos:
.headers on
.mode csv
.output file.csv
select * from moz_formhistory;
Histórico Web (Place.sqlite):
Todo o histórico de navegação na internet via Firefox fica guardado na base de dados places.sqlite, ficheiro que contém múltiplos esquemas (schemas).
As tabelas que fazem parte do places.sqlite são:
moz_anno_attributes;
moz_favicons;
moz_keywords;
moz_annos;
moz_historyvisits;
moz_places;
moz_bookmarks;
moz_inputhistory;
moz_bookmarks_roots;
moz_items_anos;
Para encontrar as URLs visitadas e a data de visita temos que de fazer uma query à tabela moz_places e utilizando a coluna visit_date da tabela moz_historyvisits.
A coluna id na tabela moz_places corresponde à coluna place_id na tabela moz_historyvisits. A coluna visited_date está convertida em PRTime (um integer 64-bits de contagem em microssegundos).
A query seguinte devolve o resulta de uma forma fácil de ler:
SELECT datetime(moz_historyvisits.visit_date/1000000,'unixepoch'), moz_places.url FROM moz_places,moz_historyvisits WHERE moz_places.id = moz_historyvisits.place_id ;
Resultado:
2013-02-06 14:58:20;http://allblogsl.blogspot.com/
2013-02-06 14:57:13;http://allblogsl.blogspot.com/2013/02/rooting-kioptrix-4.html
2013-02-06 14:52:59;http://forum.intern0t.org/
2013-02-06 14:55:23;http://forum.intern0t.org/
2013-02-06 14:55:21;http://gmail.com/
2013-02-06 14:56:31;http://facebook.com/
2013-02-06 14:56:44;http://google.com/ncr
2013-02-06 14:55:38;http://www.youtube.com/music
2013-02-06 14:55:41;http://www.unownsec.blogspot.com
2013-02-06 14:56:10;http://www.exploit-db.com/ghdb/3807
2013-02-06 14:56:40;http://www.exploit-db.com/ghdb/3808
2013-02-06 14:56:36;http://www.facebook.com/
2013-02-06 15:01:04;http://www.zub-moon.com/
2013-02-06 14:53:16;https://encrypted.google.com/
2013-02-06 14:55:31;https://encrypted.google.com/
2013-02-06 14:53:40;https://encrypted.google.com/search?q=sadsad&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a
2013-02-06 14:53:02;https://forum.intern0t.org/forum.php
2013-02-06 14:55:28;https://forum.intern0t.org/forum.php
Marcadores/Bookmarks (Place.sqlite):
Marcadores também são guardados na base de dados places.sqlite. Para obtermos os marcadores temos de nos focar nas tabelas moz_bookmarks, moz_places e moz_items_anons.
Utilizando a query seguinte conseguimos extrair os marcadores guardados no Firefox:
SELECT moz_bookmarks.type, moz_bookmarks.title, moz_bookmarks.dateAdded, moz_bookmarks.lastModified, moz_places.url, moz_places.title, moz_places.rev_host, moz_places.visit_count FROM moz_places, moz_bookmarks WHERE moz_bookmarks.fk = moz_places.id AND moz_bookmarks.type <> 3;
Resultado:
type;title;dateAdded;lastModified;url;title;rev_host;visit_count
1;Getting Started;1356598969855000;1356598969856000;http://www.mozilla.com/en-US/firefox/central/;;moc.allizom.www.;0
1;Help and Tutorials;1356598969859000;1356598969861000;http://www.mozilla.com/en-US/firefox/help/;;moc.allizom.www.;0
1;Customize Firefox;1356598969862000;1356598969865000;http://www.mozilla.com/en-US/firefox/customize/;;moc.allizom.www.;0
1;Get Involved;1356598969866000;1356598969867000;http://www.mozilla.com/en-US/firefox/community/;;moc.allizom.www.;0
1;About Us;1356598969868000;1356598969869000;http://www.mozilla.com/en-US/about/;;moc.allizom.www.;0
1;Most Visited;1356598970368000;1356598970372000;place:redirectsMode=2&sort=8&maxResults=10;;;0
Utilizaremos a mesma query mas desta vez com as datas legíveis:
SELECT moz_bookmarks.type, moz_bookmarks.title, datetime(moz_bookmarks.dateAdded/1000000,'unixepoch'), datetime(moz_bookmarks.lastModified/1000000,'unixepoch'), moz_places.url, moz_places.title, moz_places.rev_host, moz_places.visit_count FROM moz_places, moz_bookmarks WHERE moz_bookmarks.fk = moz_places.id AND moz_bookmarks.type <> 3;
Resultado:
1;Getting Started;2012-12-27 09:02:49;2012-12-27 09:02:49;http://www.mozilla.com/en-US/firefox/central/;;moc.allizom.www.;0
1;Help and Tutorials;2012-12-27 09:02:49;2012-12-27 09:02:49;http://www.mozilla.com/en-US/firefox/help/;;moc.allizom.www.;0
1;Customize Firefox;2012-12-27 09:02:49;2012-12-27 09:02:49;http://www.mozilla.com/en-US/firefox/customize/;;moc.allizom.www.;0
1;Get Involved;2012-12-27 09:02:49;2012-12-27 09:02:49;http://www.mozilla.com/en-US/firefox/community/;;moc.allizom.www.;0
1;About Us;2012-12-27 09:02:49;2012-12-27 09:02:49;http://www.mozilla.com/en-US/about/;;moc.allizom.www.;0
1;Most Visited;2012-12-27 09:02:50;2012-12-27 09:02:50;place:redirectsMode=2&sort=8&maxResults=10;;;0
1;Recently Bookmarked;2012-12-27 09:02:50;2012-12-27 09:02:50;place:folder=BOOKMARKS_MENU&folder=UNFILED_BOOKMARKS&folder=TOOLBAR&queryType=1&sort=12&excludeItemIfParentHasAnnotation=livemark%2FfeedURI&maxResults=10&excludeQueries=1;;;0
1;Recent Tags;2012-12-27 09:02:50;2012-12-27 09:02:50;place:type=6&sort=14&maxResults=10;;;0
Dados de sessões salvas (Saved Sessions Data):
Quando o Firefox "crasha" ou quando não é terminado corretamente um ficheiro de nome sessiondata.js é criado e guardado, este ficheiro ajuda o Firefox a restaurar a sessão que não terminou de maneira correta.
O Firefox guarda este ficheiro em formato JSON (Javascript Object Notation Format), que pode ser visualizado com qualquer editor de texto tipo Notepad, mas os dados estarão desorganizados e será de difícil leitura. Para vermos o ficheiro estruturado e organizado utilizaremos um o JSON Viewer, um visualizador de ficheiros JSON.
Utilizando o JSON Viewer conseguimos pesquisar mais facilmente tabelas, janelas, inputs e cookies temporários da ultima sessão que foi interrompida.
Passwords (Signons.sqlite):
O Firefox guarda as passwords salvas na base de dados signons.sqlite, juntamente com o ficheiro encriptado key3.db . Existem vários softwares que ajudam a recuperação das passwords, tais como Firepassword Viewer, FirePass, FireMaster Linux e FirePassword.
Utilizando a query seguinte conseguimos extrair alguns dados interessantes dos utilizadores e passwords guardadas no Firefox:
SELECT id, hostname, httpRealm, formSubmitURL, usernameField, passwordField, encryptedUsername, encryptedPassword, guid, encType, datetime(timeCreated/1000000,'unixepoch'), datetime(timeLastUsed/1000000,'unixepoch'),datetime(timePasswordChanged/1000000,'unixepoch'), timesUsed FROM moz_logins
Resultado:
1;http://sup3rscorner.net;;http://sup3rscorner.net;login;password;MDIEEPgAABBBBAAACC CCCEwFAYIKoZIhvcWEQFnKrGFEqqqweRQTS3dEzNNCg==;MFoE EPgAAAAAAAWWWWWWAAEwFAYIKosklasvcNAwcECF2QDIfJd2/YBDAtTffkYu31kBzq0LXr7WmnYxCmoDvtGBh5O1bhOpnKLOpoW 2HYjOWl8HYldG2Vd/A=;{fcbb7594-2fd5-43ce-aa5f-f80304e6c468};1;2012-12-27 09:02:49;2012-12-27 09:02:49;2012-12-27 09:02:49;1
Cache:
Visualizar a cache também é muito importante. A cache tal como no Internet Explorer está dividida por vários ficheiros e vários diretórios. Vamos utilizar a ferramenta Mozillacacheview, outra ferramenta da distribuidora Nirsoft, sem esta ajuda preciosa não conseguiríamos obter o conteúdo do que está em cache.
Para fazer um dump da informação da cache para um ficheiro texto, temos que executar o mozillacacheview via linha de comandos, utilizando o seguinte comando:
MozillaCacheView.exe /stext cache.txt
Obtemos o seguinte resultado:
==================================================
Filename : 1.xml
Content Type : text/xml; charset=utf-8
URL : https://addons.mozilla.org/blocklist/3/%7Bec8030f7-c20a-464f-9b0e-13a3a9e97384%7D/11.0/Firefox/20120228210006/WINNT_x86-msvc/en-US/beta/Windows_NT%206.1/default/default/8/23/1
File Size : 48,359
Fetch Count : 1
Last Modified : 2/7/2013 10:53:57 PM
Last Fetched : 2/7/2013 10:53:53 PM
Expiration Time : 2/7/2013 10:57:17 PM
Server Name : web2.addons.phx1.mozilla.com
Server Response : HTTP/1.1 200 OK
Server Time : 2/7/2013 9:57:21 PM
Server Last Modified: N/A
Content Encoding :
Cache Name : 71FB9d01
Missing File : No
Cache Control : max-age=3600
ETag :
==================================================
Filename : 1359225691.css
Content Type : text/css
URL : https://forum.intern0t.org/clientscript/vbulletin_css/style00009l/additional.css?d=1359225691
File Size : 8,021
Fetch Count : 4
Last Modified : 2/7/2013 10:49:20 PM
Last Fetched : 2/7/2013 10:49:19 PM
Expiration Time : 2/7/2013 10:49:20 PM
Server Name : Apache
Server Response : HTTP/1.1 200 OK
Server Time : 1/30/2013 6:24:30 PM
Server Last Modified: 1/26/2013 10:41:32 AM
Content Encoding : gzip
Cache Name :
Missing File : No
Cache Control :
ETag : "42620c-bcef-4d435648a8f00"
==================================================
Extensões (Extension.sqlite):
Extensões são guardadas na base de dados extension.sqlite. É constituída por uma tabela simples com as seguintes colunas:
internal_id; id; syncGUID; location; versiontype; internalName; updateURL; updateKey; optionsURL; optionsType; aboutURL; iconURL; icon64URL; defaultLocale; visible; active; userDisabled; appDisabled; pendingUninstall; descriptor; installDate; updateDate; applyB
ackgroundUpdates; bootstrap; skinnable; size; sourceURI; releaseNotesURI; softDisabled; isForeignInstall; hasBinaryComponents; strictCompatibility;
Conseguimos obter a listagem de extensões utilizando a query:
select * from addon
Resultado:
1; testpilot@labs.mozilla.com; DhuDl_DAAg6C; app-profile; 1.2.2; extension;;;;;;; chrome://testpilot/skin/testpilot_32x32.png;; 1; 1; 1; 0; 0; 0; C:\Users\Un0wn_X\AppData\Roaming\Mozilla\Firefox\Profiles\1w0ed5ct.default\extensions\testpilot@labs.mozilla.com.xpi; 1356598961406; 1357045887854; 1; 0; 0; 1261351; https://addons.cdn.mozilla.net/storage/public-staging/13661/test_pilot-1.2.2-fx.xpi; https://addons.mozilla.org/versions/updateInfo/1375230/en-US/; 0; 0; 0; 0
2; {35379F86-8CCB-4724-AE33-4278DE266C70}; OR7Ax6piYzy2; app-profile; 1.0.8; extension;;;; chrome://grabpro/content/config.xul;; chrome://grabpro/content/about.xul; chrome://grabpro/skin/OneClickLogo.png;; 2; 1; 1; 0; 0; 0; C:\Program Files (x86)\Orbitdownloader\addons\OneClickYouTubeDownloader; 1356489886290; 1356489886290; 1; 0; 0; 541701;;; 0; 0; 1; 0
Cookies (Cookies.sqlite):
Os cookies ao contrário do Internet Explorer que são guardados em ficheiros independentes, no Firefox são guardados numa base de dados, cookies.sqlite.
Conseguimos obter a informação disponível sobre os cookies utilizando a query:
select name,value,host,path,expiry,datetime(lastAccessed/1000000,'unixepoch') from moz_cookies;
Resultado:
PREF; ID=cc5b4db31e95c539:U=51ac107344a2847c:FF=0:TM=1360055094:LM=1360055164:S=wrOb53NnmEx0x77M; .google.com; /; 1423127164; 2013-02-07 13:30:14
NID; 67=bye1hEM5ZQr2DRDANLajYiwJ0Hn39Ag4p0tVWmvgA5nbiAWvNc9hkXAOjPFFym7mF_HFT3Qd6tDtEJL-uRDfyT9HnFGimTQnO1BZS2EsB3RKTVEh19GXZ53UYMlLv-TK; .google.com; /; 1376019397; 2013-02-07 13:30:14
Downloads (Downloads.sqlite):
O histórico de downloads está disponível na base de dados downloads.sqlite.
Conseguimos obter que downloads foram efetuados utilizando a query:
select id,name,source,target,tempPath,datetime(startTime/1000000,'unixepoch'),datetime(endTime/1000000,'unixepoch') from moz_downloads;
Resultado:
1; mspass.zip; http://www.nirsoft.net/utils/mspass.zip; file:///C:/Users/Un0wn_X/Downloads/mspass.zip;; 2013-02-08 08:34:48; 2013-02-08 08:34:55



