通过软/硬件技术可以做到真正的IP伪造吗?

由于表达能力有限,我尽量以最简单易懂的语言描述我的问题。 问题概述 从技术角度来讲,可不可以通过软或硬件做到真正的IP伪造? 比如我想把本机的外网IP 1.1.1.1 伪造为 8.8.8.8 第一个问题 以下A B C 三种方式哪个可以真正或理论上做到?并且A B C 分别需要用什么软硬件技术来实现? A. 伪造的IP 8.8.8.8 只用于访问网络上的其他设备,不需要其他设备通过 8.8.8.8 访问我的设备。 B. 8.8.8.8 不用于访问其他设备,只需要让其他…
关注者
317
被浏览
61071

20 个回答

请题主先看看这个小品:

youtu.be/ukraG58oxgU


马:还有呢,他寄信从不贴邮票 芳:那能寄到吗? 马:能呀,他把那收信人跟寄信人的地址倒过来写。邮局一看,邮资不足退回去,正好退给那收信人了 芳:啊,郭大宝那聪明都用在这上面了

这个问题涉及到 IP 网络的工作原理,其实如果 IP 网络的工作过程搞清楚了,这些问题就是自然可以解决的了。

IP 网络的工作过程,和邮政系统特别像。邮政系统中,数据被包成一封一封的信来传输;IP 网络上,数据则是以数据包为单位传输的。标准的 IP 网络中(没有额外的策略和安全配置),数据包从源主机发出,经由一系列的路由器转发,最终到达目标主机。当经过每一个路由器的时候,路由器都会根据其目的地址进行路由选择,即选取下一个该发给的路由器。每个数据包的路由选择过程是相互独立的,这意味着:

  • 连续传输的几个数据包的路径选择没有必然联系;
  • 理想情况下,路由选择与且只与目的地址有关;
  • 某数据包的传输路径与对该数据包回复的数据包的传输路径没有必然联系;

另外,我们要注意,多数的有意义的通信过程都是双向的。例如,我使用浏览器浏览某网站的网页,这个过程中,看似是浏览器发起到网站服务器的连接请求,实际上,仔细想一下,就会发现,这里面还有网站服务器发回给浏览器的数据内容。如果我们设法单向阻断网站服务器到浏览器的数据,却不阻止浏览器到服务器的数据,实际上,浏览器也是无法完成“浏览网站”这个任务的。

因此,你问的三个问题中,无论你是使用伪造的地址作为源地址,还是目的地址,只要你想完成有意义的“访问”这个动作,都需要达到 C 这个层次,即双向可达。

事实上,根据“路由选择与且只与目的地址有关”这一条,发出的数据包可以任意填写源地址。这好比说,A 写了一封信给 B,但是落款却写的是 C 的地址,在信里面骂了 B 一通。B 看了很生气,回敬了 C 几句。但是 C 收到了这些“回敬”,感觉莫名其妙,于是不理会 B —— 显然,A 是不会收到 B 的回敬的。

A 为什么不会收到 B 写给 C 的信呢?答案是显然的:这一点是由邮政系统的投递准确保证的。在 IP 网络内,之所以能够知道某个目的地址的数据包要发给谁,是依靠路由表来管理的。路由信息的管理是通过路由协议进行的。这个协议的大致的工作过程是,每一个运营商都向他的邻居通告自己有哪些 IP 地址段。假设运营商甲与乙和丙连接,丁也与乙和丙连接,那么甲就会从乙与丙那里收到丁的路由通告;然后甲会根据一些策略,来选取到丁的路径,发到乙或者发到丙。路由信息的交换,是运营商之间的事情,而作为运营商甲的用户 A,自然无法发出路由通告,也不可能把去往运营商丁的用户 D 的数据劫持到他这里。

不过,如果是运营商戊由于配置错误,或者是出于恶意,也声称 D 的地址在自己这里,并且这个通告被甲采信了,那么确实可以讲去往 D 的数据劫持下来。因此,运营商之间,往往都会根据相关地址分配的信息,过滤对方发来的路由通告,防止出现类似问题。因此,对于一般用户来说,无论地址是否被分配,也无论地址是否被占用,都不能完成 ABC 这三种情况。对于 IPv6,因为路由的概念和寻路方法与 IPv4 一致,因此结论也是一致的。

至于我刚才提到的伪造源地址的问题,也可以通过源地址检查的方式进行过滤,实际上也是很难实现的。

题主不需要伪造,可以将8.8.8.8这个IP配置在任何机器上,进一步说,可以将喜欢的IPv4靓号配置在自己的设备上,如果运气好,运营商不检查出方向的IP包的源IP(是否1.1.1.1?),你可以将这个IP包发给Internet上的任何主机,这个技术就是经常被使用的DoS攻击(Denial Of Service)

只要使用软件,循环修改源IP地址,目的IP为被攻击服务器的IP,包内容为TCP SYN,由于这些源IP可能不存在,无法完成三次握手(即使存在,也无法完成连接),所以服务器会有很多半开连接(half-open),可以快速耗尽服务器的内存资源,造成合法用户无法连接。

问题是,你可以偷偷摸摸使用,但回程的IP包会送达到8.8.8.8那台主机,因为Internet压根不知道你拥有8.8.8.8,运营商也不会帮你扩散8.8.8.8这条路由,如果扩散了,那么发完8.8.8.8的正常流量可能都被你伪造的8.8.8.8截流了,那谁还敢和这家运营商连接?

综上所述,可以使用伪造的IP发送出方向的包,但返程流量全部会流到合法的用户主机(如果存在),即使不存在,也不会流到你的主机。

第一个问题2)3)我们每天都在用,VPN、隧道,你的电脑1.1.1.1 与8.8.8.8 建立一个VPN/隧道,你所有流量都走隧道,8.8.8.8帮你做地址转换,那么你的电脑1.1.1.1 呈现在Internet上就是8.8.8.8,但这需要8.8.8.8主机配合你完成隧道建立,没有8.8.8.8的配合,这一切看起来都是天方夜谭。

至于我们经常遇到的TCP被中间防火墙Reset,这个压根不是什么难题,因为流量会途径防火墙,防火墙伪造一个TCP reset 报文太小菜一碟了。