【问题标题】:How to prevent SSDP reflection / amplification attacks correctly?如何正确防止 SSDP 反射/放大攻击?
【发布时间】:2015-09-15 09:06:02
【问题描述】:

我正在实现一个应该响应 SSDP M-SEARCH 查询的设备。

我是设备供应商,无法控制这些设备的部署位置。

有一种已知的 DDoS 攻击使用 SSDP 搜索放大,即攻击者从虚假地址发送搜索请求,而编码不良的 SSDP 服务器会响应该虚假地址。假地址最终会被敲打。

我应该怎么做才能防止我的设备被用于此类攻击?

  1. 仅设置 TTL=2 并依靠路由器丢弃数据包
  2. 只响应来自自己子网的请求
  3. 为有效的查询源子网添加配置选项
  4. 猜猜“本地”和“全球”的 IP 地址是什么
  5. 添加响应限制,希望最好
  6. 您的建议?

Wrt 1. TTL 应该根据 SSDP 规范进行配置;即使响应非常低,仍然会从本地网络泄漏。如果网络上有桥接 VPN,响应会泄漏得很远。

Wrt 2. 我可以想象可以访问多个子网的公司网络(例如,一个子网用于无线客户端,另一个用于台式机,另一个用于服务器),因此我的设备必须可以跨子网搜索(尽管每个规范都受 TTL 限制) .

Wrt 3. 配置和维护麻烦。

Wrt 4. 有可靠的方法吗? IPv6 呢?那些有例如的网络呢? /28 片全局地址?

Wrt 5. 来自无数设备的涓涓细流仍然相当于洪流......

参考:https://blog.sucuri.net/2014/09/quick-analysis-of-a-ddos-attack-using-ssdp.html

【问题讨论】:

  • UPnP 协议从未被设计为暴露在公共互联网上,您有任何理由回应外部查询吗?!
  • 好点@goitaca,然后如何检测我的一个接口是否恰好在公共互联网上(例如愚蠢的用户或防火墙配置错误)

标签: security network-programming ddos ssdp


【解决方案1】:

另一种选择是根本不回复单播请求。不过,我不能给你一个明确说明这是允许的消息来源。 One of the drafts 肯定读起来好像是这样,如果是这样的话也很有意义:毕竟这是一个发现协议。

由于在任何合理的默认配置中默认情况下都不会路由多播,并且 239.0.0.0/8 是 organization-local, 您可以放心地假设到达多播地址的请求是真实的。 (当然,除非您自己的网络中有攻击者,但这是另一个问题。)

在 Linux 上,可以使用IP_PKTINFO 套接字选项检查传入的 UDP 数据包,以验证它实际上是发送到多播地址:

https://stackoverflow.com/a/5309155/705086 http://www.linuxquestions.org/questions/programming-9/how-to-get-destination-address-of-udp-packet-600103/

【讨论】:

  • AFAIK 无法判断请求是通过多播地址还是单播地址发送的(假设攻击者找到了我的单播地址)。在任何一种情况下,所有套接字 IP 给我的都是单播源地址。对吗?
  • 我会让 SO 自动奖励赏金,因为这是一个有效的 hack;然而,这似乎不是一个规范的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
相关资源
最近更新 更多