Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Windows 防火墙 RPC 过滤器的工作原理

Windows 防火墙 RPC 过滤器的工作原理

作者头像
Khan安全团队
发布于 2022-01-18 02:01:06
发布于 2022-01-18 02:01:06
1.2K00
代码可运行
举报
文章被收录于专栏:Khan安全团队Khan安全团队
运行总次数:0
代码可运行

Windows 防火墙可以限制对 RPC 接口的访问。这很有趣,因为人们对 RPC 重新产生了兴趣,尤其是PetitPotam技巧。例如,您可以使用使用netsh命令运行的以下脚本来阻止对EFSRPC接口的任何访问。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rpc
filter
add rule layer=um actiontype=block
add condition field=if_uuid matchtype=equal data=c681d488-d850-11d0-8c52-00c04fd90f7e
add filter
add rule layer=um actiontype=block
add condition field=if_uuid matchtype=equal data=df1941c5-fe89-4e79-bf10-463657acf44d
add filter
quit

此脚本添加了两条规则,它们将阻止对 UUID 为 c681d488-d850-11d0-8c52-00c04fd90f7e和 df1941c5-fe89-4e79-bf10-463657acf44d的 RPC 接口上的任何调用。这些对应于两个 EFSRPC 接口。

这在防火墙的上下文中是如何工作的?Windows 过滤平台的内核组件是否有内置的 RPC 协议解析器来阻止连接?那太复杂了,相反,一切都是由一些特殊层在用户模式下完成的。如果您使用NtObjectManager的防火墙Get-FwLayer命令,您可以通过过滤IsUser属性来检查注册为在用户模式下运行的图层。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PS> Get-FwLayer | Where-Object IsUser
KeyName                      Name
-------                      ----
FWPM_LAYER_RPC_PROXY_CONN    RPC Proxy Connect Layer
FWPM_LAYER_IPSEC_KM_DEMUX_V4 IPsec KM Demux v4 Layer
FWPM_LAYER_RPC_EP_ADD        RPC EP ADD Layer
FWPM_LAYER_KM_AUTHORIZATION  Keying Module Authorization Layer
FWPM_LAYER_IKEEXT_V4         IKE v4 Layer
FWPM_LAYER_IPSEC_V6          IPsec v6 Layer
FWPM_LAYER_IPSEC_V4          IPsec v4 Layer
FWPM_LAYER_IKEEXT_V6         IKE v6 Layer
FWPM_LAYER_RPC_UM            RPC UM Layer
FWPM_LAYER_RPC_PROXY_IF      RPC Proxy Interface Layer
FWPM_LAYER_RPC_EPMAP         RPC EPMAP Layer
FWPM_LAYER_IPSEC_KM_DEMUX_V6 IPsec KM Demux v6 Layer
  • FWPM_LAYER_RPC_EP_ADD - 过滤进程创建的新端点。
  • FWPM_LAYER_RPC_EPMAP - 过滤对端点映射器信息的访问。
  • FWPM_LAYER_RPC_PROXY_CONN - 过滤与 RPC 代理的连接。
  • FWPM_LAYER_RPC_PROXY_IF - 通过 RPC 代理过滤接口调用。
  • FWPM_LAYER_RPC_UM - 过滤对 RPC 服务器的接口调用

这些层中的每一层都可能很有趣,您可以通过netsh为所有层添加规则。但我们将只关注 FWPM_LAYER_RPC_UM 层是如何工作的,因为这是一开始介绍的脚本使用的那个。如果在添加 RPC 过滤规则后运行以下命令,可以查看新创建的规则:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PS> Get-FwFilter -LayerKey FWPM_LAYER_RPC_UM -Sorted | Format-FwFilter
Name       : RPCFilter
Action Type: Block
Key        : d4354417-02fa-11ec-95da-00155d010a06
Id         : 78253
Description: RPC Filter
Layer      : FWPM_LAYER_RPC_UM
Sub Layer  : FWPM_SUBLAYER_UNIVERSAL
Flags      : Persistent
Weight     : 567453553048682496
Conditions :
FieldKeyName               MatchType Value
------------               --------- -----
FWPM_CONDITION_RPC_IF_UUID Equal     df1941c5-fe89-4e79-bf10-463657acf44d


Name       : RPCFilter
Action Type: Block
Key        : d4354416-02fa-11ec-95da-00155d010a06
Id         : 78252
Description: RPC Filter
Layer      : FWPM_LAYER_RPC_UM
Sub Layer  : FWPM_SUBLAYER_UNIVERSAL
Flags      : Persistent
Weight     : 567453553048682496
Conditions :
FieldKeyName               MatchType Value
------------               --------- -----
FWPM_CONDITION_RPC_IF_UUID Equal     c681d488-d850-11d0-8c52-00c04fd90f7e

