在过去的几年中 Honeynet Project 专注于对网络***者这一群体使用的各种工具、***策略及目的进行研究,并且分享我们的经验,这里我们使用的主要工具就是Honeynet。本文阐述了Honeynet究竟是什么、它对安全组织的价值、它的工作方式、会带来的风险、技术难题等等。我们将使用技术手段尝试自己去了解***者群体。同时我们希望这里讨论的这些技术可以帮助大家更好地构建Honeynet,更好了了解我们的敌人,我们也希望各种组织能够了解Honeynet的基本状况。
什么是Honeynet
Honeynet可以说是一个学习工具!它是一个专门设计来让人“攻陷”的网络,一旦被***者所攻破,***者的一切信息、工具等都将被用来分析学习。其想法与honeypot相似,但两者之间还是有些不同点的:honeypot也是一个用来让人***的网络,通常是用来诱骗***者的,通常情况下,honeypot会模拟某些常见的漏洞、摸拟其它操作系统或者是在某个系统上做了设置使其成为一台“牢笼”主机。比如 The Deception Toolkit( 下载), CyberCop Sting, 以及 Mantrap. 是一些脚本的集合,它模拟出了一些常的系统漏洞;CyberCop Sting运行于NT平台,它模拟出多个不同系统的IP堆栈及inetd服务。Mantrap则是将Solaris系统进行了一些设置,建立起了一些“牢笼主机”。毫无疑义,这些都是相当不错的想法,但在现在的环境下,它们有些不适合了,需要更多的改进。
Honeynet与传统意义上的honeypot有两个最大的不同点在于:
  • 一个Honeynet是一个网络系统,而并非某台单一主机,这一网络系统是隐藏在防火墙后面的,所有进出的数据都受到关注、捕获及控制。这些被捕获的数据可以对我们研究分析***者们使用的工具、方法及动机。在这个Honeynet中,我们可以使用各种不同的操作系统及设备,如Solaris, Linux, Windows NT, Cisco Switch, 等等。这样建立的网络环境看上去会更加真实可信,同时我们还有不同的系统平台上面运行着不同的服务,比如Linux的DNS server,Windows NT的webserver或者一个Solaris的FTP server,我们可以学习不同的工具以及不同的策略——或许某些***者仅仅把目标定于几个特定的系统漏洞上,而我们这种多样化的系统,就可能更多了揭示出他们的一些特性。
  • 在Honeynet中的所有系统都是标准的机器,上面运行的都是真实完整的操作系统及应用程序——就象你在互联网上找到的系统一样。我们没有刻意地模拟某种环境或者故意地使系统不安全。在Honeynet里面找到的存在风险的系统,与在互联网上一些公司组织的毫无二致。你可以简单地把你的操作系统放到Honeynet中,并不会对整个网络造成影响。
