危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2306 浏览20580842

贯彻落实木马的启动“精神”

宽带拨号曰:肉鸡是目的,木马是动力,启动是前提!我们精心编写的木马如果在启动环节就被杀毒软件扼杀在摇篮里,那么就真的是“出师未捷身先死”了!

当我们放学回到家,激动的按下电脑开关时,电源就会马上向主板供电,起初电压在激荡的前进中并不稳定,CPU会引导并发出一个重置信号,等到电压认识到错误并修正后,电脑才会快步的迈向“启动”这个目标,同时CPU也会从FFFOH地址处开始执行,这正是BOIS的地盘。一且这时候发生了任何错误,BOIS纠错委员会的同志们都会通过蜂鸣器来发送通知并要求“整改”,接下来就会检测硬件的完整性,也就是我们通常所说的“自检”了。自检报告会全部显示在监视器的屏幕上,这也就是为啥开机后会有那么多的参数指标了。其实在检测这部分会查阅成千上万个单位,在找出了问题或得出了理论后,就会立刻下放到“地方”来实践,系统BOIS开始读取主引导记录,提取活动分区并引导记录,这时候地方政府Windows同志就会派出有关部门来接收BOIS发送过来的响应上级“会议”的重要精神了。

Windows会立刻召开部委扩大会议,参加会议的有:图形用户界面部(GUI)、驱动和应用程序接口保障部(SYS、API)等。会议的议题就是内核加载、内核ntoskrn1.exe以及硬件抽象层hal.dll载入内存进行再教育。根据启动顺序首先加载驱动设备,然后是服务,其次是内核启动会话管理器也就是SMSS.exe。这时候会议进行了分组讨论,创建系统环境变量以及创建虚拟内存页面文件。部委会议结束后,大会书记处书记Winlogon.exe开始接手调研,这时候已经是用户登录界面了,同时还会启动服务子系统services.exe以及本地安全授权lsass.exe。至此,“中央精神”就完全落实到了“基层”,Windows就成功启动了,以上这些只能算是浅谈,实际上的启动过程要抽象得多。

根据上面的启动顺序我们可以得知,首先是驱动其次是服务最后才是程序,目前各类木马的启动方法基本上都是在加戴过程中进行劫持来做文章的。就Windows启动而言,大致有写入系统配置文件inf启动法、菜单启动法、写注册表启动法、创建服务法、伪造驱动,当然还有比较另类的劫持应用程序启动等,为了照顾广大的VB新手,本文我们就使用VB来介绍启动木马的方法。

一、菜单启动法

Windows启动后会自动运行“C:\Documents and Settings\Administrator\「开始」菜单\程序\启动”下的应用程序。

这样就可以把木马复制到启动文件夹了,电脑重启后就会自动启动。当然这种技术早已过时,杀毒软件可以轻易的检测出来,不过瞒天过海依然是《孙子兵法》的一计。

二、注册表启动法

我们可以把注册表简单的理解为Windows数据库,它记录着系统和应用程序的重要设置信息,就好比在网站入侵SQL注入,插入“<%execute request(“value”)%>”连接后门一样,我们在注册表的一些Rum项、AutoRun项中来添加一条木马的路径,这样也能达到自动启动的目的。

不过目前的杀毒软件具有在SSDT全局监控注册表的基本防护,因此这种写入方法是会被拦截的,好在目前也有很多干扰杀毒软件防护的技巧,写入成功了。

三、劫持应用程序启动法

从严格意义上说,这并不能算是一种系统自启动方法,而更应该算是一种通过对第三方程序劫持路径从而实现自启动的方法,比如劫持常用的QQ等,它实质上还是操作注册表的Image File Execution Options,即IFEO劫持。关于映像劫持的实现方法非常简单,关键在于是否能过主动防御,以后有机会的话我再详细介绍过主动的方法。

IFEO本意并不是“劫持”,而且管理映像文件执行参数,简单的说就是一个文件指向了“管理委员会”,只是我们暗箱操作,修改了“会议精神”,这样一旦运行了QQ就会弹出我们的木马了。

四、创建服务启动法

服务是后台运行的,相比注册表有着更好的隐蔽性,services.msc可以查看电脑中的服务信息。使用VB创建服务其实质就是创建文件流,生成一个inf脚本,最后再使用ShellEcecute来实现装载任务,从而达到创建服务并运行程序的目的,脚本内容如下:

创建为inetsvr.inf文件,其中ServiceType为服务类型,设置0xl0为独立进程服务,设置0x20为共享进程服务。StartType为启动类型,0代表系统引导加载,1代表os初始化加载,2代表服务控制管理器自动启动,3代表手动启动,4代表禁用。ErrorControl为错误类型,0表示忽略,1表示执行并警告,2表示切换到LastKnownGood最后一次保存设置,3表示系统蓝屏并显示错误。ServiceBinary为服务程序设置,%11%表示system32目录,%10%表示系统目录(WINNT或Windows目录),%12%为驱动目录system32\driv。

在Windows下使用“Shell “rund1132.exe setupapi,InstallHinfSection DefaultInstall 128 c:\inctsvr.inf”,vbNormalFocus”,而在WindowsXP下则使用“ShellExecute Me.hwnd,“install”,”c:\inetsvr.inf”,””,””,5”,所以我添加了一个ShellExccute API声明。程序运行后会在c盘根目录下生成inetsvr.inf并且执行安装,查看services.msc可以看到服务已经创建了。当然, 服务启动的成功率并不是很高,也存在着启动失败的问题,并且360对服务创建的监控也非常的严密。

五、userinit启动法

还记得我在上面介绍的系统启动大会吗?大会书记处书记就是Winlogon,其实还有一个助理,她叫uscrinit.exe,负责创建svchost.exe进程,创建完成后就下班走人,uscrinit.exe进程就会自动结束。同时Userinit还要帮助Winlogon管理启动顺序,在启动大会中,杀毒软件同志是没有资格列席会议的,所以userinit要优于杀毒软件的启动。Userinit.exe的“家”是住在注册表的“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit”小区,然而userinit的家是个合租房,项数据“C:\WINDOWS\system32\userinit.exe,”的后面有个逗号来分隔,在这个分隔后面是可以添加多个程序的。

Userinit启动时目前比较流行的一种启动方式,隐蔽性提高到了一定程度,而且在启动顺序上也要优先于杀毒软件,总体来说还是不错的。

其实本文也算是比较一般的ring3启动方式浅谈,仅仅是在注册表、服务等这些常见的项目的暗箱操作,更上一个台阶的自启动思路就是movefile和movefileex的配合,以及重命名注册表项过主动的方法。另外,DLL注入也是一种非常不错的方法,比如注入到SMSS\Winlogon、services、lsass这些“官僚”程序中去,但遗憾的是,VB在历史发展的长河中也存在着一定的局域性,比如驱动自启动方法以及rootkit技术,还有比较概念化引导自启动等,这些就需要使用Delphi或者C来向着ring0级进行曲折的探索了!

相关推荐