如果您阅读了我的一般博客文章,那么输出应该是有意义的。FWPM_CONDITION_RPC_IF_UUID 条件键用于指定要匹配的接口的 UUID FWPM_LAYER_RPC_UM 有许多可能的字段可供过滤,您可以通过检查图层对象的Fields属性来查询这些字段。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PS> (Get-FwLayer -Key FWPM_LAYER_RPC_UM).Fields

KeyName                              Type      DataType
-------                              ----      --------
FWPM_CONDITION_REMOTE_USER_TOKEN     RawData   TokenInformation
FWPM_CONDITION_RPC_IF_UUID           RawData   ByteArray16
FWPM_CONDITION_RPC_IF_VERSION        RawData   UInt16
FWPM_CONDITION_RPC_IF_FLAG           RawData   UInt32
FWPM_CONDITION_DCOM_APP_ID           RawData   ByteArray16
FWPM_CONDITION_IMAGE_NAME            RawData   ByteBlob
FWPM_CONDITION_RPC_PROTOCOL          RawData   UInt8
FWPM_CONDITION_RPC_AUTH_TYPE         RawData   UInt8
FWPM_CONDITION_RPC_AUTH_LEVEL        RawData   UInt8
FWPM_CONDITION_SEC_ENCRYPT_ALGORITHM RawData   UInt32
FWPM_CONDITION_SEC_KEY_SIZE          RawData   UInt32
FWPM_CONDITION_IP_LOCAL_ADDRESS_V4   IPAddress UInt32
FWPM_CONDITION_IP_LOCAL_ADDRESS_V6   IPAddress ByteArray16
FWPM_CONDITION_IP_LOCAL_PORT         RawData   UInt16
FWPM_CONDITION_PIPE                  RawData   ByteBlob
FWPM_CONDITION_IP_REMOTE_ADDRESS_V4  IPAddress UInt32
FWPM_CONDITION_IP_REMOTE_ADDRESS_V6  IPAddress ByteArray16

过滤器有很多潜在的配置选项。您可以根据通过接口验证的远程用户令牌进行过滤。或者,您可以根据身份验证级别和类型进行过滤。这可以让您保护 RPC 接口,以便所有调用者都必须在 RPC_C_AUTHN_LEVEL_PKT_PRIVACY级别使用 Kerberos。 

无论如何,配置它对我们来说并不重要,您可能想知道它是如何工作的,因为试图找到绕过它的方法的第一步是知道这个过滤层在哪里处理(注意,我没有找到绕过,但你永远不知道)。 

由于 RPC 协议的复杂性,过滤是通过RpcRtRemote扩展 DLL 在 RPC 服务器进程内实现的,这也许并不令人意外。除 RPCSS 外,默认情况下不加载此 DLL。相反,仅当存在 WNF_RPCF_FWMAN_RUNNING WNF 状态的值时才会加载它。下图是用netsh添加两条 RPC 过滤规则后的状态。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PS> $wnf = Get-NtWnf -Name 'WNF_RPCF_FWMAN_RUNNING'
PS> $wnf.QueryStateData()

Data ChangeStamp
---- -----------
{}             2

如果 WNF 值发生更改,RPC 运行时会设置订阅以加载 DLL。加载后,RPC 运行时将注册所有当前接口以检查防火墙。在安全回调的正常处理过程中调用接口时会检查过滤规则。运行时将调用 RpcRtRemote 中的 FwFilter函数,传递有关防火墙接口调用的所有详细信息。过滤器调用仅适用于 DCE/RPC 协议,而不适用于 ALPC。它也只会在调用者是远程的时候被调用。如果调用是通过 TCP 来的,情况总是如此,但对于命名管道,只有当管道是通过 SMB 打开时才会调用它。

在这里,我们最终可以确定如何处理 RPC 过滤器。FwFilter函数构建与FWPM_LAYER_RPC_UM层的字段列表相对应的防火墙值列表, 并将它们与层的数字 ID一起传递给 FwpsClassifyUser0 API。此 API 将枚举该层的所有过滤器并应用返回分类的条件检查,例如阻止或许可。基于此分类,RPC 运行时可以允许或拒绝调用。 

为了使过滤器可以访问以进行分类,RPC 服务器必须具有 对引擎的 FWPM_ACTRL_OPEN访问权限和对过滤器的FWPM_ACTRL_CLASSIFY访问权限。默认情况下,Everyone组具有这些访问权限,但是 AppContainers 和可能的其他沙箱没有。然而,一般来说,AppContainer 进程不倾向于创建特权 RPC 服务器,至少任何远程攻击者会发现有用的服务器。您可以使用Get-AccessibleFwObject命令检查对各种防火墙对象 的访问。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PS> $token = Get-NtToken -Filtered -Flags LuaToken
PS> Get-AccessibleFwObject -Token $token | Where-Object Name -eq RPCFilter

