IP欺骗与盗用原理

简介:
IP欺骗与盗用原理

IP欺骗的技术比较复杂,不是简单地照猫画老虎就能掌握,但作为常规攻击手段,有必要理解
其原理,至少有利于自己的安全防范,易守难攻嘛。 

假设B上的客户运行rlogin与A上的rlogind通信: 

1. B发送带有SYN标志的数据段通知A需要建立TCP连接。并将TCP报头中的sequence number设
置成自己本次连接的初始值ISN。 

2. A回传给B一个带有SYS+ACK标志的数据段,告之自己的ISN,并确认B发送来的第一个数据段
,将acknowledge number设置成B的ISN+1。 

3. B确认收到的A的数据段,将acknowledge number设置成A的ISN+1。 

B ---- SYN ----> A 
B <---- SYN+ACK ---- A 
B ---- ACK ----> A 

TCP使用的sequence number是一个32位的计数器,从0-4294967295。 TCP为每一个连接选
择一个初始序号ISN,为了防止因为延迟、重传等扰乱三次握手,ISN不能随便选取,不同系统
有不同算法。理解TCP如何分配ISN以及ISN随时间变化的规律,对于成功地进行IP欺骗攻击很
重要。 

基于远程过程调用RPC的命令,比如rlogin、rcp、rsh等等,根据/etc/hosts.equiv以及
$HOME/.rhosts文件进行安全校验,其实质是仅仅根据信源IP地址进行用户身份确认,以便允
许或拒绝用户RPC。 

IP欺骗攻击的描述: 

1. 假设Z企图攻击A,而A信任B,所谓信任指/etc/hosts.equiv和$HOME/.rhosts中有相关设置
。注意,如何才能知道A信任B呢?没有什么确切的办法。我的建议就是平时注意搜集蛛丝马迹
,厚积薄发。一次成功的攻击其实主要不是因为技术上的高明,而是因为信息搜集的广泛翔实
。动用了自以为很有成就感的技术,却不比人家酒桌上的巧妙提问,攻击只以成功为终极目标
,不在乎手段。 

