• 51.50 KB
  • 2022-06-16 12:36:30 发布

蜜网中基于linux平台的蜜罐技术的研究

  • 3页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
  蜜网中基于Linux平台的蜜罐技术的研究摘 要 传统蜜罐有着不少的优点,比如收集数据的保真度,不依赖于任何复杂的检测技术等。然而随着应用的广泛,传统蜜罐的缺点也开始显现了出来。取而代之的是由一组高交互用来获取广泛威胁信息的蜜罐组成的蜜网。本文针对蜜网中蜜罐所面临的挑战:捕获工具隐藏、加密会话数据的捕获、数据传输隐蔽通道,给出了详细的解决方案。关键词 蜜罐;Linux;模块隐藏;加密会话捕获;隐蔽通道1引言蜜罐是一种安全资源,其价值在于被扫描、攻击和攻陷[1]。它以牺牲真实的没有打补丁的操作系统(一般以Linux为平台)为代价欺骗入侵者以达到采集黑客攻击方法和保护真实主机目标。传统蜜罐有着不少的优点,比如收集数据的保真度,蜜罐不依赖于任何复杂的检测技术等[2],因此减少了漏报率和误报率。使用蜜罐技术能够收集到新的攻击工具和攻击方法,而不像目前的大部分入侵检测系统只能根据特征匹配的方法检测到已知的攻击。但是随着应用的广泛,传统蜜罐的缺点也开始暴露了出来,综合起来主要有3个方面:(1)蜜罐技术只能对针对蜜罐的攻击行为进行监视和分析,其视图不像入侵检测系统能够通过旁路侦听等技术对整个网络进行监控。(2)蜜罐技术不能直接防护有漏洞的信息系统并有可能被攻击者利用带来一定的安全风险。(3)攻击者的活动在加密通道上进行(IPSec,SSH,SSL,等等)增多,数据捕获后需要花费时间破译,这给分析攻击行为增加了困难。针对以上问题出现了蜜网技术[3]。蜜网技术实质上是一类研究型的高交互蜜罐技术,与传统蜜罐技术的差异在于,蜜网构成了一个黑客诱捕网络体系架构,在这个架构中,可以包含一个或多个蜜罐,同时保证了网络的高度可控性,以及提供多种工具以方便对攻击信息的采集和分析。图1给出了蜜网的结构及其蜜罐在蜜网中的位置。其中最为关键的部件为称为HoneyAC地址,因此对黑客而言,Honeyodule文件来查看到。当特权用户root调用/sbin/insmod命令加载模块时会有一个系统调用sys_create_module()[7],这个函数在Linux2.4的源代码中位于kernel/module.c。它会将含有新加载的模块信息的数据结构structmodule插入到名为moudle_list的模块链表中去。281sys_create_module(constchar*name_user,size_tsize)282{……309mod->next=module_list;310mod->name=(char*)(mod+1);311mod->size=size;312memcpy((char*)(mod+1),name,namelen+1);313314put_mod_name(name);315316module_list=mod;……325} 可以看出当一个模块加载时,它被插入到一个单向链表的表头。黑客们在攻入蜜罐系统后,可以根据以上存在的漏洞,找出他们认为是可疑的蜜罐捕获模块并从内核卸载模块,这样蜜罐也就失去了它的功能。为了达到隐藏模块的目的就必须在加载模块后,将指向该模块的链表指针删除,这样通过遍历表查找时就再也无法找到该模块了,实现的代码如下:……structmodule*mod_current;mod_current=__this_module;od_current.next){if(strcmp(mod_current.next,str));/*str为模块的名称*/{mod_current.next=mod_current.next->next;/*删除了数据捕获模块*/break;}elsemod_current=mod_current.next;}……3.1.2进程隐藏进程是一个随执行过程不断变化的实体。在Linux系统运行任何一个命令或程序系统时都会建立起至少一个进程来执行。这样蜜罐捕获程序必定会在系统中运行多个进程,利用类似于ps这样查询进程信息的命令便可以得到所有的进程信息,这样很容易就会暴露蜜罐的存在。由于在Linux中不存在直接查询进程信息的系统调用,类似于ps这样查询进程信息的命令是通过查询proc文件系统来实现的。proc文件系统是一个虚拟的文件系统,它通过文件系统的接口实现,用于输出系统运行状态。它以文件系统的形式,为操作系统本身和应用进程之间的通信提供了一个界面,使应用程序能够安全、方便地获得系统当前的运行状况以及内核的内部数据信息,并可以修改某些系统的配置信息。由于proc以文件系统的接口实现,因此可以象访问普通文件一样访问它,但它只存在于内存之中,因此可以用隐藏文件的方法来隐藏proc文件系统中的文件,以达到隐藏进程的目的。首先必须了解查询文件信息的原理。Linux系统中用来查询文件信息的系统调用是sys_getdents(),当查询文件或者目录的相关信息时,Linux系统用sys_getedents()函数来执行相应的查询操作,并把得到的信息传递给用户空间运行的程序,所以如果修改该系统调用,去掉结果中与proc文件系统中的特定文件的相关信息,那么所有利用该系统调用的程序将看不见该文件,这样就实现了进程的隐藏。判断文件是否属于proc文件系统是根据它只存在于内存之中,不存在于任何实际设备之上这一特点,所以Linux内核分配给它一个特定的主设备号0以及一个特定的次设备号1[7],除此之外在外存上没有与之对应的i节点,所以系统也分配给它一个特殊的节点号PROC_ROOT_INO(值为1),而设备上的1号索引节点是保留不用的。这样可以得出判断一个文件是否属于proc文件系统的方法。(1)得到该文件对应的inode结构d_inode;(2)if(d_inode->i_ino==PROC_ROOT_INO!MAJOR(d_inode->i_dev);MINOR(d_inode->i_dev)==1){该文件属于proc文件系统}。再来看一下查询文件系信息系统调用的原型:int sys_getdents(unsignedintfd,structdirent*dirp,unsignedintcount)其中fd为指向目录文件的文件描述符,该函数根据fd所指向的目录文件读取相应dirent结构,并放入dirp中,其中count为dirp中返回的数据量,正确时该函数返回值为填充到dirp的字节数。通过上面的分析,给出隐藏特定进程的伪码表示:Hiding_Proc(unsignedintfd,structdirent*dirp,unsignedintcount){/*调用原来的系统调用*/sys_getdents(fd,dirp,count);得到fd所对应的节点;  if(该文件属于proc文件系统该文件名需要隐藏){从dirp中去掉该文件相关信息}}3.2捕获加密会话数据为了观察入侵者使用加密的会话,就必须找到破解加密会话的方法,不过许多组织已经证明这是非常困难的。强攻不行就只能智取,加密的信息如果要使用就肯定会在某些地方不是被加密的,绕过加密进程就可以捕获未加密的数据。这是解密工作的基本机制,然后获得访问未保护的数据。使用二进制木马程序是对付加密的一种办法。当入侵者攻破蜜罐,他可能会使用如SSH的加密工具来登陆被攻陷的主机,登陆的时候肯定要输入命令,这时木马shell程序会记录他们的动作。不过二进制木马程序隐蔽性不高,而且入侵者可能会安装他们自己的二进制程序。从操作系统内核访问数据将是一个很好的捕获方法。不管入侵者使用什么二进制程序,都可以从内核捕获数据并且可以记录它们的行为。而且,由于用户空间和内核空间是分开的,所以在技术上还可以实现对所有包括root在内的用户隐藏自己的动作。图2中左边的数据捕获机制说明了其工作的原理。数据捕获是由内核模块来完成的,所以要使用这个模块获得蜜罐机操作系统内核空间的访问,从而捕获所有read()和l[2]L.Spitzner,”Honeypots:CatchingtheInsiderThreat”,Proceedingsofthe19thAnnualputerSecurityApplicationsConference,LasVegas,Nevada,USA,December08–12,2003[3]Knoy:Honeys-12November,2003,index.html[4]Knoy:GenIIHoneys-03November,2003,index.html[5][美]JonathanCorbet,AlessandroRubini,GregKroah-Hartman.LinuxDeviceDrivers,3rdEdition.O`REiLLY,2006.01[6][美]KurtWall等著、张辉译.GNU/Linux编程指南(第二版).清华大学出版社,2005.08[7]毛德操、胡希明著.Linux内核源代码情景分析.浙江大学出版社,2002.04