工具架构
- FalconEye驱动器是一种按需加载的驱动程序;
- 初始化包括通过libinfinityhook设置回调和syscall钩子;
- 回调维护从跨流程活动(如OpenProcess)构建的Pids的映射,但不限于OpenProcess;
- 随后的回调和syscall钩子使用这个Pid映射来减少处理中的噪声;
- 作为降噪的一部分,syscall钩子可以过滤掉相同的进程活动;
- 检测逻辑分为多种子类,即无状态(例如:Atombombing)、有状态(Unmap+Overwrite)和浮动代码(多种技术实现的Shellcode);
- 针对有状态的检测,syscall钩子会记录一个ActionHistory(历史活动),比如说,它会记录所有的NtWriteVirtualMemory调用;
- 检测逻辑具有常见的异常检测功能,如浮动代码检测和远程进程中Shellcode触发器的检测。回调和syscall钩子都会调用这个公共功能来进行实际检测;
需要注意的是,我们的重点一直是检测任务本身,而不是创建一个高性能的检测引擎。
项目目录结构
- .
-
- ├── src
-
- │ ├── FalconEye ---------------------------# FalconEye user and kernel space
-
- │ └── libinfinityhook ---------------------# Kernel hook implementation
-
- ├── 2021BHASIA_FalconEye.pdf
-
- └── README.md
工具要求
- Windows 10 Build 1903/1909
- Microsoft Visual Studio 2019
- VmWare、Hyper-V等虚拟化软件
工具安装
(1) 项目构建
- 使用Microsoft Visual Studio 2019打开解决方案;
- 选择x64作为构建平台;
- 构建解决方案,此时将在“src\kernel\FalconEye\x64\Debug”或“src\kernel\FalconEye\x64\Release”路径下生成sys源码;
(2) 测试设备部署
在虚拟机中安装好Windows 10 Build 1903/1909;
配置虚拟机以测试未签名的驱动程序,使用bcdedit,禁用完整性检测:
- BCDEDIT /set nointegritychecks ON
在虚拟机中运行DbgView,或使用WinDbg开启一个调试连接;
工具使用
- 我们需要将sys文件拷贝到测试设备(Windows 10虚拟机)中;
- 使用OSR加载器或类似的工具,以“按需”加载驱动器的形式加载sys;
- 运行类似pinjectra或minjector之类的注入测试工具;
- 通过WinDbg或DbgView监控调试日志;
项目地址
FalconEye:【GitHub传送门】