我们的Honeynet ProjectIt使用的是在互联网上最常见到的操作系统,比如默认安装的Linux, Solaris, Windows98以及Windows NT,正因为我们使用的是最常见、普通的系统,我们的研究成果才会对大多数的互联网组织有实用意义。
Honeynet 的价值、法律相关事务
传统意义上的信息安全,一般都是防御性质的,比如防火墙、***检测系统、加密等等,它们都是用来保护我们的信息资产的,他们的策略是,先考虑系统可能出现哪些问题,然后对问题一一进行分析解决。而Honeynet希望做到的是改变这一思路,使其更具交互性——它的主要功能是用来学习了解敌人(***者)的思路、工具、目的。通过获取这些技能,互联网上的组织将会更好地理解他们所遇到的威胁,并且理解如何防止这些威胁。通过honeynet,组织可以在与***者的“游击战争”中获得最大的主动权。
例如,Honeynet能够收集的信息的主要来源之一是***者团体之间的通信,诸如IRC(Internet在线聊天系统)。***者经常在彼此之间自由交谈,揭示了他们的动机,目的,和行动。我们通过使用Honeynets,已经捕获了这些谈话内容,监控了他们之间说过的每一句话,我们甚至已经捕获了与***我们的系统有牵连的***者的实时录像。这使我们能够清楚地洞察***者们是如何针对特定系统以及他们***系统的能力。你可以参见 Know Your Enemy: Motives中的例子。在这份文件中,我们追踪了把一个特殊的国家作为***目标的一组***者。经过三个周的时间,我们不仅了解了他们是如何把系统作为目标和如何***系统的,而且更重要的是,了解了他们这样做的原因。根据这种详细的信息,我们现在能够更好的理解和防护这种常见的威胁。
Honeynets也为组织提供了关于他们自己的安全风险和脆弱性的一些经验。Honeynets的内容涵盖了组织在其特定环境下系统和应用软件。公司或者组织可以通过对Honeynet的学习及使用,提高增强自己的能力。例如,某家公司可能想提供一个新的网络服务器,以便其网上支付系统。其操作系统和应用程序如果能够先在一Honeynet的中得到检验以识别任何未知的风险和脆弱性,将会在很大程度上提高其可靠程度。我们自己在Honeynet的工作平台上检验IDS、防火墙等过程中就得到了相当多的经验。
最后,一个Honeynet能够帮助一个组织发展它的事件响应能力。在过去的两年中,我们已经极大地提高了我们检测、响应、恢复、和分析受侵害系统的能力。根据这些经验,我们已经发表了两篇文章,就是 Know Your Enemy: Forensic AnalysisThe Forensic Challenge 其中提到的一些技巧是:如果你发现了一个受到***的系统,你或许可以把它当成一个挑战,使用各种技术来捕获或者分析***者的行为并且不被他察觉。同时,你捕获的数据也可以存储在一个***特征库中,今后你如果在其它事件中发现类似的特征代码,你就可以轻易地判断出其***方式了。
但是这些方法在法律上遇上了一些麻烦
诱捕的问题:
诱捕是一个法律术语,用于执法人员诱使一个罪犯从事一项非法行为,否则他们可能不会从事该非法行为。我们不是执法部门,我们不是在执法部门的控制下行动,而且我们甚至没有起诉的意图,所以,我们不认为安装一个Honeynet是诱捕行为。其他人将争论说我们正在提供一个“吸引人的目标”,意味着我们把不可靠的系统置于网上,以诱使人们***他们,从而把他们作为***别人的手段来使用。这也是错误的,因为我们并没有通过任何方式来宣传这些系统。如果有人发现了我们的一个系统,损害了它,并且使用它作他们不应当做的事情,那是因为他们在主动地和有意地从事这种非授权的行为。
保密的问题:
而关于这些活动有一些道德上的和伦理上的问题(我们在内部一直在努力解决这些问题),最近由美国司法局,刑事庭,计算机犯罪和知识产权部门出版的 Searching and Seizing Computers and Obtaining Electronic Evidence in Criminal Investigations这本书中,提供了几个案例参考,受理上诉的法官裁定,反对对于在计算机***和欺骗的犯罪案件中,对侵犯隐私权进行辩护。包括下面一些问题:
  • ***这些系统的人是未经授权的,如果他们把任何文件置于系统上(当他们没有合法的帐号或使用特权时),我们认为他们已经不能保有在我们系统上的隐私权。
  • 通过使用我们的系统进行通信,他们就已经在通信中放弃了他们的隐私权。
  • 我们不提供公用的帐号,所以我们不是一个服务供应商,不受为服务供应商所设计的保密要求的限制。
  • 不管怎样,我们不是执法部门,我们也不是在执法部门的控制下行动,或甚至起诉***我们系统的***者,所以,我们不受证据收集规定的限制,而执法部门和他们的执法人员却要受到其限制。
  • 即使我们真的目击了一起严重的计算机犯罪,并且决定告发它,我们收集日志和记录网络流量,将其作为一个“商业运营”的常规过程,如果我们决定告发的时候,我们可以自由地将其交给执法部门。
