Tips +1
实现原理
通过上篇的映像劫持之debugger劫持,我们可以知道他的原理如下:
当我们双击运行程序时,系统会查询该IFEO注册表,如果发现存在和该程序名称完全相同的子键,就会查询对应子健中包含的“debugger”键值名,如果该参数不为空,系统则会把 Debugger 参数里指定的程序文件名作为用户试图启动的程序执行请求来处理。这样成功执行的是遭到“劫持”的虚假程序。
在通过上面的debugger劫持中,我们会发现它会破坏原有程序的正常运行,导致被劫持的程序无法正常使用,在这种情况下,很容易被管理员发现或者一定程度上影响系统业务运行。那么我们可以通过修改Image File Execution Opionts 中 GlobalFlag 子项来解决这个问题。将该项的值修改为512,让程序退出后在运行指定的程序,这样就更加的隐蔽。
操作步骤
1、根据目标使用情况,确定要劫持的目标进程,比如notepad.exe
2、修改注册表项,命令如下:
reg add "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsnotepad.exe" /v GlobalFlag /t REG_DWORD /d 512
#设置GloabalFlag 值为512
reg add "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionSilentProcessExitnotepad.exe" /v ReportingMode /t REG_DWORD /d 1
#设置ReportingMode为1
reg add "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionSilentProcessExitnotepad.exe" /v MonitorProcess /d "C:WindowsSystem32cmd.exe"
#设置程序退出后要运行的程序
3、模拟用户正常打开文本编辑器
打开过程中,不会执行cmd.exe,但是保存退出后,会立刻执行cmd,说明劫持成功。
我们查看注册表可以发现,注册表项中 GlobalFlag 值为512,则表示被劫持的程序将会正常运行。
实战中,我们可以将劫持的程序替换成登录userinit.exe ,
如何排查
1、查看注册表
镜像劫持需要在注册表中添加辅助功能的表项,所以检查“HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Option”注册表路径下的程序名称,一些常用的辅助功能表项如:Utilman.exe,stch.exe,osk.exe等等
排查Image File Execution Option下的globalflag值是否正常
安全防御
1、对于这种后门正常的杀软都会拦截。当然也存在被绕过的情况。比如通过修改Image File Execution Options 名字。
2、由于此类攻击的恶意代码要修改Image File Execution Options,首先要有权限才可读写,于是,我们可以通过限制用户对该注册表的读写权限,来阻止镜像劫持。打开注册表编辑器,定位到HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionImageFileExecutionOptions,选中该项,右键→权限→高级,取消administrator和system用户的写权限即可。
3、对于有可能有安全隐患的不必要表项可以选择删除,直接禁用辅助功能即可。打开注册表编辑器,定位到HKEY_LOCAL_MACHINE SOFTWARE Microsoft WindowsNT CurrentVersion ,把“ImageFileExecutionOptions”项删除。
End
“点赞、在看与分享都是莫大的支持”
原文始发于微信公众号(贝雷帽SEC):Windows—映像劫持之GlobalFlag劫持
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论