我正在阅读有关Google的新公共DNS服务的一些说明:


性能优势
安全优势

我在安全性部分下注意到了这一点段落:在普遍实施针对DNS漏洞的标准系统范围的解决方案(例如DNSSEC2协议)之前,开放的DNS解析程序需要独立采取一些措施来缓解已知威胁。已经提出了许多技术。有关大多数问题的概述,请参见IETF RFC 4542:使DNS对伪造答案更具弹性的措施。在Google Public DNS中,我们已经实现并建议采用以下方法:




过度供应计算机资源以防止对解析器本身进行直接DoS攻击。由于IP地址对于攻击者来说很容易伪造,因此无法阻止基于IP地址或子网的查询。应对此类攻击的唯一有效方法就是简单地吸收负担。




这是一个令人沮丧的认识;即使在堆栈溢出/服务器故障/超级用户的情况下,我们也经常使用IP地址作为各种禁止和阻止的基础。

所以我的问题:


真的很容易吗?让攻击者在野外伪造IP地址?
如果这样,可以采取哪些缓解措施?


评论

对于基于IP的禁令,欺骗性IP不应成为问题,因为其最终目的是获得访问权限,这需要合法的答复。但是一些更大的风险是:IP被许多人(学校,工作场所,网吧等)共享,并且IP在非静态DSL上重置调制解调器后可以更改为类似的内容。
对于使用欺骗性地址的许多攻击,获得访问权限并不是主要目标。我怀疑使用DNS的各种放大攻击更加频繁。 DNS很可爱(DNSSEC更糟)-您可以发送带有欺骗性源地址的小于100字节的小数据包,从而使欺骗性地址得到7倍至40倍的放大响应。

#1 楼

正如许多其他人所述,只要不关心接收响应,IP标头就很容易伪造。这就是为什么它在UDP上最常见的原因,因为TCP需要三路握手。一个值得注意的例外是SYN泛洪,它使用TCP并试图占用接收主机上的资源。同样,由于丢弃了回复,因此源地址无关紧要。

攻击者欺骗源地址的能力的一个特别讨厌的副作用是反向散射攻击。这里有一个很好的描述,但简单地说,它与传统的DDoS攻击相反:


获得对僵尸网络的控制。
配置所有节点以使用相同的僵尸网络恶意数据包的源IP地址。此IP地址将成为您的最终受害者。
将数据包从所有受控节点发送到Internet上的各个地址,以通常未打开的端口为目标,或连接到声称是其中一部分的有效端口(TCP / 80)

在(3)中提到的任何一种情况下,许多主机都会以不可达的ICMP或TCP重置作为响应,以恶意包的源地址为目标。现在,攻击者可能会通过使用欺骗性的源IP地址,在网络上成千上万台不受影响的计算机对其选定的受害者进行DDoS攻击。就缓解而言,这种风险是实际上,只有ISP(尤其是提供客户访问权限而不是中转的ISP)可以解决的问题。这样做有两种主要方法:


入口过滤-确保进入网络的数据包来自存在于传入接口远端的地址范围。许多路由器供应商实现了诸如单播反向路径转发之类的功能,这些功能使用路由器的路由和转发表来验证传入数据包的源地址的下一跳是传入接口。最好在网络的第3层跃点(即默认网关)上执行。
出口过滤-确保离开网络的数据包仅来自您拥有的地址范围。这是对入口过滤的自然补充,本质上是成为“好邻居”的一部分。确保即使您的网络受到恶意流量的危害,该流量也不会转发到与您对等的网络。

在“ edge”或“访问”网络,客户端与提供者进行交互。由于多路径的复杂性和不对称的路由,在接入层上方实现入口/出口过滤变得更加困难。

我已经看到这些技术(特别是入口过滤)在企业网络中发挥了巨大作用。也许具有更多服务提供商经验的人可以更深入地了解在整个Internet上部署入口/出口过滤的挑战。我认为硬件/固件支持将是一个巨大的挑战,并且无法迫使其他国家的上游提供商实施类似的政策...

