木马技术发展趋势回顾

laiwuyingas 2010-03-19 07:46:03
木马技术发展趋势回顾
  在早期网络防火墙尚未出现记录本机主动连接请求的功能之前,要判断自己的机器上是否存在反弹型木马是一件比较困难的事情,因为使用端口反弹概念的服务端并不主动开放任何端口连接,在其未发起入侵连接之前,用户无法得知自己机器进程里是否有异常,直到它与远方入侵者建立了连接,用户才有可能在网络程序状态检测工具里看到一些对外连接的进程信息,可是这样主动对外连接的进程也太多了,如Internet Explorer、Foxmail、QQ等也都是主动对外连接的,
一般的用户根本就无法将其判断分析出来。端口反弹型木马的出现虽然让入侵的隐蔽等级又提高了一个层次,但是它也不是无懈可击的,由于木马需要实现主动连接客户端的功能,而大部分入侵者是不会使用固定IP的,在生成木马服务端的时候就必须使用一个相对固定的公共网络连接方式让服务端以后能通过这个途径得到客户端的控制请求,这一途径经常是公共网络上的HTTP
空间 或FTP空间 ,随着技术发展还出现过依赖动态域名 直达客户端的端口反弹型木马,
  它们与客户端建立连接的步骤是:
  1.服务端根据入侵者预设的反弹依据,连接到一个指定的公共网络空间 里,通过读取某个数据文件获得客户端的当前IP地址,这个数据文件是通过客户端的自动更新上传实现的。
  2.获得IP地址数据后,服务端尝试与之建立连接
  3.如果连接成功,则开始控制行为
  从上述步骤可以看出,反弹木马的连接过程相比于其它正常程序的网络连接,要多出一个获取客户端地址的步骤,这正是我们判断一个程序是否反弹木马的重要依据,针对这个特性,用户可以使用以下步骤判断一个程序是否反弹木马:
  1.安装Iris、Ethereal等工具,然后重启计算机,重启完毕后不要进行网络连接,直接运行监听工具并设置Filter为监视端口80和21的TCP通讯
  2.连接网络,查看监听工具的数据包捕获情况
  3.如果出现HTTP或FTP请求,及时查看其报文内容,如果没有采取简单的加密 文本,一般能直接看到发出的报文连接请求得到了一个带有IP地址的回应数据,记录其本机端口和远程地址端口信息
  4.查看天网等防火墙的网络应用程序端口情况,找到匹配以上记录的那个进程,这个进程有超过80%的几率属于反弹木马
  如果是新类型的直接使用动态DNS解析IP地址的反弹木马呢?这种木马其实更好发现,只要设置监听工具的Filter为监听53端口,即可迅速发现这些特殊的域名 解析包,由于动态域名 的命名方式都具有一定的个性特征,而且它们的厂商信息都可以在网络上直接查到,
这样一来即可迅速判断机器上是否存在反弹木马。
  锋芒小露:“无进程”木马后门
  在2002年和2003年间,网络上出现了3款令当时的用户和安全技术者大呼头痛的木马作品“广外系列”,分别是“广外男生”、“广外女生”以及“广外幽灵”,这3个作品都使用了在当时颇感新鲜的技术“远程线程注射”,做到了国内真正意义上的第一款“无进程”木马——DLL木马。
  “广外男生”的主体是一个可执行程序EXE和一个动态链接库DLL,而EXE只是用于在开机时调用这个DLL执行木马主线程并使用“远程线程注射”(RemoteThread Inject)技术将DLL与这个EXE脱离开来,然后DLL的线程进入系统里现有的任意一个进程的内存空间 中维持运行,而用于执行最初的DLL启动工作并实现在DLL被破坏时复活它的EXE会在DLL成功插入其他进程后自动退出,
