用VMWARE搭建虚拟Honeynets
转自: http://www.xfocus.net
Honeynet Project
http://www.honeynet.org
Last Modified: 27 January, 2003
翻译:Inetufo
Homepage: http://www.fz5fz.org
Email:
[email protected]
译者注:
这是我翻译的虚拟Honeynet系列文章的第二篇文章,主要讲述了如何使用虚拟机软件VMware来搭建虚拟Honeynet。
由于本人水平和时间有限,所以难免存在翻译不妥的地方,还望各位斧正。最后感谢san大哥给出的意见。
原文连接: http://www.honeynet.org/papers/vmware/
虚拟Honeynets是允许你在同一台电脑上用多种操作系统搭建一个完整的Honeynet的一种解决方案。最初在文章Know Your Enemy: Virtual Honeynets中被讨论,这种方案有着配置更容易,管理更简单的优点。Honeynet Project同样也发现VMware对Honeynet技术的发展有着重大的意思。我们通过这篇文章一步一步的教你怎样用商业软件VMware搭建和配置这种解决方案。这种情况下,我们将用5种不同的honeypots搭建一个GenII(第二代Honeynets)。前提是你已经阅读并且了解在KYE: Virtual Honeynets和KYE: Honeynets中讨论过的一些概念。同时,如果这是你第一次从事Honeynet技术工作,我们强烈建议你在实验环境中工作。最后,因为面对的是虚拟软件,你必须意识到攻击者识别出,并且秘密逃出虚拟环境的风险。以上是对你的建议。
攻击计划
这篇文章的格式有点类似于KYE: User-Mode Linux,它被分成5个部分。第一部分我们将描述什么是VMware,它的工作方式,以及怎样安装它。第二部分,我们将描述怎样配置VMware和安装你的honeypots。第三部分我们将描述怎样在VMware Honeynet中使用IPTables来实现数据控制。第四部分我们将描述怎样使用Snort来实现数据捕获。最后,在第五部分中我们将描述如何测试你的各种设置。
Part I: VMware
VMware是一种可以让你在同一时刻运行多种操作系统的虚拟软件。和用户模式Linux不同,VMware允许你运行不同的操作系统,只要它们是能够在Intel X86系列上运行的。VMware是由VMware Inc开发和销售的,实际上你可以选择三种不同的软件产品:Workstation, GSX, 或者ESX。我们将使用三者当中的GSX。GSX是设计来在同一时刻运行两个以上的操作系统,支持远程管理的,比Workstation功能更强大的版本。但是,我们这里所讨论的大部分信息一样能够应用在Workstation上。鉴于这篇文章的目的,我们将在掌上电脑上搭建我们的虚拟Honeynet,平台为IBM Thinkpad T23, PIII 1G处理器和768MB的内存。操作系统为Red Hat 7.3。
VMware是通过在电脑上安装虚拟软件来工作的。此虚拟软件允许你在同一时刻启动和运行多个操作系统。你安装的第一个操作系统被称为HostOS。这是VMware将安装于其中的操作系统。一旦你安装了HostOS和VMware,你就可以安装其他的操作系统,它们将运行在虚拟环境中。所有这些其他的操作系统被称为GuestOS’s,因为它们就像是在主操作系统上的‘客人’。想要对其工作方式获得更好的理解,请参考Figure 1。在我们的Linux HostOS上安装VMware非常简单,你仅仅需要安装一个RPM包即可。命令类似于:
host #rpm -vi VMware-gsx-2.0.1-2129.i386.rpm
Preparing packages for installation...
VMware-gsx-2.0.1-2129
我们也可以安装另外的软件包,比如说远程管理软件包。但是,我们的掌上电脑不需要这个软件包,因为所有的管理都在本地完成。要了解关于这些额外包的更多信息,请参考VMware文档。
Part II: 配置VMware和安装Honeypots
安装完成后的下一步就是配置VMware软件。配置是通过执行命令’vmware-config.pl’来完成的。在配置过程中,VMware很可能会重新编译它自己的一些内核模块。这就是说你要为内核准备编译器和源代码。我们的掌上电脑上运行的内核版本是2.4.18-19.7.x。然后我们确保有源代码:
host #uname -r
2.4.18-19.7.x
host #
host #rpm -qa | grep source
kernel-source-2.4.18-19.7.x
marge $ls -l /usr/src
total 8
lrwxrwxrwx 1 root root 19 Dec 26 13:53 linux-2.4 -> linux-2.4.18-19.7.x
drwxr-xr-x 17 root root 4096 Dec 26 13:53 linux-2.4.18-19.7.x
drwxr-xr-x 7 root root 4096 Jul 12 11:52 redhat
如果你已经安装了源代码,你就可以开始安装了。在安装过程中,我们要注意的唯一选择就是网络。请记住,我们的目标是使所有的GuestOS’s通过我们的网关HostOS进行路由。在安装过程中选择网络。在安装过程要结束时,你会被询问是否采用HostOnly网络模式。选择此项,给接口分派一个IP地址。这是网关的IP地址,我们将设为10.10.10.1。下面的连结是配置过程中执行的一系列命令。
vmware-config.pl
当你完成配置后,VMware就可以运行了。但是,我们有一个问题,采用默认配置时,VMware允许三种接口:vmnet0,vmnet1,vmnet8。在这三种接口中,我们只需要一种接口,vmnet1。vmnet0用于网桥,所以GuestOS可以饶过HostOS直接进行网络会话。Vmnet8用于NAT网络。只有vmnet1允许我们控制GuestOS’s经过HostOS。这样,我们还得重新运行vmware-config.pl,然后使用编辑工具,移除两种不需要的接口vmnet0和vmnet8。
vmware-config.pl(第二次运行)
当你完成VMware的配置后,下一步就是安装和配置每个honeypots。就我们的Honeynet而言,我们要安装运行5种不同的honeypots。运行这么多操作系统所需的要求并不是你想象的那么高。想一想,除了攻击者之外没有人会使用它们,所以活动的系统很少。同时,以Unix为基础的系统不需要GUI,你可以通过命令行接口来管理系统。这样就不需要运行X-Windows,内存的需要也就达到最少了。每个操作系统也只需要不超过2GB的磁盘空间。
Red Hat Linux 8.0 (64 MB RAM, 不运行X-Windows)
Solaris8 X86 (64 MB RAM, 不运行 X-Windows)
OpenBSD 3.1 (64 MB RAM, 不运行X-Windows)
Windows2000 (128 MB RAM)
WindowsXP (128 MB RAM)
安装每个honeypots是很简单的。首先,用命令”ps aef | grep vmnet”确保vmware虚拟软件在运行,用命令”ifconfig –a”确保使用的是vmnet1接口。如果vmware已经运行,创建一个新的VMware窗口来安装honeypot。命令如下:
host #vmware -G &
创建窗口后,你可以选择启动一个已经存在的GuestOS或者开始安装一个新的GuestOS。如果要安装新的GuestOS,请选择”运行配置向导”。在向导中选择你将要安装的GuestOS的类型,将要安装的文件系统的目录,为操作系统创建一个新的虚拟磁盘,启用CDROM(如果挂装了软驱,请卸载)和HostOnly网络。完成GuestOS的配置后,插入Guest操作系统的CDROM安装盘,然后启动系统。此后,GuestOS的启动和安装和正常安装其他操作系统一样。继续重复这些步骤安装所有这5个GuestOS honeypots。安装完成后,你可以选择在honeypots上安装VMware tools。它将解决GUI接口。但对于Unix系统来说,你不需要安装VMware tools,因为你可以通过命令行来进行管理。对于基于视窗的honeypots,需要在honeypots中安装VMware tools以方便管理,但是,它将使攻击者更容易的识别出系统是Vmware虚拟系统。要获取更多关于VMware配置和GuestOS安装的信息,请参考VMware文档。
在进行下一步之前,你需要备份你安装的honeypots。VMware把每个honeypots存放在一个独立的文件中,这些独立的文件都放在VMware自己的目录下。你仅仅通过拷贝这些独立的文件就可以备份每个honeypot。对传统的Honeynets来说,在一个honeypot存在安全威胁后,你将花费很多精力来分析攻击记录,你必须在把honeypot放回honeynet之前恢复它们。这是很浪费时间的。但是,使用VMware后,恢复honeypot就只是拷贝你的备份文件这么简单。你可以在很短的时间内使你的honeypots恢复运行。比如,默认情况下,VMware将每个honeypot映像存放在目录/root/vmware下。你可以通过拷贝这个目录来备份所有的honeypots。当你想要恢复一个honeypot的时候,你只需要拷贝包含所有honeypot映像文件的目录就可以了。
host #ls -l /root/vmware
total 28
drwxr-xr-x 2 root root 4096 Oct 10 01:10 linux-6.2
drwxr-xr-x 2 root root 4096 Jan 14 19:00 linux-7.2
drwxr-xr-x 2 root root 4096 Jan 14 22:14 linux-7.3
drwxr-xr-x 2 root root 4096 Jan 25 15:15 openbsd
drwxr-xr-x 2 root root 4096 Jan 25 15:15 solaris
drwxr-xr-x 2 root root 4096 Dec 16 08:47 win2000Serv
drwxr-xr-x 2 root root 4096 Jan 25 15:15 winXPPro
host #
host #cp -a /root/vmware /root/vmware-backup
Part III: 数据控制
完成VMware和honeypots配置后的下一步就是数据控制了。数据控制的目的就是要获得攻击者进出Honeynet的一切信息。特别的,我们允许所有进入Honeynet系统的数据,但是限制对外的连接。鉴于这篇文章的目的,我们将使用IPTables这种Linux自带的开放源代码的防火墙来解决此问题。IPTables是一种灵活性相当高的正式的防火墙,有连接限制,网络地址转换,日志记录的功能,和许多其他的特性。我们把IPTables配置成我们HostOS上的过滤器,计算流出网络的数据报。一旦对向外的连接到达了限制的数量,之后所有的连接尝试都会被阻止,保证被入侵的honeypot不会对其他系统造成损害。配置和实现这些性能可能会非常复杂。但是,Honeynet Project编写了一个称作rc.firewall的IPTables脚本,它可以帮助你完成所有的工作。你仅仅需要修改脚本变量使它适应你的Honeynet,然后运行脚本。
你首先要决定的一件事是,你想使网关运行在第三层的路由模式,还是第二层的网桥模式。第二层网桥模式(也叫做GenII, 或者2nd generation)是首选的方法。当网关扮演网桥的角色时,就没有数据报路由和数据报的TTL消耗,它成为一个不可见的过滤设备,使攻击者更难发觉。但是,要想使IPTables工作在网桥模式,你的内核必须打补丁来支持它。默认情况下,绝大多数内核都不支持IPTables的网桥模式。Red Hat内核2.4.18-3是少数几个默认情况下支持这种模式的内核之一。如果你想修改内核,你可以在 http://bridge.sourceforge.net/download.html找到补丁。考虑到这篇文章的目的,我们将假设你的内核确实支持IPTables的网桥模式。如果你的内核不支持网桥模式,请查阅文章KYE: UML获取关于配置rc.firewall来支持第三层路由的更多信息。
现在,让我们来详细讲述怎样配置rc.firewall脚本来实现GenII的功能。有两个地方需要配置,网络和控制。实际上,网络在网桥模式中远比在路由模式中简单。在网桥模式中,没有路由,或者任何网络地址转换问题。我们只需简单的把HostOS变成网桥,GuestOS’s就可以直接和其他网络通讯了。针对连接问题,我们需要配置允许多少对外连接。我们需要配置的选项如下。首先,你需要设置Guest操作系统的对外IP地址。这些是攻击者要攻击的IP地址,是我们honeypots的有效IP地址。既然我们有五个honeypots,我们需要列出五个IP地址。防火墙需要知道它们的范围。
PUBLIC_IP="10.10.10.201 10.10.10.202 10.10.10.203 10.10.10.204 10.10.10.205"
其次,你要识别HostOS的内部接口的名字。默认情况是eth1。但是,我们将使用虚拟接口vmnet1,需要修改这个变量。
LAN_IFACE="vmnet1"
最后,既然我们要搭建一个GenII Honeynet,你必须考虑尽量使用Snort自带的功能阻止已知的向外的攻击。描述Snort-Inline的细节已经超过了这篇文章的范畴,它将在以后的文章Know Your Enemy: GenII Honeynet 中讨论。你可能会考虑使用Honeynet Snort-Inline工具包,它有静态的,编译好了的二进制文件,有配置文件,规则库和文档,你可以在Honeynet Tools section找到Snort-Inline工具包。如果你确实想测试这个性能,你需要启用QUEUE选项。注意:如果你启用了这个选项,你必须保证已经运行了Snort-Inline,否者所有外出的数据报都会被丢弃。如果没有作到以上要求,请不要启用这个特性。
#QUEUE="yes" # Use experimental QUEUE support
QUEUE="no" # Do not use experimental QUEUE support
这些是你需要考虑的最少的变量,可能还会有其他的变量,这将取决于你系统的配置。你还可以更新其他的选项,比如说远程管理,限制防火墙可以发起的连接,给你的honeypots无限制的DNS访问。同样,默认情况下,脚本每小时限制每个honeypot对外的连接如下,9 个TCP连接,20个 UDP连接,50个 ICMP连接,和10个其他的IP连接。脚本的具体内容超出本篇文章的范畴。为了更好的了解这些变量,我们建议你回顾一下脚本的具体内容,在实验环境中尝试不同的配置选项。一旦你完成rc.firewall脚本配置,你就可以通过执行脚本来实现你的目标。记住,你将使你的HostOS采用网桥模式。因此,你的HostOS必须要有网桥工具。对Red Hat系统来说,它是"bridge-utils-0.9.3-4"。
使用网桥模式时需要注意两点。首先,在启用网桥之前,你必须启动所有的GuestOS’s。当GuestOS’s启动时,他们会寻找并使用vmnet1接口。如果vmnet1接口已经被设置成了网桥模式,那么GuestOS将找不到接口,并且不能进行网络会话。所以,在运行rc.firewall脚本之前启动所有的honeypots。第二点是时间,网桥生效需要花费大约10-30秒。你必须在网桥转发数据报之前,给它时间获得所有的MAC’s地址。
host #/.rc.firewall
为了确保脚本运行成功,我们需要检查几样东西。首先,确定启用了网桥。你可以通过检查/var/log/messages文件来进行确认,内核会记录网桥模式。其次,你得拥有一个称做”br0”的新接口,这就是你的网桥。第三,使用命令”brctl”查看绑定网桥的接口是什么。第四,对外和对内的接口不再有IP地址,因为它们现在使用的是网桥模式。最后,检查IPTables规则确保你过滤了某些连接。
host #tail /var/log/messages
host #ifconfig -a
host #brctl show
host #iptables -L -n
如果以上都成功了,那么你的数据控制也就完成了。还有其他许多方法实现数据控制,比如说bandwidth throttling。
Part IV: 数据捕获
完成数据控制后的下一步是数据捕获。数据捕获的目的是在不让攻击者发觉的情况,捕获他们攻击活动的所有信息。有很多种不同的方法可以实现数据捕获,但是我们主要关注两种。IPTable日志和Snort。IPTable日志是当有数据进入或者流出时由防火墙产生的日志。Snort是一种开放源代码的IDS产品,我们可以用它来捕获所有的网络活动,对已知的具有攻击特征的信息发出警告。
对于IPTabels来说,日志记录已经通过脚本rc.firewall为我们配置好了。它被配置来记录所有新的对内和对外连接到日志文件/var/log/messages中。任何进来的连接都可能是探测,扫描,或者攻击的迹象。任何对外的连接都表明honeypot可能已经被入侵。IPTable日志的主要价值是警告。而不会告诉我们关于入侵者正在做什么的足够信息。而对于Snort来说,我们可以配置它来捕获进出Honeynet的每个数据报。这里有个捕获和记录入侵者活动的Snort配置文件Snort config file。你可以在这里看到一个简单的Snort启动脚本,它可以启动Snort并使用推荐的Snort配置文件。别忘了更新启动脚本来监视HostOS的vmnet1接口。你可能每天都想运行此脚本,那么你可以通过cron来运行这个脚本。
host #./snort-start.sh
既然这是第二代Honeynet,你可以考虑运用更先进的数据捕获技术,比如说Sebek。它允许你通过内核来捕获攻击者的活动信息。当然还有其他各种各样的实现数据捕获的方法,但是它们超出了这篇文章的范畴。想了解其他方法,请参考Honeynet Tools Section。
Part V: 测试你的VMware Honeynet
搭建我们的VMware Honeynet的第五步,也是最后一步就是测试我们的配置,特别是对数据控制和数据捕获的测试。我们要确保我们的Honeynet和期望的情况一样。数据控制的测试相对来说比较简单。我们要确保honeypot企图向外发起的任何连接都被记录和控制。通过记录,所有连接尝试都被记录在/var/log/messages中,警告我们有向外的连接发起,honeypot可能已经被入侵。同时,一旦到达了连接限制,我们希望确保任何更多的向外的连接都被禁止。这里有个测试Honeynet的技巧,既然我们使用了网桥模式,我们需要另一台电脑,让它充当攻击者。如果网桥不能把目的IP转换成一个有效的MAC地址,它将不会转发任何数据报。如果没有数据报转发,我们将不能测试IPTables。对于那些没有多余电脑的人来说(或者那些舍不得花钱购买电脑的人),你可以通过启动UML系统虚拟出第二台电脑。UML系统将绑定到tap0虚拟接口,同时我们所有的VMware honeypots将绑定到vmnet1虚拟接口。这样,你的HostOS就会网桥接两个不同的虚拟网络。请不要忘了,你还得修改rc.firewall脚本使tap0成为对外的接口。要想了解关于运行UML的更多信息,请参考文章KYE: UML。UML可作为攻击者,探测VMware honeypots。鉴于这篇文章的目的,我们将要示范的只是测试性的概念。我们的UML攻击者的IP地址将是10.10.10.100。它的确也能够工作:)。
我们将测试对外的TCP连接,默认配置下每小时只能发起9次对外的连接尝试。为了测试此项,我们需要打开两个终端窗口。首先,我们在HostOS上打开一个终端窗口,并且监视在/var/log/messages中的IPTable日志。当我们从GuestOS通过Host网关试图发起对外的连接时,我们将发现连接尝试会被记录在日志中。这些信息都是警告,表明honeypot可能已经被入侵,攻击者(或者一些自动化的攻击工具)正在尝试对外连接。当第10次对外连接发起的时候,TCP连接将被阻止(因为到达了最大连接限制)和记录。下面是你在尝试任何对外连接之前要执行的命令。
host #tail -f /var/log/messages
下一步,在我们的GuestOS 即honeypot系统上打开一个终端。向一个外部IP发起各种对外的TCP连接,在这里是10.10.10.100(我们的UML系统)。你很可能会反复的尝试几次。
Trying 10.10.10.100...
telnet: connect to address 10.10.10.100: Connection refused
如果你看到连接尝试被记录,达到连接限制后的连接都被阻止,那么你就成功的实现了数据控制。接下来,我们将确保数据捕获正常工作,尤其是确保Snort进程捕获进出Honeynet的所有数据报和它们全部的负荷。Snort进程应该监视HostOS的内部接口,特别是vmnet1。为了测试,我们将尝试ping外部系统,在这里也是10.10.10.100。
guest #ping -c 3 10.10.10.100
Snort进程应该已经捕获三个ICMP Echo请求数据报和它们全部的负荷。它应该把活动以tcpdump二进制日志的形式记录下来了。我们检查日志文件来进行确认,下面是一个例子。值得注意的是,你不只是在捕获每一个数据报和报文头,而是捕获每个数据报全部的负荷。
host #snort -vdr *snort.log
就是它了。现在,你仅仅完成了对数据控制和数据捕获性能的最基本的测试。你也可以尝试进行更高级的测试,比如说用另一台独立的电脑充当Internet上的一个系统,然后和honeypot通讯。但是,这超出了我们这篇文章的范围。
注意: 这篇文章即将结束,我们现在来做一个最后的回顾,我们用VMware’s的其他特性来做更进一步的公开分析。特别是VMware的挂起功能。挂起功能允许你逐个的挂起GuestOS(或者honeypot)映像。它将冻结所有正在运行的进程,然后把内存映像保存在一个文件中。这就是说你可以挂起你的honeypot,关闭你的电脑,然后一周后再打开它,重新加载honeypot,就像以前它运行的时候一样。它有一些不可想象的应用。我们把被攻击电脑的挂起映像保存下来,然后把这些映像转移到其他地方进行分析。这就允许我们在一个被攻击的honeypot仍然处于它的运行状态的时候对它进行分析。这里要注意的是,在分析挂起映像时,你必须保证是在一个孤立网络中进行的,否者,被攻击的honeypot会尝试连接它在挂起之前和它进行通讯的任何系统。
结论
这篇文章的目的是一步一步讲述怎样使用VMware虚拟软件来搭建一个虚拟Honeynet。我们的目标是在一台电脑上搭建一个完整的Honeynet。VMware的优点是你可以在同一时刻运行许多种不同类型的操作系统。如果你想要尝试搭建自己的VMware honeynet,你可以在 http://www.vmware.com/download/#eval.获得一份试用版的VMware。
关于我们:
FZ5FZ 主要从事网络/系统安全的学习与研究,深入编程技术的剖析与探讨,坚持原创,追求共享。
FZ5FZ 主页: http://www.fz5fz.org