知识

允许traceroute探测漏洞解决

时间:2010-12-5 17:23:32  作者:探索   来源:综合  查看:  评论:0
内容摘要:去年秋天,我帮一个做跨境电商的朋友看服务器。他租了台海外VPS,跑了三个月,流量账单突然翻了三倍。登录后台一查,ICMP和UDP的入站包占了七成,源IP遍布全球。他问我是不是被DDoS了,我说不是,你

去年秋天,允许我帮一个做跨境电商的探测朋友看服务器。他租了台海外VPS,漏洞跑了三个月,解决流量账单突然翻了三倍。允许登录后台一查,探测ICMP和UDP的漏洞入站包占了七成,源IP遍布全球。解决他问我是允许不是被DDoS了,我说不是探测,你只是漏洞被人当成了traceroute的中转节点——你的机器允许别人拿它做路径探测,而探测产生的解决回包全算在你头上。

这就是允许典型的traceroute探测漏洞被利用的场景。严格说,探测它不是漏洞某个CVE编号的漏洞,而是一种配置缺陷:服务器对TTL递减的探测包做出了回应,暴露了自身路径信息,还替攻击者承担了流量成本。攻击者用你的IP做跳板去探测别人,或者反过来,用你的机器当反射放大器,把你的带宽和CPU时间消耗干净。

traceroute到底在干什么

traceroute的原理不复杂。它发送一系列数据包,第一个包的TTL设为1,到达第一跳路由器时TTL减为0,路由器丢弃它并回一个ICMP超时报文。第二个包TTL设为2,到达第二跳才被丢弃。如此递增,直到目标主机回应一个ICMP端口不可达或UDP响应。这样你就得到了从源到目标经过的每一跳IP。

问题出在中间节点上。很多服务器默认会回应这些ICMP超时报文,即使它们根本不是路径上的路由器。一台普通Linux主机如果开启了ICMP回应,收到TTL=1的UDP包时也会回一个ICMP超时,这就等于告诉探测者:“我在这里,我的IP是xxx。”更糟的是,如果这台机器同时允许UDP入站,攻击者可以伪造源IP为受害者地址,向你的服务器发送大量TTL=1的UDP包,你的服务器就会把ICMP超时报文全部发往受害者,形成反射放大。

我看到的真实案例

朋友那台VPS跑的是Ubuntu 20.04,默认iptables规则几乎全开。我让他执行了一条命令:iptables -L -n -v。INPUT链的policy是ACCEPT,没有任何限制。ICMP的echo-request和echo-reply都没拦,UDP的入站也是全放行。这意味着任何人只要知道他的IP,就能拿他做traceroute的中间跳板。

我给他改了三处。第一,在INPUT链顶部加一条规则,只允许已建立连接的包进入:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT。第二,限制ICMP类型,只放行echo-request和destination-unreachable,其他ICMP类型全部丢弃:iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT,然后iptables -A INPUT -p icmp -j DROP。第三,对UDP入站做速率限制,超过阈值的直接丢:iptables -A INPUT -p udp -m limit --limit 10/s -j ACCEPT,后面跟一条DROP。

改完之后,他服务器上那些莫名其妙的ICMP回包立刻消失了。流量账单第二个月降回正常水平。整个过程不到十分钟。

为什么很多人不重视

因为traceroute探测本身看起来人畜无害。它不像SQL注入那样能直接拖库,也不像SSH爆破那样能拿到shell。它只是“暴露了一点信息”。但信息本身就是攻击面。攻击者拿到你的网络拓扑,就知道你前面有几层防火墙、哪一跳延迟最低、哪个IP可能是内网出口。这些数据拼起来,就是一张入侵路线图。

更实际的问题是成本。一台允许traceroute探测的服务器,如果带宽是1Gbps,攻击者用1000个伪造源IP同时打过来,每个包触发一个ICMP回包,你的上行带宽瞬间被占满。你付了流量费,攻击者零成本。这比传统DDoS更隐蔽,因为单看每个包都很正常。

怎么判断自己有没有这个问题

最简单的办法是从外部机器跑一次traceroute到你服务器的IP。如果路径中出现了你的服务器IP,而它并不是目标终点,那说明它在回应探测包。另一个办法是抓包:tcpdump -i eth0 icmp,看有没有大量type 11(超时)的ICMP出站包。如果有,基本可以确定被利用了。

修复思路就一条:默认拒绝,按需放行。ICMP不是不能开,但没必要开全部类型。UDP入站如果不是业务必需,直接关掉。已经建立的连接放行,新建的探测包一律丢弃。防火墙规则写完之后,用iptables-save持久化,不然重启就白干了。

我自己的几台机器从2019年起就只放行ICMP echo-request和fragmentation-needed,其他全丢。到现在没出过任何因为ICMP被限制导致的业务问题。DNS、HTTP、SSH全都正常跑。那些说“关了ICMP会断网”的,多半是没试过精细控制。

traceroute探测漏洞不是什么高深的东西。它就是一个默认配置太宽松的问题。花十分钟收紧规则,比事后追流量账单划算得多。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap