揭开木马的神秘面纱

前言

    离冰河二的问世已经快一年了,大家对于木马这种远程控制软件也有了一定的认识,比如:他会改注册表,他会监听端口等等,和一年前几乎没有人懂得木马是什么东西相比,这是一个质的飞跃。但是,在这个连“菜鸟”都会用NETSTAT看端口,用LOCKDOWN保护注册表的今天,难道木马就停步不前,等待我们的“杀戮”么?回答显然是否定的。木马在这一年当中,同样也不断进步,不断发展,他们变得更加隐蔽,更加灵活。本文试图通过分析近一年以来木马软件的发展,向大家介绍木马的最新攻防技巧,从而使大家能够更
加安全地畅游在Internet上。(本文中默认的操作系统为Win2000,默认的编程环境是VC++6.0)

    在过去的一年当中,出过很多有名的木马,SUB7,BO2000,冰河等等,他们都有几个共同的特点,比如:开TCP端口监听,写注册表等等,因此,针对这些特点,也涌现出了不少查杀木马的工具,比如LockDown2000, Clean等,这些工具一般都是利用检查注册表和端口来寻找木马(也有利用特征码来查找的,那种原始的思路我们就不说了,谁都知道,只要源码稍微改改,特征码查询就毫无用处)甚至还出了一些号称能防范未来多少年木马的软件。而在大家的不断宣传下,以下的木马法则已经妇孺皆知:
 
    1、不要随便从不知名的网站上下载可执行文件,不要随便运行别人给的软件;
    2、不要过于相信别人,不要随便打开邮件的附件;
    3、经常检查自己的系统文件、注册表、端口、进程;
    4、经常去查看最新的木马公告,更新自己防火墙的木马库;

    这样看来,第一代木马的特性大家都已经耳熟能详,在这种情况下,作为一个地下工作者,木马的日子会非常难过。那么,木马就这样甘受屠戮,坐以待毙么?人类就这样灭绝了木马这个种族么?不是!木马为了生存,也在不断进化,在我们放松警惕,庆祝胜利的时候,木马已经经历了几次质的突变,现在的木马比起他们的前辈要更加隐蔽,更加巧妙,更难以发现,功能更强大。

    一、关端口
    祸从口出,同样,端口也是木马的最大漏洞,经过大家的不断宣传,现在连一个刚刚上网没有多久的“菜鸟”也知道用NETSTAT查看端口,木马的端口越做越高,越做越象系统端口,被发现的概率却越来越大。但是端口是木马的生命之源,没有端口木马是无法和外界进行通讯的,更不要说进行远程控制了。为了解决这个矛盾,木马们深入研究了Richard Stevens的TCP/IP协议详解,决定:放弃原来他们赖以生存的端口,转而进入地下。放弃了端口后木马怎么和控制端联络呢?对于这个问题,不同的木马采用了不同的方法,大致分为以下两种方法:寄生、潜伏。

    1、寄生就是找一个已经打开的端口,寄生其上,平时只是监听,遇到特殊的指令就进行解释执行;因为木马实际上是寄生在已有的系统服务之上的,因此,你在扫描或查看系统端口的时候是没有任何异常的。据我所知,在98下进行这样的操作是比较简单的,但是对于Win2000 相对要麻烦得多。由于作者对这种技术没有很深的研究,在这里就不赘述了,感兴趣的朋友可以去http://www.ahjmw.gov.cn/cit/或者西祠胡同的WinSock版查看相关的资料。

    2、潜伏是说使用IP协议族中的其它协议而非TCP/UDP来进行通讯,从而瞒过Netstat和端口扫描软件。一种比较常见的潜伏手段是使用ICMP协议,ICMP(Internet控制报文)是IP协议的附属协议,它是由内核或进程直接处理而不需要通过端口,一个最常见的ICMP协议就是Ping,它利用了ICMP的回显请求和回显应答报文。一个普通的ICMP木马会监听ICMP报文,当出现特殊的报文时(比如特殊大小的包、特殊的报文结等)它会打开TCP端口等待控制端的连接,这种木马在没有激活时是不可见的,但是一旦连接上了控制端就和普通木马一样,本地可以看到状态为Established的链接(如果端口的最大连接数设为1,在远程使用Connect方法进行端口扫描还是没有办法发现的);而一个真正意义上的ICMP木马则会严格地使用ICMP协议来进行数据和控制命令的传递(数据放在ICMP的报文中),在整个过程中,它都是不可见的。(除非使用嗅探软件分析网络流量)

    3、除了寄生和潜伏之外,木马还有其他更好的方法进行隐藏,比如直接针对网卡或
Modem进行底层的编程,这涉及到更高的编程技巧。 

    二、隐藏进程
    在win9x时代,简单的注册为系统进程就可以从任务栏中消失,可是在Window2000盛行的今天,这种方法遭到了惨败,注册为系统进程不仅仅能在任务栏中看到,而且可以直接在Services中直接控制停止、运行(太搞笑了,木马被客户端控制)。使用隐藏窗体或控制台的方法也不能欺骗无所不见的ADMIN大人(要知道,在NT下,Administrator是可以见所有进程的)。在研究了其它软件的长处之后,木马发现,Windows下的中文汉化软件采用的陷阱技术非常适合木马的使用

    DLL陷阱技术是一种针对DLL(动态链接库)的高级编程技术,编程者用特洛伊DLL替换已知的系统DLL,并对所有的函数调用进行过滤,对于正常的调用,使用函数转发器直接转发给被替换的系统DLL,对于一些事先约定好的特殊情况,DLL会执行一些相对应的操作,一个比较简单的方法是起一个进程,虽然所有的操作都在DLL中完成会更加隐蔽,但是这大大增加了程序编写的难度,实际上这样的木马大多数只是使用DLL进行监听,一旦发现控制端的连接请求就激活自身,起一个绑端口的进程进行正常的木马操作。操作结束后关掉进程,继续进入休眠状况。

    因为大量特洛伊DLL的使用实际上已经危害到了Windows操作系统的安全和稳定性,据说微软的下一代操作系统Window2001(海王星)已经使用了DLL数字签名、校验技术,因此,特洛伊DLL的时代很快会结束。取代它的将会是强行嵌入代码技术(插入DLL,挂接API,进程的动态替换等等),但是这种技术对于编写者的汇编功底要求很高,涉及大量硬编码的机器指令,并不是一般的木马编写者可以涉足。(晕,我是门都找不到,哪位高手可以指点我一下?)


    三、争夺系统控制权
    木马们并不甘于老是处于防守的地位,他们也会进攻,也会主动出击。WINNT下的溢出型木马就是这样的积极者,他们不仅仅简单的加载、守候、完成命令,而是利用种种系统的漏洞设法使自己成为系统的拥有者-ADMIN,甚至系统的控制者-System。那么,木马利用什么方法能一改过去到处逃亡的面目,从而成为系统的主宰呢?

    首当其冲的显然是注册表:多年驰骋注册表的历史使得木马非常熟悉注册表的构造和特点(你呢,你能比木马更熟悉注册表么)Windows2000有几个注册表的权限漏洞,允许非授权用户改写ADMIN的设置,从而强迫ADMIN执行木马程序,这个方法实现起来比较容易,但是会被大多数的防火墙发现

    其次是利用系统的权限漏洞,改写ADMIN的文件、配置等等,在ADMIN允许Active Desktop的情况下这个方法非常好用,但是对于一个有经验的管理员,这个方法不是太有
