- 2.78 MB
- 2022-06-16 12:39:34 发布
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
山东大学硕士学位论文基于Argos的捕获零日攻击的蜜罐技术的研究姓名:孙悦申请学位级别:硕士专业:信息安全指导教师:王小云;王美琴20080430
山东大学硕士学何论文摘要蜜罐足一种用来诱捕,延缓网络攻击和收集攻击者信息的技术。它与其他入侵检测软件,防火墙和漏洞扫描软件的最大区别足它响应迅速,适应能力强,能够主动的捕获攻击,而不再是被动防御。我们能够利用蜜罐搜集的日志来分析攻击者的攻击行径,从而设计出新的防御方案,以最快的响应速度减少受侵害的损失。蜜罐从简单的低交互脚本模拟服务方式如今已经发展到利用虚拟操作系统技术来使得攻击者更难以辨认其与真实机的区别。一个虚拟蜜罐能够在一种机器上模拟多种操作系统,构成了各式各样的网络环境,使其更加真实。Argos作为下一代新型高交互蜜罐,利用动态标签技术,从根本上能够检测出多种缓冲区溢出,能够有效的捕获到零日攻击。如果一个漏洞被发现后,在24d,时内,立即被恶意利用,出现对该漏洞的攻击方法或出现攻击行为,那么该漏洞被称为“零日漏洞”,该攻击被称为“零日攻击一。Argos是一种利用蜜罐技术实现的安全模拟器,基于Qemu开发,Qemu足Linux平台下利用动态翻译机制来达到高模拟速度的开源虚拟机软件。Argos在Qemu的模拟机制上开发了相应的检测记录机制,能够诱骗远端入侵者利用缓冲区溢出入侵操作系统,而入侵者并不知道入侵的其实足虚拟的操作系统,其入侵行为已被记录。利用动态标记分析技术,它能跟踪网络信息的执行,发现多种试图非法使用的代码,并产生相应的内存日志记录。Argos的最杰出的功能是识别出零日攻击和其他类似的攻击。一个高模拟度的蜜罐,不应该隐藏起来,而应该对外界可见,与真实机一样,拥有显视的lP,公开提供应有的服务,产生正常的流量。然而这一点对以前的蜜罐来说是不可能的,因为恶意的和无害的流量不能被区别开来。而Argos能够精确的通报每一个可能成功的漏洞攻击,将恶意流量进行记录。冈此对Argos的捕捉零日攻击的原理有必要进行研究分析,所以本论文的工作主要集中在以下三个方面。1.对缓冲区溢出原理进行深入研究,总结分析缓冲区溢出攻击和防御途径。2.研究虚拟机的实现机制,并深入研究Oemu的实时翻译机制。3.研究以A唱os的动态标记技术,分析捕获零日攻击的方法,设计具有漏洞的服务程序和针对该漏洞进行溢出的恶意程序,以对Argos功能进行测试并作出相关数据分析。在Qemu的基础上研究反蜜罐技术原理,并编写针对Qemu的探测程序。关键词:Argos;Qemu;蜜罐:零日攻击
AbstractHoneypotisatechniquewhichisentrappedtodelayattacksandcollectinformationfromtheattacker.Itisdifferentfromothernetworksecuritysoftwareinresponsespeed,adaptabilityandSOon.Itcancaptureattacksactivelyinsteadofdefendingpassively.Wecanmakeuseoflogscollectedbyhoneypotstoanalyzeattacker"sbehavioranddesignnewdefenseschemeinordertOcutdowndamagesasquicklyaspossible.Honeypothasdevelopedfromthesimplelowsimulationmodeusingscriptstothehighvirtualmachine,whichcannotbeeasilydistinguishedfromtherealone.Avirtualhoneypotcansimulateseveraloperationsystemsindifferentinfrastructuresonthesamemachine,St)itcanbuildsortsofintemetenvironmentstomakeitselfseemmuchreal.Argosisthefirststeptocreateaframeworkthatwillusenextgenerationhoneypotstoautomaticallyidentifysortsofbufferoverflowsandcapturezero-dayworms.Azero‘dayexploitistheonewhichtakesadvantageofasecurityvulnerabilityonthesamedaywhenthevulnerabilitybecomesgenerallyknown.TheattackingmethodorattackingbehavioriScalled”zero-dayattack"’.ArgosisafullSeCUresystememulatordesignedforuseinhoneypots.ItisbasedonQemu,anopensourceemulatorthatusesdynamictranslationtoachieveafairlygoodemulationspeed.ArgosextendsQemutoenableittodetectremoteattemptstocompromisetheemulatedguestoperatingsystem.Usingdynamictaintanalysisittracksnetworkdatathroughoutexecutionanddetectsanyattemptstousetheminanillegalway.Whenanattackisdetectedthememoryfootprintoftheattackislogged.Highvirtualhoneypotsshouldnotrequirethatthehoneypot’SIPaddressliemainsunadvertised.Onthecontrary,itshouldattempttopublicizeitsserviceandevenactivelvgeneratetraffic.InformathoneypotsthiswasoRenimpossible,becausemalevolentandbenevolenttrafficcouldnotbedistinguished.SinceArgosisexplicitlysignalingeachpossiblysuccessfulexploitattempt,wearenowabletodifferentiatemaliciousfiominnocuoustraffic.Becauseofitspowerabilitytoanalyzeitsprincipleforfutureworkonit.ofcapturingZero-dayattack,itisnecessaryThispaperwillaccomplishworkinthreeaspects.1.Researchontheprincipleofthebufferoverflow,concludethebufferoverflowattackanddefensemethods.2.ResearchonvirtuaImachinemechanismandQemureal-timetranslationtechnique.
virtual.Keyw。rds:Argos;Qemu;H。neypot;zem。day
原创性’声明本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究所取得的成果。除文中已经注明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的科研成果。对本文的研究作出重要贡献的个人和集体,均已在文中以明确方式标明。本声明的法律责任由本人承担。论文作者签名:翅∑!l邀』日期:础堆;2关于学位论文使用授权的声明本人完全了解山东大学有关保留、使用学位论文的规定,同意学校保留或向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅;本人授权山东大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或其他手段保存论文和汇编本学位论文。(保密论文在解密后应遵守此规定)论文作者签名:到:!随2导师签名:互≤A
山东大学硕十学位论文第一章绪论§1.1课题提出的背景和意义随着人类社会生活对Internet需求的日益增长,网络安全逐渐成为Inter"net及各项网络服务和应用进一步发展的关键问题,特别是1993年以后Internet开始商用化,通过Internet进行的各种电子商务业务日益增多,加之Intemet/Intranet技术日趋成熟,很多组织和企业都建立了自己的内部网络并将之与Intemet联通。网络与信息安全技术的核心问题足对计算机系统和网络进行有效的防护。网络安全防护涉及面很广,从技术层面上讲主要包括防火墙技术、入侵检测技术,病毒防护技术,数据加密和认证技术等。在这些安全技术中,大多数技术都足在攻击者对网络进行攻击时对系统进行被动的防护,对于传播速度快的恶意软件,更新速度快的网络蠕虫病毒,以及由于应用软件自身缺陷造成的漏洞攻击等暴漏出严重的应变慢,识别能力差,补救跟不上的不足。为了对网络上病毒的传播和恶意攻击能迅速的作出响应,蜜罐技术应运而生。L.Spizner曾对蜜罐做了这样的一个定义:蜜罐足一种资源,它的价值是被攻击或攻陷。这就意味着蜜罐足用来被探测、被攻击甚至最后被攻陷的,蜜罐不会修补任何东西,这样就为使用者提供了额外的、有价值的信息。蜜罐不会直接提高计算机网络安全,但是它却是其他安全策略所不可替代的一种主动防御技术。蜜罐技术可以采取主动的方式。顾名思义,就是用特有的特征吸引攻击者,同时对攻击者的各种攻击行为进行分析并找到有效的对付办法【l】。而在所有的攻击类型中,缓冲区溢出的危害最为严重,缓冲区溢出(又称堆栈溢出)攻击是最常用的黑客技术之一,在蠕虫病毒的应用尤其广泛。因此迫切需要一种有效的检测各种缓冲区溢出攻击的蜜罐。为了更早发现网络恶意流量,病毒针对各种软件和系统存在的漏洞进行的攻击,减少分析错误导致的不精确性,并实现快速的响应,由荷兰的阿姆斯特丹自由大学(VrijeUniversiteitAmsterdam)的GerogiosPortokalidis,AsiaSiowinska和HerbertBos开发出新一代高交互蜜罐Argos。与其他低交互蜜罐相比,Argos提供的是真实的服务和能够被恶意流量攻击的真实的操作系统。Argos[2]足一种利用蜜罐技术实现的安全模拟器,基于Qemu[3]开发,Qemu是Linux平台下利用动态翻译机制来达到高模拟速度的开源虚拟机,Argos利用了动态标记【4】技术跟踪恶意流量在内存中留下的痕迹,并触发报警机制产生日志。Argos作为一个新型高交互蜜罐,在组建蜜网,蜜场等大型商业监控,研究实验上有很多应用。欧洲联合体特别资助的第六个项NNoAH[5]计划,该计划由核心与扩展部件组成,其
山东大学硕十学佗论文中核心部分由低交互蜜罐和高交互蜜罐组成,低交互蜜罐作为终端,在将信息传输给高交互蜜罐过程,从中剥离出如端口扫描等不感兴趣的流量,高交互蜜罐部署在虚拟机上实现监控。该计划旨在收集和分析网络环境中的流量,利用具有检测预警功能的设备,供研究和制定适当的抵制措施。该计划选用Argos作为高交互蜜罐,完成对攻击的分析,报警,以及记录功能,是衔接检测与签名生成的重要机制。还有由SURFnet[6][7】(对研究中心,大学等提供网络的服务机构)正在开发的分布式入侵检测系统SURFids中,已经选用TNepenthes[8]来满足SURFnet大部分的需求,Nepenthes能够模拟大部分已知漏洞,为了检测零日攻击[9】又引入了高交互蜜罐Argos,完成了大多数的非法网络行为的检测。还有荷兰一个有关信息通信的研究项目Sentinels[10】也足以Argos为平台搭建而成。实际中,攻击者若要对网络进行攻击,一般首先利用缓冲区溢出获得对网络中某一台主机的root权限,然后植入病毒或者木马等恶意代码,等待它自我繁殖和传播,逐渐感染网络中更多的主机。Argos基。TQemu的功能,完成了检测缓冲区溢出的攻击,能够对含有漏洞的进程及漏洞在内存中的位置进行了清晰的描述,是重现了攻击者的入侵手段,使受害者尽早发现安全隐患。考虑至lJArgos无法获得对攻击者进入攻陷主机后行径的追踪,我们希望能够描述主机被攻陷后,重塑攻击者在攻陷主机上的行以此来确定攻击者足如何利用服务进程的漏洞对攻陷的主机进行攻击的。针对该问题我们选择利用系统调用来重塑攻击者的行为。系统调用足用户空间和内核空间的接口,任何一个进程要想完成一定的功能都需要调用库函数,由库函数调用系统调用来完成。系统调用的发生伴随着进程空间和运行权限的转换,这种实现机制的目的是内核自我保护,防止重要数据被修改,使得系统运行稳定。如果能将攻击者植入的病毒或者其他恶意程序所调用的系统调用的参数按照执行顺序进行跟踪记录,便可以再现攻击者的行为,再结合Argos的日志为恶意程序分析及追踪提供更全面的信息。为完成该目的我们需要对缓冲区溢出原理,QemuI拘实时翻译机制和Argos的原理实现进行分析研究,这也是本论文的主要内容。2§1.2研究内容(1)对缓冲区溢出原理进行深入研究,总结分析缓冲区溢出攻击和防御途径。(2)研究虚拟机的实现机制,并深入研究Qemu的实时翻译机制。(3)研究l:AArgosffq动态标记技术,分析捕获零日攻击的方法,设计具有漏洞的服
山东大学硕七学能论文务程序和针对该漏洞进行溢出的恶意程序,以对Argos功能进行测试并作出相关数据分析。在Qemu的基础上研究反蜜罐技术原理,并编写针对Qemu的探测程序。§1.3论文组织结构根据研究过程中所涉及的内容和系统实现步骤,本论文分为以下四部分:第一章:介绍Argos蜜罐的研究背景,主要内容。第二章:研究缓冲区溢出攻击原理及缓冲区溢出攻击的防御手段。第三章:研究虚拟机的实现机制和Qemu的实时翻译机制。第四章:研究基于Qemu虚拟机I拘Argos蜜罐的设计思想,工作机理及源码实现。3
山东大学硕十学位论文第二章缓冲区溢出攻击原理在这一章中我们将先介绍进程各部分在内存中的分布情况,以及缓冲区溢出的主要发生区域——堆栈的特点以及在函数调用过程中对它进行的操作,进而详细说明了缓冲区溢出的原理和利用缓冲区溢出来攻击目标操作系统的各种方式,并提到了在对缓冲区溢出攻击的检测和防御中出现的各种有效的方法。§2.1进程的内存结构缓冲区(缓存,Buffer)足指这样的一个存储空间:该区域在进程的内存空间中用来接收和保存数据,直至进程对数据进行处理。由于各个进程都有自己的缓冲区,所以保持各进程的缓冲区彼此无关是很重要的。进程[11】是一个实体,是一个“执行中的程序”,是处理器可以调度的单元,由一个数据结构的存在来证明存在的东西,在操作系统中将此数据结构称为“进程描述符”或者“进程控制块”。每一个进程都有它自己的地址空间,一般情况下,如图2.1所示,在内存中主要有程序段(.text节,完成程序任务的机器指令。该节标记为只读,如果发生写操作,会造成segmentationfault。在进程最初被加载到内存中开始,该节的大小就被同定。)、数据段(.data节和.bss节,其中.data节用来存储初始化过的变量,大小在运行时足同定的;.bss节用来存储未初始化的变量,大小在运行时固定)和堆栈(heap节和stack节,其qbheap节用来存储动态分配的变量,位置从内存的低地址向高地址增长:stack节用来跟踪函数调用,在大多数系统上从内存的高地址向低地址增长。栈增长的这种方式,导致了缓冲区溢出的可能性。)三部分组成。程序段里放着程序的机器码和只读数据。数据段放的是程序中的静态数据,通过在进程内存中的.data或.bss节分配内存,可以做到这一点。动态数据则通过堆栈来存放,堆栈大小随着进程发出的嵌套过程调用而增长,随着调用过程的返回而减少。在内存分配之后,缓冲区的长度是固定的。缓冲区可以保存任何预定义类型的数据。4
山东大学硕十学位论文!!曼曼曼曼!曼!曼曼!!曼皇!皇曼皇曼!寰皇IiIII!鼍曼曼曼!曼曼皇曼!皇!曼!鼍皇鼍詈鼍曼!曼曼皇曼皇曼!舅曼皇曼皇曼曼!!曼曼皇曼曼曼曼/*memory.c*/intindex=5;char·str;intnothing;voidfimetl(intc){内存低端程序段’数据段堆栈内存高请图2.1进程的内存布局,/存储在.data节中的整数(已经初始化)//存储在.bss节中的字符串(未初始化)//存储在.bss节中的整型变量(未初始化)inti=c;//该变龟存储在栈中str=-(char)malloc(10*sizeof(char));//在堆中分配10个字符的空间stmcpy(str,”abede",5);//将5个字符”abcde”复SU)Usir}mainO{’functl(1);}缓冲区溢出攻击主要基于字符串的缓冲区,主要发生在函数调用结束后,为了回到函数调用前该进行的下一条指令所进行的出栈操作中。栈是一种数据结构,是一种具有先进后/出(firstinlastout,FIFO)性质的队列。对象是添加到栈的项部,也是从栈项删除。把数据项添加到栈顶mpush,从栈顶取得一个数据项的过程足调用pop。在内存中,每个进程都在内存的.stack段中维持自身的栈。栈从内存的高地址向低地址拟向增长。栈项在内存的低地址,栈底在内存的高地址。有两个与栈相关的重要寄存器:扩展基地址指针(extendedbasepointer,ebp)和扩展栈指针(extendedstackpointer,esp)。ebp寄存器保存了进程当前栈框架的基地址,esp寄存器总是指向栈项。
山东大学硕十学何论文当存储数据时,进行进栈操作(push)-例如当存储一个字符时,esp的值减小一个字节,将该字符存入至1]esp所指向的内存单元,ebp保持不变。当释放数据时,进行出栈操作(pop):例如释放一个4字节的整数时,esp的值增加4个字节,ebp保持不变。函数是一个自包含的代码模块,可以由其他函数调用,包括maini蟊l数。这种调用将导致程序执行流程中的跳跃。整个调用过程分为三步:(1)函数调用调用程序首先按颠倒次序将函数参数放置到栈上。接下来,在栈上保存扩展指令寄存器(extendedinstructionpointer,eip)的值,以便程序从函数返回后可以继续执行。这称之为返回地址。最后,将执行call指令,把函数的地址放至leip寄存器中后开始执行。在汇编代码中,调用看起来足这样:pushl%eaxpushl%ebxcall0x804835c(2)函数序幕被调用函数的责任,首先把调用程序I拘ebp保存到栈上。再把当前ebp保存到ebp(安置当前栈框架)。接下来,减少esp的值,以便为函数的局部变量让出空间。最后,函数开始执行函数体中的语句。上述过程称之为函数序幕。在汇编代码中,函数调用序幕看起来足这样:pushi%ebpmovl%esp,%ebpsub$0x100,%esppushiOxc(%ebp)6EsP(£BP.1∞)内存裔遗址E“存惜的酒.EBX存鸿的值.R£T值.EBP存储鹩原地址.内存候地tt图2.2函数调用中的堆栈
山东大学硕士学俯论文如图2.2所示,进行到这一步时,寄存器ebp,esp存储的值都被改变,原ebp存储的栈基址保存到了堆栈里,新ebp,esp构成了新的栈帧。(3)函数收尾在返回到调用程序之前,被调用函数需要作的最后一件事情足清理栈,即增加esp的值,将其设置为ebp的值。这称之为函数收尾。如果一切正常,eip将保存下一条将执行的指令的地址,而进程将继续执行函数调用之后的语句。在汇编代码中,函数调用收尾看起来是这样:add$Oxc,%espleaveret§2.2缓冲区溢出原理近年来,在日益严重的网络安全问题中,利用缓冲区溢出的攻击方式占据了很大一部分比例。第一个缓冲区溢出攻击一Morris蠕虫,发生在十多年前,它曾造成了全世界6000多台网络服务器瘫痪。缓冲区溢出多是因为程序员在编程中对于内存的分配缺少边界检查,未能回收泄漏内存信息等细节没有引起足够的重视而导致的,这在当今的软件开发中,尤其是大型软件开发中,是极为普遍的。微软每个月会对视窗系统的漏洞进行报告,这些漏洞多具有缓冲区溢出的隐患,虽然大多数漏洞不能被利用发动攻击,但是一旦被利用了,危害肯定是相当惊人的。缓冲区用来储存数据,缓冲区溢出发生在字符串缓冲区。缓冲区自身缺乏相关的机制来防止在保留空间中放入过多的数据。实际上,如果程序员粗枝大叶,数据可能很快超出分配的空间。voidfuncl(char·input){charbuffer[16];strcpy(buffer,input);}voidmain0lcharlongstring[256];inti:for(i。O;i<255;i++)Iongstring[i】=.A’;funcI(Iongstring);}7
山东大学硕t=学位论文这足一个简单的将256个连续字符A存放到另一个长度限制为16个字节的字符串变量中的小程序。当调用函数funclOIF]",引发溢出。堆栈如图2.3所示。内存的高地址内存的低ttJl:图2.3函数funcl的内存布局程序执行的结果是”Segmentationfault(coredumped)”或类似的出错信息。因为从buffer丌始的256个字节都将被·input的内容tA。覆盖,而buffer的大小只有16个字节,因此包括ebp存储的原地址值,函数funcl的返回值ret,指针*input的值都被改变。’A’的16进值为Ox41,所以函数的返回地址变成了0x41414141,当函数funcl在执行完它的指令后将按返回地址返回,导致程序跳转到非法区域,所以出现警告信息。利用类似该函数的漏洞,黑客能够利用缓冲长度界限向程序中输入超出其常规长度的内容,造成缓冲区溢出从而破坏程序的堆栈,使程序运行出现特殊的问题转而执行其它指令,以达到攻击的目的。多数造成缓冲区溢出的原因足程序中没有仔细检查用户输入的参数,属于程序开发过程考虑不周到的结果。从以上情形来看,随便往缓冲区中填东西造成它溢出~般只会出现”分段错误”,而不能达到攻击的目的。因此必须要进行巧妙的改写函数的返回地址,使得程序跳转到攻击者事先植入的恶意代码执行。最常见的手段足利用缓冲区溢出使程序运行一个用户shell,再通过shell执行其它命令。如果该程序属于root且有suid权限的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作。缓冲区溢出攻击之所以成为一种常见安全攻击手段其原因就在于缓冲区溢出漏洞普遍并且易于实现。而且缓冲区溢出成为远程攻击的主要手段其原因在于缓冲区溢出漏洞给予了攻击者他所想要的一切:植入并且执行攻击代码。被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。
山东大学硕十学位论文a_itI_I_§2.3缓冲区溢出的攻击方式缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能,这样可以使得攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了。它的具体实现过程是这样的:首先攻击者对root程序进行试探性攻击,然后执行类似“exec(sh)”的执行代码来获得具有root权限的shell。为了达到这个目的,攻击者必须达到如下两个目标:1.在程序的地址空间里安排适当的代码:2.通过适当的初始化寄存器和内存,让程序跳转到入侵者安排的地址空间执行。根据这两个目标来对缓冲区溢出攻击进行分类,缓冲区溢出攻击分为代码安排和控制程序执行流程两种方法。在程序的地址空间里安排适当的代码的方法:(1)植入法:攻击者向被攻击的程序输入一个字符串,程序会把这个字符串放到缓冲区里。这个字符串包含的资料是可以在这个被攻击的硬件平台上运行的指令序列。在这里,攻击者用被攻击程序的缓冲区来存放攻击代码。缓冲区可以设在任何地方:堆栈(stack,自动变量)、堆(heap,动态分配的内存区)和静态资料区。(2)利用已经存在的代码:有时攻击者想要的代码已经在被攻击的程序中了,攻击者所要做的只是对代码传递一些参数。例如攻击代码要求执行exec("/birgsh”),而在libc库中的代码执行exec(arg),其arg使一个指向一个字符串的指针参数,那么攻击者只要把传入的参数指针改向指向/bin/sh。控制程序转移到攻击代码的方法:所有的这些方法都足在寻求改变程序的执行流程,使之跳转到攻击代码。最基本的就是溢出一个没有边界检查或者有其它弱点的缓冲区,这样就扰乱了程序的正常的执行顺序。通过溢出一个缓冲区,攻击者可以用暴力的方法改写相邻的程序空间而直接跳过了系统的检查。分类的基准是攻击者所寻求的缓冲区溢出的程序空间类型。原则上是可以任意的空间。实际上,许多的缓冲区溢出是用暴力的方法来寻求改变程序指针的。这类程序的不同之处就是程序空间的突破和内存空间的定位不同。主要有以下三种:(1)活动纪录(ActivationRecords).9
山东大学硕士学位论文每当一个函数调用发生时,调用者会在堆栈中留下一个活动纪录,它包含了函数结束时返回的地址。攻击者通过溢出堆栈中的自动变量,使返回地址指向攻击代码。通过改变程序的返回地址,当函数调用结束时,程序就跳转到攻击者设定的地址,而不是原先的地址。这类的缓冲区溢出被称为堆栈溢出攻击(StackSmashingAttack),是目前最常用的缓冲区溢出攻击方式。(2)函数指针(FunctionPointer):函数指针可以用来定位任何地址空间。例如”void(’foo)O”声明了一个返回值为void的函数指针变量foo。所以攻击者只需在任何空间内的函数指针附近找到一个能够溢出的缓冲区,然后溢出这个缓冲区来改变函数指针。在某一时刻,当程序通过函数指针调用函数时,程序的流程就按攻击者的意图实现了。它的一个攻击范例就是在Linux系统下的superprobe程序。(3)长跳转缓冲区(LongjmpBuffers)-在c语言中包含了一个简单的检验/恢复系统,称为Sctjmp/10n西mp【12】。意思是在检验点设定”setjmp(buffer)”,用”IonRimp(buffeO”来恢复检验点。然而,如果攻击者能够进入缓冲区的空间,那么”longjmp(buffeO”实际上足跳转到攻击者的代码。象函数指针一样,longimp缓冲区能够指向任何地方,所以攻击者所要做的就足找到一个可供溢出的缓冲区。一个典型的例子就足Perl5.003的缓冲区溢出漏洞;攻击者首先进入用来恢复缓冲区溢出的的longjmp缓冲区,然后诱导进入恢复模式,这样就使Perl的解释器跳转到攻击代码上了。(4)代码植入和流程控制技术的综合分析:最简单和常见的缓冲区溢出攻击类型就足在一个字符串里综合了代码植入和活动纪录技术。攻击者定位一个可供溢出的自动变量,然后向程序传递一个很大的字符串,在引发缓冲区溢出,改变活动纪录的同时植入了代码。因为C语言在习惯上只为用户和参数丌辟很小的缓冲区,冈此这种漏洞攻击的实例十分常见。代码植入和缓冲区溢出不一定要在在一次动作内完成。攻击者可以在一个缓冲区内放置代码,这是不能溢出的缓冲区。然后,攻击者通过溢出另外一个缓冲区来转移程序的指针。这种方法一般用来解决可供溢出的缓冲区不够大(不能放下全部的代码)的情况。如果攻击者试图使用已经常驻的代码而不是从外部植入代码,他们通常必须把代码作为参数调用。举例来说,在lilac(几乎所有的C程序都要它来连接)中的部分代码段会执行‘"exec(something)”,其中somthing就是参数。攻击者然后使用缓冲区溢出改变10
山东大学硕十学位论文程序的参数,然后利用另一个缓冲区溢出使程序指针指向libc中的特定的代码段。§2.4缓冲区溢出攻击的防御方法缓冲区溢出攻击占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的Intemet用户有机会获得一台主机的部分或全部的控制权。如果能有效地消除缓冲区溢出的漏洞,则很大一部分的安全威胁可以得到缓解。目前有三种基本的方法保护缓冲区免受缓冲区溢出的攻击和影响:l、通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码;2、强制写正确的代码的方法;3、利用编译器的边界检查来实现缓冲区的保护,使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁。(1)堆栈段代码不可执行一Unix系统都是这样设计的,但是近来的Unix和MSWindows系统由于实现更好的性能和功能,往往在在数据段中动态地放入可执行的代码。所以为了保持程序的兼容性不可能使得所有程序的数据段不可执行。Linux和Solaris也发布了有关这方面的内核补丁。因为几乎没有任何合法的程序会在堆栈中存放代码,这种做法几乎不产生任何兼容性问题,但Linux通过向进程堆栈释放代码然后引发中断来执行在堆栈中的代码来实现向进程发送Unix信号。非执行缓冲区的补丁在发送信号的时候足允许缓冲区可执行的。非执行堆栈的保护可以有效地对付把代码植入自动变量的缓冲区溢出攻击,而对于其他形式的攻击则没有效果。通过引用一个驻留的程序的指针,就可以跳过这种保护措施。其他的攻击可以采用把代码殖入堆或者静态数据段中来跳过保护。(2)改进C语言函数库C语言中存在缓冲区溢出攻击隐患的系统函数有gets(),sprintfO,strcpyO,strcatO,fscanfO,scanfO,vsprintfO等。可以开发出更安全的封装了若干已知易受堆栈溢出攻击的库函数。修改后的库函数实现了原有功能,但在某种程度上可以确保任一缓冲区溢出都被控制在现有堆栈帧之内。(3)数组边界检查一可以说缓冲区溢出的根本原因是没有数组边界检查,当数组被溢出的时候,一些关键的数据就有可能被修改,比如函数返回地址、过程帧指针、函数指针等。同时,
山东大学硕t学传论文攻击代码也可以被植入。因此,对数组进行边界检查,使超长代码不可能植入,这样就完全没有了缓冲区溢出攻击产生的条件。只要数组不能被溢出,溢出攻击就无从谈起。为了实现数组边界检查,则所有的对数组的读写操作都应当被检查,以确保对数组的操作在正确的范闸内。最直接的方法是检查所有的数组操作,但是会使性能下降很多,通常可以采用一些优化的技术来减少检查的次数。(4)使堆栈向高地址方向增长缓冲区溢出的一个重要要素是植入的代码成功地被执行。最常见的足被植入的代码放在堆栈区中。通过修改操作系统核心,在核心层引入保护机制,限制代码在堆栈区的执行,这样,缓冲区溢出攻击就不可能成功。到目前为止,我们讨论利用函数返回地址控制程序转移到攻击代码的攻击方法时,有一个基本的前提,那就是当堆栈被压入数据时,栈项向低地址方向增长,只有这样,缓冲区溢出时才可能覆盖低地址处的函数返回地址指针,从而控制程序转移到攻击代码。如果我们使用的机器堆栈压入数据时向高地址方向前进,那么无论缓冲区如何溢出,都不可能覆盖低地址处的函数返回地址指针,也就避免了缓冲区溢出攻击。但足这种方法仍然无法防范利用堆和静态数据段的缓冲区进行溢出的攻击。(5)程序指针完整性检查程序指针完整性检查足针对上述缓冲区溢出的另一个要素——阻止由于函数返回地址或函数指针的改变而导致的程序执行流程的改变。它的原理足在每次在程序指针被引用之前先检测该指针足否已被恶意改动过,如果发现被改动,程序就拒绝执行。因此,即使一个攻击者成功地改变程序的指针,由于系统事先检测到了指针的改变,冈此这个指针不会被使用。与数组边界检查相比,这种方法不能解决所有的缓冲区溢出问题。但这种方法在性能上有很大的优势,而且兼容性也很好。缓冲区溢出足一种在各种操作系统、应用软件中广泛存在普遍且危险的漏洞,利用缓冲区溢出攻击可以导致程序运行失败、系统崩溃等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。所以研究如何检测缓冲区溢出攻击足很有必要的。
山东大学硕十学位论文第三章蜜罐技术在这一章里我们将简单介绍蜜罐技术的发展背景,各种蜜罐技术的发展,以及A唱os蜜罐实现的动态标记技术所要依靠的Qemu的实时翻译机制的原理。§3.1发展背景当今世界,计算机网络的触角已伸向了地球的各个角落,深入各个领域,对人们的生活方式和工作方式产生着前所未有的影响,同时,随着网络规模的不断扩大,人们对网络知识的了解越来越深入,网络上的攻击行为变得越来越多,已经严重威胁到网络信息的安全。人们在针对该问题的检测防御中形成了防火墙技术,入侵检测技术,病毒防护技术,漏洞扫描技术,数据加密和认证技术等,这些安全技术中,大多数是在攻击者对网络进行攻击时对系统进行被动的防护。而同一时期产生的蜜罐技术可以采取主动的方式用特有的特征吸引攻击者,对各种攻击行为进行分析并找到有效的对付方法。蜜罐足一种资源,它的价值是被攻击或攻陷。这就意味着蜜罐足用来被探测,被攻击甚至最后被攻陷的,蜜罐不会修补任何东西,这样就为使用者提供了额外的,有价值的信息。蜜罐不会直接提高网络安全:但它却是其他安全策略所不可替代的一种主动防御技术。在这一时期内发展出很多种蜜罐。DTK(DeceptionToolkit,欺骗工具包)是FredCohen开发的蜜罐工具。DTK为攻击者展示的是一个具有常见攻击弱点的系统进行的,所以可以产生的应答非常有限。DTK仅仅监听输入并产生看起来正常的应答。在这个过程中对所有的行为进行记录,同时提供较为合理的应答。BOF(BackOrificeFriendly)是另一种简单但又十分实用的蜜罐,用来监控BackOrifice的工具。BackOrifice足一种非常强大的攻击,它相当于一个远程系统管理员工具。可以查看文件,将按键记录下来以便以后查看,设置网络文件的共享属性,更新注册条目,激活w曲服务器并放置供他人下载的文件,包括文件的复制等,而且可以利用用户的机器查找所在网络的其他机器,用BackOrifice对它们进行感染;BOF所完成的工作就是模仿一些基本的服务,比如HrrP,FTP,Telnet,电子邮件服务器或BackOrifice。BOF会记录所有对BOF端口的连接和侦听。BOF还具有”伪造答复”的功能,即为入侵者提供一些伪造的连接。用户可以按照形式记录HTTP攻击,
山东大学硕十学何论文远程登录,蛮力登录或者其他各种攻击行为。运行BOF可以让使用者了解何种类型的攻击行为正在发生。BOF的主要价值在于检测,即可以监控指定端口的行为,这些端口一般代表那些最常被扫描或被攻击的服务。Specter(1j{jj灵)低交互蜜罐,类似于BOF,主要功能是模拟服务,不过它可以模拟的服务和功能范罔更加广泛。可以模拟多种不同类型的操作系统,与BOF类似。Specter由两部分组成:引擎部分和控制部分。引擎部分进行数据包嗅探并对符种网络连接进行处理,而控制部分则提供图形用户界面供使用者进行各项配置。因为它只是具有有限的模拟功能,并没有真正的应用程序与攻击者进行交互。Specter的价值在于检测,信息采集,对必要的连接记录下远程主机IP地址,确切时间,服务类型和连接建立时引擎的状态等。缺点是信息的收集分析过程过于复杂。Honeyd足由NielsProvos创建的一种很强大的丌源的蜜罐,运行在UNIX系统上,同时模仿400多种不同的操作系统和上千种不同的计算机。Honeyd可以一时间呈现出上千个不同的IP地址,可以在TCP/IP]-丢模仿操作系统,模拟任何路由拓扑结构,可以配置等待时间和丢包率。Honeyd主要用于检测攻击。类似的,还有一些商业性蜜罐SmokeDetector(对闯入者的信息记录),Bigeye(有嗅探,记录连接日志和协议模拟等功能),LaBreatarpit,NetFacade,KFSensor等。Argos足一种利用蜜罐技术实现的安全模拟器,基TQemu开发,Qemu是Linux平台下利用动态翻译机制来达到高模拟速度的开源虚拟机。Argos在Qemu的模拟机制上开发了相应的检测记录机制,能够发现远端入侵者试图利用缓冲区溢出入侵虚拟的Guest操作系统(在虚拟机上运行的操作系统)。利用动态标记分析技术,它能跟踪网络信息的执行,发现各种非法使用的数据,并产生相应的内存日志记录。Argos能够识别l出zero-day攻击和其他类似的攻击。一个高模拟度的蜜罐,应该不隐藏起来,对外界可见,与真实机一样,拥有显视的IP,公开提供应有的服务,产生正常的流量。然而这一点对以前的蜜罐来说是不可能的,因为恶意的和无害的流量不能被区别开来。而Argos能够精确的通报每一个可能成功的漏洞攻击,将恶意流量进行记录,所以说Argosl甸下一代高交互蜜罐迈出了一大步。Argos动态标记分析机制能够检测出恶意控制流量攻击,恶意可执行代码攻击,处理DMA,以及用户空间和内核空间的相互映射。14
山东大学硕十学位论文§3.2Qemu虚拟机Qemu能够运行在Linux,Windows,MaxOSX主机操作系统上,可以在无需修改目标操作系统和它的应用程序前提下模拟它们。下图形象的说明了一台能正常使用的电脑系统环境。它主要由三部分构成:硬件,操作系统,应用程序。从中能看出各个层之间的等级划分和层与层间的接口,三个层互相依赖,通过接口通信。举个例子来说,在正常的指令执行中,操作系统和应用程序与硬件可以直接作用。但是在与硬件通信的某些环境下,应用程序只能间接的通过操作系统提供给应用程序的接口一系统调用来申请使用权,再由操作系统代替应用程序通过ISA接口与这些硬件资源的通信,这足因为操作系统实现了管理和保护硬件资源诸如内存和I/0操作的特权。操作系统的设计完全依赖于硬件环境,每一种硬件环境都提供了一套完整的指令架构,因此不同的操作系统拥有不同的ISA[13](InstructionSetArchitecture),所以各个操作系统有各自的硬件环境。为了解决操作系统在异构硬件环境下的运行,加入一个中间件成为一种选择。。lSA图3.1软硬件环境衔接图图3.1是Qemu实现的虚拟环境图解模型。该架构由三大块组成,客户机,实现虚拟技术的软件,主机。在这个模型中,虚拟软件通过翻译硬件ISA使得客户机软件看到了有别于真实硬件环境提供的支持该操作系统的“虚拟ISA”。翻译过程包括两部分:(1)由虚拟资源如寄存器和内存空间到真实硬件环境的映射。(2)将虚拟指令翻译成真实机的机器指令来实现虚拟机指令的功能,以此搭建虚拟的ISA环境。
山东大学硕十学位论文Guest图3.2Qemu实现的虚拟环境图解模型VirtualMachine为了规范,论文中出现的术语Host表示真实的操作系统和硬件环境。Guest表示在VM环境中运行的操作系统和应用程序。VMM[14](virtualmachinemonitor)表示实现翻译机制的软件,在本论文中将主要是指Qemu。图3.3足Qemu运行GuestWindows的模型。Qemu完成了一个多用户并发进程,文件系统,进程与I/O设备的通信,以及GUI。所有的Windows进程问通信就像是在Windows系统中。而且,它们可以通过一块虚拟网卡与真实的Linux主机通信,完全像是一台物理上独立的设备。然而,Linux和Window进程间不能像同一系统下的进程间直接进行通信(因为它们不是一个系统下的)。16朋IIdc~Snallyea)DICal}On,apDllCati(InSWincIowsVMMUnuxx86PC图3.3运行在Linux主系统上的Windows客户端系统Qemu足一个高模拟厦的虚拟实现的开源虚拟机,功能Id趋完普。它由几个子系
山东大学硕十学位论文曼I===I==I======mI=I曼曼曼曼!曼!曼曼!曼!曼!曼曼皇皇曼曼曼曼曼曼曼曼曼量寡曼皇皇!曼曼曼曼曼!!!!曼皇皇!皇曼曼曼统组成:CPU模拟,外设模拟,通用设备标准模拟,标识设备的描述信息以及调试工具和用户接口,Argos主要架设在CPU模拟和用户接口等单元模块上,依靠Qemu的翻译机制实现动态标记技术。首先完成的工作是把每一个目标CPU指令分割成更小的操作指令集,这里把更小的指令集叫做微操作指令集。每一个微操作由一段Ccode实现。这些小的c源码经过GCC编译到一个目标文件中。实时编译工具Dyngen【15】把包含微操作的目标文件作为输入来产生动态代码翻译器。这一动态代码翻译器首先将Guest操作系统的指令存储到一个内存块中,然后调用翻译模块,将Guest操作系统的指令存储块翻译并优化成连续的Host操作系统能够运行的指令块,然后设置相关的跳转地址,等待系统执行。举个例子,比如翻译PowerPCff旨令至IJX86指令:addirl,r1,.16撑rl=rl一16上面这个目标指令将会被PowerPC指令翻译器翻译为:movl见l撑TO=rladd仉im·16群TO=TO—16movl—rl—TO群rl=TO在不影响产生的代码质量前提下微操作的个数将会被优化到最少。静态寄存器变量TO,T1,T2分别映射至lJebx,esi,edi。微操作moviTOrl和addlTOim足这样描述的:voidop_movlTOrl(void){TO2env->regs[1】;)externint__op__paramI;voidop_addlTO—.im(void){T02TO+((10ng)(&_op__paraml));)翻译结束后,Guest的汇编码被翻译成Host的汇编码:拌movl—TO—rl拌ebx2env->regs[1】mov0x4(%ebp),%ebx群addlT0_im一16撑ebx=ebx.16
山东大学硕士学位论文add$Ox用下m,%ebx群movl—rl—TO撑env一>regs[1】.ebxmov,%ebx,0x4(%ebp)Qemu是一个效率很高的开源虚拟机,利用实时翻译机制将Guest操作系统的指令首先翻译成一系列连续的微操作指令集,然后经过复制,优化,连接,最终产生能够在本机上运行的指令。这些微操作指令既包括简单的虚拟寄存器整数和浮点运算,也包括复杂的读写内存操作(用来模拟Guest操作系统的页操作机制)。翻译以块为单位进行,完成后放在缓存里供下次运行,以提高速度[161。Argos的动态标记技术就是依附在Qemu的实时翻译机制上实现的,在接下来的章节里我们将会阐明这一点。
山东大学硕七学位论文‘第四章Argos的_T.作机理与源码分析第四章里我们主要将对A唱os的工作机理进行详细的说明,并对A唱os的源码展开分析,从深入理解A唱os捕获零日攻击的原理。并用我们设计的漏洞程序和攻击代码对Argos检测零日攻击的功能进行了测试,分析了测试数据,并在反蜜罐方向上进行了简单的研究实验。§4.1Argos-I"作机理从整体结构上看,Argos主要有四大模块,它们足虚拟实现模块(Qemu已经实现),动态标记模块(负责对网络流量进行标记),溢出攻击检测模块(根据标记检测攻击行为),日志生成模块(把攻击者的恶意代码记录到文件中)。下面我们按照网络流量一步步通过Argosl拘各模块来说H二,qArgos各模块之间的协作以及后续的恶意流量匹配实现过程和恶意攻击代码的签名生成,后续的匹配生成签名工作不属于Argos的实现范畴,这里一并介绍,是为了体现Argos的扩展性。蚴KIl"enl”图4.1Argos的架构示意图图4.1是A唧s的架构示意图。执行流程一共包括6大步。第一步当网络信息进入虚拟网卡时,完成接收功能(Qemu的虚拟实现模块完成),该数据流被记录在trace数据库中,记录为未经加工的网络数据。这一实现与Linux环境中常用捕包分析软件tcpdump的捕包实现原理一致。同时还以正常的形式发送到未经修改的Guest应用程序19
山东大学硕十学何论文和操作系统,这足利用Qemu虚拟技术实现的。第二步主要由动态标记模块完成。在将数据传至1]GuestOS(客户端操作系统)的同时,我们利用动态标记分析技术来检测当一个漏洞被攻击者利用,改变了程序内部的控制流,转向了攻击者设定的攻击代码。该技术是通过识别非法使用可能的不安全的网络数据。实现该识别技术,主要有三个环节:1.将非安全来源的数据标记2.在执行期间跟踪标记的数据。3.识别和阻止非安全使用标记数据。换句话说,对来自网络的数据进行标记,并且如果该数据被拷贝到内存或者寄存器,新的地址也同样要被标记,一旦该数据被作为跳转地址使用,Argos的溢出检测模块就报警。报警后调用日志生成模块,将根据各种类型的攻击产生相应的日志信息。为了能更多的收集信息,Argos首先转储所有标记了的内存块存储的内容到日志文件中,以物理页为单位遍历查找,然后将物理页中被标记的块记录下来。日志信息中的存储了被标记的跳转地址的内存块以及该地址所指向的内存块都用符号特别标记出。这一过程的实现对于运行在内核数据受保护的真实操作系统来说是行不通的,而对于运行在虚拟机上的操作系统来说确可以,这是因为我们对虚拟的GuestOS拥有足够的访问权,它的寄存器和所有的映射对我们来说都是透明的,所以Argos能够根据需要在虚拟地址和物理地址间进行转化。第三步是取证环节,产生取证行为来获取受到攻击的进程信息。该功能是在虚拟操作系统上辅助调用一个监听程序,该程序打开一个端口,在该端口等待Argos发送的取证信息,然后将获得的信息再转发到另外一台管理员专门用来搜集信息的后台主机上。为了获得哪一个服务进程的漏洞遭到攻击,取证信息应该包括进程描述符PID,程序名,打开的文件和socket等,Argos通过将一段shellcode注入含有漏洞的进程的静态数据块(.data节)的最后~页中,并使得指令指针寄存i器eip指I向shellcode的入口,继续运行。shelicode是指一段很小的代码,常用在缓冲区溢出攻击中。攻击者将这段shellcode代码隐藏到数据里,然后利用缓冲区溢出将跳转地址设置为事先存储的shellcode的入口地址,达到提升权限等目的。也就足说,shelleode足攻击者发动攻击的恶意代码。这里用来获取漏洞进程信息的,据我们所知这是shellcode第一次应用在攻击的对立面——检测防御方面。该功能足可选的,脱离这一功能A唱0s依然可以运作。
山东大学硕七学位论文寡曼!曼曼曼曼!鼍皇量鼍量曼i⋯,-m,曼曼兽鼍曼量曼曼曼皇皇曼鼍曼皇第四步将日志中的内存块信息足[{trace数据库中的网络数据进行匹配。第五步生成签名,并将签名提交给sweetbait[17]系统。第六步I主lsweetbait系统对大量的签名进行筛选,整合,生成更短的签名,这也是提炼出各种相似攻击,防止变种攻击的有效做法。归结下,我们可以把Argos的实现分为两个主要部分,第一部分足通过动态标记分析技术来保护Qemu的安全并在识别攻击后产生报警。第二部分是对攻击信息的读取与识别出致命的攻击信息,为产生签名做进一步处理。下面我们依次展开来看。动态标记分析技术:标签技术是对来自于网络的数据进行标记,将其与本地产生的数据区别开来,这样我们就可以在检测的时候依据数据的合法性来判断是否足攻击行径,如果是标记数据被作为指令或者跳转地址在系统中运行,那么显然它就是攻击了。(1)标签粒度:一标签的粒度选择是性能与效果的权衡。从本质上说,标签的粒度有很多。比如我们可以以操作系统管理的一个物理页(4KB)为单位,对每一个4KB的物理内存换取lbit的标签,甚至可以取的更大。这种粗粒度的标记方案的优点足占用内存空间少,花在标记上的时间少,性能损失小,缺点是对攻击的检测深度不够,很可能攻击会发生在一个物理页内。考虑到标签的对象是内存空间和寄存器,相比较而言,寄存器在运算过程中利用率高,出现比较频繁,而且寄存器为了兼容16,32位操作,有所选择的使用(比如EAX,经常用其低16位的AX运算)。我们对寄存器和内存空间采取不同的标记方案。寄存器标记:X86体系架构里有8个通用寄存器,它们是EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP。我们决定为每一个分配4B的标记。标记存储的内容是将存储值导入寄存器的内存空间的物理地址,我们不妨叫它为从哪里来。还有其他的寄存器比如段寄存器和指针寄存器我们并不标记,也就不为它们分配空间。这是因为EIP和段寄存器的改变足隐含的,由系统来完成。还有标志寄存器FLAGS,用来记录某些操作的特征,因为它改变的频繁,并且与操作有关,无法区分是标记数据还是未标记数据引起的,所以也不需要分配标记空间。默认情况下,MMX和FPU寄存器不需要标记,它们只足在特殊操作中才会用到,一般不会在攻击中用到。为了性能的原因,默认忽略。structargos_rtag{
山东大学硕十学位论文target_ulongorigin;//!>3。每一个paddr的bit标记信息值b通过b=map[idx]ff》(0x01<<(paddr00x07))。这样size的大小也就可以根据物理地址大小RAMsz得出size=—RArMSZ,也就是说512MBI拘Guest物理内存需要64M的标签空间。’Bytemap足这样一个数组,每一个字节对应内存空间中一个字节,相应的,idx=paddr,map[idx]=b,size=RAMSZ。最后所有来自网络的数据被标记,因为整个过程不需要操作系统的参与,所以这‘个标记就I扫Qemu的虚拟网卡NE2000NIC来完成。操作系统与外设通信的形式有两种,一种是I/O端口,一种是I/O映射。Qemu的虚拟网卡NE2000,在X86的架构中用指令烈和OUT来完成。通过执行这两个指令获得来自NE2000的数据的寄存器被标记,其他I/O端口操作清除目的寄存器的标记。跟踪:Qemu动态连接代表着与Guest操作系统相应的指令操作,把它们翻译成为本地主机能够执行的指令。它们实现TGuest系统指令的“想法”。跟踪标记的数据的过程就是要伴随着数据的移动与改变而执行相关的函数来操作标记。这些数据包括寄存器,内存数据,还有指令中未标记的立即数。根据具体操作指令的不同采取不同的标记跟踪方式,下面进行归类:2个到3个参数的ALU指令:包括常用的ADD,SUB,AND,XOR等。如果源操作数被标记,将把源操作数的标记拷贝到目的操作数,如果未被标记,目的操作数的标
山东大学硕士学位论文●—●—■———●—■—■—■——一mmIIII——一II记不变.数据转移指令:这些指令把数据从寄存器移到寄存器,拷贝源标记到目的标记.单寄存器操作指令:shift,rotate等操作指令属于该类别,寄存器的标记保持不变。内存操作相关指令:Lc堍D,STORE,PUSH和POP指令。这些操作指令各自有从内存中释放和储存标记到内存的操作.FPU,MMX和SSE指令:标记这些寄存器是可选的.除非它们的结果存储到我们跟踪的寄存器或者内存单元,如果这样,目的标记将被清除。更高级的指令SSE2和3DNow!的指令不被Qemu支持.不直接改变寄存器或者内存单元的指令:比如NOP,JMP等.对于这些指令不需要设置有关标记的操作,但是为了识别该指令的合法性,将设置检测函数来判断.“清洁一指令g某些相当复杂的指令将导致清除目的操作数的标记。这些操作将会忽视某些标记了的数据。这样的操作有ROR,ROL,BCD,SSE和双精度shift指令.其他特殊情况:比如x钟%x,c酞和subc践,∞x等指令,Qcmu在模仿这些指令功能时直接将0送入c戤,通过单独的函数处理,并不作为ADD指令进行翻译,所以没有进行任何标记操作。当通过DMA来从外设获得大量的数据或者发送给外设大量的数据时,这样的操作不占用CPU,Argos将中途阻断它,并清除相应的内存标记。防止非法使用标记数据:如今大部分攻击都改变程序流程进入攻击者的shellcode来控制主机.或者利用精心设计系统函数的参数来达到相同的目的。为了使得攻击成功,指令寄存器的值必须能由攻击者自由提供。在X86架构里,改变EIP的指令由call,ret暑fljmp。通过区分EIP的值是否是标记的,我们就可以判断该跳转是否合法.,尽管如此,还是有些攻击无法检测到.比如,格式化字符串漏洞[181,攻击者可以利用它改写任意内存地址的数据,这种攻击形式不直接用网络数据改写,所以可能检测不到。但是代码注入攻击将会被检测到,通过检测ElP所指向的内存单元数据是否标记来完成的.还有攻击者改变系统调用的参数来进行的攻击。我们将检测比如懿∞ve的参数是否被标记。每一个操作系统的系统调用不同,所以该检测具有系统特征性,目前Argos只支持Linux的系统调用参数检测。
山东大学硕士学位论文●——●—I●—__l-——_一m——ImII__-_—严。。‘。。———。——‘‘r———————————一⋯———————————●—1{∞6I.gEA06t;i.............。.....~——————————————}l{幡删81.00(睡躲;MEMORYBL00(c讲m甜rs:L~~—.一⋯⋯..——⋯一一⋯⋯⋯⋯一一⋯⋯⋯⋯⋯.。⋯⋯⋯.}.⋯·卜———————————————下——一————{!日●门’r州聃aw鼬OCI(埔认Ⅸ象!!I—...。...........,...........。...一一..。.......』.........一~———..j图4.2日志格式·hII■妇klh^砖憎口(瑚tlom‘ildSI:-tk‘咀160咻m吐32tt■噜畦柚。嵋l哪am"ml麟l;■r●嚏■oq由lg【olU邸罩Ea吼tm"iJet_doqeip.eW嘲r.Wllet_;doq‘嘛"_商峨(酗由由):卜———一——⋯⋯‘——‘1;TAGSVALUE5l!、....—....—--·—---.—.-.-.............--·—-.,.一。一.一一—---—.--.一舸TRAOtZc"RVALUF_Tj?一⋯⋯~一]⋯一⋯⋯⋯-一⋯一{jEli)VALUEiEll:TAG;:...................................L一~.一:日尹舸刀翻a旺露TA6j图4.3日志头格式;FO刚AT{TAINTED;s班tIr一一⋯⋯——I——~——1‘PADOR{VADOR{:啊--·—-:‘_砖{、。⋯一’一’。一“”。⋯。。。~一~‘’‘。‘;H一一钲0‰.;⋯.,.,..一二..一.⋯...⋯、⋯⋯⋯一.—;ET惟IHET枞OATAS薛幽一hk—膏_钿_蛆:一..⋯,~,.一~一⋯~.。⋯‘,图4.4内存块记录格式与网络数据格式图4.2图4.3图4.4是A瑁∞的日志输出格式,其中主要记录了恶意代码将要跣转的地址,及当时所有标记了的寄存器值以及恶意网络流量的详细信息.输出日志文件名为argos.csi.RID(黜D是随机数).§4.2Argos的源码分析图4.5是A喧∞的完成各个模块功能的函数调用关系图·我们将按照该图来分析懈的源码.1.虚报实现及动态标记模块。
山东大学硕十学佗论文main函数:函数的起点。主要完成物理内存分配,计时器初始化,各种外设初始化,并进入mainloop循环。main_loop区l数:在未终止的条件下循环执行cpu_exec操作。cpuexec函数:保存现场,处理中断和异常,恢复现场。调用tbfindfast函数来查找并执行相应的指令块。tbfindfast和tbfindslow函数:设置CS寄存器,和PC寄存器,然后在hash表里查找对应的指令块,这个hash表存储的是16MB大小的常用指令块,这样就可以减少翻译的时间,增加Qemu的执行速度。如果查找不到,就调用tbfindslow函数来翻译查找,tb_ffnd_slow调用cpu_gen_code来获得中间代码,cpugen_code返回后更新hash表,将更早时间的指令块替换出去。返回值是将要执行的tb块。‘cpu__gen_codei垂i数:嵌套调用gen_intermediate_code,gen—intermediate,code_intemal,disas_insn产生中间过渡代码,存放至lJtb结构中;调用dyngen_labels产生标签,传递给dyngen_eode来确定该调用哪一个函数来解析中间代码。调用dyngen_eode执行指令序。dyngen_codeigl数:通过该函数来执行真正的操作指令,opc_ptr指向微操作流,gen_eode_ptr指向相应的主机代码。0pparam.-ptr指向微操作流的操作数集。其中会调用Argos修改了的细小的操作解析函数,比如op_jmp』0。以上是Qemu的执行流程图解析,Argos在其中穿插了标记和初始化标记存储区的行为。其中有几个重要的结构体需要指出作用。首先是CPUX86State结构,该结构体是Qemu储存CPU的各个寄存器值的地方,同时也包含A唱os储存寄存器标记的数组以及指向内存标记区的指针。TranslationBiock是存储微操作转化成的中间代码的结构体,存储-fpe,csbase等标识下一条指令的执行地址。
山东大学硕十学位论文图4.5Argos源码架构示意图2.溢出攻击检测模块:首先,I扫Qemu的最后那个函数opjmp_TO触发,将会把T0虚拟寄存器的值赋给EIP,模拟GuestOS的跳转指令。该操作调用argos._eheckffl数检查T0的标记足否存在。需要调用argos_check检测的微操作函数还有opretjmp_T0.switch_tss(文境切换),helper_sysret(系统调用返回),helperljmp_protectedToTl(长跳转保护),helper_sysexit(系统调用结束),op_caUjrap_TO(直接调用arogs__ci__eheck)。进入argos._checkffl数体后,根据TO·>origin足否为0来进行攻击形式判断,如果不为0,则判断为跳转攻击,接下来调用argos_alert产生报警。如果为0,继续调用鹕oUobeck来判断是否为代码注入攻击。进入argoscicheck函数体后,首先调用cpu__get._phy_page_debug来获得env_eip所对应的Guest的物理页。然后调argosmemmap_istainted来判断该虚拟地址所对应的物理地址是否被标记过,如果未标记则
山东大学硕士学位论文判断为合法跳转,不进行报警。如果标记了,则调用argos_alert报警攻击类型为代码注入攻击,同时进入日志生成模块调用argos_csi生成攻击日志,其中参数code表示识别的攻击类型(ARGO’.=ALERT_JMP,ARGOs-.ALERTLJMP·ARGOs-ALERTjrSS,ARGOS_ALERTCALL,ARGO卧LERT—RET,ARGO呲ERT—CI,ARGOS—ALERT—IRET,ARGOS.ALERT_SYSEXIT,ARGO趾ALERT_SYSRET),完成后根据Argos启动选项是否带宙参数一fb来选择调用取证函数argos.._forcnsic获取含有漏洞的进程信息。i,3.日志生成模块:一入口函数argos_csi首先生成一个随机数,打开以包含随机数的字符串为文件名的文件句柄,分别调用argos_header_write完成日志头格式的信息记录,包括格式,CPU架构,攻击种类,日志生成时间戳,各寄存器的值和标记,eip的值,赋给eip值的物理地址,网络标记:argos_mbiockswrite完成的是内存块的记录,将进程整个虚拟空间中标记了的代码和数据(或者是内核空间,。或者是用户空间)以mblock为单位(mblock包括mblock格式头和内存信息)完全记录下来,记录形式采取两种方式:(1)对eip指向的物理页,也就是恶意代码的存放区域,分为两部分,标记了的恶意数据和未标记的正常数据,为了清晰的还原出攻击盼代码布局和与漏洞的相关性,我们都记录下来。(2)对t}eip指向的区域,我们只记录映射到进程虚拟内存的物理页面的有标记的mblock。argos_log_finalize是在记录完进程所有的内存块mblock后,向日志文件里写入的最后一个空mblockheader,内容全为0,标志着遭受攻击的漏洞进程记录的结束。最后执行清理函数,根据当时的ring值选择足从进程的内核空间还是从用户空间将与进程有关的数据标记清除掉。下面着重讲---Fargos_mblockswrite是如何完成的。该函数主要调用-fargos_pagewritei$i数,它是根据eip的值来选择我们前面讲过的两种记录形式,这里设置了一个开关变量force,force=l代表了恶意代码的存储地址,所以选择形式1记录。不然选择形式2记录。调用argos‘-inil完成格式头的初始化,以及调用a119吣mblocK._vm晡blotec完k成hea内d存块信息的记录。可以看出,一个mblock的信息要么全是污染的数据要么全不是。这样,攻击跳转发生时EIP寄存器的值和包含shellcode的内存数据信息记录了下来。
山东大学硕士学位论文staticintargos_pagewrite(FILE·印,CPUX86State*cnv,argos_rtag_t·eiptag.targetulongvaclclr,targetulong圳{inti=O,force=o,minted;argos_mblockhdrthdr,if((env->eip&TARGETPAGE_MASK)一vadch")force=l:while(i日esp:0xfff⋯’ESP:OxbfffedcO0ffset:0x0Return:0xbfffedc0whoamiroot图4.6攻击成功后获得具有root权限的shell可以看到我们进A.TGuestOS,并获得了具有root权限的shell。而在Argosl}勺命令下面出现攻击类型为RET的攻击记录,日志argos.csi.861896923。该日志为二进制格式数据,用Argosl拘日志查看工具carlog来读。Iroot@locaIhostpubI●I.1exploit12240OxbfffedcO:cat,lnc202.194.9.116555Usage:.1expIOit11131842813005>图4.1l恶意流量匹配及查看工具由图4.11可以看到是恶意数据来自于202.194.9.115这个m。因为我们是用host主机攻击的Guest主机,时间是下午3:47分。§4.4反蜜罐技术原理和Qemu的隐患所谓反蜜罐技术,就是指能过一定的检测方法,能来发现目标网络中设置的蜜罐,从而使攻击者能绕过蜜罐入侵到目标网络中。反蜜罐技术有三种对付蜜罐的方法:威胁,覆盖,探究。蜜罐研究者们通常会把蜜罐放在离局域网重要汇聚点很近的网络边缘。使用威胁的方法对付蜜罐的攻击者会通过蜜罐进入到网络内部。因为蜜罐本身足一个充满了漏洞的服务器,、所以利用蜜罐这个网络的“软肋一去攻击网络上的其它主机也是很容易办到的。而有些攻击者采用覆盖的方法,用大量的错误信息来冲击蜜罐。这些错误的信息不仅能够覆盖网络中的有用信息,而且也能“掩护”那些攻击行为不知不觉地进入网络。蜜罐设置的作用之一就是为了通过诱惑攻击者来获得攻击者的信息。而攻击者也可以用同样的方法,通过分析蜜罐,来获取网络中的信息。如一个模拟Windows系统的蜜罐一定表明该公司使用Windows系统。而一个模拟Oracle数据库的系统也定在暗示它们公司使用的足Oracle的数据库。Argos所依赖的Qemu,只要我们能够确认Qemu,就能绕过蜜罐,这里利用TQcmu的不成熟的地方设计了一个小的检测程序,利用cpuid汇编指令的功能编译的shellcode,从一个端El将消息返回出来,以字符串发向测试的系统,
山东大学硕十学位论文曼皇曼鼍曼曼曼曼蔓曼曼曼!曼皇曼鼍曼曼曼曼曼|i;一III毫曼鼍曼皇皇量皇曼皇曼!詈一【rootdOCaIhostchap04】参.,cpuid【rootgocaIhostpub】聋nc-I8720鲢查匪型匝母root剜ocaIhostpub]#.图4.12绕过Qemu的探测程序如图4.12所示,对于真实机和Qemu会有两种结果,其qhQemu没有正确显示cpu的/E确信息。通过该章节的分析,我们能够看I丑Argos检测缓冲区溢出攻击足由于恶意网络数据通过虚拟网卡传至1]Guest时会被Argos的动态标记模块标记,而且标记的范围会随着该数据的转移和运算扩散到新的内存单元和寄存器,这样即使不是网络中的原始数据作为跳转地址,而足攻击者通过运算生成的新数据作为跳转地址改变程序流时也会被溢出攻击检测模块所捕获,进而报警生成日志。因此从这个角度看,任何试图通过网络流量改变跳转地址的攻击(远程缓冲区溢出攻击的本质)都能够被检测到。所以零日攻击是可以被Argos检测到的。
山东大学硕士学位论文第五章结论本文中我们讨论]"Argos利用动态分析技术实现了检测漏洞并保护未修改的操作系统及进程的安全,详细分析]"Argos的工作机理和源码实现部分,可以看&IArgos能够从根本上发现大部分形式的缓存区溢出攻击。通过对Argos的研究,对有关系统调用的实现的转换机制有了较清晰的认识,能够捕捉到系统调用的发生。但是要显示系统调用的信息,必须要找到参数在内存中的位置,这涉及到另一个问题——虚拟地址和实际地址空间的转换机制,该问题属于内核的内存管理单元的功能,在虚拟机上实现更加复杂,不仅需要完成虚拟地址和物理地址的转换,还需要再将GuestOS的物理地址转化至1]Argos进程的虚拟地址,因此将来的工作将主要围绕该问题进行研究。另夕bArgos作为下一代蜜罐可以捕捉零日攻击,根据报警日志信息自动生成签名,并将签名转换为IDS[191(入侵检测系统)如Snort的规则格式,实现检测防御~体化。。要达到完全自动化还有一定的难度,要考虑到自动分析恶意代码,归类,最终生成签名以及各环节的协调工作,这也可以作为以后的工作方向。35
山东大学硕十学位论文参考文献【1】LanceSpitzner.honeypot[M].北京:清华大学出版社,2004.【2】Argos,hap://www.fcw.VR.hi/porto/argos.【3】Qemuhomepage.http://fabrice.beilard.free.fr/qemw"about.html.【4】J.NewsomeandD.Song,Dynamictaintanalysisforautomaticdetection,analysis,andsignaturegenerationofexploitsoncommoditysoftware,InProc.ofthe12thAnnualNetworkandDistributedSystemSecuritySymposium(NDSS),2005.【5】DI.1:Honeypotnodearchitecture.http://www.fp6一noah.org/publications/deliverables/D1.1.pdf.【6】SURFnetIDSproject,http://ids.suffn.et.n1.【7】ReportSURFnetIntrusionDetectionSyStem,http://staff.science.uva.nl/delaat/snb-2004-2005/p30/report.pdf.【8】Nepenthesprojecthomepage,http://Nepenthes.sourceforge.net.【9】许治坤,王伟,郭添森等.网络渗透技术[M】.北京:电子工业出版社,2005.【10】TheHoneynetP00ecLhttp://www.honeynet.org.【l1】HarveyM.Deitel,PaulJ.Deitei,DavidR.Choffnes.Operationsystem.北京:清华大学出版社,2007.【12]GregHoglund,GaryMcGraw.软件剖析【M】.北京:清华大学出版社,2005.【13】User-modelinux,http://user-mode-linux.sourceforge.net/.【14】J.E.SmithandRaviNair,AnOverviewofVirtualMachineArchitectures,MorganKaufmantiPublishers,2004.f15】EBellard,QEMU,afastandportabledynamictranslator,InInProc.oftheUSENIXAnnualTechnicalConference,PP.41-46,April2005.【16】NathanielWesleyFilardo,QEMUInternalsandPortStrategy,http://gSOC.cat-v.org/people/nwf/paper-strategy—plus.pdf.【17】GPortokalidisandH.Bos,SweetBait:Zero-HourWormDetectionandContainment36
山东大学硕}学位论文UsingHoneypots,(AnextendedversionofthisreportwasacceptedbyElsevierJournalonComputerNetworks,SpecialIssueonSecuritythroughSelf-ProtectingandSelf-HealingSystems),TRIR-CS·015,Technicalreport,VrijeUniversiteitAmsterdam,May2005.【181U.Shankar,K.Taiwar,J.S.Foster,andD.Wagner,Detectingformatstring:。vulnerabilitieswithtypequalifiers,InInProc.ofthe10thUSENIXSecurity.Symposium,PP.201-216,August2001.【19】WikipediaIDS,http://en.wikipedia.org/wiki/Intrusion-detection·system.【20】C.Cowan,S.Beattie,J.JohansenandPWagle,PointGuard:Protectingpointersfrombufferovervulnerabilities,InInProc.ofthe12thUSENIXSecuritySymposium,PP.9l—l04,August2003.【21】GeorgiosPortokalidis,AsiaSlowinskaandHerbertBos,Argos:anEmulatorforFingerprintingZero-DayAttacks.https://gforge.CS.VU.nl/docman/?groupid=14.【22】N.Provos,Avirtualhoneypotframework,InProc.Ofthe13thUSENIXSecuritySymposium,2004.【23】AndrewGriffiths,Binaryprotectionschemes,www.codebreakers-joumai.com.【24】XuxianJiang,andDongyanXu,Collapsar:AVM·BasedArchitectureforNetworkAttackDetentionCenter,Proe.ofthe13咖USENIXSecuritySymposium(Security’04),SanDiego,CAAug.2004.【25】XuxianJiang,XinyuanWang‘‘Out·of-the-box’’MonitoringofVM-basedHigh—InteractionHoneypots·【26】KrisKaspersky.黑客反汇编揭秘【M】.北京:电子工业出版社,2004.[271ShonHarris等.灰帽攻击安全手册【M】.北京:清华大学出版社,2007.【28】KrisKaspersky.代码优化【M】.北京:电子工业出版社,2004.【29】RobertLove.Linuxl内核设计与实现【M】.北京:机械工业出版社,2006.【30】DiomidisSpinellis.代码阅读方法与实践【M】.北京:清华大学出版社,2004.【31】RichardBlum.ProfessionalAssemblyLanguage[M].北京:机械工业出版社,2006.37
山东大学硕十学位论文致谢三年的硕士学习生活就快要结束了,当本文定稿之时,回首三年的学习生活,尤其是写论文的这几个月中,有着诉不尽的感慨和感谢。首先要感谢的足我的导师王美琴老师在这三年里对我的谆谆教导,尤其足对我的论文的悉心指导,从课题的选定,资料的搜集,论文的撰写修改等各个环节,她都倾注了大量的精力。感谢王老师引导我进入了曾经让我陌生的网络安全领域。在我遇到挑战性的问题时,王老师耐心地与我一起探讨,谈她处理问题的经验,启发我独立去解决问题,使我很受用。更重要的足,她治学严谨,工作效率高,平易近人,这无论在我学习还是未来的人生道路上;都会无形的指引着我前进的方向。感谢尊敬的导师王小云教授对我的辛勤培养和悉心教导。王老师严谨的治学,渊博的知识,一丝不苟的工作态度以及解决问题的深邃的洞察力都使我受益匪浅。她为我们提供了舒适的实验室学习环境。让我们能够顺利的完成相关学习和研究。王老师孜孜不倦的求知欲,勇于开拓进取的实干精神将会在我以后的工作学习中激励我勇往直前,不断进取创新,踏踏实实的做事。感谢论文评审组的专家对我论文的审阅和对论文所提出的每一条宝贵的意见和建议。感谢王明强老师,秦静老师以及数学院的其他各位领导,老师在学习和工作上的指导帮助。感谢三年来朝夕相处的同学们,师弟师妹们对我真诚的帮助和关心。尤其要感谢在课题研究过程中,一起探讨各种解决方案的陈朕和董炜,在他们的帮助下,论文得以顺利完成。还有从事网络安全工作多年的党政纲,他的经验和思想经常给我很多启示,使得我的论文更加切实。还有为维持实验室正常工作秩序付出努力的张宁博,感谢他为我们这个实验室做的一切。还有我的师弟胡昌慧,他在密码学领域里的见解经常能激起我的求知欲,激励我不断进取。本论文中很多知识都得益于Linux和各种安全网站及论坛的网络资源,感谢这些具有开源精神的朋友。最后,向所有关心帮助我的老师,同学,家人们致以最诚挚的谢意。
基于Argos的捕获零日攻击的蜜罐技术的研究作者:孙悦学位授予单位:山东大学本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1351094.aspx
您可能关注的文档
- 蜜饯(九制应子)haccp计划书
- 《蜜蜂养殖技术》(最新)
- 世界蜂蜜贸易的发展趋势及我国的对策
- 小学《一年级的小蜜瓜》读后感500字
- 寻得花蜜度与人
- 两相uasb反应器处理糖蜜酒精糟液的试验研究
- 分宜镇芦塘村古岭新余蜜桔工程(项目名称)施工招标
- 波罗蜜叶挥发油化学成分的气相色谱质谱分析
- 蜜罐信息采集技术分析_1
- 虚拟蜜罐honeyd的分析和研究(1)
- 2015年版《中国药典》蜂蜜质量标准
- db37t2990-2017巢蜜生产技术规范
- db3310t006-2012温州蜜柑高品质生产技术规程
- 蜜月旅行打造浪漫旅程
- xx乡xxxx蜜蜂养殖加工项目可行性研究报告
- 中国蜜蜂养殖行业调研报告
- 实用资料推荐-汪氏蜂蜜行销策划案
- 4蜂蜜柚子茶产业基地建设项目可行性研究报告