之前发了几篇文章,基本都是围绕漏洞攻防这一热点话题展开讨论,最初的打算是将漏洞攻防涵盖的主要方向分作几个专题写成系列文章,也是这么做的,原以为步步为营各位同好能更容易形成整体观感,没想最近好几位同学问到的同一个问题却让我发现框架是有了,倒是基没有筑牢。这个问题就是:现在有了漏洞,那木马是不是没用了?这是个问题。如果你看到这笑了,请不要笑,这确实是个问题。当然了,对于这个问题本身,答案是很明确的:不是。如果进一步问,为什么不是呢?这个问题我代为请教了几位前辈,回答基本都是“不是一回事嘛”,比较笼统,我的回答是:因为是不同的阶段。这样自然会进一步再问,那到底有几个阶段呢?这个正是前文所说的“根基”,我们都顾着张嘴就说技术,譬如说漏洞,譬如说木马,多但技术在整个过程中所处的背景以及它所在的位置却都不说。
整个过程,这里指的是渗透测试(penetrationtest),这个颇为学究气的词在从良以前都叫入侵或者干脆就是一个字“黑”(hack),细究起来有些词都有微妙的区别但这篇是技术文就不作区分了。首先必须负责任的说,计算机科学作为一门学科,其理论除了在算法等一些和其它学科深度交叉的方面外,总体是落后于实践的,现在对渗透测试的阶段划分是没有一个不证自明或者普遍公认的标准,特别是商业化以后,美国出版的一些书对渗透测试的环节还牵涉到管理和法律方面的问题,至少也包括情报收集等工作(俗称踩点)。美国人常说what、why、how,how是放在最后的,也就是说,怎么黑是最后才关心的问题,而黑什么才是天字第一号要搞清楚的。不过这里我们狭隘一点,假设已经确定了我们要黑什么,客是渗透什么,现在来讨论怎么渗透的几个阶段。我个人把渗透测试分成三段。不妨将渗透过程看成一个“程序”,需要强调的是,这是一个加引号的概念上的程序,毕竟渗透测试不一定要生成独立的可执行文件,甚至不一定需要一个独立的进程,又或者依赖好几个不同的进程,只不过我们需要计算机完成我们想办的事都依靠程序,那不妨就把这个办事的过程抽象成一个“程序”。既然是程序,自然就会有三个阶段:运行前、运行时和运行后,这三个阶段都是相对独立了,但在流程上又相辅相成。请再一次注意,这套“三段论”解释框架是木羊独创,目的是便于理解,至于考试怎么答那得看课本,套用木羊的解释框架多半是要零分的。
运行前阶段主要干一件事,提权。写渗透测试和漏洞攻防的文章都会与一个词深度关联,这个词就是提权。提什么权呢?都没有说,如果套用木羊的“三段论”就很好理解了,提运行权。我们的程序要运行,首先得有运行权。至于运行什么,那就得看我们的程序依靠什么,譬如说木马,木马是个正儿八经的可执行文件,要运行那就得有运行可执行文件的权限。怎么取得这个权限呢?技术一点可以通过找漏洞,怎么通过漏洞运行可执行文件之前说了很多就不展开了,当然也可以通过社工,详细步骤建议参悟卡耐基的《人性的弱点》,譬如说将木马改名为“优衣库完整视频压缩包.exe”让哪个色鬼点击。运行前这个阶段强调的是权限,让想要启动的“程序”能够启动起来,并不关心运行什么。我是黑帽,我拥有运行权可以运行木马,但我是白帽,我拥有运行权则只是运行计算器。不过也不要简单地等同于启动可执行程序,这与运行时的需求有关,如果“程序”需要重启,那么这里的运行权就必须包括重启的权限,如果程序依赖第三方软件,譬如说某个系统服务的配置,那么这个运行权也需要包括修改这个系统服务配置的权限。运行前阶段是拥有某个能力或者解除某项限制的过程,但用不用这个能力,则是后面的事。漏洞挖掘正是运行前阶段的工作,至于用不用、怎么用,那得看后两个阶段,运行时和运行后了。运行时很好理解,就是做爱做的事情,“人脑爱用电脑做什么”属于社会心理学范畴,我不便多插嘴,非要掺点技术,那只能是逃避杀软和ARK(anti-rootkit)的监控,怎么逃自然是各显神通,以木马为例吧,反弹端口和线程插入都属于这一类技术,现在“三无”(无端口无进程无可执行文件)产品也早已满天飞了,当然这也是个反复较量的过程,如果上升到理论高度,那就是保护好第一阶段提好的权,保持程序持续运行直至达到目标。
最后是运行后,这个阶段要做的事一点也不比前两个阶段容易,既要藏得深,在这一次运行结束到下一次运行开始之前,这个时间段不知道有多长,但不管有多长,都必须保证第一阶段提好的权不被拿走,真的非得藏于九地之下不可。又要醒得快,能够根据指令及时地再次启动“程序”,有时候为了达到这一目的,第一阶段必须得额外取得一些权限才能保证完成。运行后阶段是个最容易被忽视的阶段,但却肩负着承前继后的重任,涉及的技术不少,这里暂且先只开题罢。
最后通常都是总结,不过我想说的是,分阶段这种工作通常只有两个目的,一个是便于考试,总得有点什么概念才能死记硬背对吧,一个是便于理解,本文就是这个目的,但对于一次渗透测试,要做的工作全都由同一件重要的事决定,重要的事要所三遍,那就是需求需求需求,而这三个阶段,只不过是按先后顺序,将实现需求的手段进行归纳罢了。