Honeypot中数据捕获的设计与实现

2016-02-07 02:37◆张
网络安全技术与应用 2016年11期
关键词:服务端内核调用

◆张 骏

(长沙医学院信息工程学院 湖南 410219)

Honeypot中数据捕获的设计与实现

◆张 骏

(长沙医学院信息工程学院 湖南 410219)

本文先对Honeypot技术作了简要介绍,重点对数据捕获进行了设计。数据捕获是Honeypot系统中最关键的数据模块。获取攻击者的信息都是来自于数据捕获。为了数据捕获的可靠性,本文采用sebek和libpcap双层数据包捕获。

Honeypot;数据捕获;sebek;libpcap

0 引言

主动防御技术是近几年发展比较快的网络安全技术。传统的防御措施主要是依靠防火墙(firewall)以及入侵检测系统(IDS),却无法有效对付来自内网的攻击及IP地址欺骗攻击等。相比于传统的被动型的网络安全技术,主动防御技术能够变被动为主动,主动地引诱攻击者,并对攻击者的信息进行数据捕获,并以此进行分析研究,以便以后更有针对性地加强网络安全。Honeypot技术正是这一新型防御机制的典型代表。

本文以主动防御系统中应用比较广泛的Honeypot为基础,重点对数据捕获进行了设计。数据捕获是Honeypot中最重要的一环,我们只有捕获到了攻击者的数据,才能深入掌握对方信息,分析其意图,并采取相关措施,否则Honeypot便毫无意义。为了数据捕获的可靠性,我们采用sebek和libpcap双层数据包捕获。

1 Honeypot技术简介

Honeypot意指蜜罐,它是一种对攻击者进行欺骗的技术,通过布置一些作为诱饵的主机和网络服务诱使攻击者对它们进行攻击,以此减少对实际系统的攻击,并且对攻击行为进行监控和分析,了解攻击者所使用的工具和方法,从而使网络管理员通过技术和管理手段来增强系统的安全防护能力。这样安全研究人员就可以全面控制和监视所有攻击活动,了解攻击者的方法,掌握其动机,这其中数据捕获就尤为重要。数据捕获,即监控和记录攻击者在 Honeypot内的所有行为,最大限度地搜集尽可能多的数据,而又不被攻击者所察觉。

2 数据捕获设计

为了提高数据捕获的可靠性,一般采用多层次的数据共享或者采用虚拟主机技术模拟数据包广播功能。本论文设计了一种双层数据包融合机制,将sebek技术和libpcap技术相融合,分析数据包的流程以及时延,从而获取更加可靠和全面的数据。

2.1 Sebek数据捕获

Sebek基于Linux内核系统开发的一个专业的数据包捕获工具,我们设计的使用无连接、不可靠的UDP协议进行通信,Sebek数据捕获分成两个组成部分:客户端和服务端。客户端负责捕获数据并且适时输出到远程网络服务端。服务端负责数据收集,一般采用直接从网络活动的数据包捕获。若攻击者数据没有加密,则通过Wireshark工具反编译TCP流得知会话内容并记录入侵者输入的信息。如果入侵者有加密的数据流,则采用JavaScript加密库 Crypto-JS标准机制或哈希算法解密数据,然后再获取解密了的数据包。还有一种情况可以直接从tcpdump格式保存数据包文件,数据收集后既可以上传到相关数据库,也可以直接显示输出记录。

在Linux中,客户端完全进驻内核空间,作为一个可加载内核模块被执行,可以当作运行在内核空间的一段代码来对待。数据捕获通过内核模块实现我们访问Honeypot内核的功能,并且捕获所有的read()函数的活动数据。函数调用过程中Sebek通过系统调用表中的read()来实现,新旧read()替换调用,并且复制数据包,把函数调用内容存储到到缓存中,再加上指向头部的指针栈,形成一个数据流,并发送到服务端。

系统调用是在有条件的情况下才能执行,一般当用户进程访问read()函数时会产生一个系统调用,而且Sebek修改了指向read索引的指针,因此用户空间的read()函数调用映射到系统调用表引起数组的索引偏移,所以系统调用的执行就会切换到kernel context,并且开始执行Sebek的新read调用。这样Sebek就能监控到通过read系统调用访问的所有数据。当Sebek客户端开始捕获数据,通常要在不被入侵者发现的情况下向服务器发送数据。Sebek采用无连接的不可靠的UDP协议来向服务器传输数据,不过,在它传输之前修改部分内核来防止用户看见这些数据包。Sebek生成的数据包直接将其发送至设备驱动,用户无法用IPTABLES阻止这些数据包或者使用网络嗅探器来检测它们,这样保证了真正主机的安全。

2.2 Libpcap数据捕获

本文设计的Libpcap是一个与实现无关的基于Unix/Linux平台下的分组捕获函数库,目前只支持分组的读取一个的网络数据包捕获函数库,我们增加了一些代码之后,使之可以写数据链路分组。它是一个独立于系统的用户层包捕获的API接口,为底层网络监测提供了一个可移植的框架,主要由两部份组成:网络分接头(Network Tap)和数据过滤器(Packet Filter)。两部份功能互为补充共享,其中Network Tap搜集来自网络设备驱动程序中的数据包,并将搜集到的数据包自我复制一份。Packet Filter则采用BSD Packet Filter(BPF)算法对网卡接收到的数据链路层数据包进行过滤。网卡驱动将接收到的数据包复制一份交给BPF过滤器,过滤器根据用户定义的规则决定是否接收此数据包以及需要拷贝该数据包的哪些内容,然后将过滤后的数据包交给与过滤器相关联的上层应用程序。

数据捕获时,我们把网卡设置成混合模式,在数据链路层加一个旁路处理,数据包经过七层传输最后达到网络接口时,libpcap用已经创建的Socket从链路层驱动程序中获得该数据包的拷贝,再通过Tap函数将数据包发给BPF过滤器,libpcap 数据捕。

我们用C语言写出它的源代码如下:

猜你喜欢
服务端内核调用
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
核电项目物项调用管理的应用研究
Linux内核mmap保护机制研究
新时期《移动Web服务端开发》课程教学改革的研究
在Windows Server 2008上创建应用
基于系统调用的恶意软件检测技术研究
利用RFC技术实现SAP系统接口通信
摸清黑客套路防范木马侵入