Google Chrome (and Chromium-based applications) currently dominate the web browser market by a degree unseen since the Internet Explorer and Netscape browser wars. Over three billion people use Chrome as their daily driver. Ordinarily this dominance would be exceptionally good from a digital forensic standpoint, because a massive amount of user activity information is being stored in the same well-known databases, with little diversity. However, Google’s dominance and size provides them the freedom to bypass standardized formats and build their own databases, structured data formats, programming languages, etc. This is evident in the rise of the LevelDB database format now used for countless purposes in the Chromium project and beyond. To put it bluntly, LevelDB is a nightmare to analyze from a forensic perspective. Its flexibility, myriad data formats, variable structures, embedded compression, and “key sharing” deduplication features make parsing a true challenge. There is a reason very few useful LevelDB parsers exist even though it has been a part of Google Chrome for over a decade! In fact, I can’t remember a time in my career when there was such a significant gap in forensic capabilities (LevelDB parsing) for such an important application (a web browser used by over 60% of Internet users on the planet). An overwhelming amount of forensic information is tied up in this format and is being missed by forensic examiners. Luckily, we are starting to see some forward momentum on solving the problem as forensic vendors begin to integrate parsing capabilities into forensic suites and build dedicated LevelDB tools.
I was recently giving the new Arsenal Recon LevelDB Recon tool a test drive and decided to use the opportunity to explore the Platform Notification database available in Chrome. We have all been suitably annoyed at the array of websites requesting permission to send pop-up notifications to the browser.
Should notifications be enabled in Chrome, they are written into a dedicated LevelDB database present in the “Platform Notifications” folder within the user’s Chrome profile directory. Once you understand what a LevelDB database looks like, you will see evidence of it everywhere within Chromium installations.
Vincent Lo did an exceptional job of documenting this feature in his SANS Institute Whitepaper, “Google Chrome Notification Analysis in Depth”. While a list of sites sending notifications to the user and the associated notification contents can be of interest, I have recently been more specifically interested in the default Google applications also using this same Push API to send notifications: Gmail, Google Calendar, Google Meet, and Google Voice. Calendar notifications are particularly common and could provide interesting insights into planned actions and time periods of activity. Vincent Lo documented that notification records can include “the notification message, its origin, its URL for the icon, and its creation date [along with] whether the user clicks the notification.” I have witnessed over six months of Google Calendar notifications within the Platform Notifications database, and it comes with the added benefit of not being cleared when common artifacts like browser history are deleted. Here is what the database looks like when viewed via Arsenal Recon LevelDB:
LevelDB Recon was able to read the database and extract the encoded Platform Notification data into human readable format. Overall, I found Arsenal Recon LevelDB Recon to be a solid step in the right direction for LevelDB analysis. At its simplest, LevelDB is a collection of key / value pairs, but as mentioned earlier, in reality most of these databases are far more complex. You want a tool that can ingest all of the files comprising the LevelDB database (.log, .ldb, .sst, and associated manifest files) and interpret the data as a whole, because it is the only way to reverse the ubiquitous deduplication and compression components and correctly interpret the variable internal data structures. Without a holistic view, you are often just performing the equivalent of a string search against largely compressed data. LevelDB Recon performed admirably in parsing different LevelDB databases from multiple applications and provides useful features like the ability to search, filter, and export parsed data for further analysis. If you are interested in the wonders (or horrors) of LevelDB, it is one of the few competent tools I have found. We are also incorporating more and more LevelDB analysis within the SANS FOR500 Windows Forensics course to ensure students leave with a strong understanding of the format and the most up to date techniques for incorporating this important data source into investigations. If you haven’t already, I recommend gaining familiarity with LevelDB and planning for how you are going to attack it in future forensic examinations.
About the Author
Chad Tilbury has spent over twenty years conducting computer crime investigations ranging from hacking to espionage to multimillion-dollar fraud cases. He is a SANS Institute Fellow and co-author of FOR500 Windows Forensic Analysis and FOR508 Advanced Incident Response, Threat Hunting, and Digital Forensics. Find him on Twitter @chadtilbury