评论


听起来很讨厌。那么,如果管理员发现他的服务器是这样的目标,他能做些什么?可能可以暂时阻止来自所有IP的ICMP数据包和TCP重置消息吗?您甚至可以像这样以某种半正常的方式进行操作吗?

–UpTheCreek
2011-2-10在7:57

#2 楼


攻击者在野外伪造IP地址真的很容易吗?


当然,如果我不在乎实际收到任何响应, ,我可以使用任何我喜欢的源地址轻松发送数据包。由于许多ISP确实没有很好的出口规则,因此,我伪造的任何东西都可以交付。

如果攻击者实际上需要双向通信,将变得非常困难。如果他们需要双向通信,则简单地使用某种代理通常会更容易。如果您知道自己在做什么,就很容易设置。

通过IP地址禁止人员在SF / SO / SU上是比较有效的,因为该站点使用http / https,这需要双向通信。

评论


http(s)是这里的关键。 DNS使用UDP,因此所有通信都是通过单个数据包进行的,协议中没有任何确认。

–诺亚
09年12月3日在18:09

猜想就像电子邮件。您可以使用您想要的任何地址发送,除非您希望收到答复

–乔治·伯纳尔(Jorge Bernal)
09年12月3日在18:30

@Jorge:当然。电子邮件/邮政类比是用于向最终用户说明这一点的绝佳工具。

–埃文·安德森(Evan Anderson)
09年12月3日19:00

在DNS中,也可以使用TCP,但这目前使人们感到恐惧。但是,由于答案是ACK,所以没有内置的ACK。

–迈克尔·格拉夫(Michael Graff)
09年12月3日在19:51

@noah-实际上,TCP是关键,而不是HTTP。 TCP不是不可能的,但是它比UDP难100倍。

– Alnitak
09年12月4日在8:44

#3 楼

Zordeche的答案的概念证明(带ubuntu):

$ sudo apt-get install hping3
$ sudo hping3 -1 --spoof 11.10.10.20 www.google.com
HPING www.google.com (eth0 64.233.169.105): icmp mode set, 28 headers + 0 data bytes


然后在另一个控制台中:

$ sudo tcpdump -i eth0 'icmp'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
13:30:19.439737 IP 11.10.10.20 > yo-in-f105.1e100.net: ICMP echo request, id 31297, seq 0, length 8


是的,没什么大不了的,但是除非您能够访问11.10.10.20或在www.google.com和11.10.10.20之间有嗅探声,否则您将不会得到前面提到的答复(而且必须正确输入,因为您无法预测数据包的路由)。另外,如果欺骗者的网关(ISP)正在进行某种ip检查,并且发现源有异味,则可能不会将该包放出门。

评论


但是,ISP通常不会对数据包检查感到困扰吗?

–起搏器
2012年6月21日在20:04



#4 楼

IP地址很容易伪造为单向UDP流量。对于TCP数据包,您只能伪造与SYN数据包的半开放TCP连接。这也是一种DOS攻击的基础。但是您不能使用欺骗的地址建立HTTP连接(例如,如果要过滤会话以使用相同的IP地址)。是的,您可以欺骗数据包中的IP地址,但这仅对某些拒绝服务攻击有用。

评论


您是说很难用欺骗的地址建立HTTP连接,或者甚至不可能这样做?

–起搏器
2012年6月21日20:05

在开放的互联网上,这是不可能的。如果您使用的是同一局域网,则有一些技巧可以欺骗另一台计算机向您发送流量(web.eecs.umich.edu/~zhiyunq/pub / ...)。您可以这样想。 UDP就像发送明信片一样。您可以在寄回地址上写任何名字。 TCP就像是一个对话,如果您没有输入正确的返回地址,您将无法继续对话。这里的其他一些答案可以更好地解释它。

– FryGuy
2012年6月26日20:42



#5 楼

