引言

随着网络技术的快速发展,网络安全问题日益凸显。Windows Filtering Platform(WFP)作为 Windows 操作系统的重要安全组件,是目前主流的网络过滤框架,为保护用户网络安全提供了强大支持。很多网络驱动都是基于此框架进行的开发,本文将从测试工程师的角度出发,探讨网络驱动的 WFP 测试方法,帮助大家了解如何有效地评估和测试网络驱动,以确保网络安全。

原理介绍

1.首先看 WFP 的精简原理图

WFP 框架的核心组件是过滤引擎(Filte Engine),它与操作系统中的网络堆栈进行交互,并对系统网络堆栈中的数据进行处理,实现数据过滤等功能。过滤引擎能够在七层网络模型中与每一层进行交互,并在不同层次上处理网络数据。

2.下面再来具体看下 WFP 体系结构

WFP 主要分为两大层次模块:用户态基础过滤引擎(BFE)、内核态过滤引擎(KM Filtering Engine)。实际工作的是内核态的过滤引擎,用户可以在用户层通过其提供的 API 与 BFE 交互(BFE 会与 KM FE 交互),或直接在内核层 KM FE 交互。

3.WFP 框架中包含几大概念
①.垫片
垫片是一种特殊的内核模块,被安插在系统的网络协议栈的不同层中,将不同层的数据传给 WFP 过滤引擎,并将过滤引擎的反馈操作传回到网络协议栈中,最后对流做出最终的动作,例如 drop。这部分 WFP 开发者不需要为其做任何事,这些都由 WFP 框架完成。
②.Callout
Callout 是指执行特定过滤规则或动作的函数,由程序员自定义或使用预定义函数。这些函数可以执行包分析、修改等功能。可以在任何 WFP 内核层注册 callouts 函数,并返回一个动作值或对网络流量进行修改。比如 “Block”、“Permit”、“Need more data” 等等
③.分层
系统的网络协议栈是分为多层的,WFP 的过滤引擎也是分开为多层 (Layer),我们在注册自己的 Callout 时需要制定网络的具体哪一层,对该层的数据进行操作。
④.子层
子层是在分层基础上添加的,一个分层中可以由多个子层组成。每个子层有它的名字以及 GUID,并且还有权重,这里的权重指的是优先级,优先级越高就会在同一分层中被优先调用。
⑤.过滤器
Filter 字面意思就是过滤器,实际上就是一条用于匹配特定出/入流量的规则。这些规则会告诉过滤引擎在匹配到特定数据包后应该执行什么动作。例如,如果匹配到特定的数据包,过滤引擎就会调用一个 callout 模块来执行深度包检测。
过滤器引擎包含大约 10 个用户模式筛选层,包含大约 50 个内核模式筛选层。

下面我们举例展示一下数据传输过程中,Filter 在实际场景的使用情况。

当应用层要传输数据时,根据应用层的服务类型选择 TCP 或 UDP 传输协议。以 TCP 为例,数据进入到内核处理时首先到达 WFP 的 FWPM_LAYER_STREAM_V4 层,而后把数据传给 FWPM_LAYER_OUTBOUND_TRANSPORT_V4 层进行数据分片封装,最后通过 FWPM_LAYER_ONBOUND_IPPACKET_V4 层发送出去。数据接收过程则与发送数据经过的过滤层类似,数据传输方向相反。

三、测试方法

现在的网络防护驱动大多基于 WFP 框架实现,这里将我们从网络底层框架角度来看网络驱动的测试方法,主要包括功能测试、兼容性测试、性能测试和安全测试等。

