跳至主要内容

NT内核简介——HIPS与现代木马

NT内核简介——HIPS与现代木马 时至今日,Rootkit技术已经广泛应用于木马、安全软件、流氓软件中。现代木马几乎全部是Rootkit木马,而安全软件也几乎都应用了Rootkit技术,臭名昭著的某"XX上网"中也大量应用了Rootkit技术。 以下的"现代木马"均指Rootkit木马.

简介NT内核:

拿我们常用的下载工具迅雷来说.如果没有接口,当迅雷储存文件的时候,就要先把文件转成2进制,然后计算当前可用的空间开始于磁盘的第几柱面...第几扇 区之类的详细信息,然后检查分区的文件系统是什么,检查完以后,针对相应的文件系统采用不同的记录方式,甚至需要检查硬盘的品牌,然后使用对应的控制电流 来让硬盘将指定区域的小磁块磁化成"1"或者"0" 现在来看一幅Windows NT内核的示意图: (细节部分并没有详细画出,这幅图画出了Windows NT内核操作系统中,应用程序执行某些操作时的基本流程图)。
当有了接口,迅雷只需要调用相应的Win32 API,告诉系统,文件的位置和内容,然后Win32 API会被Windows系统继续解释成Native API,经过内核调用KiSystemService处理程序,在SSDT里找到NtWriteFile函数的位置,然后继续调用,进一步被解释成驱动程序指令,传递给文件系统驱动(FSD), 在这之前,如果有过滤驱动,那么先通过过滤驱动,由过滤驱动一层层解释给下一层,最后达到FSD层,之后被进一步解释,直至解释成控制硬盘读写的电流.每 个接口要做的都只是把上一层命令解释给下一层接口,最终难以直接使用的电流控制可以用一条简单易记的接口调用来实现.因而编写软件才显得如此容易. 再介绍一个概念:运行级别(ring).在x86的处理器上(主要是IntelAMD的主流处理器),可以存在四个运行级别ring0-3,Windows NT系列系统(XP/2003......)使用其中的两个,就是ring3和ring0两个级别,用户程序运行于ring3级别,而ring3级别的程序不被允许直接访问硬件,这样一方面也是为了防止程序错误的操作导致系统崩溃或者硬件故障.对应的,系统内核运行于ring0级别,拥有对全部内存区域的访问特权,也可以直接访问硬件. 现在加入运行级别的概念,再重新看一下这幅图: 可能有些乱,我们来整理一下.(以下的"函数",通通替换为"功能",以方便理解.) 1.首先,应用程序产生一个请求,比如他要修改注册表,那么他调用Win32 API接口中的注册表操作相关功能.(RegOpenKey等等),实质是调用advapi32.dll中的相应功能. (Win32 API的功能主要位于kernel32.dll advapi32.dll user32.dll gdi32.dll等库中) 2.advapi32.dll中的功能受到调用,于是他继续解释而调用ntdll.dll中的功能(Native API接口). (Native API的所有功能封装于ntdll.dll,但是ntdll.dll并不是真正的执行者,他的任务只是将调用传到内核.) 3.ntdll.dll中的功能受到调用(NtCreateKey等等),于是他把对应的功能编号存入eax寄存器,然后使用SYSENTER指令,导 致"自陷"(早期使用触发Int 2e中断的方式,不过他们的效果是一样的),KiSystemService处理程序将运行. (这个就像你在银行里取钱,你把存单放到玻璃下面的凹槽里去,然后叫柜员,他会把存单取走,然后给你钱,看起来是你取出了钱,但事实上是银行内部提出的 钱.ntdll.dll就是取钱人,他把功能代号(存单)放到eax寄存器里(玻璃下方的凹槽),然后引发自陷以触发KiSystemService(叫 柜员),柜员就会去实际处理交易(执行对应功能).) 4.KiSystemService从eax寄存器里取出功能代号,在一种叫做SDT的结构中查找对应的Native API函数,这种结构在系统中一共有4个,其中一个叫做SSDT,位于ntoskrnl.exe(或者ntkrnlpa.exe)中,记录了系统关键功能的位置,涉及文件操作,注册表操作,进程操作等.还有一个叫做Shadow SSDT,位于win32k.sys中,记录了和用户与图形界面有关的功能,虽然都不是非常关键的功能,但也包括设置系统钩子等比较"特殊"的功能,另外两个SDT的位置则预留,也就是说,有人工创造SDT的可能.(不过这基本上是没有意义的) 5.找到位置后调用该功能,也就是内核中关于该功能的实际操作被执行,当然,之后还是一层又一层的接口,但通常情况下,这里已经是易于控制的最后一层接口.(某些高级木马使用了Object Hook,也就是说存在更底层的接口被控制的可能)对于注册表操作,他们会被解释成Cm****系列功能,当然最后还是要变成文件操作. 6.最后对一类特殊的调用进行解释,那就是调用驱动程序对象,很多功能最后会涉及到硬件操作,比如写文件.写文件的时候,系统会调用文件系统驱动(FSD), 如果之前有文件系统过滤驱动(FSD FilterDriver),那么会先通过文件系统过滤驱动,并经由他们层层解释后,最后传给底层文件系统驱动(FSD),FSD是易于控制文件操作的最 低一层接口.前面那个例子中,注册表修改的操作最终被解释为写文件的操作(因为修改注册表的本质是修改Hive文件),也要经过FSD,并经由FSD进一 步解释,继续传递给下一层接口. 这样就明白了,在这些调用的传递过程中,任何一个环节遭到了阻断都有可能导致失败.而通过"挂钩"这些关键功能,就可以实现对这些功能的控制. 挂钩有很多方式,但是目的只有一个,就是---比原功能更早获得通知,然后自行决定要不要继续把他传递下去,或者自行决定要不要把包含不利信息的结果传递回去. (就相当于你冒充学习委员,班主任让你查作业,你让真正的学习委员去查作业,真正的学习委员给你报了一串名单,里面有你,你把自己的名字去掉,再交给班主任.这样就可以躲过检查.)

