Windows HIPS防护面

1. 防护范围

Windows HIPS (Host Intrusion Prevent System) 主机入侵防御系统核心部分可以归纳为3D,即AD(Application Defend,应用程序防御体系)、RD(Registry Defend,注册表防御体系)和FD(File Defend,文件防御体系)。另外还有ND(Network Defend,网络防火墙)及DD(Device Defend,设备/外设防护),后两者也算是管控的范畴

2. AD

Windows的用户权限管理比较宽松,AD防护不仅复杂还面临较大的攻击面:

针对AD防护,仅利用系统内核层回调很难达成全面防护,只有当攻击已发生且已经成功的情况下才能发现攻击,此时恶意攻击已然达成。AD防护的短板极有必要采用R0或R3 HOOK的方式予以弥补和加固。

操作 方式 说明
创建 - 通用回调可以在进程启动时得到通知,但在“进程为什么会启动”的原因上缺少必要信息,R0/R3 HOOK可以作为必要的补充手段来实现全方面的进程监控
普通进程 在进程加载阶段可侦测,可采用手段:FD及通用回调
脚本程序 可侦测,如cmd batch、powershell、python及WScript或CScript等,可侦测到解释程序的启动及相关命令行参数
计划任务 可侦测,可通过父进程判断是不是计划任务,但计划任务的创建无从感知。当然计划任务的创建亦可从文件系统层感知并发现,但此方式只是个间接方案
服务创建及修改 加载时通过进程回调可侦测,服务创建及修改可通过RD侦测
驱动创建及修改 同服务
WMI串链 可侦测新进程启动,但不能定位由谁创建
DCOM串链 可侦测,但不能定位原始启动进程
DDE加载 可侦测
MSI安装拦截 可侦测
PICO/WSL进程 可发现、可拦截(Win10系统)
...
结束 - 通用回调可以在得到进程退出通知,但时机上已经太晚了;只能通过R3或R0 HOOK实现更早和更好时机上的拦截
窗口消息 通过SendMessage/PostMessage/PostThreadMessage方式直接发送退出消息
动作模拟 通过模拟按键及鼠标输入,直接发送ALT+F4或者鼠标点击事件
结束进程 TerminateProcess/NtTerminateProcess
停止或结束线程 SuspendThread/TerminateThread/ NtSuspendTHread/NtTerminateThread
调试模式 NtDebugActiveProcess DebugSetProcessKillOnExit ...
job调度 通过AssignProcessToJobObject及TerminateJobObject强制关闭进程,或通过job作业限制进程的执行调度
WMI利用
WinStation
执行劫持 通过远程线程、APC或SetThreadContext将流程导向ExitProcess
资源耗尽 耗尽进程的Handle/VM资源等以造成程序运行错误
镜像破坏 通过VirtualProtectEx改变关键页面属性至PAGE_NOACCESS等,或通过WriteProcessMemory进行破坏
内核攻击 方式非常多,不在我们考虑之列
...
注入 - 在R3 HOOK统一框架设计中有详细描述,在此只简单列举常用方式。通过模块加载系统回调可以感知注入事件的发生,但不能直接拦截
APC注入 R0及R3均可攻击,除R0/R3 HOOK外没有好的方案
远程线程注入 R0及R3均可攻击,可通过线程创建回调侦测到
消息钩子 可通过模块加载侦测,但无法溯源至“消息钩子”
线程Context劫持 R0及R3均可攻击,不可侦测,只能采用HOOK方案
内存写入 R0及R3均可攻击,不可侦测,只能采用HOOK方案
UserModeCallback 不可侦测,只能采用HOOK方案
Section Un-mapping 不可侦测:UnMapViewOfSection/NtUnmapViewOfSectionEx
SetWindowLong[Ptr]注入 不可侦测,只能采用HOOK方案
打印、输入法注入 可通过模块回调侦测到,但无法溯源
DLL劫持 DLL搜索路径篡改、DLL文件替换等
...
其它 - 隐私窃取、信息泄漏
消息拦截 不可侦测
KeyLogger 一般均是通过DLL注入实现
白利用、提权、沙箱逃逸 发现与拦截均有难度

3. RD

RD防护通过注册表操作回调基本可以达成我们针对注册表操作的监控、审计及拦截的需求。注册表回调操作自Windows XP系统之后均有支持,但XP系统的支持并不完善,有可能需要采用OB HOOK等方式以弥补回调功能的缺失。

Vista之后系统针对注册表操作增加了事务处理,WDK已有演示程序。

操作 前置回调 后置回调
键删除 RegNtPreDeleteKey RegNtPostDeleteKey: SRV2003
值创建、改变 RegNtPreSetValueKey RegNtPostSetValueKey: SRV2003
值删除 RegNtPreDeleteValueKey RegNtPostDeleteValueKey: SRV2003
键属性修改 RegNtPreSetInformationKey RegNtPostSetInformationKey: SRV2003
键改名 RegNtPreRenameKey RegNtPostRenameKey: SRV2003
子键枚举 RegNtPreEnumerateKey RegNtPostEnumerateKey: SRV2003
值枚举 RegNtPreEnumerateValueKey RegNtPostEnumerateValueKey: SRV2003
获取键信息 RegNtPreQueryKey RegNtPostQueryKey: SRV2003
值内容提取 RegNtPreQueryValueKey RegNtPostQueryValueKey: SRV2003
RegNtPreQueryMultipleValueKey RegNtPostQueryMultipleValueKey: SRV2003
子键创建 RegNtPreCreateKey RegNtPostCreateKey
子键创建 RegNtPreCreateKeyEx: SRV2003 RegNtPostCreateKeyEx: SRV2003
子键打开 RegNtPreOpenKey RegNtPostOpenKey
子键打开 RegNtPreOpenKeyEx: SRV2003 RegNtPostOpenKeyEx: SRV2003
子键关闭 RegNtPreKeyHandleClose RegNtPostKeyHandleClose: SRV2003
RegNtPreFlushKey: VISTA RegNtPostFlushKey: VISTA
RegNtPreLoadKey: VISTA RegNtPostLoadKey: VISTA
RegNtPreUnLoadKey: VISTA RegNtPostUnLoadKey: VISTA
安全描述符提取 RegNtPreQueryKeySecurity: VISTA RegNtPostQueryKeySecurity: VISTA
安全描述符设置 RegNtPreSetKeySecurity: VISTA RegNtPostSetKeySecurity: VISTA
RegNtPreRestoreKey: VISTA SP2 RegNtPostRestoreKey: VISTA SP2
RegNtPreSaveKey: VISTA SP2 RegNtPostSaveKey: VISTA SP2
RegNtPreReplaceKey: VISTA SP2 RegNtPostReplaceKey: VISTA SP2
RegNtPreQueryKeyName: WIN10 RegNtPostQueryKeyName: WIN10
RegNtCallbackObjectContextCleanup: VISTA

