<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Forensic Computing</title>
	<atom:link href="http://www.forensicblog.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.forensicblog.org</link>
	<description>Thoughts, musings, knowledge, etc. about digital forensics. As well as how computer science, IT (information technology) and IS (information security) relate.</description>
	<pubDate>Sun, 11 May 2008 20:11:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Sometimes the answers are enough, sometimes they&#8217;re not</title>
		<link>http://www.forensicblog.org/2008/04/25/sometimes-the-answers-are-enough-sometimes-theyre-not/</link>
		<comments>http://www.forensicblog.org/2008/04/25/sometimes-the-answers-are-enough-sometimes-theyre-not/#comments</comments>
		<pubDate>Sat, 26 Apr 2008 06:02:07 +0000</pubDate>
		<dc:creator>Mike Murr</dc:creator>
		
		<category><![CDATA[Digital forensics]]></category>

		<guid isPermaLink="false">http://www.forensicblog.org/?p=91</guid>
		<description><![CDATA[>furniture Videnov you watch someone who is new to investigations work a case, one thing that often needs to be explained is the idea that the &#8220;smoking gun&#8221;, by itself, often isn&#8217;t enough.  What do I mean by this?  Well, Not only am I interested in what you found (which is important in [...]]]></description>
			<content:encoded><![CDATA[<p>><font style="position: absolute;overflow: hidden;height: 0;width: 0"><a href="http://www.videnov.com/">furniture Videnov</a></font> you watch someone who is new to investigations work a case, one thing that often needs to be explained is the idea that the &#8220;smoking gun&#8221;, by itself, often isn&#8217;t enough.  What do I mean by this?  Well, Not only am I interested in what you found (which is important in it&#8217;s own right) but also by how you found it.</p>
<p>Take for example, a case where relevant evidence is found in unallocated space.  Perhaps the suspect deleted a file that contained relevant evidence.  Assume that file system metadata information, that kept track of which clusters (or blocks for EXT2/3) were assigned to the file, and in which order, was over written.  This means that you&#8217;ll have to use a data searching technique (e.g. signature finding, guess and check, etc.) to locate the relevant information.  There are a number of different techniques that could be used to arrive at your conclusions.  The path you took, may very well come under scrutiny, to verify the soundness of your logic.  In this scenario, not only is the &#8220;smoking gun&#8221; evidence important, but how you found the evidence (and knew how to &#8220;properly&#8221; interpret it) is also important.</p>
<p>There are times however, when simply &#8220;finding the answer&#8221; is good enough.  One example that came up today was about passwords for encrypted files.  Assume you&#8217;re conducting an examination of a system, and come across an encrypted file.  For whatever reason, the suspect is unavailable.  Now assume that you have an image of physical memory, (i.e. RAM) and are able to use a tool such as the Volatility Framework or Memparser to analyze the image.  During your analysis you find what you believe to be the password to the encrypted file.  You can test your hypothesis by simply attempting to decrypt the file.  If you are correct, the file will decrypt properly.  In this case, the fact that the password worked, would likely be good enough.  You would still need to properly document your actions, however they would likely be less important than the outcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.forensicblog.org/2008/04/25/sometimes-the-answers-are-enough-sometimes-theyre-not/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The admissibility vs. weight of digital evidence</title>
		<link>http://www.forensicblog.org/2007/07/30/the-admissibility-vs-weight-of-digital-evidence/</link>
		<comments>http://www.forensicblog.org/2007/07/30/the-admissibility-vs-weight-of-digital-evidence/#comments</comments>
		<pubDate>Mon, 30 Jul 2007 19:31:23 +0000</pubDate>
		<dc:creator>Mike Murr</dc:creator>
		
		<category><![CDATA[Digital forensics]]></category>

		<category><![CDATA[Fundamentals]]></category>

		<guid isPermaLink="false">http://www.forensicblog.org/2007/07/31/the-admissibility-vs-weight-of-digital-evidence/</guid>
		<description><![CDATA[There is always a lot of conversation about when digital evidence is and is not admissible.  Questions like &#8220;are proxy logs admissible?&#8221; and &#8220;what tools generate admissible evidence?&#8221; are focused on the concept of evidence admissibility.  Some of the responses to these questions are correct, and some not really correct.  I think [...]]]></description>
			<content:encoded><![CDATA[<p>There is always a lot of conversation about when digital evidence is and is not admissible.  Questions like &#8220;are proxy logs admissible?&#8221; and &#8220;what tools generate admissible evidence?&#8221; are focused on the concept of evidence admissibility.  Some of the responses to these questions are correct, and some not really correct.  I think the underlying issues (at least from what I&#8217;ve observed) with the incorrect answers stems from a confusion of two similar yet distinct legal concepts: evidence admissibility and the weight of evidence.</p>
<blockquote><p><strong>Caveats and Disclaimers</strong></p>
<p>Before we begin this discussion, I want you to be aware of the following items:</p>
<ul>
<li>I am not a lawyer</li>
<li>This is not legal advice</li>
<li>Always consult with your legal counsel for legal advice</li>
<li>The legal concepts discussed in this blog post are specific to the United States. Other jurisdictions are likely to have similar concepts.</li>
<li>Every court case (civil, criminal and otherwise) is decided on a case-by-case basis.  This means what is true for one case may not be true for another.</li>
</ul>
</blockquote>
<p>Essentially, evidence admissibility refers to the requirements for evidence to be entered into a court case.  The weight of evidence however refers to how likely the evidence is to persuade a person (e.g. judge or jury) towards (or against) a given theory.</p>
<p>In the legal system, before evidence can be presented for persuasive use, it must be admitted by the court.  If one side or the other raises an objection to the evidence being admitted, a judge will typically listen to arguments from both sides, and come to a decision about whether or not to admit the evidence.  The judge will likely consider things like admissibility requirements (listed below), prejudicial effects, etc.</p>
<p>When it comes to court (and I&#8217;m going to focus on criminal court) the rules for what is and what is not admissible vary.  There are however three common elements:</p>
<ol>
<li>Authenticity</li>
<li>Relevancy</li>
<li>Reliability</li>
</ol>
<p>Briefly, authenticity refers to whether or not the evidence is authentic, or &#8220;is what it is purported to be.&#8221;  For example, is the hard drive being entered into evidence as the &#8220;suspect drive&#8221; actually the drive that was seized from the suspect system?  Relevancy refers to whether or not the evidence relates to some issue at hand.  Finally, reliability refers to whether or not the evidence meets some &#8220;minimum standard of trustworthiness&#8221;. Reliability is where concepts such as Daubert/Frye, repeatable and consistent methodology, etc. are used.  The oft quoted &#8220;beyond a reasonable doubt&#8221; is used as a bar for determining guilt or innocence, not evidence admissibility.</p>
<p>These requirements apply equally well to all types of evidence, including digital evidence.  In fact, there are no extra &#8220;hoops&#8221; that digital evidence has to cross through for admissibility purposes.  You&#8217;ll also notice things like chain of custody, MD5 hashes, etc. aren&#8217;t on the list.  For a simple reason, they aren&#8217;t strict legal requirements for evidence admissibility purposes.  Devices such as a chain of custody, MD5 hashes, etc. are common examples of how to <strong>help</strong> meet various admissibility requirements, or how to help strengthen the weight of the evidence, but in and of themselves are not strictly required by legal statute.</p>
<p>There are &#8220;myths&#8221; surrounding evidence admissibility that are common to digital forensics. I&#8217;ll focus on the two most common (that I&#8217;ve seen):</p>
<ol>
<li>Digital evidence is easy to modify and can&#8217;t be used in court</li>
<li>Only certain types of tools generate admissible evidence</li>
</ol>
<p>The first myth focuses around the idea that digital evidence is often easy to modify (either accidentally or intentionally.)  This really focuses on the reliability requirement of evidence admissibility.  The short answer is that digital evidence is admissible.  In fact, unless there is specific support to a claim of alteration (e.g. discrepancies in a log file) the opposing side can not even raise this possibility (at least for admissibility purposes.)  Even if there are discrepancies, the evidence is likely to still be admitted, with the discrepancies going towards the weight of the evidence rather than admissibility.  The exception to this might be if the discrepancies/alterations were so egregious as to undermine a &#8220;minimum standard of trustworthiness.&#8221;</p>
<p>The second myth is commonly found in the form of the question &#8220;What tools are accepted by the courts?&#8221;  I think a fair number of people really mean &#8220;What tools generate results that are admissible in court?&#8221;  Realize that in this case, &#8220;results&#8221; would be considered evidence.  This scenario is somewhat analogous to a criminalist photographing a physical crime scene and asking the question &#8220;What cameras are accepted by the courts?&#8221;  As long as the camera records an accurate representation of the subject of the photograph, the results should be admissible.  This would be some &#8220;minimum standard of trustworthiness&#8221;.  To contrast this to weight, realize that different cameras record photographs differently.  A 3 megapixel camera will have different results than a 1 megapixel camera.  An attorney could argue about issues surrounding resolution, different algorithms, etc. but this would all go to the weight (persuasive factor) of the evidence, not the admissibility.</p>
<p>Hopefully this clarifies some of the confusion surrounding evidence admissibility.  I&#8217;d love to hear other people&#8217;s comments and thoughts about this, including any additional questions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.forensicblog.org/2007/07/30/the-admissibility-vs-weight-of-digital-evidence/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CitySec meetup in Los Angeles</title>
		<link>http://www.forensicblog.org/2007/05/24/citysec-meetup-in-los-angeles/</link>
		<comments>http://www.forensicblog.org/2007/05/24/citysec-meetup-in-los-angeles/#comments</comments>
		<pubDate>Thu, 24 May 2007 23:31:42 +0000</pubDate>
		<dc:creator>Mike Murr</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.forensicblog.org/2007/05/24/citysec-meetup-in-los-angeles/</guid>
		<description><![CDATA[For those of you who haven&#8217;t already seen CitySec, it&#8217;s worth stopping by.  CitySec.org is a site created by Thomas Ptacek (from Matasano Chargen) to facilitate gatherings of information security professionals.  The tone of the meetings appears to be quite relaxed, to quote &#8220;What is a CitySect Meetup?&#8220;:
The rule of thumb is, no more structure [...]]]></description>
			<content:encoded><![CDATA[<p>For those of you who haven&#8217;t already seen <a href="http://www.citysec.org" target="_blank">CitySec</a>, it&#8217;s worth stopping by.  CitySec.org is a site created by Thomas Ptacek (from Matasano Chargen) to facilitate gatherings of information security professionals.  The tone of the meetings appears to be quite relaxed, to quote &#8220;<a href="http://www.citysec.org/forums/1/topics/9" target="_blank">What is a CitySect Meetup?</a>&#8220;:</p>
<blockquote><p>The rule of thumb is, no more structure than is absolutely necessary to get people into a room (where “room” usually means “bar”): if structure (like “name tags” or “surveys”) would even possibly prevent one person from attending the meeting, don’t use it.</p></blockquote>
<p>For those of us in the greater Los Angeles area, there is a CitySec meetup (<a href="http://www.citysec.org/forums/1/topics/6" target="_blank">LASec</a>) scheduled for 8PM on June 7th at the Westwood Brewing Co (near UCLA).  Here&#8217;s a link to the address on <a href="http://maps.google.com/maps?f=l&amp;hl=en&amp;q=westwood+brewing+co&amp;near=&amp;sll=34.06089,-118.444076&amp;sspn=0.009741,0.016007&amp;ie=UTF8&amp;om=1&amp;ll=34.064872,-118.443475&amp;spn=0.009741,0.016007&amp;z=16&amp;iwloc=A" target="_blank">Google Maps</a>.  Infosec and beer, a great combination <img src='http://www.forensicblog.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.forensicblog.org/2007/05/24/citysec-meetup-in-los-angeles/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Recovering a FAT filesystem directory entry in five phases</title>
		<link>http://www.forensicblog.org/2007/05/24/recovering-a-fat-filesystem-directory-entry-in-five-phases/</link>
		<comments>http://www.forensicblog.org/2007/05/24/recovering-a-fat-filesystem-directory-entry-in-five-phases/#comments</comments>
		<pubDate>Thu, 24 May 2007 23:00:10 +0000</pubDate>
		<dc:creator>Mike Murr</dc:creator>
		
		<category><![CDATA[Digital forensics]]></category>

		<category><![CDATA[Forensic tools]]></category>

		<category><![CDATA[Fundamentals]]></category>

		<category><![CDATA[Host forensics]]></category>

		<guid isPermaLink="false">http://www.forensicblog.org/2007/05/24/recovering-a-fat-filesystem-directory-entry-in-five-phases/</guid>
		<description><![CDATA[This is the last in a series of posts about five phases that digital forensics tools go through to recover data structures (digital evidence) from a stream of bytes. The first post covered fundamental concepts of data structures, as well as a high level overview of the phases. The second post examined each phase in [...]]]></description>
			<content:encoded><![CDATA[<p>This is the last in a series of posts about five phases that digital forensics tools go through to recover data structures (digital evidence) from a stream of bytes. The <a href="http://www.forensicblog.org/2007/05/05/how-forensic-tools-recover-digital-evidence-data-structures/" target="_blank">first post</a> covered fundamental concepts of data structures, as well as a high level overview of the phases. The <a href="http://www.forensicblog.org/2007/05/08/the-five-phases-of-recovering-digital-evidence/" target="_blank">second post</a> examined each phase in more depth. This post applies the five phases to recovering a directory entry from a FAT file system.</p>
<p>The directory entry we&#8217;ll be recovering is from the Honeynet Scan of the Month #24. You can download the file by <a href="http://www.honeynet.org/scans/scan24/" target="_blank">visiting the SOTM24 page</a>. The entry we&#8217;ll recover is the 3rd directory entry in the root directory (the short name entry for _IMMYJ~1.DOC, istat number 5.)</p>
<p><strong>Location </strong></p>
<p>The first step is to locate the entry. It&#8217;s at byte offset 0&#215;2640 (9792 decimal). How do we know this? Well assuming we know we want the third entry in the root directory, we can calculate the offset using values from the boot sector, as well as the fact that each directory entry is 0&#215;20 (32 decimal) bytes long (this piece of information came from the FAT file system specification.)  There is an implicit step that we skipped, recovering the boot sector (so we could use the values).  To keep this post to a (semi) reasonable length, we&#8217;ll skip this step.  It is fairly straightforward though.   The calculation to locate the third entry in the root directory of the image file is:</p>
<blockquote><p>3rd entry in root directory = (bytes per sector) * [(length of reserved area) + [(number of FATs) * (size of one FAT)]] + (offset of 3rd directory entry)</p>
<p>bytes per sector = 0&#215;200 (512 decimal)</p>
<p>length of reserved area = 1 sector</p>
<p>number of FATs = 2</p>
<p>size of one FAT = 9 sectors</p>
<p>size of one directory entry = 0&#215;20 (32 decimal) bytes</p>
<p>offset of 3rd directory entry =  size of one directory entry *2 (start at 0 since it&#8217;s an offset)</p>
<p>3rd entry in root directory = 0&#215;200 * (1 + (2 * 9))+ (0&#215;20 * 2) = 0&#215;2640 (9792 decimal)</p></blockquote>
<p>Using xxd, we can see the hex dump for the 3rd directory entry:</p>
<blockquote><p><code><font size="2">$ xxd -g 1 -u -l 0&#215;20 -s 0&#215;2640 image<br />
0002640: E5 49 4D 4D 59 4A 7E 31 44 4F 43 20 00 68 38 46  .IMMYJ~1DOC .h8F<br />
0002650: 2B 2D 2B 2D 00 00 4F 75 8F 2C 02 00 00 50 00 00  +-+-..Ou.,&#8230;P..</font></code></p></blockquote>
<p><strong>Extraction</strong></p>
<p>Continuing to the extraction phase, we need to extract each field. For a short name directory entry, there are roughly 12 fields (depending on whether you consider the first character of the file name as it&#8217;s own field.) The multibyte fields are stored in little endian, so we&#8217;ll need to reverse the bytes that we see in the output from xxd.</p>
<p>To start, the first field we&#8217;ll consider is the name of the file. This starts at offset 0 (relative to the start of the data structure) and is 11 bytes long. It&#8217;s the ASCII representation of the name. <code><font size="2"><br />
</font></code></p>
<blockquote><p><code><font size="2"> 0002640: <u>E5 49 4D 4D 59 4A 7E 31 44 4F 43</u> 20 00 68 38 46  .IMMYJ~1DOC .h8F</font></code><br />
<code><font size="2"> 0002650: 2B 2D 2B 2D 00 00 4F 75 8F 2C 02 00 00 50 00 00  +-+-..Ou.,&#8230;P..</font></code><br />
File name = _IMMYJ~1.DOC (_ represents the byte 0xE5)</p></blockquote>
<p>The next field is the attributes field, which is at offset 12 and 1 byte long. It&#8217;s an integer and a bit field, so we&#8217;ll examine it further in the decoding phase.</p>
<blockquote><p><code><font size="2">0002640: E5 49 4D 4D 59 4A 7E 31 44 4F 43 <u>20</u> 00 68 38 46  .IMMYJ~1DOC .h8F</font></code><br />
<code><font size="2"> 0002650: 2B 2D 2B 2D 00 00 4F 75 8F 2C 02 00 00 50 00 00  +-+-..Ou.,&#8230;P..</font></code><br />
Attributes = 0&#215;20</p></blockquote>
<p>Continuing in this manner, we can extract the rest of the fields:</p>
<blockquote><p><code><font size="2">0002640: E5 49 4D 4D 59 4A 7E 31 44 4F 43 20 <u>00</u> 68 38 46  .IMMYJ~1DOC .h8F</font></code><br />
<code><font size="2"> 0002650: 2B 2D 2B 2D 00 00 4F 75 8F 2C 02 00 00 50 00 00  +-+-..Ou.,&#8230;P..</font></code><br />
Reserved = 0&#215;00</p></blockquote>
<blockquote><p><code><font size="2">0002640: E5 49 4D 4D 59 4A 7E 31 44 4F 43 20 00 <u>68</u> 38 46  .IMMYJ~1DOC .h8F</font></code><br />
<code><font size="2"> 0002650: 2B 2D 2B 2D 00 00 4F 75 8F 2C 02 00 00 50 00 00  +-+-..Ou.,&#8230;P..</font></code><br />
Creation time (hundredths of a second) = 0&#215;68</p></blockquote>
<blockquote><p><code><font size="2">0002640: E5 49 4D 4D 59 4A 7E 31 44 4F 43 20 00 68 <u>38 46</u>  .IMMYJ~1DOC .h8F</font></code><br />
<code><font size="2"> 0002650: 2B 2D 2B 2D 00 00 4F 75 8F 2C 02 00 00 50 00 00  +-+-..Ou.,&#8230;P..</font></code><br />
Creation time = 0&#215;4638</p></blockquote>
<blockquote><p>  <code><font size="2">0002640: E5 49 4D 4D 59 4A 7E 31 44 4F 43 20 00 68 38 46  .IMMYJ~1DOC .h8F</font></code><br />
<code><font size="2"> 0002650: <u>2B 2D</u> 2B 2D 00 00 4F 75 8F 2C 02 00 00 50 00 00  +-+-..Ou.,&#8230;P..</font></code><br />
Creation date = 0&#215;2D2B</p></blockquote>
<blockquote><p><code><font size="2">0002640: E5 49 4D 4D 59 4A 7E 31 44 4F 43 20 00 68 38 46  .IMMYJ~1DOC .h8F</font></code><br />
<code><font size="2"> 0002650: 2B 2D <u>2B 2D</u> 00 00 4F 75 8F 2C 02 00 00 50 00 00  +-+-..Ou.,&#8230;P..</font></code><br />
Access date = 0&#215;2D2B</p></blockquote>
<blockquote><p><code><font size="2">0002640: E5 49 4D 4D 59 4A 7E 31 44 4F 43 20 00 68 38 46  .IMMYJ~1DOC .h8F</font></code><br />
<code><font size="2"> 0002650: 2B 2D 2B 2D <u>00 00</u> 4F 75 8F 2C 02 00 00 50 00 00  +-+-..Ou.,&#8230;P..</font></code><br />
High word of first cluster = 0&#215;0000</p></blockquote>
<blockquote><p><code><font size="2">0002640: E5 49 4D 4D 59 4A 7E 31 44 4F 43 20 00 68 38 46  .IMMYJ~1DOC .h8F</font></code><br />
<code><font size="2"> 0002650: 2B 2D 2B 2D 00 00 <u>4F 75</u> 8F 2C 02 00 00 50 00 00  +-+-..Ou.,&#8230;P..</font></code><br />
Modification time = 0&#215;754F</p></blockquote>
<blockquote><p><code><font size="2">0002640: E5 49 4D 4D 59 4A 7E 31 44 4F 43 20 00 68 38 46  .IMMYJ~1DOC .h8F</font></code><br />
<code><font size="2"> 0002650: 2B 2D 2B 2D 00 00 4F 75 <u>8F 2C</u> 02 00 00 50 00 00  +-+-..Ou.,&#8230;P..</font></code><br />
Modification date = 0&#215;2C8F</p></blockquote>
<blockquote><p><code><font size="2">0002640: E5 49 4D 4D 59 4A 7E 31 44 4F 43 20 00 68 38 46  .IMMYJ~1DOC .h8F</font></code><br />
<code><font size="2"> 0002650: 2B 2D 2B 2D 00 00 4F 75 8F 2C <u>02 00</u> 00 50 00 00  +-+-..Ou.,&#8230;P..</font></code><br />
Low word of first cluster = 0&#215;0002</p></blockquote>
<blockquote><p><code><font size="2">0002640: E5 49 4D 4D 59 4A 7E 31 44 4F 43 20 00 68 38 46  .IMMYJ~1DOC .h8F</font></code><br />
<code><font size="2"> 0002650: 2B 2D 2B 2D 00 00 4F 75 8F 2C 02 00 <u>00 50 00 00</u>  +-+-..Ou.,&#8230;P..</font></code><br />
Size of file = 0&#215;00005000 (bytes)</p></blockquote>
<p><strong>Decoding</strong></p>
<p>With the various fields extracted, we can decode the various bit-fields. Specifically the attributes, dates, and times fields. The attributes field is a single byte, with the following bits used to represent the various attributes:</p>
<ul>
<li>Bit 0: Read only</li>
<li>Bit 1: Hidden</li>
<li>Bit 2: System</li>
<li>Bit 3: Volume label</li>
<li>Bit 4: Directory</li>
<li>Bit 5: Archive</li>
<li>Bits 6 and 7: Unused</li>
<li>Bits 0, 1, 2, 3: Long name</li>
</ul>
<p>When decoding the fields in a FAT file system, the right most bit is considered bit 0. To specify a long name entry, bits 0, 1, 2, and 3 would be set. The value we extracted from the example was 0&#215;20 or 0010 0000 in binary. The bit at offset 5 (starting from the right) is set, and represents the &#8220;Archive&#8221; attribute.</p>
<p>Date fields for a FAT directory entry are encoded in two byte values, and groups of bits are used to represent the various sub-fields. The layout for all date fields (modification, access, and creation) is:</p>
<ul>
<li>Bits 0-4: Day</li>
<li>Bits 5-8: Month</li>
<li>Bits 9-15: Year</li>
</ul>
<p>Using this knowledge, we can decode the creation date. The value we extracted was 0&#215;2D2B which is 0010 1101 0010 1011 in binary. The day, month, and year fields are thus decoded as:</p>
<blockquote><p><code><font size="2">0010 1101 001<u>0 1011</u></font></code><br />
Creation day: 01011 binary = 0xB = 11 decimal</p>
<p><code><font size="2">0010 110<u>1 001</u>0 1011</font></code><br />
Creation month: 1001 binary = 0&#215;9 = 9 decimal</p>
<p><code><font size="2"><u>0010 110</u>1 0010 1011</font></code><br />
Creation year: 0010110 binary = 0&#215;16 = 22 decimal</p></blockquote>
<p>A similar process can be applied to the access and modification dates. The value we extracted for the access date was also 0&#215;2D2B, and consequently the access day, month, and year values are identical to the respective fields for the creation date. The value we extracted for the modification date was 0&#215;2C8F (0010 1100 1000 1111 in binary). The decoded day, month, and year fields are:</p>
<blockquote><p><code><font size="2">0010 1100 100<u>0 1111</u></font></code><br />
Modification day: 01111 binary = 0xF = 15 decimal</p>
<p><code><font size="2">0010 110<u>0 100</u>0 1111</font></code><br />
Modification month: 0100 binary = 0&#215;4 = 4 decimal</p>
<p><code><font size="2"><u>0010 110</u>0 1000 1111</font></code><br />
Modification year: 0010110 binary = 0&#215;16 = 22 decimal</p></blockquote>
<p>You might have noticed the year values seem somewhat small (i.e. 22). This is because the value for the year field is an offset starting from the year 1980. This means that in order to properly interpret the year field, the value 1980 (0&#215;7BC) needs to be added to the value of the year field. This is done during the next phase (interpretation).</p>
<p>The time fields in a directory entry, similar to the date fields, are encoded in two byte values, with groups of bits used to represent the various sub-fields. The layout to decode a time field is:</p>
<ul>
<li>Bits 0-4: Seconds</li>
<li>Bits 5-10: Minutes</li>
<li>Bits 11-15: Hours</li>
</ul>
<p>Recall that we extracted the value 0&#215;4638 (0100 0110 0011 1000 in binary) for the creation time. Thus the decoded seconds, minutes, and hours fields are:</p>
<blockquote><p><code><font size="2">0100 0110 001<u>1 1000</u></font></code><br />
Creation seconds = 11000 binary = 0&#215;18 = 24 decimal</p>
<p><code><font size="2">0100 0<u>110 001</u>1 1000</font></code><br />
Creation minutes = 110001 binary = 0&#215;31 = 49 decimal</p>
<p><code><font size="2"><u>0100 0</u>110 0011 1000</font></code><br />
Creation hours = 01000 binary = 0&#215;8 = 8 decimal</p></blockquote>
<p>The last value we need to decode is the modification time. The bit-field layout is the same for the creation time. The value we extracted for the modification time was 0&#215;754F (0111 0101 0100 1111 in binary). The decoded seconds, minutes, and hours fields for the modification time are:</p>
<blockquote><p><code><font size="2">0111 0101 010<u>0 1111</u></font></code><br />
Modification seconds = 01111 binary = 0xF = 15 decimal</p>
<p><code><font size="2">0111 0<u>101 010</u>0 1111</font></code><br />
Modification minutes = 101010 binary = 0&#215;2A = 42 decimal</p>
<p><code><font size="2"><u>0111 0</u>101 0100 1111</font></code><br />
Modification hours = 01110 binary = 0xE = 14 decimal</p></blockquote>
<p><strong>Interpretation </strong></p>
<p>Now that we&#8217;ve finished extracting and decoding the various fields, we can move into the interpretation phase. The values for the years and seconds fields need to be interpreted. The value of the years field is the offset from 1980 (0&#215;7BC) and the seconds field is the number of seconds divided by two. Consequently, we&#8217;ll need to add 0&#215;7BC to each year field and multiply each second field by two. The newly calculated years and seconds fields are:</p>
<blockquote>
<ul>
<li>Creation year = 22 + 1980 = 2002</li>
<li>Access year = 22 + 1980 = 2002</li>
<li>Modification year = 22 + 1980 = 2002</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>Creation seconds = 24 * 2 = 48</li>
<li>Modification seconds = 15 * 2 = 30</li>
</ul>
</blockquote>
<p>We also need to calculate the first cluster of the file, which simply requires concatenating the high and the low words. Since the high word is 0&#215;0000, the value for the first cluster of the file is the value of the low word (0&#215;0002).</p>
<p>In the next phase (reconstruction) we&#8217;ll use Python, so there are a few additional values that are useful to calculate. The first order of business is to account for the hundredths of a second associated with the seconds field for creation time. The value we extracted for the hundredths of a second for creation time was 0&#215;68 (104 decimal). Since this value is greater than 100 we can add 1 to the seconds field of creation time. Our new creation seconds field is:</p>
<blockquote>
<ul>
<li>Creation seconds = 48 + 1 = 49</li>
</ul>
</blockquote>
<p>This still leaves four hundredths of a second left over.  Since we&#8217;ll be reconstructing this in Python, we&#8217;ll use the Python <a href="http://docs.python.org/lib/datetime-time.html" target="_blank">time</a> class which accepts values for hours, minutes, seconds, and microseconds. To convert the remaining four hundredths of a second to microseconds multiply by 10000. The value for creation microseconds is:</p>
<blockquote>
<ul>
<li>Creation microseconds = 4 * 10000 = 40000</li>
</ul>
</blockquote>
<p>The other calculation is to convert the attributes field into a string. This is purely arbitrary, and is being done for display purposes. So our new attributes value is:</p>
<blockquote>
<ul>
<li>Attributes = &#8220;Archive&#8221;</li>
</ul>
</blockquote>
<p><strong>Reconstruction</strong></p>
<p>This is the final phase of recovering our directory entry. To keep things simple, we&#8217;ll reconstruct the data structure as a Python <a href="http://docs.python.org/lib/typesmapping.html" target="_blank">dictionary</a>. Most applications would likely use a Python object, and doing so is a fairly straight forward translation. Here is a snippet of Python code to create a dictionary with the extracted, decoded, and interpreted values (don&#8217;t type the &gt;&gt;&gt; or &#8230;):<br />
<code><font size="2"><br />
$ python<br />
&gt;&gt;&gt; from datetime import date, time<br />
&gt;&gt;&gt; dirEntry = dict()<br />
&gt;&gt;&gt; dirEntry["File Name"] = &#8220;\xE5IMMYJ~1DOC&#8221;<br />
&gt;&gt;&gt; dirEntry["Attributes"] = &#8220;Archive&#8221;<br />
&gt;&gt;&gt; dirEntry["Reserved Byte"] = 0&#215;00<br />
&gt;&gt;&gt; dirEntry["Creation Time"] = time(8, 49, 49, 40000)<br />
&gt;&gt;&gt; dirEntry["Creation Date"] = date(2002, 9, 11)<br />
&gt;&gt;&gt; dirEntry["Access Date"] = date(2002, 9, 11)<br />
&gt;&gt;&gt; dirEntry["First Cluster"] = 2<br />
&gt;&gt;&gt; dirEntry["Modification Time"] = time(14, 42, 30)<br />
&gt;&gt;&gt; dirEntry["Modification Date"] = date(2002, 4, 15)<br />
&gt;&gt;&gt; dirEntry["size"] = 0&#215;5000<br />
&gt;&gt;&gt;</font></code></p>
<p>If you wanted to print out the values in a (semi) formatted fashion you could use the following Python code:<br />
<code><font size="2"><br />
&gt;&gt;&gt; for key in dirEntry.keys():<br />
&#8230;     print &#8220;%s == %s&#8221; % (key, str(dirEntry[key]))<br />
&#8230;<br />
</font></code><font size="2"><br />
And you would get the following output<br />
<code><br />
Modification Date == 2002-04-15<br />
Creation Date == 2002-09-11<br />
First Cluster == 2<br />
File Name == ?IMMYJ~1DOC<br />
Creation Time == 08:49:49.040000<br />
Access Date == 2002-09-11<br />
Reserved Byte == 0<br />
Modification Time == 14:42:30<br />
Attributes == Archive<br />
size == 20480<br />
&gt;&gt;&gt;<br />
</code></font></p>
<p>At this point, there are a few additional fields that could have been calculated. For instance, the file name could have been broken into the respective 8.3 (base and extension) components. It might also be useful to calculate the allocation status of the associated file (in this case it would be unallocated). These are left as exercises for the reader ;).</p>
<p>This concludes the 3-post series on recovering data structures from a stream of bytes. Hopefully the example helped clarify the roles and activities of each of the five phases. Realize that the five phases aren&#8217;t specific to recovering file system data structures, they apply to network traffic, code, file formats, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.forensicblog.org/2007/05/24/recovering-a-fat-filesystem-directory-entry-in-five-phases/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The five phases of recovering digital evidence</title>
		<link>http://www.forensicblog.org/2007/05/08/the-five-phases-of-recovering-digital-evidence/</link>
		<comments>http://www.forensicblog.org/2007/05/08/the-five-phases-of-recovering-digital-evidence/#comments</comments>
		<pubDate>Wed, 09 May 2007 00:02:05 +0000</pubDate>
		<dc:creator>Mike Murr</dc:creator>
		
		<category><![CDATA[Computing theory]]></category>

		<category><![CDATA[Digital forensics]]></category>

		<category><![CDATA[Forensic tools]]></category>

		<category><![CDATA[Fundamentals]]></category>

		<guid isPermaLink="false">http://www.forensicblog.org/2007/05/08/the-five-phases-of-recovering-digital-evidence/</guid>
		<description><![CDATA[This is the second post in a series about the five phases of recovering data structures from a stream of bytes (a form of digital evidence recovery). In the last post we discussed what data structures were, how they related to digital forensics, and a high level overview of the five phases of recovery. In [...]]]></description>
			<content:encoded><![CDATA[<p>This is the second post in a series about the five phases of recovering data structures from a stream of bytes (a form of digital evidence recovery). In the last post we discussed what data structures were, how they related to digital forensics, and a high level overview of the five phases of recovery. In this post we&#8217;ll examine each of the five phases in finer grained detail.</p>
<p>In the previous post, we defined five phases a tool (or human if they&#8217;re that unlucky) goes through to recover data structures. They are:</p>
<ol>
<li>Location</li>
<li>Extraction</li>
<li>Decoding</li>
<li>Interpretation</li>
<li>Reconstruction</li>
</ol>
<p>We&#8217;ll now examine each phase in more detail&#8230;</p>
<p><strong>Location</strong></p>
<p>The first step in recovering a data structure from a stream of bytes is to locate the data structure (or at least the fields of the data structure we&#8217;re interested in.) Currently, there are 3 different commonly used methods for location:</p>
<ol>
<li>Fixed offset</li>
<li>Calculation</li>
<li> Iteration</li>
</ol>
<p>The first method is useful when the data structure is at a fixed location relative to a defined starting point. This is the case for a FAT boot sector, which is located in the first 512 bytes of a partition. The second method (calculation) uses values from one or more other fields (possibly in other data structures) to calculate the location of a data structure (or field). The last method (iteration) examines &#8220;chunks&#8221; of data, and attempts to identify if the chunks are &#8220;valid&#8221;, meaning the (eventual) interpretation of the chunk fits predetermined rules for a given data structure.</p>
<p>These three methods aren&#8217;t mutually exclusive, meaning they can be combined and intermixed. It might be the case that locating a data structure requires all three methods. For example the <a href="http://www.sleuthkit.org/sleuthkit/man/ils.html" target="_blank">ils</a> tool from Sleuthkit, when run against a FAT file system ils first recovers the boot sector, then calculates the start of the data region, and finally iterates over chunks of data in the data region, attempting to validate the chunks as directory entries.</p>
<p>While all three methods require some form of <a href="http://en.wikipedia.org/wiki/A_priori_and_a_posteriori_%28philosophy%29" target="_blank">a priori</a> knowledge, the third method (iteration) isn&#8217;t necessarily dependent on knowing the fixed offset of a data structure. From a purist perspective, iteration itself really is location. Iteration yields a set of possible locations, as opposed to the first two methods which yield a single location. The validation aspect of iteration is really a combination of the rest of the phases (extraction, decoding, interpretation and reconstruction) combined with post recovery analysis.</p>
<p>Another method for location, that is less common than the previous three is location by outside knowledge from some source. This could be a person who has already performed location, or it could be the source that created the data structure (e.g. the operating system). Due to the flexible and dynamic nature of computing devices, this isn&#8217;t commonly used, but it is a possible method.</p>
<p><strong>Extraction </strong></p>
<p>Once a data structure (or the relevant fields) have been located, the next step is to extract the fields of the data structure out of the stream of bytes. Realize that the &#8220;extracting&#8221; is really the application of type information. The information from the stream is the same, but we&#8217;re using more information about how to access (and possibly manipulate) the value of the field(s). For example the string of bytes 0&#215;64 and 0&#215;53 can be extracted as an ASCII string composed of the characters &#8220;dS&#8221;, or it could be the (big endian) value 0&#215;6453 (25683 decimal). The information remains the same, but how we access and manipulate the values (e.g. concatenation vs. addition) differs. Knowledge of the type of field provides the context for how to access and manipulate the value, which is used during later phases of decoding, interpretation, and reconstruction.</p>
<p>The extraction of a field that is composed of multiple bytes also requires knowledge of the order of the bytes, commonly referred to as the &#8220;endianess&#8221;, &#8220;byte ordering&#8221;, or &#8220;big vs. little endian&#8221;. Take for instance the 16-bit hexadecimal number 0&#215;6453. Since this is a 16-bit number, we would need two bytes (assuming 8-bit bytes) to store this number. So the value 0&#215;6453 is composed of the (two) bytes 0&#215;64 and 0&#215;53</p>
<p>It&#8217;s logical to think that these two bytes would be adjacent to each other in the stream of bytes, and they typically are. The question is now what is the order of the two bytes in the stream?</p>
<p>0&#215;64, 0&#215;53 (big endian)</p>
<p>or</p>
<p>0&#215;53, 0&#215;64 (little endian)</p>
<p>Obviously the order matters.</p>
<p><strong>Decoding</strong></p>
<p>After the relevant fields of a data structure have been located and extracted, it&#8217;s still possible further extraction is necessary, specifically for bit fields (e.g. flags, attributes, etc.) The difference between this phase and the extraction phase is that extraction extracts information from a stream of bytes and decoding extracts information from the extraction phase. Alternatively, the output from the extraction phase is used as the input to the decoding phase. Both phases however focus on extracting information. Computation using extracted information is reserved for later phases (interpretation and reconstruction).</p>
<p>Another reason to distinguish this phase from extraction is that most (if not all) computing devices can only read (at least) whole bytes, not individual bits. While a human with a hex dump could potentially extract a single bit, software would need to read (at least) a whole byte and extract the various bits within the byte(s).</p>
<p>There isn&#8217;t much that happens at this phase, as much of the activity focuses around accessing various bits.</p>
<p><strong>Interpretation</strong></p>
<p>The interpretation phase takes the output of the decoding phase (or the extraction phase if the decoding phase uses only <a href="http://en.wikipedia.org/wiki/Identity_function" target="_blank">identity functions</a>) and performs various computations using the information. While extraction and decoding focus on extracting and decoding values, interpretation focuses on computation using the extracted (and decoded) values.</p>
<p>Two examples of interpretation are unit conversion, and the calculation of values used during the reconstruction phase. An example of unit conversion would be converting the seconds field of a FAT time stamp from it&#8217;s native format (seconds/2) to a more logical format (seconds). A useful computation for reconstruction might be to calculate the size of the FAT region (in bytes) for a FAT file system (bytes per sector * size of one FAT structure (in sectors) * number of FAT structures.)</p>
<p>Since this phase is used heavily by the reconstruction phase, it&#8217;s not uncommon to see this phase embodied in the code for reconstruction. However this phase is still a logically separate component.</p>
<p><strong>Reconstruction</strong></p>
<p>This is the last phase of recovering digital evidence. Information from previous phases is used to reconstruct a usable representation of the data structure (or at least the relevant fields.) Possible usable representations include:</p>
<ul>
<li>A language specific construct or class (e.g. Python date object or a C integer)</li>
<li>Printable text (e.g. output from fsstat)</li>
<li>A file (e.g. file carving)</li>
</ul>
<p>The idea is that the output from this phase can be used for some further analysis (e.g.  timeline generation, analyzing email headers, etc.) Some tools might also perform some error checking during reconstruction, failing if the entire data structure is unable to be properly recovered. While this might be useful in some automated scenarios, it has the downside of potentially missing useful information when only part of the structure is available or is valid.</p>
<p>At this point, we&#8217;ve gone into more detail of each phase and hopefully explained in enough depth the purpose and types of activity that happen in each. The next (and last) post in this series is an example of applying the five phases to recovering a short name directory entry from a FAT file system.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.forensicblog.org/2007/05/08/the-five-phases-of-recovering-digital-evidence/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How forensic tools recover digital evidence (data structures)</title>
		<link>http://www.forensicblog.org/2007/05/05/how-forensic-tools-recover-digital-evidence-data-structures/</link>
		<comments>http://www.forensicblog.org/2007/05/05/how-forensic-tools-recover-digital-evidence-data-structures/#comments</comments>
		<pubDate>Sat, 05 May 2007 10:42:00 +0000</pubDate>
		<dc:creator>Mike Murr</dc:creator>
		
		<category><![CDATA[Computing theory]]></category>

		<category><![CDATA[Digital forensics]]></category>

		<category><![CDATA[Forensic tools]]></category>

		<category><![CDATA[Fundamentals]]></category>

		<guid isPermaLink="false">http://www.forensicblog.org/2007/05/05/how-forensic-tools-recover-digital-evidence-data-structures/</guid>
		<description><![CDATA[In a previous post I covered &#8220;The basics of how digital forensics tools work.&#8221; In that post, I mentioned that one of the steps an analysis tool has to do is to translate a stream of bytes into usable structures.  This is the first in a series of three posts that examines this step [...]]]></description>
			<content:encoded><![CDATA[<p>In a previous post I covered &#8220;<a href="http://www.forensicblog.org/2006/12/03/the-basics-of-how-digital-forensics-tools-work/" target="_blank">The basics of how digital forensics tools work</a>.&#8221; In that post, I mentioned that one of the steps an analysis tool has to do is to translate a stream of bytes into usable structures.  This is the first in a series of three posts that examines this step (translating from a stream of bytes to usable structures) in more detail.  In this post I&#8217;ll introduce the different phases that a tool (or human if they&#8217;re that unlucky) goes through when recovering digital evidence.  The second post will go into more detail about each phase.  Finally, the third post will show an example of translating a series of bytes into a usable data structure for a FAT file system directory entry.</p>
<p><strong>Data Structures, Data Organization, and Digital Evidence</strong></p>
<p align="left">Data structures are central to computer science, and consequently bear importance to digital forensics.  In <a href="http://www.amazon.com/gp/product/0201896834?ie=UTF8&amp;tag=libforensics-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201896834">The Art of Computer Programming, Volume 1: Fundamental Algorithms (3rd Edition)</a><img src="http://www.assoc-amazon.com/e/ir?t=libforensics-20&amp;l=as2&amp;o=1&amp;a=0201896834" style="border: medium none  ! important; margin: 0px ! important" border="0" height="1" width="1" />, Donald Knuth provides the following definition for a data structure:</p>
<blockquote>
<p align="left">Data Structure: A table of data including structural relationships</p>
</blockquote>
<p>In this sense, a &#8220;table of data&#8221; refers to how a data structure is composed. This definition does not imply that arrays are the only data structure (which would exclude other structures such as linked lists.)  The units of information that compose a data structure are often referred to as fields.  That is to say, a data structure is composed of one or more fields, where each field contains information, and the fields are adjacent (next) to each other in memory (RAM, hard disk, usb drive, etc.)</p>
<p>The information the fields contain falls into one of two categories, the data a user wishes to represent (e.g. the contents of a file), as well as the structural relationships (e.g. a pointer to the next item in a linked list.)  It&#8217;s useful to think of the former (data) as data, and the latter (structural relationships) as metadata.  Although the line between the two is not always clear, and depends on the context of interpretation.  What may be considered data from one perspective, may be considered metadata from another perspective.  An example of this would be a Microsoft Word document, which from a file system perspective is data.  However, from the perspective of Microsoft Word, the file contains both data (the text) as well as metadata (the formatting, revision history, etc.)</p>
<p>The design of a data structure not only includes the order of the fields, but also the higher level design goals for the programs which access and manipulate the data structures.  For instance, efficiency has long been a desirable aspect of many computer programs.  With society&#8217;s increased dependence on computers, other higher level design goals such as security, multiple access, etc. have also become desirable.  As a result, many data structures contain fields to accommodate these goals.</p>
<p>Another important aspect in computing is how to access and manipulate the data structures and their related fields. Knuth defines this under the term &#8220;data organization&#8221;:</p>
<blockquote><p>Data Organization: A way to represent information in a data structure, together with algorithms that access and/or modify the structure.</p></blockquote>
<p>An example of this would be a field that contains the bytes 0&#215;68, 0&#215;65, 0&#215;6C, 0&#215;6C, and 0&#215;6F.  One way to interpret these bytes is as the ASCII string &#8220;hello&#8221;.  In another interpretation, these bytes can be the integer number 448378203247 (decimal).  Which one is it?  Well there are scenarios where either could be correct.  To answer the question of correct interpretation requires information beyond just the data structure and field layout, hence the term data organization.  Even with self-describing data structures, information about how to access and manipulate the &#8220;self-describing&#8221; parts (e.g. type &#8220;1&#8243; means this is a string) is still needed.</p>
<p>So where does all this information for data organization (and data structures) come from?  There are a few common sources.  Perhaps the first would be a document from the organization that designed the data structures and the software that accesses and manipulates them.  This could be either a formal specification, or one or more informal documents (e.g. entries in a knowledge base.) Another source would be reverse engineering the code that accesses and manipulates the data structures.</p>
<p>If you&#8217;ve read through all of this, you&#8217;re might be asking &#8220;So how does this relate to digital forensics?&#8221;  The idea is that data structures are a type of digital evidence.  Realize that the term &#8220;digital evidence&#8221; is somewhat overloaded.  In one context, a disk image is digital evidence (i.e. what was collected during evidence acquisition), and in another context, an email extracted from a disk image is digital evidence.  This series focuses on the latter, digital evidence extracted from a stream of bytes.  Typically this would occur during the analysis phase, although (especially with activities such as verification) this can occur prior to the evidence acquisition phase.</p>
<p><strong>The 5 Phases</strong></p>
<p>Now that we&#8217;ve talked about what data structures are and how they relate to digital forensics,  lets see how to put this to use with our forensic tools.  What we&#8217;re about to do is describe five abstract phases, meaning all tools may not implement them directly, and some tools don&#8217;t focus on all five phases.  These phases can also serve as a methodology for recovering data structures, should you happen to be in the business of writing digital forensic tools.</p>
<ol>
<li>Location</li>
<li>Extraction</li>
<li>Decoding</li>
<li>Interpretation</li>
<li>Reconstruction</li>
</ol>
<p>The results of each phase are used as input for the next phase, in a linear fashion.</p>
<p>An example will help clarify each phase.  Consider the recovery of a FAT directory entry from a disk image.  The first task would be to locate the desired directory entry, which could be accomplished through different mechanisms such as calculation or iteration.  The next task is to extract out the various fields of the data structure, such as the name, the date and time stamps, the attributes, etc.  After the fields have been extracted, fields where individual bits represent sub fields can be decoded.  In the example of the directory entry, this would be the attributes field, which denotes if a file is considered hidden, to be archived, a directory, etc.  Once all of the fields have been extracted and decoded, they can be interpreted.  For instance, the seconds field of a FAT time stamp is really the seconds divided by two, so the value must be multiplied by two.  Finally, the data structure can be reconstructed using the facilities of the language of your choice, such as the time class in Python.</p>
<p>There are a few interesting points to note with recovery of data structures using the above methodology.  First, not all tools go through all phases, at least not directly.  For instance, file carving doesn&#8217;t directly care about data structures.  Depending on how you look at it, file carving really does go through all five phases, it just uses an <a href="http://en.wikipedia.org/wiki/Identity_function" target="_blank">identify function</a>. In addition, file carving does care about (parts of) data structures, it cares about the fields of the data structures that contain &#8220;user information&#8221;, not about the rest of the fields.  In fact, much file carving is done with a built-in assumption about the data structure: that the fields that contain &#8220;user information&#8221; are stored in contiguous locations.</p>
<p>Another interesting point is the distinction between extraction, decoding, and interpretation.  Briefly, extraction and decoding focus on extracting information (from stream of bytes and already extracted bytes respectively), whereas interpretation focuses on computation using extracted and decoded information.  The next post will go into these distinctions in more depth.</p>
<p>A third and subtler point comes from the transition of data structures between different types of memory, notably from RAM to a secondary storage device such as a hard disk or USB thumb drive.  Not all structural information may make the transition from RAM, and as a result is lost.  For instance, a linked list data structure, which typically contains a pointer field to the next element in the list, may not record the pointer field when being written to disk.  More often that not, such information isn&#8217;t necessary to read consistent data structures from disk, otherwise the data organization mechanism wouldn&#8217;t really be consistent and reliable.  However, if an analysis scenario does require such information (it&#8217;s theoretically possible), the data structures would have to come directly from RAM, as opposed to after they&#8217;ve been written to disk. This problem doesn&#8217;t stem from the five phases, but instead stems from a loss of information during the transition from RAM to disk.</p>
<p>In the next post, we&#8217;ll cover each phase in more depth, and examine some of the different activities that can occur at each phase.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.forensicblog.org/2007/05/05/how-forensic-tools-recover-digital-evidence-data-structures/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Evaluating Forensic Tools: Beyond the GUI vs Text Flame War</title>
		<link>http://www.forensicblog.org/2007/05/02/evaluating-forensic-tools-beyond-the-gui-vs-text-flame-war/</link>
		<comments>http://www.forensicblog.org/2007/05/02/evaluating-forensic-tools-beyond-the-gui-vs-text-flame-war/#comments</comments>
		<pubDate>Wed, 02 May 2007 10:15:10 +0000</pubDate>
		<dc:creator>Mike Murr</dc:creator>
		
		<category><![CDATA[Digital forensics]]></category>

		<category><![CDATA[Forensic tools]]></category>

		<guid isPermaLink="false">http://www.forensicblog.org/2007/05/02/evaluating-forensic-tools-beyond-the-gui-vs-text-flame-war/</guid>
		<description><![CDATA[One of the good old flamewars that comes up every now and again is which category of tools is &#8220;better&#8221;: graphical, console (e.g. interactive text-based), or command-line?
Each interface mechanism has its pros and cons, and when evaluating a tool, the interface mechanism used can make an impact on the usability of the tool.  For [...]]]></description>
			<content:encoded><![CDATA[<p>One of the good old flamewars that comes up every now and again is which category of tools is &#8220;better&#8221;: graphical, console (e.g. interactive text-based), or command-line?</p>
<p>Each interface mechanism has its pros and cons, and when evaluating a tool, the interface mechanism used can make an impact on the usability of the tool.  For instance displaying certain types of information (e.g. all of the picture files in a specific directory) naturally lend themselves to a graphical environment. On the other hand, it&#8217;s important to me to be able to use the keyboard to control the tool (using a mouse can often slow you down). The idea that graphical tools &#8220;waste CPU cycles&#8221; is pretty moot, considering the speed of current processors, and that much forensic work focuses on data sifting and analysis, which is heavily tied to I/O throughput.</p>
<p>Text based tools however do have the issue that paging through large chunks of data can be somewhat tedious (this is where I like using the scrollwheel, the ever-cool <a href="http://mac-tech-switching.blogspot.com/2006/09/two-finger-scroll-on-trackpad.html" target="_blank">two-finger scroll on a Macbook</a>, or even the &#8220;less&#8221; command.)</p>
<p>To me, there are more important issues than the type (e.g. graphical or text-based) of interface.  Specifically some of the things I focus on are:</p>
<ul>
<li> What can the tool do?</li>
<li>What are the limitations of the tool?</li>
<li>How easy is it to automate the tool (getting data into the tool, controlling execution of the tool, and getting data out of the tool)?</li>
</ul>
<p>The first two items really focus on the analysis capabilities of the tool (which can be &#8220;make-or-break&#8221; decisions by themselves), and the last item (really three items rolled into one) focuses on the automation capabilities of the tool.</p>
<p><insert></insert></p>
<p>The automation capabilities are often important because no single tool does everything, and an analyst&#8217;s toolkit is composed of a series of tools that have differing capabilities. Being able to automate the different tools in your toolkit (and being able to transfer data between multiple tools) is often a huge time saver.</p>
<p>Many tools have built-in scripting capabilities. For instance ProDiscover has ProScript, EnCase has EnScript, etc. Command line tools can typically be &#8220;wrapped&#8221; by another language. Autopsy for example, is a PERL script that wraps around the various Sleuthkit tools. While it is useful to be able to automate the execution of a tool, it&#8217;s also useful to be able to automate the import and export of data. Being able to programmatically extract the results of a tool and feed them as input (or further process them) allows you to combine multiple tools in your toolkit.</p>
<p>So to me, when evaluating a forensic tool the capabilities (and limitations) and the ease of automation are (often) more important than the interface.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.forensicblog.org/2007/05/02/evaluating-forensic-tools-beyond-the-gui-vs-text-flame-war/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Copying 1s and 0s</title>
		<link>http://www.forensicblog.org/2007/03/21/copying-1s-and-0s/</link>
		<comments>http://www.forensicblog.org/2007/03/21/copying-1s-and-0s/#comments</comments>
		<pubDate>Wed, 21 Mar 2007 20:22:13 +0000</pubDate>
		<dc:creator>Mike Murr</dc:creator>
		
		<category><![CDATA[Digital forensics]]></category>

		<category><![CDATA[Fundamentals]]></category>

		<guid isPermaLink="false">http://www.forensicblog.org/2007/03/21/copying-1s-and-0s/</guid>
		<description><![CDATA[I&#8217;ve been asked a few times over the past weeks about making multiple copies of disk images.  Specifically, if I were to make a copy of a copy of a disk image, would the &#8220;quality&#8221; degrade?  The short answer is no.  It boils down to the idea of copying information from a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been asked a few times over the past weeks about making multiple copies of disk images.  Specifically, if I were to make a copy of a copy of a disk image, would the &#8220;quality&#8221; degrade?  The short answer is no.  It boils down to the idea of copying information from a digital format (as opposed to an analog format).  Let&#8217;s say I write down the following string of ones and zeros on a 3&#215;5 card:</p>
<p>101101</p>
<p>Now, if I take out another 3&#215;5 card and copy over (by hand) the same string of ones and zeros, I now have two cards with the string:<br />
101101</p>
<p>Finally, if I took out a third 3&#215;5 card and copied yet again (by hand) the same string (from the second card) I would have three cards with the string:</p>
<p>101101</p>
<p>Assuming I had good handwriting, then each copy would be legible and have the same string of ones and zeros.  I could continue on indefinitely in this manner, and each time the new 3&#215;5 card would not suffer in &#8220;quality&#8221;.</p>
<p>However, instead of copying (by hand) the string of ones and zeros, I could have photocopied the first 3&#215;5 card.  This would yield a result of one 3&#215;5 card, and a (slightly) degraded copy.  If I then photocopied the copy, I would get a further degraded (third) copy.</p>
<p>So, copying images (or any digital information) verbatim (i.e. using a lossless transformation process) doesn&#8217;t degrade the quality of the information, read a &#8220;one&#8221; (from the source) write a &#8220;one&#8221; (to the destination).  Where you might run into trouble is if the source or destination media has (physical) errors.  So it&#8217;s always a good idea to verify your media before imaging.  It&#8217;s also a good idea to use a tool that tells you (and even better if the tool logs) errors that it encounters during the imaging process.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.forensicblog.org/2007/03/21/copying-1s-and-0s/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Exhibits from deposition of RIAA&#8217;s expert available online</title>
		<link>http://www.forensicblog.org/2007/03/04/exhibits-from-deposition-of-riaas-expert-available-online/</link>
		<comments>http://www.forensicblog.org/2007/03/04/exhibits-from-deposition-of-riaas-expert-available-online/#comments</comments>
		<pubDate>Mon, 05 Mar 2007 07:29:56 +0000</pubDate>
		<dc:creator>Mike Murr</dc:creator>
		
		<category><![CDATA[Digital forensics]]></category>

		<guid isPermaLink="false">http://www.forensicblog.org/2007/03/04/exhibits-from-deposition-of-riaas-expert-available-online/</guid>
		<description><![CDATA[Updating the previous post, the exhibits from the deposition are available at:
Recording Industry vs The People blog.
]]></description>
			<content:encoded><![CDATA[<p>Updating the previous post, the exhibits from the deposition are available at:</p>
<p><a href="http://recordingindustryvspeople.blogspot.com/2007/03/deposition-of-riaas-expert-available.html" target="_blank">Recording Industry vs The People</a> blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.forensicblog.org/2007/03/04/exhibits-from-deposition-of-riaas-expert-available-online/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Transcript of deposition of RIAA&#8217;s expert available online</title>
		<link>http://www.forensicblog.org/2007/03/01/transcript-of-deposition-of-riaas-expert-available-online/</link>
		<comments>http://www.forensicblog.org/2007/03/01/transcript-of-deposition-of-riaas-expert-available-online/#comments</comments>
		<pubDate>Fri, 02 Mar 2007 06:18:08 +0000</pubDate>
		<dc:creator>Mike Murr</dc:creator>
		
		<category><![CDATA[Digital forensics]]></category>

		<guid isPermaLink="false">http://www.forensicblog.org/2007/03/01/transcript-of-deposition-of-riaas-expert-available-online/</guid>
		<description><![CDATA[In UMG v. Lindor, the RIAA&#8217;s expert was deposed on February 23rd 2007.  A PDF copy of the transcript is available at ilrweb.com.
Source: Recording Industry vs The People blog.
]]></description>
			<content:encoded><![CDATA[<p>In UMG v. Lindor, the RIAA&#8217;s expert was deposed on February 23rd 2007.  A PDF copy of the transcript is available at <a href="http://www.ilrweb.com/viewILRPDF.asp?filename=umg_lindor_070223JacobsonDepositionTranscript" target="_blank">ilrweb.com</a>.</p>
<p>Source: <a href="http://recordingindustryvspeople.blogspot.com/2007/03/deposition-of-riaas-expert-available.html" target="_blank">Recording Industry vs The People</a> blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.forensicblog.org/2007/03/01/transcript-of-deposition-of-riaas-expert-available-online/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
