9月24日亚洲驰名安然手艺峰会SyScan在北京召开。在大年夜会上Instruder做了《深进思虑UAC背后的安然标题问题》演讲。会后笔者针对这一议题做了具体阐发与测试,就UAC晋升用户权限的的标题问题做了总结与阐发。
研究布景:此刻WIN7把持系统以经大年夜量普及,UAC的安然机制以成为渗入过程中最为较着的绊脚石,UAC会使大年夜量渗入东西掉效,木马没法运行,若何冲破UAC的层层防护是一向以来研究的重点。
研究目标:颠末进修与研究应当实现,在当前用户权限下,绕过UAC提示直接运行法度,并可以实现点窜启动项,释放文件到系统目次等功能,而这一过程必需在用户没有肆意发觉的环境下完成。
研究方案
1、白名单机制:从用户账户节制对权限进行呵护的根基过程可以看到,在用户以治理员权限运行法度的过程中,用户账户节制在向用户进行提权扣问前,将会先查询本地系统中的白名单以决定是 否直接放行,是以,白名单机制是用户账户节制中的一个首要部门。用户账户节制限制着法度利用高级权限才能进行的把持,可是,如许的机制一样也会对系统本身的法度造成影响,微软也不希看系统法度的运行也扣问用户,因为他们本身是安然的。是以,微软则在 UAC 中添加了白名单机制,即在系统中记实有一张表单,对表单中的系统法度,将不限 制其直接晋升到治理员权限。系统中的白名单法度有多个,此中,msconfig、taskmgr、perfmon、cleanmgr 等平常平凡常常利用的法度都在此中。
2、实现直接提权:比较常常利用的操纵系统法度的编制是操纵系统动态加载 DLL的特点,在系统中还有一份名单为 KnownDlls,当一个法度需要动态加载 DLL 的时辰,会先在这份名单当中进行查找,假定找到则加载响应路径的DLL 文件,假定没有找到则遵循当前目次、 System32 目次的挨次进行查找,是以假定能找到一个法度动态调用的 DLL 文件不在KnownDlls 中,而在 System32 下面,则可以捏造一个响应的 DLL,来实现借助其他法度来 履行需要的把持。在所有白名单法度中,正好有如许一个法度,即 sysprep.exe,它的位置为 System32/sysprep/,而它在启动时,会动态加载一个 CRYPTBASE.DLL,这个 DLL 在 System32 下面,是以 sysprep.exe 会在当前目次寻觅的时辰加载掉败,继而转到 System32 目次查找, 试着姑且生成一个假的 CRYPTBASE.DLL 放在 sysprep 文件夹下,在 sysprep.exe启动时,将加载假的 CRYPTBASE.DLL,从而履行我们需要的把持。sysprep.exe 加载假 CRYPTBASE.DLL线程注进白名单中的法度全数都在系统目次傍边,是以要把生成的假 DLL 复制到法度目次中, 将会因为权限标题问题而触发 UAC,如许便掉效了。是以,需要出格的编制来把假 DLL 给复制到系统目次内,并且不会触发系统的权限节制。这一步的把持也需要系统白名单的法度来实现,选用的法度为EXPLORER过程,起首利用长途线程的编制把DLL注进到EXPLORER过程,然后再经由过程EXPLORER把CRYPTBASE.DLL复制到指定目次UAC不会提示。所有把持完成后启动sysprep.exe我们的DLL就会被加载,从而绕过成功。但这个别例错误谬误也很较着,在注进EXPLORER过程时,杀毒软件已开端存眷了。
SyScan大年夜会中的编制
与传统编制也有近似的地方,议题作者Instruder采取的编制也是白名单的编制但又有不合的地方,很是奇妙,作者利用的编制为操纵把持系统本身的进级法度WUSA.EXE,读取释放文件,这个过程是不会触发UAC的,操纵这个机制可以轻松冲破UAC限制,下面我们一步一步演示实现,起首把wusa.exe找出来,此文件位于 c:\windows\syswow64目次如图1所示。
▲图1
找到这个文件后,运行一下,看一下它的具体利用编制,具体环境如图2所示。
▲图2
找到WUSA.EXE后我们还要找一个 MSU的文件用来做测试用,我从本身电脑中随便搜刮一些MSU文件出来如图3所示。
▲图3
到今朝为至预备东西根基就需了,我们来做尝试,利用WUSA.EXE把一个MSU文件释放一下,看可否成功,尝试编制以下,复制一个MSU文件到D:\TEMP目次,然后在CMD下切换目次到c:\windows\syswow64,最后运行wusa.exe d:\temp\msu.msu /extract:d:\temp 这时候看到一个很快的进度一闪而过,我比较痴顽没能抓下图来,往D:\TEMP目次看一下是甚么环境如图4所示。
▲图4
可以看出文件以成功释放,如许很好,下一步继续尝试,把释放目次点窜一下,直接释放到系统目次WINDOWS下,看会若何表示,履行wusa.exe d:\temp\msu.msu /extract:c:\windows
成果很抱负,成功释放并且没有触发UAC提示,而我此时的UAC设置如图5所示。
▲图5
到今朝为至我们可以考虑一些***的工作了,好比释放一些木马病毒DLL劫持的文件到系统目次这模样,不会触发UAC法度,同时木马与病毒也会开机启动了,再继续向下尝试吧今朝思路上是没标题问题了,那么要考虑的是MSU文件了,这个文件看一下是有微软数字签名的如图6、7所示。
▲图6
▲图7
标题问题随之而来,WUSA.EXE会对MSU文件进行签名校验吗?这个我们可以经由过程粉碎数字签名来验证一下,利用16进制编纂东西把MSU文件随便添加几个字节如图8所示。
▲图8
此刻数字签名以经被破解,无效了,如图9所示。
▲图9
清理之前释放的文件后,再运行一下进行释放检测,看下成果,呵呵成果很是抱负,仍然成功释放,这申明 WUSA.EXE对MSU文件是没有签名校验的,我们可以随便捏造MSU文件了。
代替MSU文件
颠末一系列的测试,已知道,只要弄定MSU文件就成大年夜功成功了,msu 文件扩大名与 Windows 更新自力安装法度相联系关系。msu 文件中包含以下内容:
Windows Update 元数据,此元数据描述了 .msu 文件包含的每个更新包。一个或多个 .cab 文件,每个 .cab 文件代表一个更新。一个 .xml 文件,此 .xml 文件对 .msu 更新包进行描述。
看起来仍是蛮复杂的模样,呵呵能不克不及偷偷懒,想其它编制进行绕过呢,微软的东西对本身的文件格局兼容性,应当是不错的,既然是文件包,那就测试微软的CAB包。继续尝试,把MSU文件,换成CAB文件测试,成果很抱负,仍然可以成功,那么我们的后续工作就很简单了,只要把想释放的文件紧缩到CAB包,再操纵上述编制便可以成功释放了,并且全部过程很是安闲,不会有UAC提示。