本项目是一款USB 数据防泄漏(DLP)系统,用于解决企业内网中敏感数据通过 U 盘等移动存储外泄的安全问题。传统终端安全软件多依赖应用层 Hook,易被绕过且无法覆盖底层写入通道。本项目通过内核层实时拦截 USB 存储设备的文件写入操作,实现对数据外发行为的精确管控。
系统核心功能包括:敏感数据实时检测(支持关键词、身份证号、手机号、银行卡号、邮箱地址五种规则类型)、关键词动态管理(终端可实时增删查自定义关键词并同步到驱动)、规则开关控制(各检测类型可独立启用/停用)、拦截日志上报(驱动拦截后通知终端展示告警)。业务流程为:用户向 U 盘复制文件 → 驱动在内核层 PreWrite 回调中扫描写入内容 → 命中敏感规则即拒绝写入并记录日志 → 终端实时展示拦截详情。
本项目为个人独立实现,采用内核态驱动 + Qt 用户态终端双组件架构。内核驱动基于 Windows Filter Manager(minifilter)框架,使用 C/WDK 开发,在 PreWrite 回调中拦截 USB 存储设备的文件写入操作,完成敏感数据检测与实时拦截;用户态终端使用 Qt/C++ 开发,通过 FilterConnectCommunicationPort 与驱动建立双向通信,负责规则配置下发、关键词动态管理和拦截日志展示。
个人独立完成了驱动端全部功能模块:多规则并行扫描引擎(支持 UTF-8/UTF-16LE 双编码自动识别)、关键词动态链表管理、USB 卷识别与过滤、内核-用户态通信(FltSendMessage/FilterGetMessage)。同时完成了 Qt 终端全部功能:通信端口连接管理、listener 异步消息线程、关键词 CRUD 界面、拦截日志实时展示、检测规则开关控制。实现了从驱动安装到终端交互的完整闭环。
实现过程中的核心难点包括:驱动与用户态通信缓冲区大小不匹配(AKESO_NOTIFICATION 实际 10268 字节,FilterGetMessage 持续返回 ERROR_MORE_DATA),通过精确核算结构体偏移将缓冲区从 8KB 扩容至 11KB 解决,使消息接收成功率从 0% 提升至 100%;大文件关键词漏检问题,通过删除 AKESO_MAX_SCAN_SIZE 硬编码 64KB 限制,改为写入块全量扫描,确保 10MB 以上文件任意位置关键词均可被检测;身份证号被误报为银行卡的问题,引入 Luhn 校验算法,将 18 位数字的误报率从 100% 降至 0%;IRP 完成后同步通知导致的 0x801F0020 错误,通过终端侧错误降级处理消除告警刷屏。