Tuesday, December 23, 2008

Outlook Web Access Log Analysis

Hello Reader,
In this entry I’d like to discuss log analysis on Outlook Web Access servers. I’ve successfully used OWA log analysis in the past to quickly determine who has been reading mailboxes other than their own. Two pieces of information in the logs that exist by default in the OWA creation process allow this to occur. The first is that OWA uses NTLM authentication for web mail users who log in and the domain and username authenticated is stored in the logs in the cs-username field with format “domain\username”, remember this field will only be populated if the user successfully authenticated otherwise it will be filled with “-“. The second is that the mailbox accessed is stored in the cs-uri-query field in the logs and will look something like “isnewwindow=0&mailbox=username”. By comparing the authenticated NTLM username to the username of the mailbox requested we can write some pretty easy code to determine who has been accessing the mailboxes of other users, or attempting to.

First things first, we need the OWA logs themselves. They should be located in the “%systemroot%\system32\logfiles” directory usually in W3SVC1 if it’s the first default web created. Once we have them we need to either copy or export the log files in that directory from the image. Our first bit of code reads the content of the directory:

opendir(IMD, $dirtoget) die("Cannot open directory");

foreach $file

print "my file: $file\n";
open(FILE, "$file");

Next we need to do something with these files. We want to parse each line looking for people accessing mailboxes:


if ($_ =~ m/^([0-9\-]+
[0-9:]+) ([0-9.]+) ([^ ]+) [^ ]+ [^ ]+ [0-9.]+
[0-9]+ (GETPOST) ([^ ]+)
isnewwindow=0&mailbox=([^ ]+) ([1-3][0-9][0-9]) [0-9] [0-9]+ [0-9]+
9]+ HTTP.+ [^ ]+ ([^ ]+) ([^ ]+) (.+)$/i)

my ($access, $ip, $username, $method, $url, $query,
$useragent, $cookie, $referer) = ($1, $2, $3, $4, $5, $6, $7, $8,

Next we want to see if the username they have authenticated with matches the username of the mailbox they have requested. If it does, move on and print a . to the screen so we can see some activity. If it does not print a ! to the screen and write the resulting access to a separate file.

if ($username !~ m/$query/i )


print OUTFILE "$access, $ip, $username, $query,

print "!";






We can also store a unique list of these users in a hash so we can get a list of offenders to review. Additionally you could store all of this in a database table in larger cases so you can begin to run queries in time periods, users affected and start breaking out what messages, attachments, tasks and calendar items have been accessed.

I have posted the raw perl code and the windows compiled executable for this. For the windows executable I made it just search the same directory the executable is in, so just copy it into the directory with the logs and run it. Load up the report.csv file and find out who your suspects are.

Raw Code

Windows Executable

Monday, December 22, 2008

YACFB - Yet another computer forensics blog

Hello readers,
after recently searching for new tools and techniques I found Harlan Carvey's blog and this blog. I had no idea outside of the Encase support forums, smart support forums, and local HTCIA groups that there was a discussion of new findings. I am one of the co-authors of Hacking Exposed: Computer Forensics (second edition is being written as we speak) and a partner at G-C Partners, LLC where I perform computer forensics services in civil litigation. I've been doing computer forensics for civil litigation since 1999 and I have built a repository of information and tools over the years that I hope will help others in the community to solve and document their own investigations.

I am a Dallas, Texas based Perl programmer, I have your books Harlan, a computer forensics examiner and a testifying expert of many years. I plan to fill this blog with tools, information, and case studies on closed litigation (I've been told discussing active litigation is frowned upon). I hope you find something useful and feel free to comment if you have questions.

My first real investigation in 1999 started when I was still primarily doing network security at Enstar Networking (now closed), and it involved a rogue ex-CTO who decided to install key loggers across the other executives systems to make sure his agenda got pushed forward. The investigation was not difficult as he did not expect anyone to seize his system and being well organized had folders made not only for the decrypted key logs that were being emailed to him but also for the receipts that included the key logger he purchased. What was interesting was the key logging itself was not a terminable offense, rather the letter to his parole officer in new york state was. Why? because he never disclosed that he had a class b felony to his employer nor did he disclose that he believed he overpaid his restitution as he wrote to his parole officer.

From this investigation I was introduced and asked to speak at our local high tech crime investigation association chapter and got introduced to the computer forensics community I didn't know existed.