Monday, July 21, 2014

Safari and iPhone Internet History Parser

Back in June, I had cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 opportunity to speak at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SANS DFIR Summit.  One of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 great things about this conference was cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ability to meet and socialize with all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attendees and presenters. While I was cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, I had a chance to catch up with Sarah Edwards who teaches cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Mac 518 class for SANS.

I'm always looking for new projects to work on, and she suggested a script to parse Safari Internet History. So cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 4th of July long weekend rolled around and I had some spare time to devote to a project. In between cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fireworks and a couple of Netflix shows (OK, maybe 10 shows), I put togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r a python script that parses out several plist files related to Safari Internet History: History.plist, Bookmarks.plist, TopSites.plist and Downloads.plist.

Since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iPhone also uses Safari, I decided to expand cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script to parse some iPhone Safari artifacts: History.plist, Bookmarks.db and RecentSearches.plist. I imagine cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iPad also contains Safari Internet History, but I did not have one at my disposal to test. If you want to send one to me for testing, I would be happy to take it off your hands :-).

In this post I'll run through each of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 artifacts I located and explain how to use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script to parse out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 files.

Plist Files: A love/hate relationship

First, a little background on plist files. Plist files are awesome because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y can contain all sorts of information such as Internet History, Recent Docs, Network IDs etc.  There are free tools for both Windows and OS X that will allow you view cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data stored in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 plist file. For Windows, you can use plist Editor.  If you have a Mac, a free plist editor is included in Apple's XCode Developer Tools which can be downloaded through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 App Store.

However, plist files also stink because while cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 plist format is standardized, it's entirely up to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 programmer to store whatever cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y want, in whatever format cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y want.

A (frustrating) example of this is date information. In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Safari History.plist file cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 date is defined as a "String", and is stored in Mac Absolute time. Mac Absolute time is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 number of seconds since June January 1, 2001.  Below is an example of this from a Safari History.plist file viewed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 XCode plist editor:

History.plist file in XCode plist editor
In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Safari Bookmarks.plist file, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 date is stored in a field defined as "Date".The date is stored in a more standard format:

Bookmarks.plist file in XCode plist editor
This means that each plist file needs to reviewed manually to determine what format cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data is in, and how it's stored before it can be parsed.

So, moving on to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 artifacts...

Where's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 beef?

On a Mac OS X, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Safari Internet History is located under cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 folder /Users/%USERNAME%/Library/Safari. As I mentioned before, I located four plist files in this folder containing Internet History: History.plist, Bookmarks.plist, TopSites.plist and Downloads.plist. I've written cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script to read eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r an individual file, or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 entire folder at once.

(If you're wondering about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Safari cookie files, I already wrote a separate tool support cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se, which can be found on my downloads page.)

History.plist
This file contains cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last visited date, URL, page title and visit count. To run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 parser over this file and get a tsv file use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following syntax:

safari_parser.py --history -f  history.plist -o history-results.tsv

TopSites.plist
The Top Site feature of Safari identifies 12 Top Sites based upon how often and how recent cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sites were visited. There are several ways to view cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tops sites in Safari, such as starting a new tab or selecting it from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Menu>View>Top Sites. Small thumbnails of each Top Site are displayed. The user has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 option to Pin or Delete a site from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Top Sites. Pinning a site keeps it in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Top Sites List, while deleting it removes it. The list can be increased to hold up to 24 sites.

The thumbnails for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 webpage previews for Safari can be found under /Users/%Username%/Library/Caches/com.apple.Safari. Below is how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TopSites appear to a user ( this may vary depending on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser version):



The TopSite.plist file contains cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Page Title and URL.  It also stores values to indicate if it's a Pinned or Built in Site. Built in Sites are pre-populated sites such as iCloud or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Apple Website.

TopSites that have been deleted are tracked in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TopSites.plist as "BannedURLStrings".

To parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TopSites.plist file use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following syntax:

safari_parser.py --topsites -f  TopSites.plist -o topsite-results.tsv

Downloads.plist
Downloads are stored in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Downloads.plist file. When a file is downloaded, an entry is made containing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following: 1)Download URL; 2)File name including cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 path where it was downloaded to; 3)Size of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file; 4)Number of bytes downloaded so far.  The user may clear this list at anytime by selecting "Clear" from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Downloads dialog box:



To parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Downloads.plist file use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following syntax:

safari_parser.py --downloads -f  Downloads.plist -o download-results.tsv

Bookmarks.plist
Safari tracks three different types of bookmarks in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Bookmarks.plist file: Favorites, Bookmarks and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Reading List.

Favorites
The Bookmarks Bar (aka Favorites) is located at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 top of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser:


The Favorites are also displayed on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 side bar:


Bookmark Menu
A folder titled "Bookmark Menu" is created by default when a user creates bookmarks. It contains a hierarchical structure of bookmarks and folders - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se are shown in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 red box below:


