免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 各类编程 > 利用ndis中间层驱动实施通信拦截与自阻塞(2)

利用ndis中间层驱动实施通信拦截与自阻塞(2)

时间:2012-02-13 18:26来源:未知 整理:寂涯网络 点击:

卡巴斯基反病毒软件实现了 NDIS中间层驱动程序技术,而且虽然用户可以禁用卡巴斯 基的反病毒仰13过滤功能,但是其3仍然是安全产品。然而,禁用仰13过滤功能将造成反 黒客/防火墙无法执行数据包过滤功能,也无法拦截恶意网络通信。根据文章“基于NDIS 中间层驱动程序的个人防火墙的设计和实现”,目前防御外来网络攻击和威胁(用户模式下 处理数据包)的防火墙技术存在许多的局限性。本文建议使用仰13中间层驱动程序,以更好地保护计算机系统的安全。NDIS数据包用NDIS_PACKET结构表示,其主要功能就是确保 正常接收和发送所有的网络数据。在发送数据之前,协议驱动程序首先分配仰13数据包; 然后用数据填充并发送给下层NDIS驱动程序。相反,某些底层NIC驱动程序分配数据包空 间用来存储接收的数据并传送给上层驱动程序。NDIS提供协助分配并操纵子结构的函数。 PCAUSA网站上有有关NDIS_PACKET结构的详细描述。
通常,一个仰13数据包就是一个数据包描述符,其包含缓冲描述符和即13_8皿冊尺。 链式NDIS_BUFFER缓冲区的数量取决于NDIS数据包的大小。如果数据包小,那么就只有一 个链式NDIS_BUFFER结构,当然也足以描述包含整个数据包数据的虚拟内存的范围。图1 为仰13_?八0矹1'结构,包含两个链式仰13_8皿?£已一个描述包含以太网头部的虚拟内存的 范围,另一个描述包含以太网有效载荷的虚拟内存的范围。某个典型数据包描述符的内容如 下所示:
1. 小端口犯0驱动程序和协议驱动程序的专属区。
2. 由合作的小端口和协议驱动程序定义的标记。
3. 包含数据包的物理页面的数量。
4. 数据包总长度。
5. 指向第一个缓冲区描述符的指针。
一个典型的缓冲区描述符的内容如下所示:
1. 起始虚拟地址。
2. 虚拟地址的偏移量。
3. 缓冲区字节总数。
4. 指向下一个缓冲区描述符的指针。
5. 缓冲区描述符所描述的虚拟存储区域。该区域可能横跨几个页面。 虚拟范围分配缓冲区描述符描述的缓冲区。这些虚拟页面将映射到物理内存。
 
数据包发送原理
由于仰13中间层驱动程序是网络数据包传输的唯一途径,所以其拦截整个网络数据包 的能力有助于建立网络数据包捕获和检测模型。该系统的工作流程由各种网络数据包构成, 这些数据包从传输驱动接口 TDI级到NDIS中间层驱动程序,通过注册的MpSend功能,初始 分类,将未认证的网络样本发送到机器人工厂,并使用恶意代码样式的结果进行再分析。
仙13序列调用贴18861^、NdisSendPacket、NdisCoSendPacket函数向底层驱动程序发 送请求。虽然使用不同函数的发送方发送数据包内容的方式不同,但是仍可用同样的方法分 析。因此,系统釆用修改的_18361^函数来捕获数据包。NdisSend函数原型如下:
void NdisSend (
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE NdisBindingHandle, IN PNDIS_PACKET Packet);
NdisSend 的第二个参数 NdisBindingHandle 描述了 NdisOpenAdapter 返回的句柄,描 述了目标NIC或与调用者所绑定的下一底层驱动程序的虚拟适配器。控制代码指向内部结构 体,同时内部结构体存储上层驱动发送给下层驱动的信息,下层驱动程序让即13函数为下 一层驱动使用相关函数。

图2.调用ndissend向底层驱动下发待发送数据包

图2显示了仰13网络驱动程序桟中发送请求进程的整个过程。图片顶端是协议驱动程序, 下面是两个中间层驱动程序,最底端是小端口(miniport)。在调用况ndissend函数之前,协议驱动程序可以在private header(专用字头)中设置标记,该header『特为分配的数据包描 述符的仰13保留。这些标记指定调用者确定的信息,如未包含在数据包数据中的发送的请求 操作。底层^0驱动程序的組1^口01^3的(1函数将发送标记作为输入参数。当序列化的底层驱 动程序的资源不足以传输有效861«1数据包时,有两种方案可供选择:首先,MiniportSend 函数可以将数据包插入内部队列,并返回仰13_31八11^_?£仰1呢。驱动程序将数据包队列保 持到资源可用为止,然后在资源准备就绪时发送数据包。其次,Minip0rtSend函数可以简单 地用NDIS_STATUS_RESOURCES标记返回控制值。仰13库为作801^^881(^,在内部队列中拥有 这样一个返回的数据包,序列化的小端口驱动程序。之后调用NdisMSendComplete和 NdisMSendResourcesAvailable函数,则表示该小端口驱动程序已准备好接受861^数据包。 在恥^61^函数将新的阳1^请求发送给下层小端口驱动程序之前,即13中间层驱动程序必须 将来自上层驱动协议输入的阳1^数据包,用新的数据包描述符重新打包。

本页地址 http://www.jybase.net/biancheng/20120213769.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com