文档介绍:该【一种数据捕获策略的研究与实现 】是由【科技星球】上传分享,文档一共【15】页,该文档可以免费在线阅读,需要了解更多关于【一种数据捕获策略的研究与实现 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。一种数据捕获策略的研究与实现
 
 
赵新伟
Summary:近年来,网络安全问题日益严重,针对网络攻击方与防御方存在着不对称的技术博弈问题,提出一种利用sebek技术实现数据捕获的改进方案。该文首先详细分析了sebek的特点﹑工作原理和实现机制,通过调试发现运行中的缺陷并给出解决方法,然后进行验证,对sebek在windows下的运行流畅性进一步优化,在此基础上,实现了利用sebek在蜜网中进行数据捕获的方案。
实验结果表明,该方案能够有效的捕获网络中的入侵行为,实现了数据捕获功能,为下一步的数据分析提供依据。
Key:sebek;数据捕获;蜜罐;入侵检测;网络安全
:TP393:A:1009-3044(2016)34-0072-04
Abstract:Inrecentyears,networksecurityproblembecomesmoreandmoreserious,forthequestionofthenetworkattacksideanddefensesideexistingasymmetrictechnologygame,,workingprincipleandtheimplementationmechanismofsebekindetail,throughdebuggingfindsoutdefectsandgivesthesolutioninoperation,andthenverifiesthesolution,byoptimizingfurther,,,realizesthefunctionofdatacapturing,andprovidesthebasisfornextdataanalysis.
Keywords:sebek;datacapture;honeypot;intrusiondetection;networksecurity
1概述
近年来,网络安全形势日益严峻,平均每20秒就发生一次入侵计算机网络的事件。网络攻击方与防御方存在着不对称的技术博弈问题[1],攻击方只要在任何时间找到目标的一个漏洞就能攻破系统,而防御方必须确保系统不存在任何可被攻击者利用的漏洞,并拥有全天候的监控机制,才能确保系统的安全。
为了解决这个问题,蜜网项目组[2](theHoneynetProject)提出了诱骗的概念,即在一个可控的网络环境中,诱骗入侵者进行入侵,在入侵者没有察觉的情况下对入侵行为进行捕获,分析入侵者的意图,并让入侵者一无所获,从而避免损失。
2相关工作
利用sebek在蜜网中实现数据捕获是蜜网项目组提出的一种关键的数据捕获方案,sebek是由蜜网项目组(theHoneynetProject)在2001年至2003年间开发的用于数据捕获的内核模块,该模块常被用于蜜网中实现数据捕获功能,也可以单独使用,国內对其研究较少,大多数是针对蜜网的研究,如由北京大学诸葛建伟博士主持的狩猎女神项目组[3],多年来一直专注于蜜网技术及其应用研究,取得了很多成果,但是针对sebek的特点﹑工作原理和实现机制研究较少。
本文详细分析了sebek的特点﹑工作原理和实现机制,进而通过调试发现了源码中的缺陷并给出解决方法,然后进行验证,在此基础上,实现了利用sebek在蜜网中进行数据捕获的解决方案并进行了测试。
3sebek关键技术分析
sebek是运行在内核空间的一段代码,它能记录系统用户存取的一些或者全部数据,具体包括:记录加密会话中的击键,恢复使用SCP拷贝的文件,捕获远程系统被记录的口令,恢复使用Burneye保护的二进制程序的口令等。
sebek体系结构如图1所示,客户端部署在蜜网体系结构的蜜罐中,服务端部署在蜜网网关上,数据捕获并且封装成数据包是在客户端实现的,当外部入侵者通过internet连接入侵了装有sebek客户端的蜜罐A主机时,蜜罐A主机中的sebek会在入侵者没有察觉的情况下捕获外部入侵行为,然后把捕获的入侵数据封装成数据包通过局域网传给蜜网网关,在蜜网网关中装有sebek的服务端程序,它截获客户端发来的数据包并对外部入侵行为进行分析。
通过分析发现,sebek重定向了系统调用,把原有的系统调用函数替换成自定义的函数,这个新的函数再来调用原有的系统调用函数,并把原有系统调用函数读取的数据记录下来,然后在WritePacket函数中实现数据的封包,图2为sebek数据包的包头结构[4],关键字段的数据类型和功能如表1所示。
sebek数据包的包头部分除了上述结构以外还要再添加上IP/UDP头,因为传输的过程中采用的是无连接的udp传输,包头的后面跟的是捕获的入侵行为数据,数据包的捕获的实现方法采用的是经典的hook技术,它修改了系统的函数调用入口点,把函数调用地址替换成自己的函数地址,从而使系统执行自定义的函数,完成数据捕获的功能。
在捕获入侵行为数据后,还要以隐蔽的方式把数据传输到服务器端以供分析使用,sebek没有采用套接字传输,因为套接字传输是在应用层实现的,很容易被外部入侵者察觉,它采用的是协议驱动的形式实现传输的,图3为windows网络架构图,从下到上依次为网卡硬件﹑总线﹑NDIS(网络驱动接口标准)﹑protocoldrivers(协议驱动)﹑Tdiclients(传输驱动接口客服端)﹑Networkapplication(网络应用层)。
图3中NDIS[5]为1989年由Microsoft和3Com联合开发的网络驱动接口标准,使得协议驱动程序可以以一种与设备无关的方式来跟网络适配器驱动程序进行通信,极大地方便了网络驱动程序的编写,遵从NDIS的网络适配器驱动程序称为NDISminportdriver,NDIS支持三种类型的网络驱动程序:
网卡驱动程序(NICdrivers):网卡驱动程序是网卡与上层驱动程序通信的接口,它负责接收来自上层的数据包,或将数据包发送到上层相应的驱动程序,同时它还完成处理中断等工作。
中间驱动程序(Intermediateprotocoldirvers):中间驱动程位于网卡驱动程序和协议驱动程序之间,它向上提供小端口(Miniport)函数集,向下提供协议(protocol)函数集,因此对于上层驱动程序而言,它是小端口驱动程序。对于底层的驱动程序,它是协议驱动程序。
协议驱动程序(Upperlevelprotocoldrivers):协议驱动程序执行具体的网络协议,如IPX/SPX、TCP/IP等。协议驱动程序为应用层客户程序提供服务,接收来自网卡或中间驱动的信息。
sebek的数据传输采用的就是协议驱动的形式,这种传输是在内核层实现的,因而相对于socket传输而言,隐蔽性和安全性更好。通过分析还可以发现,在
数据传输前,sebek要判断数据包的长度是否超过最大数据传输单元(MTU),如果超过了就自动进行截断处理,每一部分再加上包头,分别进行传输,所有的准备工作就绪后,调用NdisSendPackets函数实现数据包的发送。
当把数据包传到局域网中以后,为了实现更好的隐蔽性,sebek采用一种机制使得同一蜜网体系中其它装有sebek蜜罐的主机不能检测到该数据包,只有服务器端能检测到,而且数据包的传输只能是单向的,即只能从客服端传输到服务器端,反之则不能传输,实现这一机制的方法是sebek定义了一个通用的协议,客户端和服务端的通信通道是单向的,这个通道使用udp协议,每个数据包除包含udp头以外还有一个sebek头部数据,在sebek头中定义了一个Magic成员,具体的数据包传输过程中的算法为:
while(蜜罐A的sebek数据包传输到蜜罐B时)
if(蜜罐B的Magic值=数据包中的Magic值)
蜜罐B主机丢弃该数据包
while(蜜罐A的sebek数据包传输到蜜网网关时)
if(数据包中端口号=网关预定义的端口号&&数据包中的Magic值=预定义的
Magic值)
蜜网网关接收数据包并处理
采用这种机制的好处是即使外部入侵者攻陷蜜网后,企图利用攻陷的蜜罐主机来截获另一个蜜罐主机发送的数据包也不能实现,并且由于除了端口号以外,又引入了Magic成员,提高了暴力检测的难度。
当蜜罐主机发送的数据包到达蜜网网关处时,装有sebek服务端的蜜网网关可以直接从网卡捕获该数据包,此外还可以从tcpdump日志文件中获取,该日志文件是系统捕获的所有网络数据文件。
sebek一個重要的特点就是在外部入侵行为不知不觉的情况下捕获入侵行为,如果外部入侵行为攻陷了蜜罐主机后发现了它的存在,就会终止入侵行为从而使数据捕获不能继续,所以抗检测性是它非常重要的功能,为了实现这个功能,采取了如下措施:
1)采用了诸如Adore等基于LKM的rootkit的技术,使自身更难于被发现。
2)通过安装cleaner模块来隐藏sebek,该模块把sebek从安装链表中删除,删除以后蜜罐主机中不再显示安装有sebek,并且不能删除,提高了抗检测性。
4调试
为了验证sebek的功能,我们对其进行调试运行,sebek是运行在内核空间的一段代码,最初是在linux上运行的,后来被移植到windows等其它的操作系统中,我们以在windows上运行的版本为例,由于其是以驱动的形式存在的,编译驱动有两种方式,一种是通过集成开发环境诸如VC或visualstudio和ddk配合来编译,一种是直接通过ddk[6]来编译,前者通过集成开发环境编译,优点是便于修改和发现错误,符合大多数习惯集成开发环境的人们,缺点是需要一系列的配置。后者优点是不用安装集成开发环境且不需要配置,可以直接编译,缺点是脱离了集成环境后不便于调试。
这里采用的是直接使用ddk来编译的方式,ddk有windows2000ddk,windowsxpddk和windows2003ddk,这里我们采用的是windowsxpddk。此外为了加载编译好的驱动文件并显示该驱动程序在内核空间的行为,还需要借助一些工具才能实现,因为驱动程序和普通的程序区别就是它是在内核空间运行,这里我们采用的工具是KmdManager[7]和Dbgview[8],KmdManager是一个免费的加载驱动程序的小工具,而Dbgview能够捕获内核空间的行为并且可以把捕获的数据保存到一个日志文件中,通过对该日志文件的分析,我们可以清楚地查看到驱动程序在内核空间的运行情况。
使用ddk编译sebek客户端程序,,接下来,为了加载该驱动文件并查看运行后该程序在内核空间的行为,我们使用KmdManager来进行加载,使用Dbgview捕获内核空间行为,实验如图4所示和图5所示,图4显示了被加载和运行的过程,图5显示了加载后该驱动在内核空间的行为。
在对sebek客服端程序进行调试的过程中发现启动程序以后总是蓝屏,,文献[9]中给出了一种方法,但是并没有彻底解决问题,客服端端程序仍不能运行,本文在此基础上进一步完善,消除了蓝屏现象,具体算法为:
If(系统运行在windows2000中)