2. 假设Z已经知道了被信任的B,应该想办法使B的网络功能暂时瘫痪,以免对攻击造成干扰。
著名的SYN flood常常是一次IP欺骗攻击的前奏。请看一个并发服务器的框架: 
int initsockid, newsockid; 
if ((initsockid = socket(...)) < 0) { 
error("can‘t create socket"); 

if (bind(initsockid, ...) < 0) { 
error("bind error"); 

if (listen(initsockid, 5) < 0) { 
error("listen error"); 

for (;{ 
newsockid = accept(initsockid, ...); /* 阻塞 */ 
if (newsockid < 0) { 
error("accept error"); 

if (fork() == 0) { /* 子进程 */ 
close(initsockid); 
do(newsockid); /* 处理客户方请求 */ 
exit(0); 

close(newsockid); 


listen函数中第二个参数是5,意思是在initsockid上允许的最大连接请求数目。如果某个时
刻initsockid上的连接请求数目已经达到5,后续到达initsockid的连接请求将被TCP丢弃。注
意一旦连接通过三次握手建立完成,accept调用已经处理这个连接,则TCP连接请求队列空出
一个位置。所以这个5不是指initsockid上只能接受5个连接请求。SYN flood正是一种 Denial
of Service,导致B的网络功能暂时中断 

Z向B发送多个带有SYN标志的数据段请求连接,注意将信源IP 地址换成一个不存在的主机X;B
向子虚乌有的X发送SYN+ACK数据段,但没有任何来自X的ACK出现。B的IP层会报告B的TCP层,X
不可达,但B的TCP层对此不予理睬,认为只是暂时的。于是B在这个initsockid上再也不能接
收正常的连接请求。 

Z(X) ---- SYN ----> B 
Z(X) ---- SYN ----> B 
Z(X) ---- SYN ----> B 
Z(X) ---- SYN ----> B 
Z(X) ---- SYN ----> B 
...... 
X <---- SYN+ACK ---- B 
X <---- SYN+ACK ---- B 
X <---- SYN+ACK ---- B 
X <---- SYN+ACK ---- B 
X <---- SYN+ACK ---- B 
...... 

我认为这样就使得B网络功能暂时瘫痪,可我总觉得好象不对头。 

因为B虽然在initsockid上无法接收TCP连接请求,但可以在another initsockid上接收,
这种SYN flood应该只对特定的服务(端口),不应该影响到全局。当然如果不断地发送连接请
求,就和用ping发洪水包一个道理,使得B的TCP/IP忙于处理负载增大。至于SYN flood,回头
有机会我单独灌一瓢有关DoS的。如何使B的网络功能暂 碧被居 很多办法,根据具体情况而定
,不再赘述。 

3. Z必须确定A当前的ISN。首先连向25端口(SMTP是没有安全校验机制的),与1中类似,不过
这次需要记录A的ISN,以及Z到A的大致的RTT(round trip time)。这个步骤要重复多次以便求
出RTT的平均值。现在Z知道了A的ISN基值和增加规律(比如每秒增 加128000,每次连接增加
64000),也知道了从Z到A需要RTT/2 的时间。必须立即进入攻击,否则在这之间有其他主机与
A连接, ISN将比预料的多出64000。 

4. Z向A发送带有SYN标志的数据段请求连接,只是信源IP改成了B,注意是针对TCP513端口
(rlogin)。A向B回送SYN+ACK数据段,B已经无法响应,B的TCP层只是简单地丢弃A的回送数据
段。 

5. Z暂停一小会儿,让A有足够时间发送SYN+ACK,因为Z看不到这个包。然后Z再次伪装成B向A
发送ACK,此时发送的数据段带有Z预测的A的ISN+1。如果预测准确,连接建立,数据传送开始
。问题在于即使连接建立,A仍然会向B发送数据,而不是Z,Z 仍然无法看到A发往B的数据段
,Z必须蒙着头按照rlogin协议标准假冒B向A发送类似 "cat + + >> ~/.rhosts" 这样的命令
,于是攻击完成。如果预测不准确,A将发送一个带有RST标志的数据段异常终止连接,Z只有
从头再来。 

Z(B) ---- SYN ----> A 
B <---- SYN+ACK ---- A 
Z(B) ---- ACK ----> A 
Z(B) ---- PSH ----> A 
...... 

6. IP欺骗攻击利用了RPC服务器仅仅依赖于信源IP地址进行安全校验的特性,建议阅读
rlogind的源代码。攻击最困难的地方在于预测A的ISN。我认为攻击难度虽然大,但成功的可
能性也很大,不是很理解,似乎有点矛盾。考虑这种情况,入侵者控制了一台由A到B之间的路
由器,假设Z就是这台路由器,那么A回送到B的数据段,现在Z是可以看到的,显然攻击难度骤
然下降了许多。否则Z必须精确地预见可能从A发往B的信息,以及A期待来自B的什么应答信息
,这要求攻击者对协议本身相当熟悉。同时需要明白,这种攻击根本不可能在交互状态下完成
,必须写程序完成。当然在准备阶段可以用netxray之类的工具进行协议分析。 

7. 如果Z不是路由器,能否考虑组合使用ICMP重定向以及ARP欺骗等技术?没有仔细分析过,
只是随便猜测而已。并且与A、B、Z之间具体的网络拓扑有密切关系,在某些情况下显然大幅
度降低了攻击难度。注意IP欺骗攻击理论上是从广域网上发起的,不局限于局域网,这也正是
这种攻击的魅力所在。利用IP欺骗攻击得到一个A上的shell,对于许多高级入侵者,得到目标
主机的shell,离root权限就不远了,最容易想到的当然是接下来进行buffer overflow攻击。 

8. 也许有人要问,为什么Z不能直接把自己的IP设置成B的?这个问题很不好回答,要具体分
析网络拓扑,当然也存在ARP冲突、出不了网关等问题。那么在IP欺骗攻击过程中是否存在ARP
冲突问题。回想我前面贴过的ARP欺骗攻击,如果B的ARP Cache没有受到影响,就不会出现ARP
冲突。如果Z向A发送数据段时,企图解析A的MAC地址或者路由器的MAC地址,必然会发送ARP请
求包,但这个ARP请求包中源IP以及源MAC都是Z的,自然不会引起ARP冲突。而ARP Cache只会
被ARP包改变,不受IP包的影响,所以可以肯定地说,IP欺骗攻击过程中不存在ARP冲突。相反
,如果Z修改了自己的IP,这种ARP冲突就有可能出现,示具体情况而言。攻击中连带B一起攻
击了,其目的无非是防止B干扰了攻击过程, 如果B本身已经down掉,那是再好不过。 

9. fakeip曾经沸沸扬扬了一下,我对之进行端口扫描,发现其tcp端口113是接收入连接的。
和IP欺骗等没有直接联系,和安全校验是有关系的。当然,这个东西并不如其名所暗示,对IP
层没有任何动作。 

10. 关于预测ISN,我想到另一个问题。就是如何以第三方身份切断 A与B之间的TCP连接,实
际上也是预测sequence number的问题。尝试过,也很困难。如果Z是A与B之间的路由器,就不
用说了; 或者Z动用了别的技术可以监听到A与B之间的通信,也容易些; 否则预测太难。作
者在3中提到连接A的25端口,可我想不明白的 是513端口的ISN和25端口有什么关系?看来需
要看看TCP/IP内部实现的源代码。 

未雨绸缪 

虽然IP欺骗攻击有着相当难度,但我们应该清醒地意识到,这种攻击非常广泛,入侵往往由这
里开始。预防这种攻击还是比较容易的, 比如删除所有的/etc/hosts.equiv、$HOME/.rhosts
文件,修改/etc/ inetd.conf文件,使得RPC机制无法运做,还可以杀掉portmapper等等。设
置路由器,过滤来自外部而信源地址却是内部IP的报文。cisio公司的产品就有这种功能。不
过路由器只防得了外部入侵,内部入侵呢? 

TCP的ISN选择不是随机的,增加也不是随机的,这使攻击者有规可循,可以修改与ISN相关的
代码,选择好的算法,使得攻击者难以找到规律。估计Linux下容易做到,那solaris、irix、
hp-unix还有aix呢?sigh 

虽然写的不怎么,但总算让大家了解了一下IP欺骗攻击,我实验过预测sequence number,不
是ISN,企图切断一个TCP连接,感觉难度很大。作者建议要找到规律,不要盲目预测,这需要
时间和耐心。现在越发明白什么是那种锲而不舍永远追求的精神,我们所向往的传奇故事背后
有着如此沉默的艰辛和毅力,但愿我们学会的是这个,而不是浮华与喧嚣。一个现成的bug足
以让你取得root权限,可你在做什么,你是否明白?我们太肤浅了...... 
















本文转自loveme2351CTO博客,原文链接: http://blog.51cto.com/loveme23/8571 ,如需转载请自行联系原作者



相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8月前
|
存储 测试技术 开发工具
基于版本控制+WORM的OSS数据保护:防勒索攻击与法规遵从实践
在数据保护面临勒索攻击、法规合规及存储成本三重挑战下,本文提出基于OSS的解决方案:结合版本控制与WORM策略实现防篡改保护,通过自动化审计确保合规性,并以多层架构优化恢复效率与成本。实战代码与性能测试验证了方案有效性,适用于构建安全、合规、高效的数据防护体系。
311 3
|
11月前
|
机器学习/深度学习 人工智能 搜索推荐
DeepSeek 速成指南:普通人也能秒懂的 AI 实战手册
DeepSeek 是一款强大的中文大语言模型,能处理长文本、多模态输入,适用于职场、学习、生活等场景。它擅长文案创作、数据分析与复杂任务拆解,相比 ChatGPT,在中文表达和网络热梗上更具优势。掌握精准提问、结果校验和效率工具三大技能,可大幅提升使用效果。同时,避免过度依赖、隐私泄露和伦理模糊的“三大天坑”,并通过角色扮演、思维链拆解等进阶技巧挖掘潜力。DeepSeek 不是替代品,而是助力你高效完成任务、拓展知识边界的超级大脑。未来属于善于与 AI 协作的人,立即行动,设计专属协作流程!
637 0
DeepSeek 速成指南:普通人也能秒懂的 AI 实战手册
|
机器学习/深度学习 人工智能 算法
Scaling Law触礁数据墙?Epoch AI发文预测LLM到2028年耗尽所有文本数据
【6月更文挑战第23天】Epoch AI警告,大语言模型(LLM)可能在2026-2032年间面临“数据墙”,因人类生成文本数据耗尽。论文探讨LLM扩展限制,提出合成数据、迁移学习和提高数据效率作为应对策略,但也引发数据隐私和伦理问题。研究敦促平衡模型发展与数据资源管理[[1](https://arxiv.org/abs/2211.04325)]。
453 6
|
安全 网络安全 PHP
RCE攻击绕过WAF详解
RCE攻击绕过WAF详解
339 3
|
Kubernetes 应用服务中间件 Linux
多Master节点的k8s集群部署
多Master节点的k8s集群部署
|
安全
linuxdd命令备份与恢复
`dd`命令实例:用于备份/恢复磁盘,如`dd if=/dev/hdb of=/dev/hdd`复制整个硬盘。还能压缩备份(`dd if=/dev/hdb | gzip &gt; /root/image.gz`)、恢复(`gzip -dc /root/image.gz | dd of=/dev/hdb`)、备份MBR(`dd if=/dev/hda of=/root/image count=1 bs=512`)、创建swap分区(`dd if=/dev/zero of=/swapfile`)
381 1
|
安全 搜索推荐 API
【现代密码学】笔记 补充7-- CCA安全与认证加密《introduction to modern cryphtography》
【现代密码学】笔记 补充7-- CCA安全与认证加密《introduction to modern cryphtography》
746 0
|
小程序 安全 JavaScript
【微信小程序】-- uni-app 项目创建 & 目录结构讲解(四十九)
【微信小程序】-- uni-app 项目创建 & 目录结构讲解(四十九)
|
Cloud Native 前端开发 Java
【微服务36】分布式事务Seata源码解析四:图解Seata Client 如何与Seata Server建立连接、通信
【微服务36】分布式事务Seata源码解析四:图解Seata Client 如何与Seata Server建立连接、通信
980 0
【微服务36】分布式事务Seata源码解析四:图解Seata Client 如何与Seata Server建立连接、通信
|
域名解析 网络协议 网络安全
网络 | 排错五大步骤,没有解决不了的网络故障准达信息准达信息
网络 | 排错五大步骤,没有解决不了的网络故障准达信息准达信息
695 0