粮食计划署行动

Windows 筛选平台 (WFP) 通过集成以下基本实体来执行其任务: 筛选器填充码标注

图层

是由筛选器引擎管理的容器,其功能是将筛选器组织成集。 层不是网络堆栈中的模块。 每个层都有一个定义可添加到它的筛选器类型的架构。 有关详细信息 ,请参阅每个筛选层的可用筛选条件

层可能包含用于管理冲突筛选器要求的子层,例如“阻止超过 1024 的 TCP 端口”和“打开端口 1080”。 管理筛选冲突的规则由 筛选器仲裁确定。

WFP 包含一组 内置子层。 每个层继承所有内置子层。 用户还可以添加自己的子层。

筛选器引擎层的列表在参考主题 筛选层标识符中提供。

筛选器

筛选器是与传入或传出数据包匹配的规则。 该规则告知筛选引擎该如何处理数据包,包括调用标注模块进行深度数据包或流检查。 例如,筛选器可以指定“阻止 TCP 端口大于 1024 的流量”或“对所有未受保护的流量调用 IDS”。

启动时筛选器是 TCP/IP 堆栈驱动程序 (tcpip.sys) 启动时立即强制实施的筛选器。 BFE 启动时,将禁用启动时筛选器。 调用 FwpmFilterAdd0 时,通过设置 FWPM_FILTER_FLAG_BOOTTIME 标志,将筛选器标记为启动时间。

运行时筛选器是在 BFE 启动后强制实施的筛选器。 运行时筛选器可以是静态、动态或永久性筛选器,具体取决于其创建方式。 有关不同类型的运行时筛选器及其生存期的详细信息,请参阅 对象管理

垫片

填充码是内核模式组件,它通过针对筛选器引擎层进行分类来做出筛选决策。 每个填充码都针对一个或多个层进行分类。 例如,传输层模块填充码根据入站传输层、出站传输层以及 ALE Connect 和流的第一个数据包Receive-Accept层进行分类。

当数据包、流和事件遍历网络堆栈时,填充码会分析它们以提取可分类的条件和值,然后调用筛选器引擎以针对给定层中的筛选器对其进行评估。 筛选器引擎可以调用一个或多个标注作为分类的一部分。 填充码根据筛选器引擎执行的分类结果执行数据包、流和事件的实际丢弃操作。

标注

标注是由驱动程序公开的一组函数,用于专用筛选。 它们用于对数据包进行分析和操作,例如病毒扫描、家长控制扫描以查找不适当的内容、用于监视工具的数据包数据分析。 某些标注(例如网络地址转换 (NAT) 驱动程序)内置在操作系统中。 其他(如 HTTP 家长控制标注或入侵检测系统 (IDS) 标注)可由独立软件供应商 (ISV) 提供。 在给定层匹配相应的标注筛选器时,筛选器引擎将调用标注函数。

标注可以在任何内核模式 WFP 层上注册。 标注可以返回 (“阻止”、“允许”的操作,在执行流检查时,“延迟”、“需要更多数据”、“删除连接”) ,并且可以修改和保护入站和出站网络流量。

将标注注册到筛选器引擎后,它可以接收要处理的网络流量。 流量可能是数据包、流或事件,具体取决于层。 应用程序或防火墙代理通过添加筛选器(其操作为“Callout”且其标注 ID 为标注的标识符)来将流量传递到标注。 标注可以指示筛选器引擎将“阻止”或“允许”返回到填充码。 标注还可以返回“Continue”,以允许其他筛选器处理数据包。

一个标注驱动程序可能会公开多个标注。

需要使用 FwpmCalloutAdd0) (添加标注,并使用 FwpsCalloutRegister) 注册 (,然后才能使用它。 在创建引用标注的筛选器之前,需要调用 FwpmCalloutAdd0 。 在匹配标注筛选器时,需要调用 FwpsCalloutRegister,然后 WFP 才能调用标注。 默认情况下,引用已添加但尚未注册到筛选器引擎的标注的筛选器被视为“阻止”筛选器。 调用 FwpmCalloutAdd0 和 FwpsCalloutRegister 的顺序并不重要。 持久标注只需添加一次,并且每次实现标注的驱动程序启动时都需要注册 (例如,重新启动) 。

分类

分类是将筛选器应用于网络流量的过程, (数据包、流或事件) ,以确定该流量的“允许”或“阻止”结果。 对于一个数据包、流或事件,每个层有一个分类调用。

在分类过程中, (的属性(例如,数据包、流或事件的源地址) )与调用分类的层的筛选器上设置的筛选器条件进行比较。 找到匹配项时, 筛选器仲裁 算法用于确定分类过程的结果。

分类请求由填充码触发。

分类操作可以是:

  • 允许
  • 阻止
  • 标注
    • 允许
    • 阻止
    • 继续
    • 延迟
    • 需要更多数据
    • 删除连接

粮食计划署行动

在启动时,只要 TCP/IP 堆栈驱动程序 (tcpip.sys) 启动,内核模式筛选器引擎就会通过启动时筛选器强制实施系统的安全策略。

在用户模式下启动基本筛选引擎 (BFE) 后,永久性筛选器将添加到平台,禁用启动时筛选器,并将通知发送到使用 FwpmBfeStateSubscribeChanges0 订阅的标注驱动程序。 完成 BFE 初始化后,将立即调度通知。 平台现在已准备好注册标注和要添加的运行时对象。

在慢速计算机上,从启动时间到持久性筛选器的转换可能需要几秒钟甚至更长的时间。 它是原子的,因此,如果提供程序同时具有启动时间和持久性筛选器,则当两者都无效时,永远不会有窗口。

BFE 启动后,防火墙代理或自定义防火墙解决方案可以添加运行时筛选器。 BFE 处理这些筛选器,并将其发送到相应的筛选器引擎层进行强制实施。 BFE 还接受身份验证设置,并将这些设置发送到 IPsec 密钥模块 (IKE/AuthIP) 。 有关详细信息,请参阅 IPsec 配置

可随时通过 BFE 公开的 RPC 接口在系统中添加、删除或更改筛选器和身份验证设置。 同样,可以添加或删除子层和标注模块。

数据流:

  1. 数据包进入网络堆栈。
  2. 网络堆栈查找并调用填充码。
  3. 填充码在特定层调用分类过程。
  4. 在分类期间,将匹配筛选器并执行结果操作。 (请参阅 筛选器 Arbitration.)
  5. 如果在分类过程中匹配任何标注筛选器,则会调用相应的标注。
  6. 填充码作用于最终筛选决策 (例如,将数据包) 。

出站数据流遵循类似的模式。

以下主题进一步描述了粮食计划署的运作。

对象模型

对象管理