现代木马隐藏自身

比如现代木马隐藏自身,他们可以修改SSDT中的文件操作功能的位置(Nt****File系列功能),让他们指向自己,然后自己再调用真正的文件操作功 能,返回信息时,他们只要把其中包含自身的信息抹掉即可.如图,当这样调用结果返回给应用程序时,其中并不包含自己(灰鸽子),应用程序自然也就不知道灰 鸽子的存在了.
设置"钩子"的位置很多,可以选择Win32 API下钩,可以选择挂钩ntdll.dll中的函数,但这是不保险的,因为他们都处于ring3级别(想起来我们的图了么?),也就是说,你设置的钩子可以被一个普通程序轻易绕过,或者消除. 所以大多数人选择在SSDT/Shadow SSDT下挂钩,或者安装文件过滤驱动等等,这些动作受到ring0保护,普通程序无法查知,也无法修改.(更高级的还有Object Hook) 同理,HIPS类软件使用和现代木马一样的手段,实现对于关键动作的监控. PS:SSM监控关机事件的方法是挂钩Native API:NtShutdownSystem.

HIPS VS 现代木马

最后还有一个疑问,一个程序怎么才能获得ring0的运行级别?方法有很多,可以通过安装驱动(动态加载或者静态写注册表服务键),操作 DevicePhysicalMemory以设置调用门,修改 win32k.sys,以及NtVdmControl,ZwSetSystemInformation等等等等,方法层出不穷. 当现代木马和HIPS都具有ring0级别时,他们之间是公平的,现代木马也可以轻易绕过HIPS的监控,或者彻底破坏HIPS.所以,无论是现代木马还 是HIPS,一旦获得ring0级别,就会全力封堵通往ring0的道路,比如SSM安装好之后就会阻止加载驱动,阻止写注册表服务键等等.现代木马也一 样,运行后大多会阻止加载驱动,防止HIPS或者ARK进入ring0,这样也就是说,谁先抢到了ring0,就会阻止别人进来,如果现代木马已经运行 了,差不多就只能通过另一个操作系统来删除他了. 最后,不得不提到的是内核操作的危险性.多种HIPS或者木马并存时,都会下钩,有可能重复,有可能正好碰在一起.由于在内核的操作已经没有人保证其正确 性了,所以一旦因为设计缺陷出错,就会导致BSOD(蓝屏),这就是为什么"XX上网"会导致莫名其妙的蓝屏,也是安装多种HIPS会出现冲突的原因.

评论

此博客中的热门博文

新年的12个健康礼物

如果你对自己的健康不够满意的话,那么,在又一个365天即将到来的时刻,不妨送给自己的身体12个健康承诺,作为珍爱自己的特别礼物:新年的12个健康礼物  http://luoyanglife.com/blog/luoyang-faq-3146/ 1 每天半斤粮——五谷为养,粮食能滋养大脑,也能养护肠胃,适量吃主食并不会使人发胖。 2 每天一餐粗——粗粮富含维生素B族、矿物质和膳食纤维,让我们有顺畅的肠道和持久的精力。 3 每天一把豆——豆子和豆制品能帮助补充蛋白质,更是多种保健成分的来源,让我们不容易发胖,而且不容易衰老。 4 每天一斤菜——蔬菜是健康生活的永恒话题,它供应的保健成分、维生素和膳食纤维帮助人们远离多种癌症。 5 每天半斤绿——在蔬菜当中,深绿色叶菜是营养之精华,无论是强健骨骼,还是预防大脑衰老,绿叶菜都有意想不到的效用! 6 每天半斤果——水果不仅味道甘甜,还能提供多种抗氧化成分和大量的钾,对于稳定血压、控制血胆固醇和预防癌症都有益处。 7 每天一两肉——肉类和水产中的血红素铁、锌和蛋白质能帮助女性拥有红润容颜和温暖的身体,只要适量摄入,就能美味与健康兼得。 8 每天一个蛋——最新研究确信蛋黄是营养素的宝库,其中含有12种维生素和多种保健成分。它不仅无害于心脏,而且有利于延缓衰老。 9 每天一杯奶——奶类中大量的钙和多种维生素对女性不可或缺。如果不喜欢喝牛奶,没关系,酸奶毫不逊色,而且其中的益生菌好处多多。 10 每天一勺仁——坚果和种子是营养密集的食品,每天早上吃一勺,令人食欲满足,能补充多种微量元素,同时润肤美颜。 11 每天六千步——运动是保持强健心脏和苗条身材的不二法门。走路时脚步尽量快一些,加上每周两次有氧运动,能够有效延缓衰老。 12 每天8小时——睡眠是身体自我修复和充电的时间。高质量睡眠是美容的最佳方法,也是减少癌症危险的最简单方法。 2009年,一定是你人生中一个充实的年份,2010年,将是收获更加丰富的一年。但是,无论多么繁忙,对于重要的事情,人们总是有时间去做的。维护健康是每个人最重要的事业,也是期待未来成功的前提条件,因此,要把健康生活排在日程的最重要位置上,就像奥巴马和普京那样。 如果能改变自己的不健康行为,哪怕只有一项,只要切实坚持一年,那么在明年的今日,一定会感觉更加健康和自信! 最后,在新年来临之际,祝各位朋友健...

