请查看我们的 RPC Firewall 博客文章 或 BlackHat 演讲,以更好地理解 RPC、RPC 攻击以及解决方案:RPC Firewall。
加入我们的 |Zero| Labs Slack 社区工作空间,提出任何问题、反馈,或仅仅打个招呼。
我们也欢迎通过电子邮件联系我们(如果你是那种喜欢邮件的人)。联系邮箱:[email protected]
以下教程展示了 RPC Firewall 的基本安装与配置,以及它如何防御各种基于 RPC 的攻击的演示。
RPC 是许多横向移动技术、侦察、中继攻击或仅仅是利用有漏洞的 RPC 服务的底层机制。
DCSync 攻击?基于 RPC。远程 DCOM?基于 RPC。WMIC?基于 RPC。SharpHound?基于 RPC。PetitPotam?基于 RPC。PsExec?基于 RPC。ZeroLogon?基于 RPC……嗯,你明白了吧 :)
在本文档中,我们将使用以下术语:
可用于审计所有远程 RPC 调用。 一旦执行任何远程攻击工具,你将看到哪些 RPC UUID 和 Opnum 被远程调用。
参见此处的示例配置。
当 RPCFW Configuration 配置为审计时,事件会写入 Windows 事件日志。 RPC Filter 事件写入安全日志,事件 ID 为 5712。RPC Firewall 日志写入 Application/RPCFW。
用户可以将这些日志转发到 SIEM,并用于为不同服务器创建远程 RPC 流量的基线。 当审计到异常 RPC 调用时,可用于触发告警通知 SOC 团队。
我们集成了几个 Sigma 规则,可用于检测不寻常的 RPC 活动和攻击。
RPCFW Configuration 可以配置为仅阻止并审计潜在恶意的 RPC 调用。所有其他 RPC 调用不会被审计,以减少噪音并提高性能。
一旦检测到潜在恶意的 RPC 调用,它将被阻止并审计。这可用于通知 SOC 团队,同时保护服务器安全。
作为补充保护,你可以使用 RPC Filtering 功能(也通过 RpcFwManager.exe 支持)。
此类配置的示例在此处。
它由 3 个组件组成:
虽然两种方法各有优缺点,但使用 RPC Firewall 有几个主要优势值得特别关注。它们分别是:
另一方面,RPC Filters 非常适合批量允许或拒绝整个 UUID,因为它们可以毫无问题地做到这一点。
在运行任何命令之前,建议检查部署状态。通过执行 /status 命令:
RpcFwManager.exe /status
这将显示 RPC Firewall 和 RPC Filters 的状态。输出将包含安装状态的详细信息,以及部署的运行状态。
几乎每个命令都可以在末尾添加 fw 或 flt 后缀。这告诉 RPCFW Manager 该命令是应用于 RPC Firewall('fw')、RPC Filters('flt'),还是两者都应用(不使用后缀时)。
执行相关功能的安装(RPC Filters / RPC Firewall / 两者)。
请确保在安装/卸载期间关闭事件查看器。 此外,建议在安装前先停止并卸载,以确保没有旧版本存在。
RpcFwManager.exe /stop
RpcFwManager.exe /uninstall
RpcFwManager.exe /install
卸载则相反。同样,建议在卸载前确保服务已停止。
RpcFwManager.exe /stop
RpcFwManager.exe /uninstall
RPC Filters 本质上应用于整个系统,覆盖所有 RPC 服务器。此类过滤器在重启后也是持久的。 任何新的或旧的进程都将根据 RPCFW Configuration 受到 RPC Filters 的保护。
RPC Firewall 通过注入方式保护所有侦听远程 RPC 调用的 RPC 服务器进程。 这是通过将 RPC Firewall 注入到加载了 RPCRT4.DLL(RPC 运行时)的进程中实现的。加载后,RPC Firewall 将检测该 RPC 服务器是否正在侦听远程 RPC 调用。如果不是,它将自行卸载。 如果进程是有效的 RPC 服务器,rpcFirewall 将根据 RPCFW Configuration 开始审计和监控传入的 RPC 调用。
推荐保护 RPC 服务的方法是使用 '/start' 命令。这会启动 RPC Firewall 服务(对于 'fw' 或无后缀),并创建 RPC Filters(对于 'flt' 或无后缀)。
RpcFwManager.exe /start
也可以临时使用 RPC Firewall 来保护特定进程。这种方式不会启动 RPC Firewall 服务,也不会在重启后持久化。
按进程 ID(PID)保护单个进程:
RpcFwManager.exe /start pid <pid>
按名称保护单个进程:
RpcFwManager.exe /start process <进程名称>
要停止保护,只需使用适当后缀执行 '/stop' 命令(无法停止对特定进程的保护)。
RpcFwManager.exe /stop
根据使用的后缀('fw' 或 'flt' 或无),这将停止 RPC Firewall 服务并从所有进程中卸载 RPC Firewall dll。对于 RPC Filters,它将删除由 RPCFW Manager 生成的所有过滤器。
一旦启动,RPC Firewall 将在重启后保持持久化。 RPC Filters 也是持久的。
RPCFW Manager 会在可执行文件所在目录查找 RpcFw.conf 文件。 该文件使用以下配置选项:
重要提示:每个配置行必须以 'fw:' 或 'flt:' 为前缀,以指示该行应用于 RPC Firewall 还是 RPC Filter。
要查看更多 RPC 相关的“东西”,有一个 show 命令。目前它只显示受保护的进程,这些进程无法被 RPC Firewall 模块保护。
RpcFwManager.exe /show
配置顺序很重要,因为第一个匹配项决定了 RPC 调用的结果。
例如,以下配置片段将使用 RPC Firewall 保护域控制器免受 DCSync 攻击。 它通过仅允许来自其他域控制器的 MS-DRSR UUID 的“危险”opnum 3 DRSGetNCChanges 来实现。
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 addr:<dc_addr1> opnum:3 action:allow
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 addr:<dc_addr2> opnum:3 action:allow
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 opnum:3 action:block
每当配置发生变化时,需要通过 update 命令通知 rpcFirewall.dll:
RpcFwManager.exe /update
对于 RPC Firewall,打开事件查看器 -> 应用程序和服务日志 -> RPCFW。 事件 ID 1 和 2 表示“保护”和“取消保护”事件。事件 ID 3 审计实际的 RPC 调用。 另外,添加“关键字”列。该列将包含“审核成功/失败”,表示 RPC 调用是否被阻止。
对于 RPC Filters,打开事件查看器 -> 安全 -> RPCFW。筛选事件 ID 5712。
当然可以!欢迎提交拉取请求。
我们也希望如此!请将您的想法、建议或问题通过电子邮件发送给我们:[email protected]
更多详情请参见 LICENSE。
| 参数名称 | 说明 | 支持范围... |
|---|
| opnum: | 匹配 RPC opnum | RPC Firewall |
| verbose: | 可以是 true 或 false。当为 true 时,输出特定 RPC 调用的调试信息(默认 false) | RPC Firewall |
| prot: | 匹配使用的协议,对应协议序列常量中的任意一个 | RPC Firewall 和 Filters 均支持 |
| addr: | 匹配远程 IP 地址(IPv4 或 IPv6,包括 CIDR) | RPC Firewall 完全支持,RPC Filters 部分支持,更多信息 |
| uuid: | 匹配特定 UUID | RPC Firewall 和 Filters 均支持 |
| action: | 可以是 allow 或 block(默认 allow) | RPC Firewall 和 Filters 均支持 |
| audit: | 可以是 true 或 false。控制事件是否写入 RPCFW 日志(默认 false) | RPC Firewall 和 Filters 均支持 |
| sid: | 匹配已认证用户对应的安全标识符。可以是特定用户或组。 | RPC Firewall 和 Filters 均支持 |