The user may add folders, as demonstrated with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "test bookmarks" folder below:


Reading List
The Reading List is anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r type of bookmark. According to Safari documentation, "Reading List helps you save webpages and links for you to read later, even when you are not connected to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 internet". These items show up when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user selects cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Reading List icon:


Safari downloads and stores information such as cached pages related to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Reading List under  /Users/%USERNAME%/Library/Safari/ReadingListArchives. I didn't spend too much time researching this as my parser is focused on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bookmarks.plist file, but keep it in mind as it may turn up some interesting stuff.

All three types of bookmarks (Favorites, Bookmarks and Reading Lists) are stored in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Bookmarks.plist file.

The Bookmarks.plist file tracks cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Page Title and URL for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Favorites and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Bookmarks, however, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Reading List entries contain a little bit more information. The Reading Lists also contains a date added, date last fetched, fetch result, and preview text.  There are also a couple of boolean entries, Added Locally and Archived on Disk.

Out of all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 plist files mentioned so far, I think this one looks cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most confusing in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 plist editor programs.  The parent/child relationships of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 folders and sub folders can get pretty messy:


To parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Bookmarks.plist file, use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following syntax:

safari_parser.py --bookmarks -f Bookmarks.plist -o bookmark-results.tsv

The Safari Parser will output this into a spreadsheet with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 folder structure rebuilt, which is hopefully more intuitive cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n viewing in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 plist editor:




All Four One and One for All
Instead of parsing each file individually, all four files can be parsed by pointing Safari Parser to a folder containing all four files.  This means you can export out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 /Users/%Username%/Library/Safari folder and point cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script at it. You could also mount cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 image and point it to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mounted folder. To parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 folder, use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following syntax:

safari_parser.py -d /Users/maridegrazia/Library/Safari -o /Cases/InternetHistory/Reports

This will create four tsv files with results from each of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above Internet History Files.


iPhone Internet History

Safari is also installed on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iPhone so I figured while I was at it I might as well expand cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script to handle cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iPhone Internet History files. I had some test data laying around, and  I was able to locate three files of interest: History.plist, Bookmarks.db and RecentSearches.plist.

While my test data came from an iPhone extraction, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se types of files are also located in an iTunes backup on a computer. This means that even if you don't have access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone, you could get still get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Internet History. Check in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's folder under \AppData\Roaming\Apple Computer\MobileSync\Backup, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n use a tool like iphonebackupbrowser to browse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 backups and export out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 files:


History
The location of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 History.plist file may vary depending on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 model of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iPhone. Check \private\var\mobile\Library\Safari or \data\mobile\Library\Safari for this file.

Luckily, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 History.plist file has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same format as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OS X version, so using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script to parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iPhone History.plist file works cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same:

safari_parser.py --history -f  history.plist -o history-results.tsv

Bookmarks
The location of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Bookmarks.db file may vary depending on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 model of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iPhone. Check \private\var\mobile\Library\Safari or \data\mobile\Library\Safari for this file. On an iPhone, this file is stored in an SQLite database racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 plist format used on OS X.  In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 test data I had, I did not see any entries for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Reading List. To parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iPhone Bookmarks.db file, use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following syntax:

safari_parser.py --iPhonebookmarks -f bookmarks.db -o bookmark-results.tsv

Recent Searches
I located a RecentSearches.plist file under cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cache folder. The location of this file may vary depending on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 model of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iPhone. Check \private\var\mobile\Library\Caches\Safari or \data\mobile\Library\Caches\Safari. This file contained a list of recent searches, about 20 or so. Use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following syntax to parse this file:

safari_parser.py --iPhonerecentsearches -f recentsearches.plist -o recentsearches-results.tsv

You can also point cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script to a directory with all three files and parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m at once:

safari_parser.py -d /Users/maridegrazia/iPhoneFiles -o /Cases/InternetHistory/Reports

The Script

The Safari Parser can be download here. It requires cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 biplist library which is super easy to install (directions below). However, I've also included a complied .exe file for Windows if you don't want to hassle with installing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 library. A thank you  to Harlan Carvey for suggesting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PyInstaller to compile Windows binaries for python - it worked like a charm.

To install biplist in Linux just type cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following:

sudo easy_install biplist

For Windows, if you don't already have it installed, you'll need to grab cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 easy install utility which is included in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 setup tools from python.org. The setup tools will place easy_install.exe into your Python directory in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Scripts folder. Change into this directory and run:

easy_install.exe biplist

Remember to look at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 plist files to manually to verify your results. I don't have access to every past or future version of Safari or iOS. As always, just shoot me an email or tweet if you need some modifications made.

References and Tools

safari_parser.py (my script to parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Safari Internet History)
Safari 5.1 (OS X Lion): View and customize Top Sites
Plist Editor (free plist editor for Windows)
XCode (includes free Plist Editor for OS X)
iphonebackupbrowser ( free iTunes backup browser)