GOOG文章明确讨论了DNS。 DNS使用UDP和TCP数据包。可以伪造UDP,但不能伪造TCP。 TCP需要三向握手。如果伪造了TCP数据包的IP地址,则伪造计算机将不会收到响应,并且连接将失败。就像其他答案中提到的那样,UDP是“即发即弃”,不需要任何响应通信。因此,DoS攻击几乎完全以UDP数据包的形式出现。

在Stack Overflow和家庭网站的背景下,Takaun Daikon提出的问题非常有效。有很多方法可以从ISP获取新IP地址。更改MAC地址显然是最简单的方法,并且适用于许多ISP。另外,许多愚蠢的人可能正在使用公共代理或TOR。显然,阻塞那些数据包的原始IP只会阻塞代理或TOR终止节点。

那么阻止IP地址有效吗?真是的。但是您最终会出错。您将阻止确实不是问题根源的某些IP(即代理),并且还会有人通过更改IP来避免阻塞。如果不幸的人后来无法获得禁用的IP,将无法访问SO系列站点。但是错误率应该很小。除非您要阻止大量IP。但是,如果您一天要阻拦一两次,那应该没问题。

您可能想引入一种稍微复杂一点的方案,在此方案中您只能使用一段时间,例如一年。如果您的网络能够进行带宽限制或连接限制,那么您也可以考虑使用一种方案,将在您的站点上运行Apache Benchmarks的冲洗袋放入带宽非常有限的笼子中。

评论


你可以被伪造。只看劫持TCP会话。 google.com/search?q=hijack+tcp+session

–丹
09年12月3日在18:26

除非攻击者首先可以访问流量,否则使用现代操作系统进行TCP排序攻击是​​非常不切实际的。如果他们无论如何都是中间人,那么他们可能甚至根本不需要进行TCP连接劫持。

–埃文·安德森(Evan Anderson)
09年12月3日在19:02

#6 楼

IP欺骗将继续存在,因为ISP会变得很懒。但是我可以使用任何源地址。这是为什么?简单来说就是成本。

如果我在这里和那里伪造了几个地址,那么我的ISP不会花费任何费用。如果我的ISP的每个用户都在1:00和2:00之间伪造了一个数据包,那么这几乎不会是一时的事。但是,当僵尸网络从许多ISP上的许多主机发送许多欺骗性数据包时,目标计算机或网络将崩溃。

财务现实是,除非您是被攻击者,否则欺骗不会花费任何费用。在客户附近实施过滤需要花费金钱,花钱的人除了知道他们是良好的网络公民外,几乎没有回报。

UDP和ICMP最容易伪造,但TCP也可能。它需要一个不安全的远程OS,该OS使用可预测的序列号来进行利用。有时,负载平衡机器会更改序列号并使它们可预测。因此,TCP是可能的,但难度更大。 UDP的泛滥方面不是特定于DNS的,而是单个小的查询(例如,“。”)将导致较大的响应。因此,它是一个很好的扩增载体。还有许多其他的UDP协议可以使用,但是DNS随处可见,并且很容易找到用于放大攻击的计算机。

DNSSEC使UDP数据包可以到达,这使情况变得更糟。 4k大小。

#7 楼

就基于DNS(D)DOS的攻击而言,IP地址很容易伪造,因为它们通常是即发即弃的UDP数据包。对于HTTP通信,情况并非如此,因此您需要与Web服务器位于同一本地网络上(当然,完全有可能,这取决于您的站点托管在哪里),或者控制中间路由器。

#8 楼

您可以向任何人发送一封信,如果您没有在信封上放回信地址(或放错了回信地址),他们可以雇用世界上所有的垃圾邮件过滤器,并且不打开就不过滤您的邮件(处理)。

但是,如果发件人想要响应,则返回地址最好是正确的,否则就必须有一个应用程序层机制来获取正确的地址。因此,我可以使您认为您正在打开娜娜的一封信,但是即使我以信件的内容愚弄了您,也不会将纳什的支票寄给尼日利亚的某个地址(除非娜娜是尼日利亚人)。因此,只要您不是中间人,挑战/响应也是一种有效的防御方式。

