1.67k likes | 2.08k Views
网络安全基础知识系列培训之二. 网络攻击技术. Wu Yong 北京大学信息学院 软件研究所 - 信息安全研究室. 为什么要研究攻击技术. 知己知彼,百战不殆 中国 《 孙子 》 Pay attention to your enemies, for they are the first to discover your mistakes. Antistthenes, 440 BC 了解网络安全的重要手段 黑客攻击技术 网络防护的一部分 研究网络攻击,是为了更加有效地对网络进行防护 技术繁多,没有明显的理论指导
E N D
网络安全基础知识系列培训之二 网络攻击技术 Wu Yong 北京大学信息学院软件研究所 - 信息安全研究室
为什么要研究攻击技术 • 知己知彼,百战不殆 • 中国《孙子》 • Pay attention to your enemies, for they are the first to discover your mistakes. • Antistthenes, 440 BC • 了解网络安全的重要手段 • 黑客攻击技术 • 网络防护的一部分 • 研究网络攻击,是为了更加有效地对网络进行防护 • 技术繁多,没有明显的理论指导 • 一些技术,既是黑客技术,也是网络管理技术,或者是网络防护技术
电子交易 E-Commerce Internet变得越来越重要 ISP门户网站 复杂程度 Web Email 时间
混合型威胁 (Red Code, Nimda) 70,000 60,000 拒绝服务攻击 (Yahoo!, eBay) 50,000 发送大量邮件的病毒 (Love Letter/Melissa) 40,000 已知威胁的数量 30,000 网络入侵 特洛伊木马 20,000 10,000 多变形病毒 (Tequila) 病毒 网络安全问题日益突出
攻击的基本步骤 • 窥探设施 • 踩点 • 扫描 • 查点 • 列出用户账号 • 列出共享文件 • 确定应用 • 攻击系统 • 扫尾工作 • 安装后门 • 清除入侵痕迹
攻击技术一览 • 攻击系统中常用的攻击技术 • 网络探测 • 欺骗 • 会话劫持 • 拒绝服务攻击(DoS) • 缓冲区溢出 • 口令探测 • 社交工程 • 物理攻击 • 木马 • 隐藏踪迹
网络攻击技术-欺骗 • 欺骗技术 • IP欺骗 • 假冒他人的IP地址发送信息 • 邮件欺骗 • 假冒他人的邮件地址发送信息 • Web欺骗 • 你连到的网站是真的吗? • 其他欺骗 • DNS欺骗 • 非技术性欺骗
IP欺骗 • IP欺骗的动机 • 隐藏自己的IP地址,防止被追踪 • 以IP为授权依据 • 穿越防火墙 • IP欺骗的形式 • 单向IP欺骗 • 双向IP欺骗 • 更高级的形式:TCP会话劫持 • IP欺骗成功的要诀 • IP数据包路由原则:根据目标地址进行路由
IP欺骗(一) • 简单欺骗 • 改变自己的IP地址 • 问题 • 只能发送数据包 • 无法收到回送的数据包 • 防火墙可能阻挡 • 实现手段 • 发送IP包,包头填写上虚假的源IP地址 • 在Unix平台上,直接用socket就可以 • 需要root权限 • 在Windows平台上,需要不能使用winsock • 可以使用winpcap等工具
假冒包:A -> B 回应包:B -> A 被假冒者A 攻击者H 目标机器B IP欺骗(二) • 双向欺骗 • 关键技术-让回应包通过H • H和A在同一个子网内部 • 使用源路由选项 H能看到这个包吗?
IP欺骗(三) • 如何避免IP欺骗 • 主机保护 • 保护自己的机器不被用来实施IP欺骗 • 物理防护、保护口令 • 权限控制,防止其他人随意修改配置信息 • 注意其他的安全措施 • 保护自己的机器不被成为假冒的对象 • 无能为力 • 网络防护 • 路由器上设置过滤器 • 入口:外来包带有内部IP地址 • 出口:内部包带有外部IP地址 • 防止源路由攻击 • 路由器上禁止这样的包
电子邮件欺骗 • 为什么要进行电子邮件欺骗 • 隐藏发件人的身份,例如匿名信 • 挑拨离间,唯恐世界不乱 • 骗取敏感信息 • 欺骗的形式 • 使用类似的电子邮件地址 • 修改邮件客户端软件的账号配置 • 直接连到SMTP服务器上发信 • 电子邮件欺骗的方法 • 与现实邮局进行比较 • 基本邮件协议没有认证机制 • 发信可以要求认证
电子邮件欺骗(一) • 使用类似的邮件地址 • 发信人使用被假冒者的名字注册一个账号,然后给目标发送一封正常的信 我是你的上司XX,请把XXX发送给我 他(她)能识别吗? 我在外面度假,请送到我的个人信箱
电子邮件欺骗(二) • 对于类似邮件地址的解决 • 使用数字签名 • 修改邮件客户端软件的账号设置 • 姓名(Name)属性,会出现在“From”和“Reply-To”字段中,然后显示在“发件人”信息中 • 电子邮件地址,会出现在“From”字段中 • 回复地址,会出现在“Reply-To”字段中,可以不填 • 保护用户免受修改邮件客户的攻击 • 查看完整的电子邮件头部信息 • 多数邮件系统允许用户查看邮件从源地址到目的地址经过的所有主机
电子邮件欺骗(三) • 直接连到SMTP服务器上发信 • telnet连到SMTP服务器的25端口,然后发送命令,常用的命令为: • Helo、Mail from、 Rcpt to、 Data、 Quit • 保护措施 • 邮件服务器的验证 • Smtp服务器验证发送者的身份,以及发送的邮件地址是否与邮件服务器属于相同的域 • 验证接收方的域名与邮件服务器的域名是否相同 • 有的也验证发送者的域名是否有效,通过反向DNS解析 • 攻击者可以运行自己的smtp邮件服务器 • 不能防止一个内部用户冒充另一个内部用户发送邮件
Web欺骗 • Web是建立在应用层上的服务,直接面向Internet用户 • Web欺骗的根源 • 由于Internet的开放性,任何人都可以建立自己的Web站点 • Web站点名字(DNS域名)可以自由注册,按先后顺序 • 并不是每个用户都清楚Web的运行规则 • Web欺骗的动机 • 商业利益,商业竞争 • 政治目的 • Web欺骗的形式 • 使用相似的域名 • Cross-Site Scripting
Web欺骗(一) • 使用相似的域名 • 注册一个与目标公司或者组织相似的域名,然后建立一个欺骗网站,骗取该公司用户的信任,以得到这些用户的信息 • 例如:使用www.whitehouse.com来混淆www.whitehouse.gov • 如果客户提供了敏感信息,那么这种欺骗可能会带来更大的危害 • 用户在假冒的网站上订购了一些商品,然后出示支付信息。 • 假冒的网站把这些信息记录下来并分配一个cookie,然后提示:现在网站出现故障,请重试一次。 • 当用户重试的时候,假冒网站发现这个用户带有cookie,就把它的请求转到真正的网站上。 • 对于从事商业活动的用户,应对这种欺骗提高警惕
Web欺骗(二) • Cross-Site Scripting(跨站脚本攻击) • 现在流行的一种攻击方式 • 绝大多数交互网站或者服务提供网站可能存在这种漏洞 • 攻击产生的根源 • 网站提供交互时可使用HTML代码,用户可上传恶意脚本代码 • 攻击方式(以一个论坛网站为例) • AntiBoard SQL注入及跨站脚本攻击漏洞 • AntiBoard是一款基于PHP的论坛程序。AntiBoard对用户提交的参数缺少充分过滤,远程攻击者可以利用这个漏洞获得敏感信息或更改数据库。
Web欺骗(三) • 防止Web欺骗-使用相似的域名 • 注意观察URL地址栏的变化 • 不要信任不可靠的URL信息 • 你是不是相信自己? • 许多人根据自己的猜测去在浏览器地址栏中写下要访问的网址 • 防止Web欺骗-Cross-Site Scripting • 网站不允许使用HTML语言 • 过于严格,没有必要 • 网站不允许使用脚本程序 • 对特殊字符的过滤 • 黑客们的对策 • 采用另一种字符表达方式来逃避过滤,例如:改用ASCII 码替换<> 如& #60; & #62;
欺骗技术总结 • 我们从上述欺骗技术可以认识到 • IP协议本身的缺陷性 • 应用层上也缺乏有效的安全措施 • 在攻击技术里,欺骗技术是比较低级的,基本上是针对Internet上不完全的机制发展起来的 • 技术含量不高 • 非技术的欺骗 • 社交工程 • 最有效的攻击方法 • 避免欺骗的最好办法 • 增强用户的安全意识,尤其是网络管理人员和软件开发人员的安全意识
网络攻击技术-会话劫持 • 在现实生活中,例如银行的一笔交易 • 如果营业员检查了顾客的身份证和帐户卡, • 抬起头来,发现不再是刚才的顾客 • 他会把钱交给外面的顾客吗? • 网络中的问题 • 在网络上,没有人知道你是一条狗
TCP会话劫持 • 欺骗和劫持 • 欺骗是伪装成合法用户,以获得一定的利益 • 劫持是积极主动地使一个在线的用户下线,或者冒充这个用户发送消息,以便达到自己的目的 • 动机 • Sniffer对于一次性密钥并没有用 • 认证协议使得口令不在网络上传输 • 会话劫持分两种 • 被动劫持 • 监听网络流量,发现密码或者其他敏感信息 • 主动劫持 • 找到当前会话并接管过来,迫使一方下线,由劫持者取而代之 • 攻击者接管了一个合法会话后,可以做更多危害性更大的事情
1 A远程登录,建立会话,完成认证过程 2 监听流量 4 迫使A下线 3 劫持会话 被劫持者A 攻击者H TCP会话劫持 服务器B
会话劫持原理 • TCP协议 • 三次握手建立TCP连接(一个 TCP会话) • 终止一个会话,正常情况 需要4条消息 • 如何标识一个会话 状态:源IP:端口+SN <> 目标IP:端 口+SN • 从TCP会话状态入手 • 要了解每一个方向上的SN(数据 序列号) • 两个方向上的序列号是 相互独立的 • TCP数据包,除了第一个 SYN包以外,都有一个ack 标志,给出了期待对方发送数据 的序列号 • 猜测序列号是成功劫持TCP会话的关键
TCP协议中的序列号(一) • 在每一个ACK包中,有两个序列号 • 第一个(SEG_SEQ)是当前包中数据第一个字节的序号 • 第二个(SEG_ACK)是期望收到对方数据包中第一个字节的序号 • 假设客户(CLT)向服务器(SVR)发起一个连接 • SVR_SEQ: 服务器将要发送的下一个字节的序号 • SVR_ACK:服务器将要接收的下一个字节的序号(已经收到的最后一个字节的序号加1) • SVR_WIND:服务器的接收窗口 • CLT_SEQ: 客户将要发送的下一个字节的序号 • CLT_ACK:客户将要接收的下一个字节的序号(已经收到的最后一个字节的序号加1) • CLT_WIND:客户的接收窗口
TCP协议中的序列号(二) • 关系 • CLT_ACK <= SVR_SEQ <= CLT_ACK + CLT_WIND • SVR_ACK <= CLT_SEQ <= SVR_ACK + SVR_WIND • 只有满足这样条件的包,对方才能接收 • 否则,抛弃该数据包,并且送回一个ACK包(含有期望的序列号) • 同步状态 • SVR_SEQ = CLT_ACK • CLT_SEQ = SVR_ACK • 不同步状态 • SVR_SEQ <> CLT_ACK • CLT_SEQ <> SVR_ACK
TCP协议中的序列号(三) • 如果TCP进入不同步状态 • 客户发送一个包 • SEG_SEQ = CLT_SEQ • SEG_ACK = CLT_ACK • 这个包不会被接收,因为CLT_SEQ <> SVR_ACK • 相反,如果第三方(攻击者)发送一个包 • SEG_SEQ = SVR_ACK • SEG_ACK = SVR_SEQ • 这个包可以被服务器接收 • 如果攻击者能够伪造两边的包的话,还可以恢复客户和服务器之间的会话,使得回到同步状态
TCP ACK Storm • 当一个主机接收到一个不期望的数据包时,它会用自己的序列号发送ACK,而这个包本身也是不可被接受的。于是,两边不停地发送ACK包,形成ACK包的循环,称为ACK风暴(ACK Storm) • 如果有一个ACK包丢掉,则风暴停止
在建立连接的时候劫持会话 • 当攻击者听到握手过程第二步的时候,它给服务器发送一个RST包,然后发送用同样的TCP和端口号构造的一个SYN包,但是序列号与前面的SYN包不同 • 服务器关闭第一个连接,打开第二个连接,并且送回第二个SYN/ACK给客户,攻击者听到这个包之后,给服务器送出一个ACK包 • 至此,客户、服务器、攻击者都进入到TCP ESTABLISHED状态,但是攻击者和服务器之间是同步的,而客户和服务器之间是不同步的 • 注意,攻击者选择的序列号与客户的序列号一定要不同,否则不能成功
给一方发送空数据 • 攻击者首先观察会话 • 然后,给服务器发送一些无关紧要的数据,这些数据会导致服务器的序列号发生变化 • 攻击者给客户也可以发送数据 • 这种手段成功的要点在于 • 可以发送一些无关紧要的数据,并且能够把握发送的时机
不在一个子网中的劫持手法 • 有时候也称作“Blind spoofing” • 攻击者发送一个SYN包 • 然后猜测服务器的ISN • 只要能够猜得到,就可以建立连接 • 但是攻击者收不到服务器给客户的包 • 使用源路由技术 • 条件 • 真正的客户不能发送RST包 • 攻击者能够猜测服务器每个包的大小
实施会话劫持的一般性过程 • 发现目标 • 找到什么样的目标,以及可以有什么样的探查手段,取决于劫持的动机和环境 • 探查远程机器的ISN(初始序列号)规律 • 可以使用扫描软件,或者手工发起多个连接 • 等待或者监听对话 • 最好在流量高峰期间进行,不容易被发现,而且可以有比较多可供选择的会话 • 猜测序列号 • 最关键的一步,如果不在一个子网中,难度就非常大 • 使被劫持者下线 • ACK风暴,拒绝服务 • 接管对话 • 如果在同一子网中,则可以收到响应,否则要猜测服务器的动作
Kill a Connection • 攻击者发送一个RST包给B,并且假冒A的IP地址 • 观察A和B之间的数据往来,算出A和B的序列号,在适当的时机插入一个RST包,只要在插入点上,序列号正确,则RST包就会被接受,从而达到目的 • 攻击者发送一个FIN包给B,并且假冒A的IP地址 • 同样,在适当的时机给B发送一个FIN包 • 这时候,A怎么办? A B 攻击者
会话劫持过程详解(一) • A向B发送一个数据包 SEQ (hex): X ACK (hex): Y FLAGS: -AP--- Window: ZZZZ,包大小为:60 B回应A一个数据包 SEQ (hex): Y ACK (hex): X+60 FLAGS: -AP--- Window: ZZZZ,包大小为:50 A 攻击者 B
会话劫持过程详解(二) A向B回应一个数据包 SEQ (hex): X+60 ACK (hex): Y+50 FLAGS: -AP--- Window: ZZZZ,包大小为:40 B向A回应一个数据包 SEQ (hex): Y+50 ACK (hex): X+100 FLAGS: -AP--- Window: ZZZZ,包大小为:30 攻击者 A B
会话劫持过程详解(三) 攻击者C冒充主机A给主机B发送一个数据包 SEQ (hex): X+100 ACK (hex): Y+80 FLAGS: -AP--- Window: ZZZZ,包大小为:20 B向A回应一个数据包 SEQ (hex): Y+80 ACK (hex): X+120 FLAGS: -AP--- Window: ZZZZ,包大小为:10 A 攻击者 B
会话劫持过程详解(四) 主机B执行了攻击者C冒充主机A发送过来的命令,并且返回给主机A一个数据包;但是,主机A并不能识别主机B发送过来的数据包,所以主机A会以期望的序列号返回给主机B一个数据包,随即形成ACK风暴。如果成功的解决了ACK风暴(例如ARP欺骗),就可以成功进行会话劫持了。 A 攻击者 B
如何防止会话劫持 • 部署共享式网络,用交换机代替集线器 • 无法进行监听 • TCP会话加密 • 防火墙配置 • 限制尽可能少量的外部许可连接的IP地址 • 检测 • ACK包的数量明显增加
网络攻击技术-拒绝服务攻击(DoS) • DoS (Denial of Service) • 信息安全的三个概念 • 保密性、完整性、可用性 • 针对可用性进行攻击 • 定义:通过某些手段使得目标系统或者网络不能提供正常的服务 • 特点: • 技术原理简单,工具化 • 难以防范,有限DoS可以通过管理的手段防止 • DoS的动机 • 无法攻入系统的报复 • 强行重启对方机器 • 恶意破坏或者报复 • 网络恐怖主义
DoS的危害 • 使得正常的服务不能提供 • 案例:1996年9月,一家ISP(Public Access Networks)公司遭受拒绝服务达一周一上,拒绝对约6000多人和1000家公司提供Internet服务 • 政府网站 • 美国白宫的网站曾经遭受拒绝服务攻击 • 分布式拒绝服务-DDoS • 2000年2月,一批商业性质的Web站点收到了DDoS的攻击 • Yahoo、eBuy、CNN等著名网站都受到过分布式拒绝服务攻击
DoS的形式 • 粗略来看,分为三种形式 • 消耗有限的物理资源 • 网络资源 • 带宽资源 • 其他资源衰竭,如磁盘空间、进程数 • 合法用户可登录尝试的次数有限,攻击者可以用掉这些尝试次数 • 修改配置信息造成DoS • 比如,修改路由器信息,造成不能访问网络;修改NT注册表,也可以关掉某些功能 • 物理部件的移除,或破坏
DoS的技术分类 • 从表现形式来看 • 带宽消耗 • 用足够的资源消耗掉有限的资源 • 利用网络上的其他资源(恶意利用Internet共享资源),达到消耗目标系统或网络的目的 • 系统资源消耗,针对操作系统中有限的资源,如进程数、磁盘、CPU、内存、文件句柄,等等 • 程序实现上的缺陷,异常行为处理不正确,比如Ping of Death • 修改(篡改)系统策略,使得它不能提供正常的服务 • 从攻击原理来看 • 通用类型的DoS攻击,这类攻击往往是与具体系统无关的,比如针对协议设计上的缺陷的攻击 • 系统相关的攻击,这类攻击往往与具体的实现有关 • 说明:最终,所有的攻击都是系统相关的,因为有些系统可以针对协议的缺陷提供一些补救措施,从而免受此类攻击
DoS的技术历史 • 早期的Internet蠕虫病毒 • Robert Morris的RTM蠕虫 • 消耗网络资源 • 分片装配,非法的TCP标志,SYN Flood,等 • 利用系统实现上的缺陷,点对点形式 • Ping of Death, IP分片重叠 • 分布式DoS(DDoS)攻击 • 最著名的smurf攻击
一些典型的DoS攻击(一) • Ping Of Death • 原理:直接利用ping包,即ICMP Echo包,有些系统在收到大量比最大包还要长的数据包,会挂起或者死机 • 受影响的系统:许多操作系统受影响 • 著名的windows蓝屏工具 • 攻击做法 • 直接利用ping工具,发送超大的ping数据包 • 利用特制的工具,例如:IPHacker • 防止措施 • 打补丁 • 防火墙阻止这样的ping包
一些典型的DoS攻击(二) • TearDrop • 原理:利用IP包的分片装配过程中,由于分片重叠,计算过程中出现长度为负值,在执行memcpy的时候导致系统崩溃 • 受影响的系统:Linux/Windows NT/95,97年发现 • 攻击特征 • 攻击非常简单,发送一些IP分片异常的数据包 • 防止措施 • 加入条件判断,对这种异常的包特殊处理 • 打补丁 • SSPing • 碎片ICMP数据包产生DoS • 影响Windows95和NT系统以及老版本的MAC系统
一些典型的DoS攻击(三) • SYN Flood • 原理: • 每个机器都需要为半开连接分配一定的资源 • 这种半开连接的数量是有限制 • 共计方利用TCP连接三次握手过程,打开大量的半开TCP连接 • 目标机器不能进一步接受TCP连接。机器就不再接受进来的连接请求。 • 受影响的系统:大多数操作系统 • 攻击细节 • 连接请求是正常的,但是,源IP地址往往是伪造的,并且是一台不可达的机器的IP地址,否则,被伪造地址的机器会重置这些半开连接 • 一般,半开连接超时之后,会自动被清除,所以,攻击者的系统发出SYN包的速度要比目标机器清除半开连接的速度要快 • 任何连接到Internet上并提供基于TCP的网络服务,都有可能成为攻击的目标 • 这样的攻击很难跟踪,因为源地址往往不可信,而且不在线
一些典型的DoS攻击(四) • SYN Flood • 攻击特征 • 目标主机的网络上出现大量的SYN包,而没有相应的应答包 • SYN包的源地址可能是伪造的,甚至无规律可循 • 防止措施 • 针对网络 • 防火墙或者路由器可以在给定时间内只允许有限数量的半开连接 • 入侵检测,可以发现这样的DoS攻击行为 • 打补丁 • Linux和Solaris使用了一种被称为SYN cookie的技术来解决SYN Flood攻击:在半开连接队列之外另设置了一套机制,使得合法连接得以正常继续
一些典型的DoS攻击(五) • Smurf • 原理: • 攻击者向一个广播地址发送ICMP Echo请求,并且用受害者的IP地址作为源地址 • 广播地址网络上的每台机器响应这些Echo请求,同时向受害者主机发送ICMP Echo-Reply应答 • 受害者主机会被这些大量的应答包淹没 • 受影响的系统:大多数操作系统和路由器 • 变种:fraggle,使用UDP包,或称为udpsmurf • 比如,7号端口(echo),如果目标机器的端口开着,则送回应答UDP数据包,否则,产生ICMP端口不可达消息 • 技术细节 • 两个主要的特点:使用伪造的数据包,使用广播地址。 • 不仅被伪造地址的机器受害,目标网络本身也是受害者,它们要发送大量的应答数据包
一些典型的DoS攻击(七) • 攻击特征 • 涉及到三方:攻击者,中间目标网络,受害者 • 以较小的网络带宽资源,通过放大作用,吃掉较大带宽的受害者系统 • Smurf放大器 • Smurf放大器网络:不仅允许ICMP Echo请求发给网络的广播地址,并且允许ICMP Echo-Reply发送回去 • 这样的公司越多,对Internet的危害就越大 • 实施Smurf攻击 • 需要长期的准备,首先找到足够多的中间网络 • 集中向这些中间网络发出ICMP Echo包