网络协议看安全
ISO/OSI开放互联模型与TCP/IP模型的对应
1. 互联网络层安全
1.1 互联网络层体系结构
1.1.1 IP协议简介
- IP是TCP/IP 协议族中最为核心的协议
- 不可靠(unreliable)
- 无连接(connectionless)
IP首部结构
1.1.2 ICMP协议
- 特点:构建在IP报文结构上,但被认为是与IP在同一层的协议
ICMP协议的作用
- 传递差错报文及其他需要注意的信息
- ICMP地址掩码请求与应答
- ICMP时间戮请求与应答
1.2 互联网层安全
- 拒绝服务: 分片攻击(teardrop)/ 死亡之ping
- 欺骗:IP 欺骗
- 窃听:嗅探
- 伪造:IP 数据包伪造
1.2.1 Ping Of Death
- Ping 是一个非常著名的程序, 这个程序的目的是为了测试另一台主机是否可达。现在所有的操作系统上几乎都有这个程序, 它已经成为系统一部分。
- Ping 程序的目的是为了查看网络上的主机是否处于活动状态。
- 通过发送一份ICMP 回显请求报文给目的主机, 等待返回ICMP 回显应答,根据回显应答的内容判断目的主机的状况。
Ping Of Death 攻击的攻击特征、检测方法和反攻击方法总结如下:
- 攻击特征: 该攻击数据包大于65535 个字节。由于部分操作系统接收长度大于65535 字节的数据包时, 就会造成内存溢出、系统崩溃、重启、内核失效败等后果,从而达到攻击的目的。
- 检测方法: 判断数据包的大小是否大于65535 个字节。
- 反攻击方法: 使用新的补丁程序, 当收到大于65535 个字节的数据包时, 丢弃该数据包, 并进行系统审计。
1.2.2 泪滴(Teardrop)
- “ 泪滴" 也被称为分片攻击, 它是一种典型的利用TCP/IP 协议的问题进行拒绝服务攻击的方式, 由于第一个实现这种攻击的程序名Teardrop, 所以这种攻击也被称为' ' 泪滴' '
泪滴攻击的攻击特征、检测方法和反攻击方法总结如下:
- 攻击特征: Teardrop 工作原理是向被攻击者发送多个分片的IP 包,某些操作系统收到含有重叠偏移的伪造分片数据包时将会出现系统崩溃、重启等现象。
- 检测方法: 对接收到的分片数据包进行分析, 计算数据包的片偏移量(Offset) 是否有误。
- 反攻击方法: 添加系统补丁程序, 丢弃收到的病态分片数据包并对这种攻击进行审计。
1.2.3 Smurf攻击
- Smurf 攻击是利用IP欺骗和ICMP回应包引起目标主机网络阻塞, 实现DoS攻击。
- Smurf 攻击原理构造数据包时将源地址设置为被攻击主机的地址, 而将目的地址设置为广播地址, 于是, 大量的ICMP echo 回应包被发送给被攻击主机, 使其因网络阻塞而无法提供服务。
- 比Ping of Death 洪水的流量高出1 或2 个数量级。
2.1 传输层体系结构
2.1.1 TCP协议(传输控制协议)
作用: TCP 提供一种面向连接的、可靠的字节流服务
功能:数据包分块、发送接收确认、超时重发、数据校验、数据包排序、控制流量......
TCP首部
TCP首部——标记位
- U R G 紧急指针(u rgent pointer ) 有效
- A C K 确认序号有效
- P S H 接收方应该尽快将这个报文段交给应用层
- R S T 重建连接
- S Y N 同步序号, 用来发起一个连接
- F I N 发送端完成发送任务
TCP首部——端口号
TCP/UDP 通过16bit 端口号来识别应用程序
- 知名端口号由Internet 号分配机构(lnternet Assigned Numbers Authority,IANA) 来管理
现状
- 1 - 255 端口号分配给知名的网络服务
- 256 - 1023 分配给Unix操作系统特定的服务
- 1024 - 5000 临时分配的端口号
- 5000 以上端口号保留给应用服务
2.1.2 UDP协议
特点: UDP 是一个简单的面向数据报的传输层协议
- 不具备接收应答机制
- 不能对数据分组、合并
- 不能重新排序
- 没有流控制功能
- 协议简单
- 占用资源少, 效率高
U D P 协议包头
2.1.3 UDP与TCP比较
相同点
- 同一层的协议, 基于甲报文基础上
不同点
- TCP 是可靠的, 高可用性的协议, 但是复杂, 需要大量资源的开销
- UDP 是不可靠, 但是高效的传输协议
2.2 传输层安全问题
- 拒绝服务: syn flood/udp flood、Smurf
- 欺骗: TCP 会话劫持
- 窃听: 嗅探
- 伪造: 数据包伪造
2.2.1 SYN Flood
SYN洪水
- 在TCP连接的三次握手过程中,假设一个客户端向服务器发送了SYN报文之后突然死机或掉线,那么服务器在发出SYN/ACK应答报文后是无法收到客户端的ACK报文的,在这种情况下服务器端一般会重试,并等待一段时间后丢弃这个未完成的连接。这段时间的长度我们称为SYN Timeout。一般来说这个时间是分钟的数量级。
- 一个用户出现异常导致服务器的一个线程等待一分钟并不是什么 大问题,但如果有一个攻击者大量模拟这种情况(伪造IP地址),服务器端将会为了维护一个非常大的半连接列表消耗很大资源。
SYN洪水的防御
SY N 洪水攻击比较难以防御, 以下是几种解决方法:
- 缩短SYN Timeout 时间
- 设置SYN Cookie
- 负反馈策略
- 退让策略
- 分布式DNS 负载均衡
- 防火墙
退让策略
是基于SYN Flood 攻击代码的一个缺陷:SYN flood一旦攻击开始, 将不会再进行域名解析。切入点: 假设一台服务器在受到SYN flood 攻击后迅速更换自己的ip 地址, 那么攻击者仍在不断攻击的只是一个空的IP 地址, 井没有任何主机, 而防御方只要将DNS 解析更改到新的IP 地址就能在很短的时间内恢复用户通过域名进行的正常访问。为了迷惑攻击者, 我们甚至可以放置一台" 牺牲" 服务器让攻击者满足于攻击的“ 效果"。
分布式DNS 负载均衡
在众多的负载均衡架构中, 基于DNS 解析的负载均衡本身就拥有对SYN flood的免疫力。基于DNS 解析的负载均衡能将用户的请求分配到不同IP的服务器主机上, 攻击者攻击的永远只是其中一台服务器, 一来这样增加了攻击者的成本, 二来过多的DNS 请求可以帮助我们追查攻击者的真正踪迹。
2.2.2 UDP FLood
- 大量UDP 小包冲击应用服务器(DNS 、Radius 认证等)
- 利用系统服务形成流量( echo chargen)
- 利用正常UDP 服务发送大流量形成网络拥塞
UDP 洪水(UDP Flood)主要是利用主机能自动进行回复的服务( 例如使用UDP 协议的chargen 服务和echo 服务)来进行攻击。很多提供WWW和Mail等服务设备通常是使用Unix 的服务器, 它们默认打开一些被黑客恶意利用的U D P 服务。如echo服务会显示接收到的每一个数据包, 而原本作为测试功能的chargen 服务会在收到每一个数据包时随机反馈一些字符。
2.2.3 LAND攻击
- 运用IP Spoofing 技术送出一连串SYN 数据包给目标主机, 让目标主机系统误以为这些数据包是由自己发送的。由于目标主机在处理这些数据包的时候, 它自己井无法回应给自己SYN-ACK 数据包, 因而造成系统宕机。
- Land 是因特网上最常见的拒绝服务攻击类型, 它是由著名黑客组织rootsh 发现的。原理很简单, 向目标机发送大量的源地址和目标地址相同的包,造成目标机解折Land 包时占用大量的系统资源, 从而使网络功能完全瘫痪。
- Land攻击也是利用TCP 的三次握手过程的缺陷进行攻击。Land攻击是向目标主机发送一个特殊的SYN 包, 包中的源地址和目标地址都是目标主机的地址。目标主机收到这样的连接请求时会向自己发送SYN / ACK 数据包, 结果导致目标主机向自己发回ACK 数据包并创建一个连接。大量的这样的数据包将使目标主机建立很多无效的连接, 系统资源被大量的占用。
- 攻击特征: 用于Land 攻击的数据包中的源地址和目标地址是相同的:操作系统接收到这类数据包时, 不知道该如何处理堆栈中的这种情况, 或者循环发送和接收该数据包,消耗大量的系统资源, 从而有可能造成系统崩溃或死机等现象。
- 检测方法: 判断网络数据包的源地址/目标地址是否相同。
- 反攻击方法: 适当配置防火墙设备或过滤路由器的过滤规则可以防止这种攻击行为, 并对这种攻击进行审计。
3 应用层协议
域名解析: DNS
电子邮件: SMTP/POP3
文件传输: FTP
网页浏览: HTTP
应用层安全
应用层协议安全问题——明文,对密码进行加密
DNS欺骗