权限维持之打造不同的映像劫持后门




0x01 前言css

“映像劫持”,也被称为“IFEO”(Image File Execution Options),在WindowsNT架构的系统里,IFEO的本意是为一些在默认系统环境中运行时可能引起错误的程序执行体提供特殊的环境设定。当一个可执行程序位于IFEO的控制中时,它的内存分配则根据该程序的参数来设定,而WindowsN T架构的系统能经过这个注册表项使用与可执行程序文件名匹配的项目做为程序载入时的控制依据,最终得以设定一个程序的堆管理机制和一些辅助机制等。出于简化缘由,IFEO使用忽略路径的方式来匹配它所要控制的程序文件名,因此程序不管放在哪一个路径,只要名字没有变化,它就运行出问题。nginx


下面呢,咱们聊一聊如何打造不同“映像劫持”后门。shell



0x02 实验环境windows

  • 目标机-Windows 7(192.168.43.94)安全

  • 攻击机-Kali Linux  (192.168.43.9)服务器


0x03 传统“映像劫持”Shift后门微信

    传统“映像劫持”,当用户双击对应的程序后,操做系统就会给外壳程序(例如”explorer.exe”)发布相应的指令,其中包含有执行程序的路径和文件名,而后由外壳程序来执行该程序。事实上在该过程当中,Windows还会在注册表的上述路径中查询全部的映像劫持子键,若是存在和该程序名称彻底相同的子键,就查询对应子健中包含的”dubugger”键值名,并用其指定的程序路径来代替原始的程序,以后执行的是遭到”劫持”的虚假程序。简单点说,当你打开的是程序A,而运行的倒是程序B架构


你们必定都知道映像劫持后门,在如下注册表中的sethc.exe项添加一个Debugger字符值(REG_SZ),而且赋值为cmd.exe的执行路径为C:\windows\system32\cmd.exe,如图:ide


IFEO注册表项:工具

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\


执行命令添加:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"


如上文所述,修改IFEO中的“debugger”键值,用来替换原有程序的执行,键入五下Shift执行sethc.exe程序时会执行cmd.exe程序。


0x04 如何打造不同的“映像劫持”后门呢?

    与上文对比,不同的“映像劫持”后门是怎样的呢?0x03中所讲述的传统“映像劫持”后门是修改IFEO中的“debugger”键值,用来替换原有程序的执行。而不同的“映像劫持”后门,实现的效果是:程序A静默退出结束后,会执行程序B


怀揣着0x04的目标咱们开始筹备。在网上收集资料时发现, Image File Execution Options下能够设置如下值项,其中GlobalFlag是本次测试的关键点:

DebuggerDisableHeapLookasideShutdownFlagsMinimumStackCommitInBytesExecuteOptionsGlobalFlagDebugProcessHeapOnly......


在MSDN的博客上进一步发现GlobalFlag由gflags.exe控制,文章地址:

https://blogs.msdn.microsoft.com/junfeng/2004/04/28/image-file-execution-options/


下载gflags.exe开始研究,在Silent Process Exit这个选项卡中发现了挺有趣的东西。根据微软官方介绍,从Windows7开始,能够在Silent Process Exit选项卡中,能够启用和配置对进程静默退出的监视操做。在此选项卡中设定的配置都将保存在注册表中。


填写如上图配置后点击应用,开始测试。使用Process Explorer进行检测进程的变化发现键入五下Shift执行时,先执行sethc.exe程序,当sethc.exe程序静默退出时,执行cmd.exe程序,运行效果以下:


0x05 来看一看它的原理

进一步分析,发现实际上是工具帮咱们添加并修改了IFEO目录下sethc.exe的GlobalFlag值,如图:


以及SilentProcessExit下ReportingMode和MonitorProcess两个项值,如图:


那么,咱们只须要需改对应的注册表便可:

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v GlobalFlag /t REG_DWORD /d 512
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\sethc.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\sethc.exe" /v MonitorProcess /t REG_SZ /d "C:\windows\system32\cmd.exe"


0x06 接下来,看下最终效果

那么,咱们能够修改上文中MonitorProcess值来放咱们的后门,例如Python反弹shell,配合五下Shift就能够神不知鬼不觉的进行反连。 键入五下Shift后正常弹粘滞键,关闭以后执行咱们的Python代码, 如图:


咱们来看下GIF动图效果:


0x07 如何“破”这种权限维持手法

(1) 流量方面:

服务器主动请求攻击机,如图:

随后,三次握手创建链接,所以当咱们看到异常请求或链接时可进行防护措施。


(2) 系统配置方面:

微软windows远程桌面服务为咱们提供了两个配置(SecurityLayer、UserAuthentication),以下:


其中UserAuthentication参数可指定在创建远程桌面链接以前如何对用户进行身份验证,以下:


翻译:

用户鉴权即UserAuthentication这个参数的做用,官方文档说明以下:
0:说明是进行远程桌面前不须要用户身份验证。1:说明是进行远程桌面前须要进行用户身份验证。

那么,当咱们将该参数设置为1时则可防止黑客利用远程桌面界面键入Shift从而达到防护效果,能够直接执行如下命令修改UserAuthentication注册表值,咱们看下效果:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f


发现咱们必须密码输入正确才能弹出远程桌面。


最后,你们能够明白一个道理“不知攻焉知防”,攻击者经过改变UserAuthentication参数方便控制,咱们也能够经过它提升防护。


0x08 参考文章

https://blogs.msdn.microsoft.com/junfeng/2004/04/28/image-file-execution-options/

https://blog.csdn.net/johnsonblog/article/details/8165861

http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi

https://oddvar.moe/2018/04/10/persistence-using-globalflags-in-image-file-execution-options-hidden-from-autoruns-exe/




本文分享自微信公众号 - 贝塔安全实验室(BetaSecLab)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索