这种传统的DLL启动方式成为早期大量DLL木马的加载方式,所以它存在一个弱点:在计算机启动时用户如果查看任务管理器的速度稍微快一些,他就能看到一个迅速消失的进程,而且这时期的DLL木马虽然实施了无进程启动,但却是被动的加载方式,在如今可以枚举并终止进程中相关DLL模块的程序遍天下的现状中,任意一款具备进程模块查找功能的程序如Process Explorer、IceSword等都能将它们清理干净——它们的文件名太明显了。
  但是不得不否认,早期的DLL木马技术虽然只是个雏形,但它却是为如今到处横行的真正无第三方EXE加载项(使用特殊技术令系统外壳程序加载它)的众多恶意软件和木马的DLL主体的技术实现做了铺垫。从最初的第三方EXE加载DLL启动方式开始,到随后的使用rundll32.exe加载运行,再到利用NT服务的宿主程序svchost.exe实现启动,直到现在的技术巅峰——使用“ShellExecuteHook”(执行挂钩)技术。
  经常关注安全的用户或许会见到过“ShellExecuteHook”,如今许多木马和恶意程序都在用户层使用它作为启动方式了,但这是一种什么技术,大家可能又会迷惑不解了,究竟这个技术和木马有什么联系?其实这是一种正常的系统功能,名为“执行挂钩”,操作系统厂商开发它的初衷十分简单:为程序提供一个额外的通知功能,以实现系统中任何程序启动时都提前让使用了“执行挂钩”的程序收到新程序的启动通知,简单的说,这是操作系统在出于某种程序交互需求的考虑下所衍生的技术,
它的作用就是让一部分程序能够在其他程序开始运行之前就得知有新程序即将运行的通知,以及这个程序的映像文件名称等信息,用于接收通知的程序必须遵循COM对象编程标准编写。
  这个技术是通过外壳程序Explorer.exe实现的,它的加载项被指定在系统注册表“HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks”内,用户浏览这里会发现里面并不是熟悉的路径和文件名,而是一堆奇怪组合的数字和字符串,这些字符串被称为“Class ID”(类唯一标识符,CLSID),每一个DLL模块都拥有属于它自己的唯一CLSID,操作系统自身是通过CLSID获得这个DLL的详细文件位置并加载它的。在执行挂钩技术里,这个注册表键里的数据就代表了申请接受通知的DLL模块的CLSID,
当一个新程序执行时,系统会将这个消息通过注册表的执行挂钩入口派发出去,而后系统会载入这些符合COM对象标准的DLL文件以执行它预先定义的线程代码对消息进行处理,换句话说,也就是系统自己启动了声明为“执行挂钩”对象的DLL模块,它们的初次加载程序是外壳Explorer.exe。看到这里,各位是不是觉得这个过程很熟悉?没错,这简直就是第一代DLL木马依靠第三方EXE实现自启动的翻版,所不同的是,这次的DLL启动宿主是系统外壳自身,而且它还拥有一个任何第三方EXE宿主都无法具备的功能:确保DLL在每一个进程启动时自动加载运行。
  这个技术最早被杀毒软件用于实现提前检测功能,然而现在它却被恶意软件、木马后门等程序编写者大量的用在了不法行为之上,与IFEO的初衷一样,它们的功能都被曲解应用了。
  由于这个技术的执行逻辑使得木马主体DLL可以在每一个程序运行时也随着它执行并随之进入它的内存空间 ,成为其模块之一,也就是说,这个技术使得做了保护措施的DLL木马变得难以彻底查杀,而且它不会产生任何敏感位置的启动项,也不需要指明一个加载器——它的加载器就是Explorer.exe自身。而广大用户中,能够理解并找到这个注册表项的人不多。
  使用这个技术的木马如何查杀?其实别看它似乎很可怕,它也是有弱点的:由于这是Explorer实现的功能,它就必须依靠Explorer的存在而产生通知行为,一旦Explorer被终止执行,这类木马也就没有了加载器。大部分手工查杀木马的用户都发现使用这个技术的木马无法彻底删除,其实这与他们的使用习惯有关,大部分用户都是在需要用到什么工具的时候才会去运行它,那么回到开头对这个技术的解释来重新理解一下,你就会明白,这是因为你在其后运行其他工具的时候,
执行挂钩又将木马DLL启动了一次,并可能产生了另一个随机字符串组合的DLL文件名来添加新的加载项,如此恶意循环,最终便无法彻底查杀。正确的做法是,在运行了一堆自己预料到会用上的功能以后,将Explorer.exe终止,避免执行挂钩再次被调用,随后使用工具争取一次就能把位于注册表入口ShellExecuteHooks 内的DLL注册信息和文件本体共同删除,这样一来即可将木马逐出机器。在工具的选择上我推荐Sysinternal的Autoruns,它提供的ShellExecuteHooks清理一体化功能非常不错。
  漏洞先锋:网页木马
  网页木马并不是指使用网页编写的木马程序,也不是一种新的木马类型,而是一种通过浏览器漏洞实现普通木马传播的感染手段,这个时代里浏览器已经成为众多入侵途径的窗口,它们都是通过一些嵌入了特殊构造的漏洞执行代码的网页和脚本 进行入侵的,其后果是浏览器代替用户自动运行了之前下载的木马程序,这一切,让人防不胜防。
  其实不仅仅是浏览器自身漏洞可以引发木马危机,各种以浏览器为执行宿主的BHO控件漏洞也同样可以导致浏览器崩溃或自行下载执行入侵者指定的页面,如支付宝、Web迅雷、百度搜霸、蓝天语音聊天室插件等IE控件都出现过危害程度高的漏洞。
  当一个被载入浏览器的控件出现漏洞时,对用户而言就等于是浏览器自身出了漏洞,因为它们形成了宿主关系,其影响已经形成一体了,当入侵者使用特殊编写的脚本 诱使存在漏洞的控件发生溢出 时,轻则控件发生崩溃直接导致浏览器也跟着崩溃,