TokenId Access             Name
------- ------             ----
4ECF80  Classify|Open RPCFilter
4ECF80  Classify|Open RPCFilter

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
驱动开发:内核封装WFP防火墙入门
WFP框架是微软推出来替代TDIHOOK传输层驱动接口网络通信的方案,其默认被设计为分层结构,该框架分别提供了用户态与内核态相同的AIP函数,在两种模式下均可以开发防火墙产品,以下代码我实现了一个简单的驱动过滤防火墙。
王瑞MVP
2023/06/08
8850
驱动开发:内核封装WFP防火墙入门
通过 RPC 防火墙停止横向移动
RPC 是底层机制,用于多种横向移动技术、侦察、中继攻击,或仅用于利用易受攻击的 RPC 服务。
Khan安全团队
2022/01/27
4630
PS命令之网络防火墙策略配置
描述: 在PowerShell中针对windows防火墙的规则的操作和查看常用命令,我们可以利用Get-Command *-NetFirewallRule命令进行查看到Function类型的命令。
全栈工程师修炼指南
2022/09/29
2.3K0
如何在CentOS 7上使用FirewallD设置防火墙
Firewalld是一种防火墙管理解决方案,可用于许多Linux发行版,它们充当Linux内核提供的iptables包过滤系统的前端。在本教程中,我们将介绍如何为您的服务器设置防火墙,并向您展示使用firewall-cmd管理工具管理防火墙的基础知识。
挺问中原
2018/10/16
2.9K0
tcptraceroute命令可以绕过最常见的防火墙过滤器「建议收藏」
我的ISP阻止了ICMP ECHO请求,我不能使用traceroute命令,有什么方法可以使用端口转发或类似方法发送traceroute?
全栈程序员站长
2022/08/28
6600
防火墙自动化(一) 防火墙的配置解析
网络运维工程师日常打交道的设备,无非是路由器交换机还有防火墙。防火墙在其中,属于有一定技术含量,但又比较繁琐的部分。为了更细粒度的企业安全,企业环境中的防火墙一般都是先deny all,再逐个开启需要访问的网络关系,而网络关系的载体就是一条条的防火墙策略,这样就带来了大量的防火墙策略配置工作。在过往的防火墙管理中,经常需要付出一定的人力物力去执行防火墙的策略生成和下发工作,如何对防火墙进行自动化,削减这方面的工作。本系列会分专题进行阐述并针对实际产生的问题提出优化建议。
晴日飞鸢
2022/03/05
3.4K1
网络安全第四讲 防火墙工作原理及应用
网络信息安全第四讲 防火墙工作原理及应用 一 防火墙概念与分类 1.防火墙简介 防火墙允许授权的数据通过,而拒绝未经授权的数据通信。网络防火墙是隔离内部网与Internet之间的一道防御系统,允许人们在内部网和开放的Internet之间通信。访问者必须首先穿越防火墙的安全防线,才能接触目标计算机。 在没有防火墙时,局域网内部的每个节点都暴露给Internet上的其它主机,此时内部网的安全性要由每个节点的坚固程度来决定,且安全性等同于其中最薄弱的节点。使用防火墙后,防火墙会将内部网的安全性统一到它自身,网络安
易兮科技
2020/10/28
6.2K0
网络安全第四讲 防火墙工作原理及应用
绕过防火墙过滤规则传输ICMP
ICMP和ICMPv6是Internet的主要协议。这些协议设计用于在数据包未到达目的地时进行连接测试和错误信令。接收ICMP消息让应用程序了解故障原因:数据包太大,没有可用路由等。
FB客服
2019/07/08
2.6K0
绕过防火墙过滤规则传输ICMP
Linux防火墙firewalld安全设置
防火墙是具有很好的保护作用。入侵者必须首先穿越防火墙的安全防线,才能接触目标计算机。在公司里数据安全是最重要的,要求安全部门进行全公司进行服务器防火墙安全搭建,在原有的基础上进行安全的防火墙设置,大多数生产环境都建议开启,这样才能有效避免安全隐患等问题;本文文字偏多,但是建议大家还是花个十多分钟好好看一下防火墙的原理,这样便于后期问题排查,最后一小节也会有常用命令操作。
没有故事的陈师傅
2019/11/22
4K0
Linux下的防火墙
假设自定义的 ssh 端口号为 11011,使用下面的命令来添加新端口的防火墙规则:
Xiongan-桃子
2023/06/10
5090
Linux下的防火墙
华为防火墙VRRP双机热备的原理及配置
一、何为双机热备? 所谓的双机热备无非就是以7X24小时不中断的为企业提供服务为目的,各种双机热备的技术很多,那么华为使用了这个共有协议的热备协议——VRRP。
小手冰凉
2019/11/01
3.9K0
Linux防火墙firewall的使用
CentOS 7新的防火墙服务firewalld的基本原理,它有个非常强大的过滤系统,称为 Netfilter,它内置于内核模块中,用于检查穿过系统的每个数据包。
小陈运维
2024/11/18
1080
linux ebpf_防火墙拦截dns解析
自基于Netfilter的iptables取代ipchains之后,Linux防火墙技术貌似一直停留在iptables,虽然近年来nftables被宣称有取代iptables之势,但事实上并无起色。
全栈程序员站长
2022/11/08
3.2K0
防火墙基础
现代的防火墙体系不应该只是-一个“入口的屏障”,防火墙应该是几个网络的接入控制点,所有进出被防火墙保护的网络的数据流都应该首先经过防火墙,形成一个信息进出的关口,因此防火墙不但可以保护内部网络在Internet中的安全,同时可以保护若干主机在一个内部网络中的安全。在每一个被防火墙分割的网络内部中,所有的计算机之间是被认为“可信任的”,它们之间的通信不受防火墙的干涉。而在各个被防火墙分割的网络之间,必须按照防火墙规定的“策略”进行访问。
全栈程序员站长
2022/06/29
1.5K0
防火墙基础
这样配置防火墙双机热备,网络很难出现故障
防火墙承载了非常多的功能,比如:安全规则、IPS、文件类型过滤、内容过滤、应用层过滤等。
网络工程师笔记
2024/04/19
3700
这样配置防火墙双机热备,网络很难出现故障
基于linux的嵌入IPv4协议栈的内容过滤防火墙系统(8)-附录
0 通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用一种通常的闭合端口
源哥
2018/08/28
6990
Windows日志取证
Windows常见安全事件日志ID汇总 适用于:Windows Server 2016
全栈工程师修炼指南
2020/10/23
3.7K0
Spring Security 6.x 过滤器链SecurityFilterChain是如何工作的
上一篇主要介绍了Spring Secuirty中的过滤器链SecurityFilterChain是如何配置的,那么在配置完成之后,SecurityFilterChain是如何在应用程序中调用各个Filter,从而起到安全防护的作用,本文主要围绕SecurityFilterChain的工作原理做详细的介绍。
fullstackyang
2024/06/02
4740
Spring Security 6.x 过滤器链SecurityFilterChain是如何工作的
Linux学习(2)——防火墙设置
  防火墙分类     (一)、包过滤防火墙。            数据包过滤(packet Filtering)技术是在网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,称为访问控制表(access control lable,ACL)。通过检查数据流中每个数据包的源地址和目的地址,所用的端口号和协议状态等因素,或他们的组合来确定是  否允许该数据包通过包过滤防火墙的优点是它对用户来说是透明的,处理速度快且易于维护。缺点是:非法访问一旦突破防火墙,即可对主机上的软件和配置漏洞进行攻击;数据包的源 地址、目的地址和IP的端口号都在数据包的头部,可以很轻易地伪造。“IP地址欺骗”是黑客针对该类型防火墙比较常用的攻击手段。       (二)、代理服务型防火墙             代理服务(proxy service)也称链路级网关或TCP通道。它是针对数据包过滤和应用网关技术存在的缺点而引入的防火墙技术,其特点是将所有跨跃防火墙的网络通信链路 分为两段。当代理服务器接收到用户对某个站点的访问请求后就会检查请求是否符合控制规则。如果规则允许用户访问该站点,代理服务器就会替用户去那个站点取 回所需的信息,再转发给用户,内外网用户的访问都是通过代理服务器上的“链接”来实现的,从而起到隔离防火墙内外计算机系统的作用。
sunonzj
2022/06/21
2.2K0
rpc服务器不可用 dcom 无法使用任何配置的协议与计算机,如何修复Windows上的“RPC服务器不可用”错误?…
大家好,又见面了,我是你们的朋友全栈君。 问题:如何修复Windows上的“RPC服务器不可用”错误? 有几次我的计算机上出现“RPC服务器不可用”弹出窗口。我不确定它是什么?我该怎么办这个错误? 方
全栈程序员站长
2022/09/03
9.7K0
rpc服务器不可用 dcom 无法使用任何配置的协议与计算机,如何修复Windows上的“RPC服务器不可用”错误?…
相关推荐
驱动开发:内核封装WFP防火墙入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验