奥运会开模式上的蓝屏靓照

鸟巢的灯光和投影显示系统 使用了上百台Windows XP Embedded系统的服务器产品 此次北京奥运会开幕式共使用了120台HES Axon Media Servers服务器,这也是历届盛会之最。所有的灯光效果以及放映机移动控制都由Axon Media Servers实时处理并通过三台Wholehog 3灯光控制台操纵完成。 位于鸟巢的Axon Media Servers,有关Axon Media Servers的更多信息可参考 这里 。 在开幕式主火炬点火的关键时刻,其中一台投影服务器正巧出现了 奥运开模式上的蓝屏靓照 这幅图来自 gizmodo.com (both Li Ning and the BSOD :-) ) 没有错,正当李宁在空中跑道大步迈进的时候,蓝屏就在他的身旁。 下面的图片 据说 拍摄于H区3层顶棚。 拍摄于H区3层顶棚,2008.8.8,持续了开幕式的一半时间... Windows Blue Screen on the Olympics Openning Ceremony of Beijing 2008 照片上沿的那块蓝色,不过里边的字看不清了,其实从开幕式刚开始没多久,我就注意到顶棚有这么一块蓝色;不过因为是横过来的,所以没发觉是蓝屏;后来坐在我右边的一位老兄提醒了一下,我才反应过来,这时开幕式都快结束了。 李宁点完火炬降下来时,就经过瑞士国旗的左边,而这个蓝屏也就在李宁的左边,可惜我敏感度不高,当时没照下来。 相关链接: 奥运会开幕式上的Windows蓝屏 Blue Screen of Death Strikes Bird's Nest During Opening Ceremonies Torch Lighting 奥运会开幕式后台控制揭秘 XPe是功臣 Windows XP Embedded? 一样会蓝屏 奥运开幕式上的Windows蓝屏新照 奥运开模式上的蓝屏靓照 2008北京奥运会开模式上的蓝屏靓照

前员工称社区网络是Google最大弱点

北京时间3月7日消息,Google员工近日掀起了离职创业之风,并且主要的创业领域为社区网络。有前Google员工指出,社区网络正是Google最大的弱点。以下是今天美国科技博客的主要内容。   Bits:分析师称移动运营商之间将出现价格战   Sanford Bernstein分析师Craig Moffett日前在一份报告中称,由于手机普及率已经很高,因此移动运营商将很难继续实现增长,而运营商之间将出现价格战。来自美国各主要运营商的最新数据显示,用户增长的速度正在大幅放缓。08年美国手机用户数仅同比增长5.9%,而09年可能进一步下降至3%。而一旦出现价格战,运营商的营收增长也将趋于停滞。Moffett甚至表示,整个移动通信产业即将崩溃。移动运营商目前将希望寄托在智能手机上,智能手机用户通常会更多的使用数据业务。   WebProNews:员工称Google最大弱点在社区网络   前Google员工Bindu Reddy和Arvind Sundararajan近日创立了一家社会化网站Likaholix,这是前Google员工近期创立的数家网站之一。分析认为,导致Google员工离职创业的原因有二。首先,Google目前的规模太庞大,因此很难将一些好的创意引入核心业务中。其次,在网页搜索领域对Google发起挑战是愚蠢的,Google最大的弱点在于社区网络和实时搜索。Reddy认为,Google未来最大的威胁来自Facebook和Twitter,而不是微软和雅虎。   Search Engine Land:AdSense发行商起诉Google获胜   AdSense广告平台的一名用户近日对Google提起诉讼并获得胜利。Google此前关闭了该用户的AdSense帐号,理由是该帐号"对广告主造成威胁",但Google并未具体指出这一威胁是什么。该用户随后起诉Google,并要求Google赔偿721美元。尽管Google的法律代表声称Google有权终止用户帐号,并且已经向该用户支付了721美元,但法庭最终判决结果仍然要求Google支付这笔钱,以及40美元的庭审费用。这一诉讼或许将成为其他AdSense发行商未来起诉Google的依据。   VentureBeat:全部iPhone应用程序总售价超7万美元   尽管RIM、微软和Palm等公司均推...