在美国司法系统的最高层作出更加清楚的判断之前,我们认为我们遵守了当前的法律,并且保持在适当的界限之内。(那些美国之外的国家,在使用Honeynet之前,应当咨询你们自己的法律机构以寻求指导。)
工作方式
既然我们的目的是对***者群体进行研究,我们就必须能够跟踪他们的举动,要建立一个透明的环境,以使我们能够对Honeynet里发生的任何事都有清楚的了解。传统的方法是对网络流量进行监控,这里存在一个最大的问题就是过大的数据量使安全工程师疲于奔命。我们必须从大量的数据中判断哪些是正常的流量,哪些是恶意的活动。一些如***检测系统、基于主机的检测及日志分析的工具、技术会在很大程度上带来帮助。但是数据过载、信息被破坏、未知的活动、伪造的日志等等都会对我们的检查分析带来困难。
Honeynet对此采用了最简单的解决方式。我们的目的是研究系统被侵害的一些相关事件,而不是分析网络流量,我们认为,从外界对Honeynet的访问,除去正常访问外,其它可能是一些扫描、探测及***的行为,而从系统内部对外界发起的连接,一般情况下,表明了系统被侵害了,***者利用它在进行一些活动。这使我们的分析活动相对简单化。
要成功地建立一个Honeynet,我们需要面临两个问题:信息控制及信息捕获。信息控制代表了一种规则,你必须能够确定你的信息包能够发送到什么地方。其目的是,当你Honeynet里的Honeypot主机被***后,它不会被用来***在Honeynet以外的机器。信息捕获则是要抓到***者群体们的所有流量,从他们的击键到他们发送的信息包。只有这样,我样才能进一步分析他们使用的工具、策略及目的。
信息控制
如我们上面所说的,信息控制是对***者的行为进行规则上的定义,让他们能做及不能做某些事情。我们在与***者进行智力上的搏斗时,总是会有许多风险的,但必须尽小降低这些风险。我们需要确信,当系统被侵害时,我们的honeypot不会对在Honeynet外的系统产生危害(在honeynet以内的,都是我们战争游戏的一部份:)。这里最难实现的在于,我们必须不让***者引起怀疑。***者进来之后,他们最需要的,当然是网络连接,以便从网络上下载他们的工具包、打开IRC连接等等,我们必须给他们做这些事情的权利——这正是我们所想要分析的东西。我们以前设计的honeypot曾经犯了个错误,不允许任何往外发的包——***者对这往往是非常敏感的,当时有个***者进入了我们的系统,只呆了十五分钟,就从这里感觉出不妙,擦掉了所有的踪迹,溜之大吉了。所以呢,我们需要做的是,允许他们做的大部份事情,但是对***其它系统的“需求”,比如发起拒绝服务***、对外部进行扫描以及用漏洞利用程序***他人的行为,则一概不理。
我们设计这个Honeynet要捕获进出的连接,因此,我们在Honeynet的前端放置一个防火墙,所有的信息包将通过防火墙进来,防火墙能够对所有从我们的honeypot机器往外的每一个连接进行追踪,当该honeypot外发的数量达到我们预先设定的上限时,防火墙便会阻塞那些信息包。这样可以在最大程度保证我们的机器不被滥用的前提下,允许***者做尽可能多他们想做的事。一般情况下,我们发现,设定外发连接数设为5至10是比较合适的,不会引起***者的怀疑。这样做,就避免了我们的honeypot成为***者的扫描、探测及***他人的系统。当然,有些组织可能不需要这样设置——如果他们能够做到24小时对Honeynet进行值守的话——这样就可以甚至对外发的数据包都不做任何限制,直到检测到有拒绝服务***或者其它的滥用系统的行为发生时,值班人员可以简单地手工将***停止。当然我们也可以开发出自动化程度比较高的工具对无法提供24小时监控的人们提供帮助。在我们的设计中,防火墙与Honeynet之间还放置了一个路由器——之所以放置它,有下面两个原因:
首先,路由器的存在,使防火墙变得“不可见”了,当我们的honeypot被***后,***者可能会察看从这里往外的路由,这么放置更象一个真实的网络环境,没人人会注意到在路由器的外面还有一台防火墙。其次是,路由器也可以对访问控制进行一些限制,它可以作为对防火墙的一个很好补充,以确保honeypot不会被用来***陷阱网络之外的机器。
DiagramA 中我们把Honeynet的拓扑给出来了。这是我们在 Know Your Enemy 系列文档中使用的真实的网络。在这个网络拓扑中,你可以看到,防火墙把这个网络陷阱分隔成三个部份。一是陷阱部份,二是互联网,三是管理控制平台。在数据捕获的章节里我们还将提到管理控制平台。所有的进出的数据包都必须通过我们的防火墙及路由器,这里防火墙是我们主要控制进入及外出的连接的工具。路由器在这里做了一些补充的过滤。我们的防火墙允许任何的进入及外发连接,但是它对任一陷阱主机外发连接的数量做了限制,只允许5个,当到达这个上限时,任何超出部份的连接将被防火墙阻塞。我们使用的是CheckPoint FW-1防火墙以及一个用来检查有多少外发连接的shell 脚本,当达到这个上限时 (我们这里是五个并发的连接)这一脚本就配置防火墙将超出的连接断开。我们也配置了防火墙,在这些事发生的时候,会给我们发送相关的 的警示信息 以告知该陷阱主机被阻塞了。关于如何防火墙如何配置以及详细的脚本细节等,你可以从 Intrusion Detection for FireWall-1 这篇文章中得到获得。当然,你可以不限于用FireWall-1,当然也不必使用我们的脚本,我们仅仅是提供一种思路。你可以用同样的方法在 IPFilter(下载)以及Swatch(下载) 上实现同样的功能。你也可以在IPTables下面利用Dynamic IPTable Scripts.来实现同样的功能。
路由器在这里充当了第二层的访问控制工具。我们主要用它来防止ICMP***或者一些欺骗性的***。路由器仅仅允许源地址是Honeynet内的IP往外发包。在我们举的例子中,就是,仅有源地址是172.16.1.0/24的可以外出。这可以防止大多数基于欺骗的***,如SYN flooding或者SMURF***。我们还禁止了ICMP外出的信息,这主要是由于我们缺乏自动、稳定的ICMP跟踪的经验。限制ICMP还可以使自己免受一些如SMURF,network mapping以及Ping of Death的***。下面是我们在路由器上做的ACL,注意到了么,有大量的ICMP包被路由器拦截下来了。
router#show ip access-list 100
Extended IP access list 100
  deny icmp any any (5446314 matches)
  permit ip 172.16.1.0 0.0.0.255 any (66372 matches)
  deny ip any any log (59990 matches)