4. FD

针对FD的防护将基于Windows FS Mini Filter架构实现,Windows FS Mini Filter可支持Win2k SP4、XP SP2及最新的Windows操作系统。XP及Win2k系统上的支持最新版本Windows的支持有些差别,在实现时要多加注意。另外Vista之后文件操作事务的支持增加了攻击面,使得针对文件的攻击手段更加隐蔽,因此文件事务操作的支持是必须的。

Mini Filter框架不仅可对本地及网络文件进行监控,亦支持邮槽及命名管道的操作监控,后期可根据实际需求进行灵活扩展。

操作 描述 备注
IRP_MJ_CREATE 文件打开、删除、覆写(清空)操作
IRP_MJ_CLEANUP 文件句柄关闭
IRP_MJ_CLOSE
IRP_MJ_CREATE_MAILSLOT 只针对邮槽驱动
IRP_MJ_CREATE_NAMED_PIPE 只针对管道驱动
IRP_MJ_DEVICE_CONTROL 与应用层通信、存储设备通信
IRP_MJ_DIRECTORY_CONTROL 目录项管理
IRP_MJ_FILE_SYSTEM_CONTROL
IRP_MJ_FLUSH_BUFFERS
IRP_MJ_INTERNAL_DEVICE_CONTROL
IRP_MJ_LOCK_CONTROL byte range lock(flock)支持
IRP_MJ_PNP 设备热插拔处理
IRP_MJ_QUERY_EA EA数据流处理
IRP_MJ_QUERY_INFORMATION 文件信息处理
IRP_MJ_QUERY_QUOTA 用户Quota支持
IRP_MJ_QUERY_SECURITY 安全属性及安全描述
IRP_MJ_QUERY_VOLUME_INFORMATION 卷属性操作
IRP_MJ_READ 读操作
IRP_MJ_SET_EA EA创建或写入
IRP_MJ_SET_INFORMATION 设置文件信息、改名、删除文件等
IRP_MJ_SET_QUOTA 设置用户Quota
IRP_MJ_SET_SECURITY 设置安全描述符
IRP_MJ_SET_VOLUME_INFORMATION 设置卷属性、卷标信息
IRP_MJ_SHUTDOWN 关机事件
IRP_MJ_SYSTEM_CONTROL WMI
IRP_MJ_WRITE 写操作
IRP_MJ_ACQUIRE_FOR_CC_FLUSH 锁操作回调
IRP_MJ_ACQUIRE_FOR_MOD_WRITE 锁操作回调: mmap
IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION 锁操作回调: Section首次创建
IRP_MJ_FAST_IO_CHECK_IF_POSSIBLE Fast i/o调用检测
IRP_MJ_MDL_READ MDL i/o,一般用于SRV
IRP_MJ_MDL_READ_COMPLETE
IRP_MJ_MDL_WRITE_COMPLETE
IRP_MJ_NETWORK_QUERY_OPEN
IRP_MJ_PREPARE_MDL_WRITE
IRP_MJ_RELEASE_FOR_CC_FLUSH 锁操作回调
IRP_MJ_RELEASE_FOR_MOD_WRITE 锁操作回调
IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION 锁操作回调
IRP_MJ_VOLUME_DISMOUNT 卷卸载操作
IRP_MJ_VOLUME_MOUNT 新卷加载操作

5. ND

ND所实现的就是一个轻量的防火墙,可以将五元组信息与进程进行关联。Windows的网络框架随不同的版本有较大的变动,NDIS、TDI、WSK/Winsock Kernel、WFP/Windows Filter Platform

6. DD

DD即设备防护,主要应用于对外设的管控,可实现设备的停用或限制

7. 参考链接

1: Magnesium Object Manager Sandbox, A More Effective Sandbox Method for Windows 7

2: MSDN: Filtering Registry Calls

3: Filter Manager Support for Minifilter Drivers

4: MSDN: REG_NOTIFY_CLASS enumeration

5: CodeMachine: Kernel Callback Functions

6: OSR: Kernel Mode Extensions Driver

7: WDK Samples: Registry Logging

8: https://blog.csdn.net/whatday/article/details/52623878

9: https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/handling-notifications

一条评论

  1. $900/week posting YouTube videos ! Most people think you can’t generate money from YouTube unless you have thousands of followers, but small companies are paying remote workers to upload their pre-made content for them. We’re working with several of these companies to help them find people to fill these roles. Check out the job spec below to see if this could be a good fit for you: http://social-media-jobs.advertising4you.co.uk

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注