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
$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