#9 楼

我可以在数据报中设置所需的任何源IP地址。
我的ISP是否将这样的数据包放到野外是另一个问题。

评论


无论如何,有没有绕过ISP过滤器?

–起搏器
2012年6月21日23:51

#10 楼

尽管这确实是必须解决的现实,但潜在的问题实际上是非技术性的:具有恶意意图的人试图做恶意的事情。因此,真正的解决方案也必须是非技术性的。

我认为Stackoverflow所做的正是处理第二道防线的正确解决方案:通过不同方式限制潜在垃圾邮件用户的技术在达到一定程度的“可信度”之前限制其与平台交互的能力。

这些技术不仅有助于提高网站的整体质量,而且实际上可以激励用户更多地参与其中并提供更可信/可靠的答案。

从技术的角度来看,最好的办法就是按照Google的建议:有效地吸收/处理额外的负载。

干得好,并不断进步!

#11 楼

UDP是为什么这很容易的主要部分-实际上,Skype和Slingbox利用了在UDP中轻松伪造IP地址的功能,以通过NAT“打孔”并允许轻松的对等。

TCP更加困难,因为它需要一个完整的SYN / ACK周期,但是您仍然可以使用挂起的SYN数据包来淹没服务器,这些数据包会跳到距离很多跳的IP地址,并且实际上会占用大量路由器在此过程中。

评论


路由器仅路由数据包。它们不保持TCP状态,因此数据包就是数据包就是它们的数据包。

–迈克尔·格拉夫(Michael Graff)
09年12月3日23:50

好点子。因此,它将捆绑服务器(或任何进行SYN / ACK协商的前端设备)等待它们的ACK :-)我们已经将负载均衡器配置为在将SYN / ACK传递给服务器之前完全协商SYN / ACK。一个已经打开的连接,因此在这种情况下可以帮助大时间。

–贾斯汀
09年12月11日在21:57

#12 楼

如上所述,使用代理很简单,并且有大量可用的开放式匿名代理。

即使不使用代理,我也可以将防火墙上的MAC地址设置为任何新的任意值,重置电缆调制解调器,然后ISP将为我分配一个全新的闪亮IP地址。

这仅适用于初学者。还有许多其他方法可以解决IP禁令。

评论


这不是问题。 IP协议的设计是一个真正的“问题”,它无法验证您用来创建IP数据包的IP地址是否属于您。因此,您可以创建具有不同源(目标)地址的数据包风暴,而没有什么可以阻止您将其发送出去。

– monomyth
09年12月3日在18:14

可能会阻止您。您的ISP可以在其路由器上设置出口过滤器,除非源IP地址实际上属于该网络,否则不允许转发数据包。

– Zoredache
09年12月3日在18:56

#13 楼


如果是这样,什么缓解措施是可能的?


在接收端您无能为力。

伪造者的ISP应该过滤其出站流量,以便其客户不能欺骗来自不同网络的IP。

路由器配置中只有几行,因此没有不这样做的借口。

有一种方法可以跟踪攻击者,但是需要您的上游提供商的合作:
http://www.cymru.com/Documents/dos-and-vip.html

#14 楼

正如其他人指出的那样,UDP伪造起来相当琐碎,TCP则没有那么多。运行DSL等服务时,应为每个虚拟线路配置ip verify unicast reverse-path(或与之等效的其他非Cisco装置),该虚拟线路会阻止其源IP地址不在已知沿该线路路由的范围内的任何数据包。

#15 楼

我记得在90年代末使用Visual Basic进行套接字编程,我们可以在连接上设置源IP。我模糊地记得在尝试时,netstat -an显示了实际的源IP,但是Apache日志显示了欺骗的IP。而且我认为Apache也将欺骗的IP交给了perl模块,依此类推。