通过 ebtables 进行 ARP 欺骗过滤¶
此问题允许来自虚拟机 (VM) 的 ARP 缓存中毒攻击针对同一网络中的其他 VM 发起。 这是一种安全问题,尤其是在共享网络上。
此蓝图建议我们利用 ebtables 工具配置以太网帧级别过滤,从而防止 VM 发送这些欺骗数据包。
问题描述¶
使用 ARP 缓存中毒攻击,本地网络中的设备可以冒充他人。 具体来说,设备可以声称拥有它实际上没有的 IP 地址。
攻击者发送一个免费的 ARP 响应,其中他们的网络接口(由 MAC 地址标识)声称配置了某个 IP 地址。 然而,这可能是其他人的 IP 地址。 网络中的其他设备会使用欺骗条目更新他们的 ARP 缓存,并将攻击设备的 MAC 地址作为要发送到被攻击 IP 地址的帧的目的地地址。
提议的变更¶
我们建议添加一个“ebtables 管理器”,它知道如何利用 ebtables 实用程序。 该实用程序可用于创建以太网帧级别过滤规则。
每当为 VM 创建或删除端口时,我们使用 ebtables 管理器更新 ebtables 规则,从而防止通过此端口发送欺骗的 ARP 数据包。
请注意,ebtables 管理器代码很大程度上基于 Édouard Thuleau 的工作,他提交了一个补丁(请参阅下面的“参考”部分)。
然而,该补丁并未包含在发布版本中,并且被放弃了。 我们现在正在恢复该补丁的大部分内容。
已更新版本的补丁提交给 Juno,但由于各种原因被拒绝了。
现有的补丁用新的 ebtables 过滤器替换了部分基于 iptables 的过滤。 因此,它改变了 iptables_firewall.py 中的大量现有代码。 这并不受欢迎,因为这段代码被认为是不稳定的,需要重写。
因此,我们现在建议对 iptables 代码的更改保持最小。 我们只需要在 iptables 代码中添加几个小的钩子,以便在创建或删除端口时调用 ebtables 管理器代码。 ARP 欺骗相关的规则与之前的补丁相同,但是此补丁不包含之前补丁中引入的任何无关规则。
如果将来 iptables 代码要重写,可以将任何钩子轻松移植到 ebtables 代码中。
数据模型影响¶
无。
REST API 影响¶
无。
安全影响¶
ebtables 管理器代码以与 iptables 代码相同的权限运行(root-wrap)。
它提高了共享网络上 VM 的安全性。
通知影响¶
无。
其他最终用户影响¶
无。
性能影响¶
每当创建或删除 VM 端口时,都会调用新代码。 调用 ebtables 代码的影响与调用 iptables 代码的影响类似。 它将与 iptables 代码一起调用,并且不会替换它。 ebtables 代码仅在创建或删除端口时被触及,其他时间不会。
IPv6 影响¶
不适用。
其他部署者影响¶
需要安装“ebtables”实用程序。 这通常在各种标准软件包中可用。 例如,在 Debian 上,可以这样安装:
# apt-get install ebtables
开发人员影响¶
无。
事实上,提议的补丁旨在尽可能减少影响。 现有代码不会被更改,iptables 和 ebtables 代码可以独立地重构,而不会相互影响。
社区影响¶
?
备选方案¶
似乎 iptables 无法执行这种过滤,因此不能用于此目的。
另一种选择是无所作为:这仅在共享网络上是一个问题。 然而,这是一个商业决策,而且似乎有些人非常渴望拥有这个补丁。
实现¶
负责人¶
- 主要负责人
Juergen Brendel (jbrendel@cisco.com)
工作项¶
实现 ebtables 代码。
实现使用 ebtables 管理器创建相关欺骗规则的代码。
将代码与 iptables 集成:在 iptables-firewall 代码中添加小的钩子。
各种测试。
依赖项¶
需要安装 ebtables 实用程序。
测试¶
Tempest 测试¶
尚未确定。
功能测试¶
功能测试,以表明 iptables 和 ebtables 代码可以正确协同工作。
API 测试¶
无。
文档影响¶
对 ebtables 的需求可能在某个地方列为要求。
用户文档¶
无。
开发人员文档¶
无。
参考资料¶
Édouard Thuleau 的原始补丁:https://review.openstack.org/#/c/70067/
Launchpad 蓝图:https://blueprints.launchpad.net/neutron/+spec/arp-spoof-patch-ebtables