效;

    第三个选择是系统的本地溢出漏洞,由于木马是在本地运行的,它可以通过本地溢出的漏洞(比如IIS的本地溢出漏洞等),直接取得system的权限。这部分内容在袁哥和很多汇编高手的文章中都有介绍,我就不再赘述了。(偷偷告诉你,其实是我说不出来,我要是能写出那样的溢出程序我还用在这里......)


    四、防火墙攻防战
    现在,在个人防火墙如此之流行的今天,也许有人会说:我装个防火墙,不管你用什么木马,在我系统上搞什么,防火墙设了只出不进,反正你没法连进来。同样,对于局域网内的机器,原先的木马也不能有效的进行控制(难道指望网关会给你做NAT么?)但是,城墙从来就挡不住木马:在古希腊的特洛伊战争中,人们是推倒了城墙来恭迎木马的,而在这个互联网的时代,木马仍然以其隐蔽性和欺诈性使得防火墙被从内部攻破。其中反弹端口型的木马非常清晰的体现了这一思路。

    反弹端口型木马分析了防火墙的特性后发现:防火墙对于连入的链接往往会进行非常严格的过滤,但是对于连出的链接却疏于防范。于是,与一般的木马相反,反弹端口型木马的服务端(被控制端)使用主动端口,客户端(控制端)使用被动端口,木马定时监测控制端的存在,发现控制端上线立即弹出端口主动连结控制端打开的主动端口,为了隐蔽起见,控制端的被动端口一般开在80,这样,即使用户使用端口扫描软件检查自己的端口,发现的也是类似 TCP UserIP:1026

 ControllerIP:80 ESTABLISHED的情况,稍微疏忽一点你就会以为是自己在浏览网页。(防火墙也会这么认为的,我想大概没有哪个防火墙会不给用户向外连接80端口吧,嘿嘿)看到这里,有人会问:那服务端怎么能知道控制端的IP地址呢?难道控制端只能使用固定的IP地址?哈哈,那不是自己找死么?一查就查到了。

    实际上,这种反弹端口的木马常常会采用固定IP的第三方存储设备来进行IP地址的传递。举一个简单的例子:事先约定好一个个人主页的空间,在其中放置一个文本文件,木马每分钟去GET一次这个文件,如果文件内容为空,就什么都不做,如果有内容就按照文本文件中的数据计算出控制端的IP和端口,反弹一个TCP链接回去,这样每次控制者上线只需要FTP一个INI文件就可以告诉木马自己的位置,为了保险起见,这个IP地址甚至可以经过一定的加密,除了服务和控制端,其他的人就算拿到了也没有任何的意义。对于一些能够分析报文、过滤TCP/UDP的防火墙,反弹端口型木马同样有办法对付,简单的来说,控制端使用80端口的木马完全可以真的使用HTTP协议,将传送的数据包含在HTTP的报文中,难道防火墙真的精明到可以分辨通过HTTP协议传送的究竟是网页还是控制命令和数据?

 

   五、更加隐蔽的加载方式
    记得一年前,大家觉得通过所谓图片传播的木马非常神秘,其实现在几乎人人都知道那只是一个后缀名的小把戏,而绑定EXE文件的木马也随着“不要轻易执行可执行文件”的警告变得越来越不可行,和过去不同是,现在木马的入侵方式更加的隐蔽,在揉合了宏病毒的特性后,木马已经不仅仅通过欺骗来传播了,随着网站互动化进程的不断进步,越来越多的东西可以成为木马传播的介质,JavaScript,VBScript, ActiveX, XML......几乎WWW每一个新出来的功能都会导致木马的快速进化,曾几何时,邮件木马从附件走向了正文,简单的浏览也会中毒,而一个Guest用户也可以很容易的通过修改管理员的文件夹设置给管理员吃上一点耗子药。当我们小心翼翼地穿行在互联网森林中的时候,也许正有无数双木马的眼睛在黑暗中窥视,他们在等待你的一次疏忽,一个小小的疏忽,这将给他们一个完美的机会......
 
  
一点点感想
    入侵高手可能会对于木马的编写和防御不屑一顾,但是,许多入侵事件多多少少会有木马的参与(这个时候,木马程序往往被叫做后门)在最近的微软被黑事件中,入侵者使用的就是一种叫QAZ的木马,实际上,这种木马并不非常高级,甚至不能算是第二代木马(只是一种通过共享传播的蠕虫木马),而正是一只小小的木马,让强大的微软丢尽了脸。要知道:入侵者和黑客不同,对于入侵者来说,入侵是最终的目的,任何手段,只要能最快最简单的进入,就是最好的手段,由于被入侵的用户大多数并不是专业人员,所以木马往往是一个很好的选择。
 
   在撰写本文的过程中,曾经有朋友和我戏言:危言耸听。其实,事实并非如此,在本文中描述的木马,虽然看起来匪夷所思,但是在互联网上大多已经有了样品出现,而且,我相信,一定还有技术含量远远超过上述木马的软件正在开发中。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值