前言
今天,从接入internet到被其他机器攻击只要几分钟的时间 - 并且只能算是无目的攻击的背景噪声级别。也曾有机器可以年复一年的不配攻击。internet"背景辐射"的例子请参考[CAIDA,2003],[Cymru,2004]或[IMS,2004]。
通过这本书我们总结了一些我们花了几十年汇集的“事后”入侵分析的经验。这期间internet承爆炸性的增长。接入主机已经从10万增长到了1亿[ISC,2004].这种接入主机的增长(如果不算出乎意料的话)更富戏剧性的导致了计算机和网络的入侵的增加。随着网络的特征和范围的改变,我们面对的入侵的特征和范围也随着改变。我们很高兴同读者分享学习的机会。
然而在同样的年代,电脑存储信息的方式却几乎没有变化。事实上,我们可以坦然宣称计算机系统在过去35年里没有本质的变化:整个internet和其他现今使用的操作系统,包括Linux、Windows等等。我们乐观的期待知道我们的一些见识在未来的10年里依然凑效。
你能够从这本书中学到什么?
这本书的前提是取证信息可以通过任何途径获得。在这个指导理念下我们开发了从明显还是隐藏的地方搜集信息的工具。我们仔细讨论实际入侵的分析,以及所用方法的局限性。
虽然我们列举使用在特定的系统环境中使用特定的取证工具的手段,我们并不提供如何使用这些工具的cookbooks,也不提供供一步步核实的checklists.而是提供信息如何持续、过去的事件如何恢复以及信息的可信度如何被进程故意或无意的影响的背景资料。
在案例学习和例子中我们偏离传统计算机取证学而转向系统动力学的学习。文件系统的挥发性和持续性以及内存是这本书的普遍话题。同时我们的大部分例子里来自Solaris,FreeBSD和Linux系统。微软的视窗也偶尔提到。我们强调的是这些系统共有的基础原理:寻找计算机系统的共性,而不是偶然的区别和表面功能。
我们通篇的主题是基于对过去事件的重建解决、分析和发现问题。这可以帮助你发现事件为何会为人所知,但通常讲已经超出本书的范围。知道正在发生什么会使你对下次即将发生的坏事情做好准备,即使准备不太充分。但是我们不会设计入侵的检测和预防。我们演示从一个入侵可以导致到另一个入侵的发现的线索,同时指出取证信息怎样被系统保护机制或其他的错误所影响。
面向的读者
这本书面向任何想要深化自己对计算机系统的理解,以及任何想要涉猎计算机入侵和系统分析的技术层面的人们。除了系统管理员,应急响应者、其他计算机安全专家、取证分析员等等,还包括任何因计算机取证而涉及了隐私的人们。
虽然我们尽力来使资料适合非专业读者们阅读,本书还是不适合新手。作为最小的要求,我们假设读者已经深入了解UNIX或者视窗的文件系统、网络和进程的基本概念。
本书的结构
本书分三个部分:首先是基础原理,然后是进程、系统和文件的分析,最后以发现作为本书的结尾。我们并不期望按照顺序阅读本书。至少,我们建议从第一章开始读起,因为他介绍了通篇涉及的所有主题。
在第一部分“基本概念”中,我们介绍一个通用的高级概念,作为以后章节所依赖的基本技术。
*第一章:“取证发现的宗旨”,介绍计算机架构的一般属性怎样影响“事后”分析.后面遇到的所有的限制和意外都已经在这一章做了预测。
*第二章:“时间机器”,介绍时间线的基本概念,以基于主机和网络的信息为例,包含dns的信息。我们分析一次长达一整年时间安的入侵,同时示例从不明显的地方获得时间信息。
第二部分“探索系统抽象”中,我们探索文件系统,京城和操作系统的抽象。这些章的要点是分析:弄清从一个计算机系统中找到的信息并且判断它的可信度。
*第三章,“文件系统基础“,介绍了本件系统的基本概念,以及后面要用到的取证工具和技术。
*第四章,“文件系统分析”,通过详细检查一个受染机器的文件系统来阐明一次入侵。查看现存的文件和被删除的信息。同第二章一样,我们通过关联来决定不同观测结果的一致性。
*第五章,"系统和伪装“,关于用户进程和操作系统的执行环境。我们研究一些从直接更改系统工具到几乎不可检测的内核模块的伪装手段,以及这种伪装的检测。
*第六章,”恶意软件分析基础“介绍一些找出入侵后留下的进程或者程序文件的目的的技术,以及一些防止恶意软件隐藏的“安全哨兵”和他们的限制。
在第三章“抽象之外”,我们着眼于文件,进程和操作系统抽象的束缚之外。这部分的宗旨在“发现”,因为我们通过信息的失效来研究系统架构的效用。
*第七章"删除信息的保留“,说明那些大量被删除的文件可惜可以完好地保存相当长的时间。半数在活动的文件系统中存活了2-4个星期。
*第八章“进程之外”,说明主内存内信息的持久性,包括加密文件的节目内容。我们发现了持久性大量的表现形式,并且把这些形式同操作系统架构属性想关联。
附录提供背景资料:附录A是Coroner's
Toolkit和相关软件的介绍;附录B提供了目前我们了解的入侵顺序及其分支供在计算机系统中捕获取证信息。
本书中的约定
[这部分的字体约定失效,所以不加翻译]。我们使用$表示普通用户的shell命令提示符,#表示超级用户shell.大写开头的名字,如Argus,用来表示一个系统而非独立的命令。 本文中的UNIX隐式地表示Solaris,FreeBSD和LInux.一些例子中我们在命令提示符中包含了系统名称。如solaris$表明本示例只适用于Solaris系统。
如前问所指,本书中的许多示例均取自现实中的入侵。处于保护隐私我们对不是我们自己的系统做了匿名处理。比如使用似有网络地址代替真实网络地址、替换主机名和用户名等等。甚至适当的替换了时间和时区。
网站
书中例子中的一些小程序是写来做发现和分析的。我们无法包含完整的代码因为附加的细节会使本书贬值。他们和其他程序的完整代码可以在下面两个网站中找到。
http://www.fish2.com/forensics/
http://www.porcupine.org/forensics/
网站上你还可以知道大量的资料,诸如本书中为包含的案例和指向其他资源的连接等等。
鸣谢
We owe a great deal of gratitude to Karen Gettman, Brian Kernighan, and the
rest of Addison-Wesley for their patience and support over the many years that
this book has been under construction.
While we take full responsibility for any mistakes, this book would not be
what it is without our review team. In particular we would like to thank (in
alphabetical order): Aleph1, Brad Powell, Brian Carrier, Douglas Schales,
Elizabeth Zwicky, Eoghan Casey, Fred Cohen, Gary McGraw, Muffy Barkocy, Rik
Farrow, and Steve Romig. Ben Pfaff and Jim Chow helped with a chapter, and
Dalya Sachs provided valuable assistance with editing an early version of the
text. Tsutomu Shimumura inspired us to do things that we thought were beyond
our skills. Wietse would like to thank the FIRST community for the opportunity
to use them as a sounding board for many of the ideas that were developed for
this book. And contrary to current practice, the manuscript was produced as
HTML draft with the vi text editor plus a host of little custom scripts and
standard UNIX tools that helped us finish the book.
Dan Farmer
zen@fish2.com
Wietse Venema
wietse@porcupine.org
参考
[CAIDA, 2003] The CAIDA network telescope project.
http://www.caida.org/analysis/security/telescope/
[Cymru, 2004] Team Cymru Darknet project.
http://www.cymru.com/Darknet/index.html
[IMS, 2004] The University of Michigan Internet Motion Sensor project.
http://ims.eecs.umich.edu/
[ISC, 2004] Internet Systems Consortium, ISC Domain Survey: Number of Internet
Hosts.
http://www.isc.org/.