应对突发安全事故 如何为运行中的服务器生成位镜像拷贝

日期: 2009-11-05 作者:Tom Chmielarski翻译:行久 来源:TechTarget中国 英文

有时候我们需要为计算机生成一个位镜像拷贝,这需要在系统还在运行的时候,或至少要在系统关闭之前进行。“位镜像拷贝”是指对硬件驱动器上每一位进行拷贝,它不考虑操作系统是如何解析这些位的,所以它不是对每一个文件的拷贝。因为位镜像拷贝包含了一些被删除了的数据和文件的分段,而这些分段是被操作系统隐藏的,所以位镜像拷贝比文件级的镜像拷贝更优越。   一个典型的需要为正在运行的服务器生成位镜像拷贝的场景是应对突发事件的情况,在突发事件中,服务器关键的服务可能被或者可能没有被泄露或篡改,我们需要对该服务器进行全面的检查,但是不能关闭服务器的情况下进行,这时就需要一个服务器的位镜像拷贝。

为了解释该技术,我们将以……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

有时候我们需要为计算机生成一个位镜像拷贝,这需要在系统还在运行的时候,或至少要在系统关闭之前进行。“位镜像拷贝”是指对硬件驱动器上每一位进行拷贝,它不考虑操作系统是如何解析这些位的,所以它不是对每一个文件的拷贝。因为位镜像拷贝包含了一些被删除了的数据和文件的分段,而这些分段是被操作系统隐藏的,所以位镜像拷贝比文件级的镜像拷贝更优越。

  一个典型的需要为正在运行的服务器生成位镜像拷贝的场景是应对突发事件的情况,在突发事件中,服务器关键的服务可能被或者可能没有被泄露或篡改,我们需要对该服务器进行全面的检查,但是不能关闭服务器的情况下进行,这时就需要一个服务器的位镜像拷贝。为了解释该技术,我们将以一个简单的、单硬盘的Windows服务器为例。

  一个最为重要的问题是,当我们为一个服务器生成镜像的时候,我们要将镜像存放在何处,你不可能将镜像存放在你要拷贝的驱动器上。有两个比较不错的选择,一个是存放在USB驱动器上,另一个是通过网络存放。本文中我们将讲解通过网络存放拷贝的情况。

  在生成一个磁盘的镜像并将其通过网络存放在另一台电脑的过程中,你仅仅需要两个工具:通用的GNU/Linux工具DD和netcat的windows版本(两者都是免费的开源软件)。DD为我们生成磁盘的位镜像拷贝,而netcat将拷贝通过网络传送出去。当然,你需要一台联网的电脑来接收该镜像文件,而且该电脑需要有足够的空间来存放镜像文件。你需要将这两个工具存放在一个安全的介质上,最好是存放CD上。这样才能保证它们的完整性,以至于在被攻破的电脑上使用时不会受到影响。

  DD从磁盘第一簇开始一直到最后一个读取每个没有被读取过的磁盘簇,以此来生成磁盘镜像文件。在一个运行的服务器上,驱动器的数据经常被修改,这个频率是有服务器的活跃程度来决定的,所以经常会出现被DD读取后区段的值又发生改变的情况。

  我们经常使用DCFLDD版本的DD,这个版本的DD是由美国国防部计算机取证实验室开发的。DCFLDD在功能上与普通版本的DD一致,但增加了为拷贝的数据进行hash的功能。这个hash数据生成了一个签名,我们可以使用该签名来验证输出的数据是否和输入的数据(磁盘上的原数据)一致。因为我们在复制一个正在运行的服务器的磁盘,而该磁盘的数据一直被修改,所以第二次的镜像将不会与第一次的镜像一致。

  DCFLDD是一个使用起来非常简单工具,而且它的文档可以在该项目的主页sourceforge.net上找到。参数"if=" 是用来指定输入的,一般是要输入镜像的驱动器或者驱动器的分区。确定你的输入设备的准确名字的过程有点复杂,cygin的文档对此进行了详细的解释。一个简便输入是用“/dev/sda”指代第一个硬盘驱动器,“/dev/sdb”指第二个驱动器,”/dev/sdc”指第三个等等。其他有一些不支持hash的版本的DD,提供了”--list”命令来为你罗列系统中驱动器,使用这个命令非常地便捷。你也能使用DD来将一个镜像文件的内容拷贝回物理驱动器中,实施这一过程需要将镜像文件设置到“if”中,并将物理驱动设置到“of”中。

dcfldd if=/dev/sdc hash=sha256 hashwindow=512M

sha256=mydrivehashes.log / bs=512 conv=noerror split=2G of=mydrive.dd


  举一个DCFLDD的例子,这个例子如下:

  •    拷贝第三个硬盘驱动器(/dev/sdc)到文件mydrive.dd中。
  •    使用SHA256以每512Mb为一区段来为驱动器的内容进行hash。
  •    将hash的结果记录到文件mydrivehashes.log中。
  •    将文件分割成多个2GB大小的文件。
  •    读取错误时,忽略该错误而不停止拷贝行为。

  我已经展示如何创建一个磁盘镜像,但只是创建镜像到系统的本地文件。但是当当前的物理空间不足时,这种方法没有任何好处。这时候我们就要使用nc.exe(netcat)来将DCFLDD的输出通过网络连接进行重定向。这个镜像拷贝没有被加密,所以如果服务器的镜像中存在一些敏感的信息,它可能会被任何监控你的网络的人所窃取。当没有指定输出(参数“of=”),那么DCFLDD将镜像拷贝到标准的输出。这意味着你可以将输出重定向到另一个工具,如netcat。windows版本的netcat可以在网上找到。首先在目标服务器上,启动netcat作为一个监听,并将输出重定向到一个远程服务器上的文件。我会用netcat监听TCP的3333端口,并将镜像写入一个远程的文件myimage.dd。

nc.exe --l --p 3333 > myimage.dd

  然后你可以对服务器(10.1.1.1)进行镜像拷贝,并通过标准输出(没有指定输出的文件)来将镜像文件输出到netcat,然后由netcat将镜像文件发送到目标服务器,这种情况下无需指定输出的文件(of)。

dcfldd if=/dev/sdc hash=sha256 hashwindow=512M

sha256=mydrivehashes.log / bs=512 conv=noerror split=2G | nc 10.1.1.1 3333

  这种努力是为应对突发事件所做的,如果你确实需要这样做,查找相关文档来确定你该做什么以及需要在什么时候做。倘若将来在法庭上需要这方面的证据,那么这种准备就显得非常关键了。如果你不需要做镜像拷贝来应对突发事件,并且不需要hash记录,那么另一种版本的DD将会更适合你,它有一种罗列出你的驱动器的辅助功能。