1.功能测试主要针对网络驱动各项功能的完备性和正确性进行验证。
①.网络连接测试:测试网络驱动是否能够正确地建立和断开网络连接,包括本地连接和远程连接。
②.数据传输测试:测试网络驱动是否能够正确地传输数据,包括文本、图像、音频、视频等不同类型的数据。
③.网络协议测试:测试网络驱动是否能够正确地支持各种网络协议,例如 TCP/IP、UDP、HTTP 等。
④.网络管理测试:测试网络驱动是否能够正确地管理网络设备,例如禁用、启用等。
需要注意的是测试环境的搭建,需要搭建一个真实的网络环境,以确保测试结果的准确性。

2.兼容性测试则关注网络驱动在不同操作系统版本、硬件配置及网络环境下的表现。
①.操作系统兼容性测试:测试网络驱动在不同操作系统下的兼容性,例如不同版本的 Windows 操作系统等
②.硬件配置兼容性测试:测试网络驱动在不同硬件配置下的兼容性,例如百兆网卡、千兆网卡等。
③.网络设备兼容性测试:测试网络驱动在不同网络设备下的兼容性,例如以太网、无线网络、蓝牙等。
④.第三方软件兼容性测试:测试网络驱动与第三方软件的兼容性,例如网络管理工具、防火墙等。
⑤.应用程序兼容性测试:测试网络驱动与应用程序的兼容性,例如网络游戏、视频播放器等。

3.性能测试侧重于评估网络驱动在不同负载下的处理能力和响应时间。
①.吞吐量测试:测试网络驱动的吞吐量,即单位时间内能够传输的数据量。
②.延迟测试:测试网络驱动的延迟,即数据从发送端到接收端的时间差。
③.压力测试:测试网络驱动在高负载情况下的性能表现,例如大量数据的传输、大量并发连接等。
④.网络环境测试:测试网络驱动在不同网络环境下的性能表现,例如不同的网络带宽、不同的网络延迟等。

4.安全测试则通过专业工具检查网络驱动是否存在漏洞,及模拟各种攻击场景来检验网络驱动的安全防护能力。
①.漏洞扫描:使用专业的漏洞扫描工具对网络驱动进行扫描,以发现网络驱动中存在的安全漏洞。
②.渗透测试:通过模拟黑客攻击的方式,对网络驱动进行安全性测试,以发现网络驱动中的安全漏洞和安全隐患。
③.恶意软件防护测试:测试网络驱动的恶意软件防护功能,以确保网络驱动能够有效地防止恶意软件的攻击。

四、案例分析

在本文中,我们将提供一个实际案例来演示网络驱动测试过程中遇到的问题和解决方案。假设在功能测试过程中,发现网络驱动进行网络防护的同时会影响网络的速度,致使网速下降。

那么该如何在进一步定位和分析呢?通过上面关于 WFP 介绍中可知,过滤器是对网络流量的筛选,多加一层的过滤,可能会影响到流量数据的传输速度,然而过滤器涉及一百多种,我们该从哪入手进行排查呢?

这里的场景问题是传输速度下降,那么我们重点关注传输过程中有哪些 Filter,通过上面图三看到数据传输过程中的过滤器行为,到底是哪一层的过滤影响了网速,我们就需要进行一一排查,这里可以借用 WfpEnu 工具,分别将各层的 filter 移除,

每移除一层就记录一组数据,最后分析每组数据找出最影响网速的 Filter。
这个案例告诉我们,在实际测试过程中,遇到问题时要善于利用官方文档和社区资源,了解功能实现原理和框架,方便找到问题的根本原因并解决它。同时,也提醒我们除了验证功能的实现外,也要重点考虑用户使用质量是否下降,合理平衡这俩之间的关系。

总结

本文从测试工程师的角度探讨了网络防护驱动(基于 WFP 框架)测试方法的相关内容。通过基础知识掌握、制定测试计划、实施测试及结果分析等步骤,我们可以全面评估 WFP 的性能和安全性。随着网络安全威胁的不断演变,掌握有效的 WFP 测试方法将有助于提高网络安全防护能力,为构建安全、稳定、高效的计算机网络环境提供有力保障。


↙↙↙阅读原文可查看相关链接,并与作者交流