第一章:取证发现宗旨
1.1 简介
关于寻找东西。当你找一些特殊的东西的时候,找到的可能性就很低。因为你是在找世上那么多东西中的一个。而当你在随便找到什么东西的时候,找到的机会就非常的多。因为世上有这么多东西,你肯定能找到几样!
-- Darryl Zeor, The Zero Effect
几年前一个朋友哭着向我们求助。有人侵入了她的Solaris系统并且删出了大量的文件。为何帮忙我们写出了后来成为The Coroner's
Toolkit [Farmer,2004]中的一员的文件反删除工具的最初版本。我们的朋友只是想找回文件,而我们却想知道到底发生了什么。
我们别想完整的恢复太多的东西。像其他的UNIX系统一样,Solaris并没有文件反删除的功能。硬盘中被删的文件信息像个迷样的放在那里,你得把零碎的部分放在重新放在一起。UNIX的FAQ对此表现得格外的悲观。[FAQ,2004]
通常认为:当你用rm命令删除一个命令时,它就没有了。一旦你rm了一个文件,系统就会完全的遗忘了分散在硬盘上的哪些块来属于你的文件。更坏的是这些曾属于你刚刚删除的文件的块将在系统需要更多磁盘空间的时候被占用和写入。
当我们浏览那些被删文件时我们发现日常的经验过渡的悲观了。首先,现代文件系统并不是随机地将文件内容分散在磁盘上。相反,现
代文件系统能够在即使长达几年的密集使用的情况下成功地避免文件碎片的产生。其次,被删的文件会完整保留相当长的时间。更对关于已删文件持久性的文章可在
第七章读到。
接下来就想我们提倡的那样:依靠以往的经验,听从他人的建议,并且使用现有的工具。但也不要因害怕而把日常经验变为信条,创造自己的工具并且在需
要时发展自己的一套理论。否则,你可能会像那个因为在光线明亮的路灯下寻找丢失钥匙的家伙一样。这是本书的核心信息:如果你想学会解决问题,你就要有在任
何地方找任何东西的准备,而且要在找到前准备好!
本章的余下部分是对本书主要思想的介绍。我们不希望每位读者都有依次阅读每一章的耐心。你可以通过这一章了解到那些是你最感兴趣的话题。
奥,恐怕我们忘了提到:我们的朋友的确找回了很多文件。
1.2 突出不寻常的举动
所有存在你系统的每一个bit到底是怎么回事?大多情况下什么也没发生。我们搜集不同Unix服务器的数据来显示它们访问文件多么频繁。表1.1的结果以递增顺序显示使用量和网络流量。
www.things.org
www.fish.com news.earthlink.net
一年以上:
76.6%
75.9
10.9
6 月-一年:
7.6
18.6
7.2
1-6 个月:
9.3
0.7
72.2
一天-一月:
3.6
3.1
7.4
24之内:
2.9
1.7
2.3
表1.1:大量因特网服务器的近期文件读写的百分比。
两个典型的web服务器上的绝大部分文件去年一整年的时间没有使用过。即使在超负荷的Usenet新闻系统上30天内
使用过的文件也少于10%。不论是程序、配置文件,还是邮件、新闻或者数据等的压缩包,总有很多文件会招“电子灰尘”。Windows
PCs和其他桌面系统呈类似的现象。我们发现90%的文件最后一年没有被访问过。
为什么会这样?即使在一台MIPS(每秒百万指令)的机器也能在很短的时间内生成装满T级容量设备的新数据。计算机当然足够的忙碌,但多数操作都
在访问不断重复的数据、程序和其它资源。当计算机不断重复地访问同样的文件时,它只不过在踩着自己的足迹而已。这也是为何非常操作的痕迹不但会凸现出来,
而且会凸现出很长一段时间!因为系统中大部分信息很少动用!
几乎本书的所有章节都在讨论地各种形式的数字痕迹。文件系统中痕迹的例子在第二章“时间机器”和第四章“文件系统分析”中。内存中数字痕迹的讨论在第八章“进程之外”
1.3 挥发度守则 (The Order of Volatility
一个系统的取证分析是以数据的收集和处理为周期展开的。数据越正确完整,越能进行更全面的鉴定。原始数据被保持在初始的状态并且任何分析只能在计算机数据的副本上进行。这有些类似录下凶案现场防止物理证物的破坏来保留证据、供验证结论和最小化数据的篡改。
理想情况下你想要整个系统和所有数据的拷贝,但往往有各种障碍。当你收集数据时其它的系统的用户或者程序可能会改变状态或者销毁有价值的证据。情急下入侵者或极端分子可能设置电子地雷来破坏数据。而仅仅一个程序的加载和运行也会干扰计算机的状态。
正因如此,传统取证分析聚焦于从非运行系统中获取数据的。规程要求你关闭系统然后复制现场立下的数据:程序日志、访问时间、文件内容等等。分析随后在这些数据的一份副本上进行,以期将对原数据的威胁见到最小。这项简化了数据的捕捉同时在证明结果时提供了不容否认的逻辑链。
我们大体原则是提倡对确定因素在更高层次上的更好的理解,这些因素可能在法庭上潜在地使一些方法论受到更多怀疑。相反,对于非确定因素--
主要是数据收集方法,能够对其结论给予更多的了解和信任。这个过程需要统一的数据搜集机制和同意方法优劣势的充分的理解。我们坚信短期内数举的取证会出现
对可信结果自动化的需求。
当然,在一个运行中的系统中搜集信息需要谨慎有计划的进行。将计算机同其他用户和网络隔离是第一步。有些种类的数据受数据收集的影响较其他的小,所以按照正确的顺序来进行收集是好办法。不同数据的生存期差别很大,从几纳秒到几年。表1.2可作粗略的指南:
Registers, peripheral memory, caches, etc.
nanoseconds
Main Memory
nanoseconds
Network state
milliseconds
Running processes
seconds
Disk
minutes
Floppies, backup media, etc.
years
CD-ROMs, printouts, etc.
tens of years
表1.2: 数据的预期生存时间.
参照这个挥发度法则赋予更多的机会保全仅作数据收集会破快的脆弱资料,并且使你捕捉到可疑事件的数据而不是你在数据过程中产生的无效数据。当然这都要视情况而定,如果对硬盘的内容或者失效很久了的一次时间的线索感兴趣的话,普作问题计算机的内存就没有什么意义了。
近一个世纪前,Werner Heisenberg(见图1.1)创立了量子物理的几大理论之一,描述了原子乃至更小尺度上的粒子行为:可以确定粒子位置或者运动方式,但不能两者同时确定。
图 1.1: Werner Heisenberg, Goettingen, 1924
Heisenberg测不准原理可直接地应用于计算机数据搜集。不单搜集所有的信息非常的困难,本质上也是不可能的1。我们将海氏理论用在数据搜集搜集和系统分析上。
脚注 1、利用虚拟机可以将活性以实际机器代码的形式捕捉到[Dunlap,2002],但在现实级别无法在多用途电脑和周边设备上做到。
尽管如此,现实中测不准原理并不是搜集计算机上所有数据的主要问题。计算机状态定义不在某一时刻而是某一区段。内存、进程和文件的改变的非常之快,在不干扰一台普通计算机系统的操作的情况下想准确而且及时的捕捉到哪怕一小块的变动也是不可能的。
以简陋的date程序为例,date打印当前的日期和时间。如果用strace(一个运行时跟踪程序)来监视它,date一
秒钟内执行了超过100次系统调用(包括取得时间,检测你所在失去,输出结果等。)如果我们继续监视CPU执行这个操作的机器代码我们会的得处理数千条的
信息。但是即使是借助工具处理所有计算机上的程序也没法获得全部信息,视频卡、硬盘控制器、以及其他的周边设备都有各类的信息要搜集,它们各自有自己的内
存、处理器和存储媒介。
破境不能重圆。但要活得曾经发生什么结论却不需要那么多的信息。
1.4 层次和假象
大约70年以前,Rene Magritte [Magritte,2004]
创作了一系列叛逆想象力的美术作品。本书的封面展示了一个底部带有“这部是一个烟斗”的烟斗的图案。的确,这不是一个烟斗,而只是一个烟斗的图画。图像可
能是艺术家对一个真实烟斗的描绘,但也可能完全出由于想象或者很多由烟斗混合而成。仅仅看图像的话是无法说出区别来的。
计算机系统其实也是一样。屏幕上的图像并不是计算机文件,而只是一个现是在屏幕上的图像。文件、进程、网络连接的图像仅仅是关连到内存、网络报文或者磁盘
中的原始的bits。你看到的图像由层层的软硬件产生。让入侵者“占有”了一台机器,可以篡改其中的任何一层。应用软件会撒谎,操作系统内核会撒谎,甚至
硬盘里固件也会撒谎!
图 1.2: (a) 用户和应用程序,(b) 操作系统内的文件系统软件,(c) 硬件所看到文件简图。
带属性的文件、目录的概念是计算机系统为我们创造的假象之一,下面的数据块和元数据块(i节点)一样。事实上,计算机文件系统从一个等长的磁盘块的线性数组中分配空间,并且保留部分的存储能力留作己用。尽管如此,带属性的文件和目录的假象对应用程序和用户都十分的有用。
即使是等长磁盘块的数组的概念也是一种假象。真正的磁盘只有磁头和碟片。它们以磁畴的形式存储信息,并且也保留部分容量留作己用。线性连续等长磁盘块的目的只有一个:使得操作系统的实现更加简单。
当我们逐层剥去这些假象,信息因为经受过越来越少的加工而变得越来越真实。当我们降得离原始bits越来越近时候,信息因我们对其了解越来越少而对我们原来月没有意义。这个模糊对准确的争议恰是层次化的结果;后面中一段我们将看到层次化是如何影响删除信息的持久度的。
1.5 信息的可信度
在计算机科学的早期,数学家Alan Turing [Turint,
1950]发明了机器智能的测试。测试以一种电传打字机采访的形式实现--电传打字机是现代计算机显示器的祖先--采访者会在不知道答案来自机器还是人类
条件下问测试对象一些问题。如果从机器得到的回答无法同真人的回答区分开来的话,这台机器就应该被认为具有了人类的智慧。
计算机取证分析与图灵测试机器的相似。你检验来自一个计算机系统的信息,然后尝试根据得出结论。但你如何得知信息是可信的呢?你是真的沿着踪迹追寻一台机器上发生的事情,还是那些入侵者期望你相信的东西呢?这是计算机取证分析的图灵测试。
为了不会掉进入侵者设下的圈套,你需要详细的检测可见的每一bit的信息,寻找象征着一种尝试掩饰的可能的疑点。你用有的信息来源越多,你对你的结论就越有信心。
列表 1.1 通过一个典型UNIX系统日志的小例子列举了这个过程。途中信息显示一个来自三个不同来源的login会话:TCP
Warpper logging [Venema, 1992], login accouting和process
accounting.每个信息来源通过不同层次来显示。时间自上向下。
May 25 10:12:46 spike telnetd[13626]: connect from hades
|
| wietse ttyp1 hades Thu May 25 10:12 - 10:13 (00:00)
| |
| | hostname wietse ttyp1 0.00 secs Thu May 25 10:12
| | sed wietse ttyp1 0.00 secs Thu May 25 10:12
| | stty wietse ttyp1 0.00 secs Thu May 25 10:12
| | mesg wietse ttyp1 0.00 secs Thu May 25 10:12
. . . . . . . . . . .
| | ls wietse ttyp1 0.00 secs Thu May 25 10:13
| | w wietse ttyp1 0.00 secs Thu May 25 10:13
| | csh wietse ttyp1 0.03 secs Thu May 25 10:12
| | telnetd root __ 0.00 secs Thu May 25 10:12
| |
| wietse ttyp1 hades Thu May 25 10:12 - 10:13 (00:00)
列表1.1. 一个login会话的三种信息来源
自外向内是:
The TCP Wrapper logging显示本地时间May 25 10:12:46,主机spike收到了一个来自hades主机的连接。The TCP Wrapper 只记录连接时间,所以没有相应的telnet连接结束的记录。
last命令输出显示了用户wietse从主机hades在终端ttyp1登录,并且login会话从10:12持续到10:13,总共不到两分钟。为了确认同样的记录显示了两次,分别在login会话开始和结束的时候。
lastcomm命令的输出显示了用户wietese执行了哪些命令,每个命令消耗了多少CPU时间,以及什么时候命令开始执行。记录的顺序按照每个进程结束的顺序。最后两条记录是在login会话结束的时候写入的,在命令解释程序(csh)和telnet server进程(telnetd)结束的时候。
例子中的记录勾画了一致的图景:有人连接到了机器,登录,执行了一些命令,然后离开。这是期望寻知道loing会话时所希望的那种记录方式。每个记
录本身没有证明事件确实发生过。同样多少证明事情没有发生的记录。但当多个信息来源都勾画了一致的图景时,就越看起来像在显示的时间有人登入Wietes
的帐户。
现实生活中login会话会留给我们比这个例子多的信息。一些信息可以在目标机器上找到。每个被执行的命令可能访问和修改成倍的文件和目
录。其他信息可以在目标机器外找到,比如网络路由器的accounting记录,IDS的事件记录,主机上的源自login会话的取证信息等等。所有这些
信息都应当相互适当的关联起来。信息就是力量,当你在调查一次时间事,却往往获得不到太多的信息。
1.6 已删信息的固化
删除信息出乎意料的难[Gutmann, 1996]和[Gutmann,
2001]。即使一台机器关掉以后内存芯片仍然可以被读取。虽然是按只能以0、1读取的方式设计,内存芯片拥有为公布诊断模式,允许访问残余的零星的
bit碎片。磁盘上的数据即使在覆盖多次后依然能够恢复。虽然磁盘驱动器的设计是只读取最后写入的数据,原来的磁性却依然物理的媒体上存在
[Veeco, 2004]。
从电子垃圾箱中收集信息的障碍就是部分毁坏的信息的恢复,也就是搞清一堆的数字废料。没有创建文件的应用软件是难知道文件的内容的;而且没有了文件系统,
数据块不会自己组合成文件;于是乎数举的重建就变得和像猜疑一样。数据破坏影响的越多层的假象,余下的信息就变得越难理解。
删除后的文件内容直到被覆盖前几乎不会改变。数据分布属设计优良的文件系统被删的文件可以保持完整达几年之久。被删的信息如同化石一样--也许某处骨骼会遗失但化石尚在--它直到完全被覆盖为止不会改变。
假象的层次化对数据的重建和恢复十分重要。从文件系统中删除文件相对简单,但是却不足以销毁文件全部的内容。文件曾使用过的磁盘块上信息依然完整。
其他的抽象层次也会发生这类的现象。在磁头层次的上,旧信息体现为新信息的模拟调制。而在磁畴的层次,会以magnetic patterns的形式在磁轨上存在。
在组成计算机系统的任一抽象层上,信息一旦删除就被冻结。虽然当降到越低的抽象层此的时候被删信息变得越来越模糊,我们发现信息却变得越来越越持久
了。挥发度是为了让计算机系统易用而创造的人造抽象。我们看到的不过是挥发度法则的另一个幌子,其实另有实情。第七章“删除信息的持久度”会有更多的信
息。
1.7 考古学与地质学
随着时间的推移,系统逐渐变得成熟和稳定。然而表面以下,计算机何时何地存储信息、如何循环存储空间也越来越不可预知。磁盘、内存、网络数据包上搜集的数据都在受着很多足迹和指纹混杂的过程的影响。
传统上讲,这些不可语言的过程会被计算机取证所忽略。本书打破这种传统并且尝试了解系统管理信息的方式。相往常一样,这是一个将不可预见性的劣势化为又是的挑战。为了抓住问题的重点下面现实世界中并列的学科加以对比:
考古学研究人类活动的直接效应,比如遗留下来的文物。
数字考古学研究用户活动,比如文件内容、文件的时间戳、删除文件信息和网络流量记录。
地质学研究人类没有直操控的自己过程,如冰川、板块构造、火山作用和侵蚀作用。
数字考古学研究用户没有之际操控的进程,如磁盘块的分配和回收、文件ID号、内存分页或者进程ID。
表 1.3: 数字考古学和地质学的区别。
就像现实地质学过程不断的破坏考古遗址一样,数字地质学也不会断地破坏信息。距离来说,用户能够直接控制现存文件的内容;当文件被删除后,用户就没办法直
接的控制破坏的顺序了。第七章“删除文件的持久性”将进一步探索这个过程,而第八章,“进程之外”将讨论内存中信息的衰败。
信息的破坏并不是用户控制和自动进程冲突的唯一方式。自动进程在创建文件时会留下特有的记号。第五章“系统和伪装”我们提到:有些进程是
不变的,自系统启动的时候就创建了;这些进程拥有相对小得的进程ID。然而大多数进程转瞬即逝,他们在整个计算机系统的运行期间不断的创建和退出。当一个
进程向日志文件中记录感兴趣的信息时,日志文件的记录通常会包含时间戳和进程ID,而这个序列期间的间断意味着其他的进程在此时被创建了,虽然我们并不知
道这些进程的其他信息。表 1.3 举了这个例子。
表 1.3:小型FreeBSD邮件服务器上的总体进程创建率(上)和实际观测率(下)。星期六凌晨2:00的两次峰值是每周的维护例程导致的。
仅从观测到的进程ID序列的间断就可以揭露出未观测到进程,这种方法在文件系统和网络协议上同样凑效。第四章“文件系
统分析”显示为什么文件ID分析可以揭示后门程序的来源信息。网络协议同样会用间接效应。举例来说,因特网报文的ID域在每次系统生成时候通常每次都会加
1。通过重复地探嗅这个网络,你可以发现系统产生了多少其他报文,虽然你不能直接的观察到这些报文[Antirez, 1998]
自主程序同用户之间常发生有趣的现象。当数据考古学涉及了直接的一阶用户行为如进程、网络连接和文件的作效应时,数字地质学会在存储的信息上以及分配的文件ID、进程ID或者网络报文ID上显示简介的二阶效应。
一阶效应和二阶效应不过是计算机系统架构层次化的又一结果而已。用户的直接控制受限于上层的进程、文件和网络连接。底层的动作愈加自动化。本书着重于靠近上层的一阶效应。更高阶的效应有待在底层的边界处发现。
References
[Antirez, 1998] Salvatore Sanfilippo (Antirez), BUGTRAQ mailing list
posting, December 1998.
http://www.kyuzz.org/antirez/papers.html
[FAQ, 2004] The UNIX FAQ, which currently resides at:
http://www.faqs.org/faqs/unix-faq/faq/
[Farmer, 2004] The Coroner's Toolkit by Dan Farmer and Wietse
Venema,
http://www.fish2.com/tct/
http://www.porcupine.org/tct/
[Gutmann, 1996] Peter Gutmann, "Secure Deletion
of Data from Magnetic and Solid-State Memory", Sixth USENIX
Security Symposium Proceedings, San Jose, California, July 22-25,
1996.
http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html
[Gutmann, 2001] Peter Gutmann, "Data Remanence in Semiconductor
Devices", 10th USENIX Security Symposium, Washington, D.C., August
13-17, 2001.
[Magritte, 2004] Some information about Rene
Magritte's work can be found on-line at
http://www.magritte.com/
[Dunlap, 2002] George W. Dunlap, Samuel T. King, Sukru Cinar,
Murtaza Basrai, and Peter M. Chen, "ReVirt: Enabling Intrusion
Analysis through Virtual-Machine Logging and Replay", Proceedings
of the 2002 Symposium on Operating Systems Design and Implementation
(OSDI) , December 2002.
http://www.eecs.umich.edu/CoVirt/papers/.
[Turing, 1950] Alan M. Turing, "Computing Machinery and Intelligence",
Mind, Vol. 59, No. 236, 1950. pp. 433-460.
[VEECO, 2004] Veeco Products. You can find images of
semiconductors and magnetic patterns on-line at:
http://www.veeco.com/
[Venema, 1992] Wietse Venema, "TCP Wrapper, network monitoring,
access control and booby traps", UNIX Security Symposium III
Proceedings (Baltimore), September 1992.
ftp://ftp.porcupine.org/pub/security/tcp_wrapper.ps.Z