经过实践,我们觉得将防火墙与路由器配合使用可以在技术上十分完善地对外出的信息包进行过滤。这可以最大程度地让***者们做他们想做的事情而不致产生怀疑。以我们的经验来说,这些安全上的措施几乎是不可能绕开的。在我们的网络陷阱中曾有大量的拒绝服务***企图,包括SYN Flooding, SMURF, 以及Ping of Death,但无一例外全都被拦截下来了。同样的,有大量的扫描器或者自动***机企图从我们的网络往外进行侵害,但也都被阻塞了。当然,没有一种方法是永恒有效的,需要记住,与***者的群体打交道,总是要冒些险的。
信息捕获
数据捕获能够获得所有***者的行动记录,这些记录最终将帮助我们分析他们所使用的工具、策略以及***的目的。我们的目的是在***者们不发现的情况下,捕获尽可能多的数据信息。这可能需要对系统进行一些修改,但要尽可能的少。另外,捕获到的数据不能放在honeypot的主机上,否则很可能会被***者们发现,从而令其得知该系统是一个陷阱平台。而这时,放置其上的数据可能会丢失、被销毁。因此我们需要把数据放在远程安全的主机上。我们通过几层的保护来使数据尽可能地完整和安全,其中包括了多种方法,我们从来不仅仅依靠单一的方法来做这些事。通过几种方法的组合,我们可以描绘出一幅清晰的***者***的图景来。下面我们将讨论这些技术。
用来记录的第一重保护就是防火墙。前面我们描述了如何通过防火墙来控制信息。同样的,防火墙还能够用来捕获我们想要的数据。它可以记录所有的进入及外出honeynet的连接。我们设定防火墙不仅可以记录下所有的连接企图,而且还及时地对我们发出警告信息。比如说,某人尝试telnet到honeynet中的某台主机上,防火墙就会记录并且 报警。这对跟踪端口扫描非常有效。另外,它还可以记录下对后门及一些非常规端口的连接企图。多数的漏洞利用程序都会建立一个shell或者打开某个端口等待外来的连接,而防火墙可以轻易地判断出对这些端口的连接企图并且向你报警告知。同样的,系统内部的陷阱主机往外发起的连接,一样会被记录在案。当然,这些警告多数是告诉你,有人在对你的系统感兴趣了,并且已经侵入你的系统中——你可以通过一些如发送email或者发送BP机短信等方法来对系统管理员进行提示。
第二重保护是***检测系统,它有两个作用,首先也是最重要的是它可以捕获系统中的所有举动,它的主要工作就是对网络中的信息流量监控分析记录以便将来能够重现之,如果你刚才对我们的拓扑 DiagramA, 你会看到我们的IDS在网络中的放置方式,所有机器都能监控到。IDS的第一个作用是能够抓出所有***才在上面的举动记录下来,另外,它还能在发现一些可疑举动的时候向你发出警报。多数的IDS都有一个***特征库,当网络传输的信息包中的特征字串与该库中某一特定项目符合的时候,它就会发出告急的消息。因此在我们的honeynet中,IDS可以被用来对特定的一些连接进行细节信息的收集捕获。
现在我们的Honeynet Project使用的是一个开放源码的IDS snort。我们 配置snort 使其能捕获所有网络中的信息传输——所有进入或者离开我们honeynet的包都将被记录到一个二进制文件中。同样,它还能记下所有明文传输的东西,如 ftp连接的击键记录 每天它们都将被写入到指字的目录中,这也使我们每天检索时更加方便。为了完成配置,我们使用了下面的 启动脚本 在cron中每天定时运行,重启snort并且记录到一个新的目录中。最后,我们配置将所有的 snort报警信息转发到syslog服务器上。同时也写入/var/log/messages——由 Swatch.监视着的文件中。Swatch实时地对这份文件进行监控,并做下面两件事:先是鉴别snort发出的警报并通过email转发给系统管理员以提供实时的警报,其次它将所有的snort警报文件归档存为一个简单的文本文件以备检索。我们使用了下面的 swatchrc配置文件 实现以上功能。最后,我们通过 snortsnarf ( 下载) 建立了一个简单,可以交互式查询的数据库,这对数据的深度分析有相当大的帮助。
第三重保护是系统本身自带的,要记录下***者在系统中做了什么事,而且记录文件不被破坏,首先我们要考虑到的就是,不能够仅仅在本机上保存日志文件,而应该也发一份到远程日志服务器上。在多数的unix机器上,可以简单地在syslog的配置文件中加上一条远程syslog服务器的条目。在windows机器上,我们一般需要一些第三方的远程日志记录工具,日志文件也可以写入NFS或者SMB共享的远程日志服务器。我们并没有对这些日志进程进行任何的隐藏,因为考虑到,一般情况下,***者进入系统后,如果发现了日志记录情况,最多能做的就是将它停掉——这也是他们的“标准”做法,这样我们将无法进一步记录他们的举动,但是至少他们是进入系统的方法、从何处来等信息已经是无法抹去的了。
当然,还有一些手段更高明的***者会尝试着对远程的日志服务器以图删除他们的***记录,这我们也考虑到了,而且他们的这些尝试也是我们想要了解和捕获的。对我们来说,日志服务器通常是一台配置得相当安全的系统,当***者使用一些更复杂的手段对其进行***、危害到它的安全、获取其上的权限的时候(这并不是不可能发生的),可以删除掉上面的日志。但是他们仍然不能对我们的日志产生太大影响——别忘了,我们的IDS还在里面静静地被动地捕获honeynet里所有的信息包、***者的所有的活动,这里实际上IDS又反过来充当了第二重的远程日志系统,进一步确保了日志记录的完整性。
在捕获信息的过程中,我们还可以使用一些其它的方法,比如修改系统以便 捕获击键及对其屏幕、登陆tty进行捕获并且进行远程数据的传输。在Honeynet Project中,我们利用了一些工具来实现这些功能,首先是一个由Antonomasia更改过, 加强版本的bash,可以用它来替代系统本身的/bin/bash——这个patch后的shell能够把用户的击键写到日志文件中,并发送到远程的日志服务器。另一个方式是一个改进过的TTY Watcher. 这个内核模块可以将用户的击键及tty屏幕显示,并通过一个非标准的TCP连接将这些信息发送出去。还有非常多的方法可以用来实现更多的功能,我们也希望更多的安全组织能够编程实现并发布供大家使用。
关注、维护及风险
Honeynets并不是一个你装好后就可以忘却的解决方案,它需要你的持续的维护及关注,才能发挥最大的影响——这样你才能在第一时间发现并对一些安全事件作出及时的反应。通过实时地观察***者的举动,可以提升你的数据捕获及分析的能力。同样地,为了捕获到新的有价值的数据,你可能需要经常对可疑的网络事件进行深度分析。这需要很长的时间及熟练的分析能力。举例来说,一个***者在你的honeynet上花了30分钟***、游戏,但你却必须花费30-40小时来分析它。同样,你还必须维持这个陷阱网络的正常运行,任何的误操作都可能导致一些致命的错误,可能会令honeynet无法正确运行,比如说,你的“报警”进程当掉了、磁盘空间满、IDS的特征字串不够新、系统配置文件可能出现损坏、日志文件需要察看、需要对防火墙进行补丁升级工作等等。这里说的只是整个honeynet的一部份——在你准备实现honeynet时,你就必须了解——还有很多需要咱们去做的工作。
而且,在真正实现honeynet的时候,还会可能有一些比较棘手的问题,比如,我们必须让***者群体们能够***进来,就得把机器放上网络,这时我们就暴露于互联网上了,而最终***者们会成为你机器上的root,你必须确保自己的机器及带宽不会成为进攻他人的工具,而且,很重要的是,当我们使用这一工具的时候,总有可能犯下各种错误——最终导致的结果将是很严重的,所以必须用多种方法来降低风险。***者们很有可能通过各种方式手段,开发一些工具来逃避我们的监视,所以我们还必需经常性地检查或者改进我们设定的环境,确保它仍然是有效的。千万不要低估***者们的创造力——我们使用防火墙、路由器及其它一切技术都只能对降低风险提供一定程度的帮助,但,风险永远是存在的!
同样,我们信息捕获的种种努力也有可能会被绕过,***者们不断地开发出各种工具来对抗现有的监探技术——比如AntiIDS及加密——对我们的信息捕获会有很大影响。比如说Dug Song开发了一个叫 fragrouter 能对抗***检测系统,它把包分片重组,***检测系统要检查出***特征码,就更加困难。Rain Forest Puppy则开发了一个扫描工具称为 whisker( 下载), 该工具则是通过对数据的分片重组,以绕开IDS,当然我们多数的数据捕获工具是能够发现这些工具的,但技术总是道魔互长的,很可能马上会有一些新的、我们所不知晓的技术可能绕过我们的种种设置,在这里我们只列出一小部份,还会有更多有有着先进思想的方法或工具出现,所以我们也必须对之保持持续的关注(比如最近K2发表的一个工具称为 ADMmutate,可以绕过现有的大多数IDS的检测)。
最后要说明的是,Honeynets并不能解决所有的安全问题,我们建议想要构建Honeynet的组织最好先进行测试,仔细审核一下系统记录并且对系统安全状况做一个全面的审核。通过对各种安全策略及程序的适当优化,我们才能尽可能地降低风险,只有将可能发生的事件尽可能考虑周全并进行训练,它才可能发挥最大的效用。
结论
Honeynet是一个用来获取***者团体的智慧、使用的工具、方法策略及他们的动机。它与honeypots是相类似的,有相似的思想、使用着一些相似的工具,但其主要功能还是学习。两者之间有两个主要差别,一是Honeynet是一个包含多系统、复杂环境的网络。二者Honeynet是我们设计出来的系统,在互联网上可以找到的东西,无论是操作系统或者是系统漏洞,我们都尽量模拟出来。这些东西的组合使honeynet成为相当好的学习环境。但是Honeynets需要系统管理员付出相当大的精力——他们必须确保没有人能够通过honeynet里的机器***他人。Honeynet并非解决安全问题的万金油,也未必会对所有的互联网组织都适用的。我们强力建议这些组织们首先要先把自己内部的安全做好,比如为系统打上补丁、关掉不需要的服务等等,足够安全后,才能更有效地让honeynet成为一种强大的了解***者行为策略的工具。