WFP网络过滤驱动-限制网站访问

这篇具有很好参考价值的文章主要介绍了WFP网络过滤驱动-限制网站访问。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

WFP Architecture - Win32 apps | Microsoft Learn是一个网络流量处理平台。WFP 由一组连接到网络堆栈的钩子和一个协调网络堆栈交互的过滤引擎组成。

本文使用WFP,实现了一个网络阻断的demo,以阻断访问指定站点的流量。代码比较复杂,本文不进行介绍。本文仅是一个WFP入门介绍

PS:如果不是内核驱动程序员,不建议使用WFP进行网络过滤开发,上手成本挺高。(我头铁。。)


WFP入门介绍

相关阅读:

  • 《windows内核安全与驱动开发》第15章 Windows过滤平台 (推荐,看完基本入门)

  • windows驱动-WFP框架介绍及其编程 | qwertwwwe

  • WFP Architecture - Win32 apps | Microsoft Learn (不推荐)

我没搞清这个架构具体是怎么回事,因为参考资料很少。因为我看不懂官方的文档,所以官方的文档很烂。但这不妨碍写代码,多找几个示例代码看看,照葫芦画瓢即可。


WFP基本架构

WFP的基本架构图如下:

wfp驱动,# 从头实现一个网络阻断工具,网络,驱动开发,windows,WFP

整个WFP分为两部分:用户态和内核态。

