首页
社区
课程
招聘
[原创]minifilter
发表于: 2022-1-16 22:41 29790

[原创]minifilter

2022-1-16 22:41
29790

https://github.com/hkx3upper/FOKS-TROT

Foxtrot是一个实验性项目,且作者对于文件系统等的理解难免会存在偏差,因此可能会产生误导,望读者辩证的学习,并且请读者遵循相关的开源协议。且本项目5月12号以前的版本已作为毕设,如有雷同,纯属雷同((/- -)/)
经过五个月的维护,Foxtrot迎来了第一个稳定版1.0.0.2265版,项目现在是可以稳定运行在Windows 10 x64各版本上的(应该可以),建议大家重新clone一下,不过本版本不支持之前驱动加密过的文件(见第11条)。
P.S. 本来不想更新了,但又想想,还是决定实现一个能稳定运行的版本,省的有bug显得我很菜|•'-'•)و✧

Foxtrot是一个使用minifilter框架的双缓冲透明加密解密过滤驱动,当进程有写入特定的文件扩展名(比如txt,docx)文件的倾向时自动加密文件。授权进程想要读取密文文件时自动解密,非授权进程不解密,显示密文,且不允许修改密文。
桌面端可以发送特权加密和特权解密命令,实现单独加密或解密文件;或者配置进程权限,机密文件夹,需加密的文件类型。

1.建议在Windows 10 x64,NTFS环境运行

2.安装并导入CNG库

3.在Config.c中设置目标文件扩展名,机密文件夹,以及授权进程
4.使用Visual Studio 2019编译Debug x64 Poc驱动,(User、UserDll和UserPanel(这些不影响驱动使用))
5.系统开启测试模式,cmd以管理员身份运行,输入bcdedit /set testsigning on后重启电脑
6.使用DebugView的Capture->Capture Kernel显示驱动日志,如果还是没有输出,修改注册表(可选)

7.如果使用OsrLoader之类的加载器加载驱动,Type请选择Minifilter,也可以使用cmd加载,如下

8.驱动加载以后,测试是否正常工作

9.鼠标右键菜单增加特权加密和特权解密功能(可选)

Wiki

Foxtrot is now available for testing! Please test it and provide us with your valuable feedback and possible bugs.
Discussion
Issue

hkx3upper:(<a href="https://github.com/hkx3upper">@hkx3upper</a>)
wangzhankun:(<a href="https://github.com/wangzhankun">@wangzhankun</a>)

Foxtrot, and all its submodules and repos, unless a license is otherwise specified, are licensed under GPLv3 LICENSE.
Dependencies are licensed by their own.

1.本项目使用双缓冲,授权进程和非授权进程分别使用明文缓冲和密文缓冲; 
2.使用StreamContext存放驱动运行时的文件信息,在文件的尾部使用4KB文件标识尾储存解密所需信息; 
3.使用AES-128 ECB模式,16个字节以内分别在SetInfo->EOF和WriteCachedIo时扩展文件大小到16字节,
  大于16个字节,使用密文挪用(Ciphertext stealing)的方法,避免明文必须分块对齐的问题; 
4.Write和Read使用SwapBuffers的方式进行透明加密解密; 
5.特权加密和特权解密使用重入(Reentry)的方式,使驱动加密解密文件; 
6.在FileRenameInformationEx和FileRenameInformation重命名操作时做处理,
  可以自动加密解密docx,doc,pptx,ppt,xlsx,xls等使用tmp文件重命名方式读写的文件; 
7.注册进程相关回调,使用链表统一管理授权与非授权进程;
  注册进程与线程对象回调,保护进程EPROCESS,ETHREAD对象;对授权进程的代码段进行完整性校验。 
8.设置机密文件夹,文件处于该文件夹下才会透明加密,
  并可以从桌面PocUser配置机密文件夹与需管控的文件扩展名 @wangzhankun 
9.PostOperation统一使用函数FltDoCompletionProcessingWhenSafed(PostRead除外),
  InstanceSetup时使用Dpc+WorkItem回调(封装为PocDoCompletionProcessingWhenSafe),
  避免在DISPATCH_LEVEL时出现IRQL_NOT_LESS_OR_EQUAL之类的蓝屏; 
10.PostClose时使用单独的线程,等待操作该文件的所有授权进程结束以后,
  再重入加密或写入文件标识尾,解决了docx类文件的死锁问题。 
11.将ULONG改成LONGLONG,原则上可以支持4GB以上文件(目前特权加密和特权解密暂不支持4GB以上文件, 
  而且在内存有限的情况下,特权解密有可能会因非分页内存的缺少而失败,不想写了,这里可以放循环里读写大文件)
1.本项目使用双缓冲,授权进程和非授权进程分别使用明文缓冲和密文缓冲; 
2.使用StreamContext存放驱动运行时的文件信息,在文件的尾部使用4KB文件标识尾储存解密所需信息; 
3.使用AES-128 ECB模式,16个字节以内分别在SetInfo->EOF和WriteCachedIo时扩展文件大小到16字节,
  大于16个字节,使用密文挪用(Ciphertext stealing)的方法,避免明文必须分块对齐的问题; 