重则发生缓冲区
溢出 ,执行来自浏览器传递的攻击 代码ShellCode而导致用户机器变成一个“木马下载器”(Trojan-Downloader),自动下载执行木马等危害程序。
  网页木马的历史非常悠久,自从1999年MIME执行漏洞被公开后,早期的网页木马便宣告出世,如果你是那个时代就走过来的用户,你一定听说过“求职信”,它就是使用浏览器MIME漏洞传播的早期恶意程序之一,随后的“大无极”更是把漏洞影响扩散到了严重危害的程度。
  大部分网页木马的共同点都是依赖于用户机器的浏览器漏洞来实现下载木马本体执行的功能,在相关厂商未出有效的安全补丁之前,我们能做的只有通过某种手段预防漏洞危害,那就是利用浏览器自身提供的一个小功能将问题控件暂时屏蔽。细心的用户在阅读一些安全小组的漏洞分析报告时,经常会看到这么一句:“在软件厂商未发布安全补丁之前,我们建议用户对该控件设置Killbit”。那么,什么是“Killbit”?微软编号Q240797的知识库文章《如何禁止 ActiveX 控件在 Internet Explorer 中运行》一文对此做出了诠释:Internet Explorer 有一项安全功能,
可用于禁止 Internet Explorer HTML 呈现引擎加载某个 ActiveX 控件。此功能可通过进行注册表设置来完成,这种设置叫做设置“killbit”。一旦设置了“killbit”,该控件即永远不可加载,即使将其完全安装也是如此。此设置可以确保,即使有漏洞的组件被引入或重新引入系统中,它也不具活性,没有破坏力。
  实际上,这一设置的本质是将存在漏洞的控件在浏览器里的兼容性标识设置为“不安全”,于是在预先设定的浏览器加载逻辑里,这一“不安全”的控件就不会被加载,从而保证浏览器不会携带着这个问题控件运行,其相关漏洞自然也就没有了入口。
  兼容性标识位于系统注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\下,其子键为各个ActiveX控件的CLSID(有关CLSID概念请参见本文上半部分),每个CLSID项里都有一个名为“Compatibility Flags”的DWORD类型值,当它的值为“0x00000400”即十六进制400或十进制1024时,浏览器就会认为这个控件不安全而将其忽略,同时微软还提供了“兼容的安全CLSID替代”功能,用于在对某个问题控件使用Killbit后指定的另一个功能替代控件,
它是通过用户建立一个名为“AlternateCLSID”的字符串实现的,其内容为功能替代控件的CLSID。
  地下工事破坏者:如今的主流技术“Rootkit”
  上面提到的木马和恶意程序手段其实都是在用户层Ring3级别运行的应用程序,所以它们无法做得非常厉害,只要用户使用适当的安全工具即可检测并除去,然而现在,技术的战斗转入了系统核心层Ring0。
  从最初的Rootkit概念提出到现在短短几年的时间里,Rootkit已经从一个神秘高深的危险技术变成了今天臭大街的东西,尤其是流氓软件更是争先恐后的使用这一技术达到自己无法被消灭的目的。用《大腕》里的一句经典台词评价,那就是“如果你写的恶意代码不到Rootkit级别,那你都不好意思发布出来炫耀!”,如果当初说Rootkit是木马界里的艾滋病,那么今天的网络世界早已成为一个艾滋病村。
  Rootkit技术是如今这个时代的研究主流,从最初的可以在安全模式里轻易发现并删除的灰鸽子 保护驱动、3721保护驱动等,到现在的无视安全模式照常运行的驱动,它们在Ring0层里实现的功能早已不再是简单的文件隐藏保护手段,而是到了全面负责的地步,例如有一种Rootkit分为Ring3层执行程序和Ring0驱动两部分,
