QQ:574461795
您当前的位置:首页 > 理工学 > 计算机 > 正文

虚拟蜜罐Honeyd的分析和研究

摘要:该文介绍一个新的主动型的网络安全系统-蜜罐。首先给出了蜜罐的定义和分类,然后详细描述了一个网络层次上的模拟计算机系统的虚拟蜜罐框架Honeyd,讨论了Honeyd的原理、结构、特点、设计和实现,并对它的功能作了全面的测试评估。   关键字:蜜罐,交互性,个性,路由拓扑,模板 1  蜜罐(Honeypot)的介绍  今天网络安全问题正日益严重。黑客利用自动化的大规模的漏洞扫描工具,可以在发现漏洞后不久就使全球的计算机系统遭受破坏。可是经过数十年的研究和探索,我们仍然不能确保计算机系统的安全,甚至无法准确评估它们的安全性。现在我们介绍一种新的网络安全预警系统:蜜罐(Honeypot)。蜜罐是指受到严密监控的网络诱骗系统,它可以迷惑敌人,将攻击从网络中比较重要的机器上转移开,对新攻击发出预警,更重要的是可以引诱黑客攻击而并对其攻击的行为和过程进行深入的分析研究。将蜜罐和入侵检测系统、防火墙等结合使用,可以有效提高系统安全性。Honeypot分为两种类型:一种是低交互性蜜罐(Low-Interaction Honeypot),另一种是高交互性蜜罐(High-Interaction Honeypot)。  低交互性蜜罐通常是运行于现有操作系统上的仿真服务,只允许少量的交互动作,黑客只能在仿真服务预设的范围内动作,它的优点是结构简单,部署容易,风险很低。  高交互性蜜罐通常由真实的操作系统来构建,提供给黑客的是真实的系统和服务。采用这种方式可以获得大量的有用信息,包括我们完全不了解的新的网络攻击方式。同时,它也带来了更多的风险--黑客可能通过这个完全开放的真实系统去攻击和渗透网络中的其他机器。  配置高交互性的物理的蜜罐成本很高,因为每个蜜罐是具有自已IP地址的真实机器,要有它自已的操作系统和相应硬件。而虚拟蜜罐是由一台机器去模拟构造一个拥有的多个虚拟主机和虚拟服务的网络。相对而言,虚拟蜜罐需要较少的计算机资源和维护费用。  本文描述的Honeyd,就是一个在网络层次上模拟计算机系统的虚拟蜜罐框架。2  Honeyd的设计和实施  Honeyd是一个轻型的开放源代码的虚拟蜜罐的框架,可以模拟多个操作系统和网络服务,支持IP协议族,创建任意拓扑结构的虚拟网络。同时,为了模拟拓扑分散的网络地址空间和共享负荷,该结构也支持网络通道。    图1   Honeyd的数据接收                               图2 Honeyd的结构2.1网络数据的接收  要使Honeyd可以对目的IP地址属于虚拟蜜罐之一的网络数据包正常的接受和回应,有如下方法:对指向Honeyd主机的虚拟IP地址创建特定路由、使用ARP代理及使用网络通道。  如图1所示,假设10.0.0.1为我们路由器的IP地址,10.0.0.2为Honeyd主机的IP地址。10.0.0.11-14是Honeyd虚拟的蜜罐的IP地址。最简单的情况是虚拟蜜罐的IP位于我们局域网内。当从互联网向蜜罐Windows NT 4.0 发送一个包时,路由器首先查询它的路由表由找到10.0.0.13的转送地址,如果没有配置专用的路由,路由器通过ARP请求确定虚拟蜜罐的MAC地址,因为没有相应的物理机器ARP请求会不被响应,因此我们配置Honeyd主机用自己的MAC地址的对10.0.0.13的ARP请求做出反应,这样通过ARP代理路由器就把发送蜜罐Windows NT 4.0的包转到Honeyd主机的MAC地址。  在复杂的情况下,我们也可以应用通用路由封装(GRE)通道协议在网络地址空间和hondyd主机间建立通道。2.2 Honeyd结构  Honeyd结构由几部分构成:一个配置数据库,一个中央包分配器,协议处理器,个性化引擎和随机的路由组件,见图2。  Honeyd支持三种主要的互联网协议:ICMP,TCP和UDP。输入的包由中央包分配器处理,它首先检测IP包的长度并验证校验,然后查询配置数据库找到与目的IP地址相对应的蜜罐配置,如果不存在专用的配置,则应用缺省模板。确定了配置后,数据包被传送给相应的协议处理器。  ICMP协议处理器支持大多数ICMP请求。缺省时,对ECHO请求做出反应并给出目的地址不可达的信息。对TCP和UDP来说,该结构能为任意的服务建立连接,服务是在STDIN上接受数据并把输出发送到STDOUT的外部应用。Honeyd包含一个简化的TCP状态机,完全支持三次握手(Three-way Handshake)的建立连接和通过FIN或RST撤消连接,但是接受器和拥塞窗口管理没有完全实现。UDP数据报直接传到应用,当收到一个发往封闭端口的UDP包的时候,默认发出一个ICMP端口不可达的信息。  Honeyd结构也支持连接的重定向,重定向可以是静态的或依赖于连接四元组(源地址,源端口,目的地址,目的端口)。重定向允许我们把虚拟蜜罐上的一个服务连接请求转递给一个在真正的服务器上运行的服务,例如,我们可以把DNS请求重指向一个域名服务器甚至可以把连接反传给敌人。 2.3 个性化引擎 (Personality Engine)  黑客通常会运用象Xprobe或Nmap的指纹识别工具来收集目标系统的信息,为了迷惑敌人,Honeyd可以模拟给定操作系统的网络堆栈行为,我们把这称为虚拟蜜罐的个性(Personality)。个性化引擎使蜜罐的网络堆栈按照个性设置来改变每个外出包的协议头,以便与被配置的操作系统的特征相符。  Honeyd结构应用Nmap指纹库作为个性的TCP和UCP行为的参照,用Xprobe的指纹据库作为个性的ICMP行为的参照。下面介绍怎样应用Nmap提供的指纹信息来改变蜜罐的网络堆栈特性。Fingerprint Windows NT 4.0 SP 6a + hotfixesTSeq(Class=RI%gcd=<6%SI=<40132&>290%IPID=BI|RPI%TS=U)T1(DF=Y%W=2017%ACK=S++%Flags=AS%Ops=M)T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=)T3(Resp=Y%DF=Y%W=2017%ACK=S++%Flags=AS%Ops=M)T4(DF=N%W=0%ACK=O%Flags=R%Ops=)T5(DF=N%W=C00|800%ACK=S++%Flags=AR%Ops=WNMETL)T6(DF=N%W=0%ACK=O%Flags=R%Ops=WNMETL)T7(DF=N%W=0%ACK=O%Flags=R%Ops=WNMETL)PU(Resp=N|Y)                                图3 Nmap指纹的例子  每个Nmap指纹有一个类似于图3中所示的格式,Fingerprint符号后的字符串为个性化名字,后面的九行描述九个不同测试的结果。第一个测试是最重要的,它决定着远程操作系统的网络堆栈怎样为TCP SYN字段产生初始序列号(ISN),在Class字段指明预测ISN的难度,在gcd和SI字段提供ISN分布的更多详细信息,同时它也决定IP报文标识和TCP时间戳。  下七个测试确定到达开放和关闭的TCP端口的包的堆栈行为,最后的测试PU分析了对关闭的UDP端口的ICMP反应包。2.4路由拓扑(Routing Topology)  Honeyd能够模拟随机的网络路由拓扑。通常虚拟的路由拓扑是一株树,根节点是数据包进入虚拟网络的入口。树的每个内部节点代表着一个路由器。每个边代表着一个包含着时间等待和包损失等特性的连接。树的终端节点与网络相对应。  当Honeyd接到包时,它找到正确的入口路由树并穿过它,从根开始直到发现包含包的目的IP地址的一个节点为止,沿途的包损失和所有边的时间等待积累起来,确定是否抛弃该包和它的传送应该延迟多长时间。数据包每通过一个虚拟路由器,就相应减少的生存期TTL的值,当TTL为零时,Honeyd发出包含导致TTL为零的路由器IP的一个ICMP超时信息。  Honeyd也可以把真正的系统与虚拟的路由拓扑结合起来,当结构收一个真实系统的包时,包沿着网络拓扑行走直到它发现直接对真正的机器所属的网络空间负责的一个虚拟路由器。当真正的系统发出ARP请求时,结构以相应的虚拟路由器的ARP回复来响应。2.5配置  在Honeyd框架中,通过配置模板(Template)来配置虚拟的蜜罐。配置语言是一种上下文无关文法,可以设置虚拟网络,操作系统和服务。下面是一个完整的Windows模板配置范例:### Windows computerscreate windows                       #创建一windows操作系统模板set windows personality Windows NT 4.0 Server SP5-SP6                                      #设置该模板的Nmap 指纹set windows default tcp action reset #设置缺省的TCP 动作set windows default udp action reset #设置缺省的UDP 动作add windows tcp port 80 perl scripts/iis-0.95/iisemul8.pl #设置系统监听到80 端口,并且调用脚本scripts/iis-0.95/iisemul8.pl#处理对该端口的访问add windows tcp port 139 open       #打开TCP 139 端口add windows tcp port 138 open       #打开TCP 137 端口add windows udp port 137 open       #打开UDP 137 端口add windows udp port 135 open       #打开UDP 135 端口set windows uptime 3284460        

相关内容推荐