4.Write和Read使用SwapBuffers的方式进行透明加密解密; 
5.特权加密和特权解密使用重入(Reentry)的方式,使驱动加密解密文件; 
6.在FileRenameInformationEx和FileRenameInformation重命名操作时做处理,
  可以自动加密解密docx,doc,pptx,ppt,xlsx,xls等使用tmp文件重命名方式读写的文件; 
7.注册进程相关回调,使用链表统一管理授权与非授权进程;
  注册进程与线程对象回调,保护进程EPROCESS,ETHREAD对象;对授权进程的代码段进行完整性校验。 
8.设置机密文件夹,文件处于该文件夹下才会透明加密,
  并可以从桌面PocUser配置机密文件夹与需管控的文件扩展名 @wangzhankun 
9.PostOperation统一使用函数FltDoCompletionProcessingWhenSafed(PostRead除外),
  InstanceSetup时使用Dpc+WorkItem回调(封装为PocDoCompletionProcessingWhenSafe),
  避免在DISPATCH_LEVEL时出现IRQL_NOT_LESS_OR_EQUAL之类的蓝屏; 
10.PostClose时使用单独的线程,等待操作该文件的所有授权进程结束以后,
  再重入加密或写入文件标识尾,解决了docx类文件的死锁问题。 
11.将ULONG改成LONGLONG,原则上可以支持4GB以上文件(目前特权加密和特权解密暂不支持4GB以上文件, 
  而且在内存有限的情况下,特权解密有可能会因非分页内存的缺少而失败,不想写了,这里可以放循环里读写大文件)
已测试系统及软件版本: 
Windows 10 x64 1809(17763.2928) LTSC 企业版 [WPS 11.1.0.11365
Windows 10 x64 1903(18362.30) 教育版 [Microsoft Office Professional Plus 2021 x64]
                                    [WPS 11.1.0.11744] [360安全卫士 15.0.0.1061]
Windows 10 x64 1909(18363.592) 教育版  [WPS 11.1.0.11744
Windows Server 2019 DataCenter 1809(17763.379)
已测试系统及软件版本: 
Windows 10 x64 1809(17763.2928) LTSC 企业版 [WPS 11.1.0.11365
Windows 10 x64 1903(18362.30) 教育版 [Microsoft Office Professional Plus 2021 x64]
                                    [WPS 11.1.0.11744] [360安全卫士 15.0.0.1061]
Windows 10 x64 1909(18363.592) 教育版  [WPS 11.1.0.11744

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2022-6-6 22:37 被hkx3upper编辑 ,原因: 更新
收藏
免费 4
支持
分享
最新回复 (11)
雪    币: 2428
活跃值: (2581)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
牛批
2022-1-17 13:48
0
雪    币: 210
活跃值: (1707)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

*

最后于 2022-1-17 14:15 被wx_0xC05StackOver编辑 ,原因: 编辑
2022-1-17 14:11
0
雪    币: 661
活跃值: (1193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
搞过最简单的应用层加解密,驱动没搞出来。Mark下,感谢分享!
2022-1-20 15:02
0
雪    币: 3896
活跃值: (3683)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2022-1-20 17:40
0
雪    币: 160
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢分享。另外,楼主找工作吗?我们这边急需要做minifilter的
2022-1-26 14:38
0
雪    币: 193
活跃值: (630)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我和wangzhankun同学一起开发的稳定版更新了,之前那些版本好像在大家的电脑上无法正常运行,给大家造成了不便。之前clone过的,重新clone一下吧。
2022-6-6 21:50
0
雪    币: 210
活跃值: (1707)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
能自己做肯定是个好事,但是有个疑问你要好好想想,文件尾放私有信息自然是好事,因为访问文件不用重新计算位置,但是为什么市面上几乎所有的商用产品都放在文件头呢?这样做真的没什么问题么,断电的情况考虑了吗!
2022-8-5 11:28
0
雪    币: 201
活跃值: (201)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
看到点歌赞~
2022-11-23 15:14
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
请教大神一个问题,在编译老师您程序的时候(VS2022)会出现如下错误:
      D:\Poc\FOKS-TROT-main\Poc\Poc.inf : warning 1420: [DefaultInstall]-based INF cannot be processed as Primitive.
D:\Poc\FOKS-TROT-main\Poc\Poc.inf(26-26): warning 1421: Section [DefaultInstall] should have an architecture decoration.
D:\Poc\FOKS-TROT-main\Poc\Poc.inf(37-37): warning 1421: Section [DefaultUninstall] should have an architecture decoration.
D:\Poc\FOKS-TROT-main\Poc\Poc.inf(75-75): warning 1205: Section [MiniFilter.DriverFiles] referenced from DelFiles and CopyFiles directive.
2023-6-8 15:20
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
这几个问题不解决,不能提交微软签名
2023-6-8 15:20
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
如果把 inf文件修改成:
[DefaultInstall.NTamd64]
OptionDesc = %ServiceDescription%
CopyFiles = MiniFilter.DriverFiles
[DefaultInstall.NTamd64.Services]
AddService          = %ServiceName%,,MiniFilter.Service
        编译无警告了,也能提交微软双签名成功,但是又不能加载驱动。痛苦
2023-6-8 15:24
0
游客
登录 | 注册 方可回帖
返回
//