而它的Ring3启动项是一般用户无论如何也找不出来的,因为它的驱动实现的功能是在用户系统每次启动进入桌面,所有启动项都未加载时将Ring3层可执行程序的路径写入启动项,当桌面加载完毕、所有启动项都执行完毕后,驱动又做了一件事情,它将刚才自己写入的启动项删除了,如此一来,不知情的用户根本就不知道自己机器上存在过如此险恶的东西。
  三. 结语:我们还能做什么
  毫无疑问,虽然每个时代的用户都在经历着木马的来袭,但是很明显,早期的用户要过得更舒服一些,因为那时候还没有Rootkit,还没有这么多DLL木马,更没有现在这种满大街会武术的流氓景象。时代在发展,这些技术也会在彼此争斗之中各自获得突破口而往更高的等级发展,只是每个时代的初级用户都不可能和当今的技术同步,于是用户成了技术发展的受害方。并非每个用户都是安全专家,所以我们寄希望于反
病毒 产品,但它毕竟是商业的产品,并非所有用户都能获得足够的更新,如果有一天用户机器上的反病毒 产品成为了傀儡,而用户仍在毫不知情的信任它的扫描结果,那会是什么样的一种情形呢?在这个相对险恶的网络环境里,
我们还能怎样做?
...全文
672 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
小楫轻舟 2010-05-31
  • 打赏
  • 举报
回复
三. 结语:我们还能做什么
  毫无疑问,虽然每个时代的用户都在经历着木马的来袭,但是很明显,早期的用户要过得更舒服一些,因为那时候还没有Rootkit,还没有这么多DLL木马,更没有现在这种满大街会武术的流氓景象。时代在发展,这些技术也会在彼此争斗之中各自获得突破口而往更高的等级发展,只是每个时代的初级用户都不可能和当今的技术同步,于是用户成了技术发展的受害方。并非每个用户都是安全专家,所以我们寄希望于反
病毒 产品,但它毕竟是商业的产品,并非所有用户都能获得足够的更新,如果有一天用户机器上的反病毒 产品成为了傀儡,而用户仍在毫不知情的信任它的扫描结果,那会是什么样的一种情形呢?在这个相对险恶的网络环境里,
我们还能怎样做?

少点击一些无聊的网站。。。
xiaoxiangmao 2010-05-31
  • 打赏
  • 举报
回复
看看,了解下
delphiwcdj 2010-05-31
  • 打赏
  • 举报
回复
不错 。
huanmie_09 2010-05-31
  • 打赏
  • 举报
回复
up!
ytu2006123 2010-05-19
  • 打赏
  • 举报
回复
mark
sjjf 2010-03-29
  • 打赏
  • 举报
回复
mark
Ckajia 2010-03-22
  • 打赏
  • 举报
回复
恩 收藏了!!!
fantcy 2010-03-22
  • 打赏
  • 举报
回复
恩就这段值得看一下
Rootkit技术是如今这个时代的研究主流,从最初的可以在安全模式里轻易发现并删除的灰鸽子 保护驱动、3721保护驱动等,到现在的无视安全模式照常运行的驱动,它们在Ring0层里实现的功能早已不再是简单的文件隐藏保护手段,而是到了全面负责的地步,例如有一种Rootkit分为Ring3层执行程序和Ring0驱动两部分,
而它的Ring3启动项是一般用户无论如何也找不出来的,因为它的驱动实现的功能是在用户系统每次启动进入桌面,所有启动项都未加载时将Ring3层可执行程序的路径写入启动项,当桌面加载完毕、所有启动项都执行完毕后,驱动又做了一件事情,它将刚才自己写入的启动项删除了,如此一来,不知情的用户根本就不知道自己机器上存在过如此险恶的东西。
不错 楼主说的方法我有必要试一下 很好的启动项加载方式
hk_wind 2010-03-22
  • 打赏
  • 举报
回复
看了 以前很不清楚
  • 打赏
  • 举报
回复
为何不讨论一下有一总价木马是从杀毒软件公司里面跑出来的呢?
invail 2010-03-21
  • 打赏
  • 举报
回复
jackyjkchen 2010-03-19
  • 打赏
  • 举报
回复
不喜欢贴文
baihacker 2010-03-19
  • 打赏
  • 举报
回复
mark一下后收藏。
风消云散Fly 2010-03-19
  • 打赏
  • 举报
回复
真长啊.....
dreamhunter_lan 2010-03-19
  • 打赏
  • 举报
回复
看看~
昵称很不好取 2010-03-19
  • 打赏
  • 举报
回复
so long~~
柯本 2010-03-19
  • 打赏
  • 举报
回复
占位先

15,445

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