首页
社区
课程
招聘
[求助]防火墙过滤规则,求技术实现思路
发表于: 2010-9-19 16:01 7067

[求助]防火墙过滤规则,求技术实现思路

2010-9-19 16:01
7067
前提条件如下:

1.一台计算机,有独立于正常磁盘卷如C,D,E等盘的虚拟存储存储空间;假设该空间为I:盘。

2.I盘拥有独立的输入输出接口。

现需要tdi+ndis实现以下网络驱动过滤实现以下功能:

1.计算机可以正常使用网络,在正常的磁盘卷中存储、复制粘贴。

2.在网络传输中,只要涉及I:虚拟磁盘中文件,如使用QQ网络传输该盘文件,feiQ内网传输该盘文件,发送位于该盘的邮件附件,使用网上邻居共享该盘中文件等即返回错误

另,我的想法:tdi靠近应用层,而它大部分应用面向端口和协议,接受到的大都是网络数据包;所以怎样将应用层传输数据的文件路径作为tdi的过滤依据,并结合ndis底层过滤实现功能是难点。

请教各位牛人给些思路~小菜多谢了。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (8)
雪    币: 138
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己先顶一个
2010-9-19 17:03
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
很重要的一点就是,你很难(甚至说没有办法)判断一个程序在操作一个文件的过程中是否会将文件数据传送到网络中去,也就是说程序通过TDI或其他接口向网络中传送数据,你没有办法知道这个数据的源头。
所以只能针对不同的应用实施不同的措施。
2010-9-19 20:51
0
雪    币: 138
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你的意思是至少应该需要对每个进程注入,才能实现控制。

我意思只要监控到将要有文件的网络传输,在tdi层就判断这个文件是否来自I盘,再交给ndis处理并过滤,有这种实现的可能么?
2010-9-20 09:53
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
在TDI层,你得到的只是一个数据缓冲,而这个数据是否来自文件,你并不清楚,可能是任意数据。
2010-9-20 20:57
0
雪    币: 8166
活跃值: (2761)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
TDI就可以拒絕的,
交给NDIS扔包不是唯一的选择。
难点是如何判断缓冲区内的数据包信息是不是I盘的文件。
除非你直接禁止打开I盘。否则就可以传输出去。
比如说。先打开I盘内文件。然后加密一番。再传输出去。。
那样的话。你在网络数据包上很难判断出此文件来自哪里。
另外不知道你面对的对象是什么。
如果说只是简单的限制一下普通的浏览器(如IE)。邮件。等上传属于I盘的文件。
这个倒挺好实现。分析一下HTTP协议。SMTP协议等。一般情况下可以从协议内截获准备上传的文件
的路径。再从路径中取出盘符判断。。然后拒绝之。。
2010-9-22 15:16
0
雪    币: 138
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
多谢你的回复~我会认真分析网络协议方面资料的,应该会有突破。

其实我问的关键部分就是网络传输包中判断是否来自I盘的实现思路;
加密也考虑过,但是不能所有出去的包都进行加密,这样就影响了用户不涉及I盘的正常使用;
至于面向的对象,就是所有可能将I盘文件传输出去的所有途径。。。如果网络邮件可以解决,还剩下网络传输工具和网上邻居共享文件的途径。
2010-9-25 08:52
0
雪    币: 138
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
有个新想法,是不是可以在本地加载一个文件过滤系统,将IRP_MJ_READ绑定,设置完成函数后返回STATUS_MORE_PROCESSING_REQUIRED,在这里可以很好地判断文件的来源和内容,只要有操作控制I盘文件,即写入DeviceExtension备份,用它配合tdi作为过滤依据,进行过滤。

请问技术实现难度如何。。。
2010-9-27 10:39
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不难,写个派遣函数,如果不要求所有知识都了解,看5分钟就行了
看样子你要在拓展结构里写日志哦?不怕内存暴表吗?
2010-9-29 16:24
0
游客
登录 | 注册 方可回帖
返回
//