挂载在内核钩子上的函数,必须通过驱动加载入内核。但是何时将这些函数挂载到钩子上,可以直接在驱动中实现,也可以在用户态控制。(目前可能看不懂这句话,不着急。实际写代码的时候,会区分出他们的优缺点。)(总的来说,本质都是这样:实现自定义的函数->将函数加载的内核hook上->数据流经过的时候,执行该函数


名词解释

首先,需要进行的是”名词解释“。框架为了描述方便,会自定义一些名词。这些名词以特定的方式组合起来,便是整个框架。这些名词的官方链接是:Object Model - Win32 apps | Microsoft Learn

  • 过滤器(Filter):当满足一组条件的时候,执行指定的动作。多个滤器之间,有位置和权重之分。过滤器也为钩子函数,提供上下文环境。(如果我们有知道nftables,会很容易理解这套流程:iptables和nftables的使用_大1234草的博客-CSDN博客_nftables和iptables)

  • Callout:是一组函数。数据流经过时,过滤器调用callout,执行callout中自定义的操作,然后标记放行还是阻断。callout有自己的ID。这样无论在内核还是用户空间,都可以通过ID挂载特定的callout。

  • Layer:表示网络流量处理中调用过滤器引擎的特定点。(不同的Layer,有不同的标识。比如我们想在TCP三次握手的某个过程中,进行网络阻断。我们可以将相应的callout放到对应的Layer中:TCP Packet Flows - Win32 apps | Microsoft Learn)

  • Sub-layer:layer的子组件。一个layer中可以创建不同的sub-layer,有权重之分(执行先后之分。比如我们权重高的sub-layer中,调用callout将也给数据流标记为阻塞,并设置为禁止修改。相同层的后面子层中的callou检查无修改权限后,直接return)。

  • Provider:略(代码中没用过,不知道)

  • Provider Context:略(代码中没用过,不知道)


代码基本结构

上面每个名词都有对应的数据结构,每个数据结构都有一组对应的操作函数。

接下来,需要将这些名词组合起来。下面是WFP API调用的整体结构

  1. 定义一个或多个callout,然后向过滤引擎注册callout(FwpsCalloutRegister函数)。

  2. 将这些callout,添加到过滤引擎中,其中指定callout运行所在的layer(FwpmCalloutAdd函数)。

  3. 设计一个或者多个子层,把子层添加到分层中(FwpmSubLayerAdd函数)。

  4. 设计过滤器,把呼出接口、子层、分层和过滤器关联起来,向过滤引擎添加过滤器(FwpmFilterAdd)(当流量经过layer的时候,执行相应的callout,如修改数据,最后标记为放行或者阻塞)。

建议在写代码时候,使用Transactions。比如上面是一套API,如果有一个执行失败,可以全部不生效。Transactions介绍,可参考:Object Management - Win32 apps | Microsoft Learn


代码示例

上面文字过程,可能写的很烂,难以让人明白。此时需要去看些demo代码,好理解这些概念。

  1. Windows-kernel-security-and-driver-development-CD/source/WfpSample at master · dybb8999/Windows-kernel-security-and-driver-development-CD · GitHub。这个是书上的对应代码,比较容易理解。(我自己也敲过一边,但是运行会导致系统退出,我没找到bug位置,不会win的驱动调试。。见:demo/16-wfp-demo at laboratory · da1234cao/demo · GitHub)

  2. GitHub - henrypp/simplewall: Simple tool to configure Windows Filtering Platform (WFP) which can configure network activity on your computer.。这个不推荐去看,代码有些复杂。但是可以安装运行,看看WFP的好玩之处。

  3. GitHub - junjiexing/libredirect: 使用WFP重定向socket链接。这个代码我完成看过一遍,也能跑起来。其重定向的原理是:先阻断流量;然后修改目标地址或端口;再放行流量。

  4. 阻断指定的域名访问。这是我写的代码。代码在内容上参考了第一个链接,在结构上参考了第三个链接。

复杂点的代码,不适合写成短篇文档。故,这里不介绍具体代码。下面是4中代码的运行截图。

wfp驱动,# 从头实现一个网络阻断工具,网络,驱动开发,windows,WFP

我不建议写驱动的另一个原因是。win上驱动需要签名后才能安装。见:测试签名简介文章来源地址https://www.toymoban.com/news/detail-726011.html

到了这里,关于WFP网络过滤驱动-限制网站访问的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通过安全日志读取WFP防火墙放行日志

    前言 之前的文档中,描写了如何对WFP防火墙进行操作以及如何在防火墙日志中读取被防火墙拦截网络通讯的日志。这边文档,着重描述如何读取操作系统中所有被放行的网络通信行为。 读取系统中放行的网络通信行为日志,在win10之后的操作系统上,也可以通过前一篇提到的

    2024年02月12日
    浏览(31)
  • WFP必须掌握的技能之自定义控件——实战:自制上传文件显示进度按钮

    自定义控件在WPF开发中是很常见的,有时候某些控件需要契合业务或者美化统一样式,这时候就需要对控件做出一些改造。 目录 按钮设置圆角 按钮上传文件相关定义 测试代码 话不多说直接看效果 默认效果: 上传效果: 按钮设置圆角 因为按钮本身没有 CornerRadius 属性,所以只

    2024年02月08日
    浏览(43)
  • 腾达(Tenda)FH451路由器通过设置URL过滤限制网页访问

    适用路由器型号:F450/F451/F453/Ff455/F456/FH450/FH451 通过设置URL过滤来限制连接到该路由器下打开的网页,通过进入到路由器管理界面中(在地址栏中输入默认IP地址:192.168.0.1),在安全设置-URL过滤,中进行设置。 登陆管理界面 你需要登录到路由器管理界面来进行设置,此时,

    2024年02月06日
    浏览(59)
  • 如何使用FirewallD限制网络访问

    作为一个Linux用户,你可以使用firewalld防火墙选择允许或限制对某些服务或者IP地址的网络访问,这是CentOS/RHEL 8以及诸如Fedora的大部分基于RHEL发行版原生的。 firewalld防火墙使用firewall-cmd命令行工具配置防火墙规则。 在我们执行任何配置前,首先使用systemctl工具启用firewalld服

    2024年02月15日
    浏览(33)
  • 华为ensp 使用扩展ACL限制公司网络访问

    使用扩展ACL限制公司网络访问 Jan16公司财务部计算机若干台,并架设了专用的财务系统服务器,进行局域网组建,通过路由器连接至互联网。出于财务系统数据安全的考虑,需要在路由器访问控制策略,只能财务部PC1能够访问财务系统前端网站;同时,服务器不可访问外部网

    2024年02月04日
    浏览(35)
  • ACL 访问控制 过滤数据 维护网络安全(第七课)

    ACL是Access Control List(访问控制列表)的缩写,是一种用于控制文件、目录、网络设备等资源访问权限的方法。ACL可以对每个用户或用户组设置不同的访问权,即在访问控制清单中为每个用户或用户组指定允许或禁止访问该资源的权限。它通常由一系列规则组成,规则定义了一

    2024年02月10日
    浏览(48)
  • | 从头打造个人网站(超详细)

    哈喽🤗,这篇博客从0开始教大家创建自己的网站,包含个人网站,商用网站等,并且提供模板类型,提供修改模块样本~ 看完本博客你将会收获: 一个想要的类型网站 学习React 解答过程中遇到的问题 最终效果 那就开始吧👩‍💻👨‍💻 ********************************************

    2024年02月11日
    浏览(40)
  • 【开源EZRclone】替代RaiDrive,无任何限制免费挂载你的网络存储到本地驱动器

    EZRclone是一个基于PyQt的rclone管理UI界面,初衷是让rclone更好用,一定程度上替代raidrive等收费软件。 github链接:https://github.com/0oljyo0/EZRclone(可能无法实时更新,gitee为最新版本。) gitee链接:https://gitee.com/o0ljy0o/ezrclone 开机自启动并最小化到系统托盘 配置挂载本地驱动器 启动后自

    2024年02月01日
    浏览(75)
  • 使用PowerShell通过不同网络(网卡)访问不同网站

    在学校生活时经常有一种需求:访问某些网站(如校内系统)时需要使用校园网,访问另一些网站(如Steam、Github等)校园网很慢,需要使用手机浏览器等其他网络加速。此时我就觉得如果能同时使用两个网络该多好。 本文就介绍如何用PowerShell [1] 实现这个功能(需要Window

    2024年02月01日
    浏览(36)
  • 【samba】Windows映射网络驱动服务器提示“拒绝访问”

    按照以下步骤检查你的samba服务器,如果不确定自己是否正确地配置了samba环境,请参考Ubuntu安装Samba服务 1、检查进程是否起来 2、检查配置文件是否正确 3、检查防火墙是否放行samba报文 4、检查用户是否添加正确 5、尝试断开驱动器的连接 (1)方法一:最简单粗暴的方法是

    2024年02月05日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包