网络安全从基础到实战 第2篇:OSI模型与TCP/IP安全
Network Security Fundamentals Part 2: OSI Model and TCP/IP Security
前言:分层安全的重要性
要正确理解网络安全,首先需要了解网络是如何工作的。OSI七层模型和TCP/IP模型是理解网络通信的核心框架,每一层都存在其特有的安全威胁和防御方法。
本篇将复习OSI模型,详细介绍各层的典型攻击技术及其应对方法。同时,我们还将学习实际网络流量分析必不可少的Wireshark使用方法。
1. OSI七层模型回顾
OSI(开放系统互联)模型是一个将网络通信分为七个层次来说明的参考模型。
| 层 | 名称 | 主要功能 | 协议/设备 | PDU |
|---|---|---|---|---|
| 7 | 应用层 (Application) | 用户接口、应用服务 | HTTP, FTP, SMTP, DNS | Data |
| 6 | 表示层 (Presentation) | 数据格式转换、加密、压缩 | SSL/TLS, JPEG, ASCII | Data |
| 5 | 会话层 (Session) | 会话建立、维护、终止 | NetBIOS, RPC | Data |
| 4 | 传输层 (Transport) | 端到端通信、流量控制、错误恢复 | TCP, UDP | Segment |
| 3 | 网络层 (Network) | 逻辑地址分配、路由 | IP, ICMP, 路由器 | Packet |
| 2 | 数据链路层 (Data Link) | 物理地址分配、帧生成、错误检测 | Ethernet, ARP, 交换机 | Frame |
| 1 | 物理层 (Physical) | 比特传输、物理连接 | 电缆、集线器、中继器 | Bit |
OSI vs TCP/IP模型比较
OSI 7层 TCP/IP 4层
+------------+ +------------+
| 应用层 | | |
+------------+ | 应用层 |
| 表示层 | | |
+------------+ +------------+
| 会话层 | | |
+------------+ +------------+
| 传输层 | | 传输层 |
+------------+ +------------+
| 网络层 | | 网际层 |
+------------+ +------------+
| 数据链路层 | | |
+------------+ | 网络接口 |
| 物理层 | | 层 |
+------------+ +------------+
2. 物理层安全 (Layer 1)
物理层是网络最基础的层,处理实际硬件和电信号。
2.1 物理层威胁
- 窃听 (Wiretapping):物理接触电缆截取信号
- 设备盗窃/损坏:服务器、路由器、交换机等的物理盗取或破坏
- 电磁干扰 (EMI):干扰电缆信号或窃听
- 无线窃听:收集和分析无线信号
2.2 物理层安全措施
- 物理访问控制:机房锁、门禁卡、监控摄像头安装
- 电缆保护:使用屏蔽电缆(STP)、安装电缆导管
- 使用光纤:抗电磁干扰且难以窃听
- 环境监控:温度、湿度、水浸检测传感器
- 无线安全:WPA3加密、隐藏SSID、MAC过滤
3. 数据链路层安全 (Layer 2)
数据链路层负责同一网络段内节点之间的通信。使用MAC地址,交换机在此层工作。
3.1 ARP欺骗 (ARP Spoofing)
ARP(地址解析协议)是将IP地址转换为MAC地址的协议。ARP欺骗是利用此协议漏洞的攻击。
攻击原理
正常ARP操作:
PC-A: "192.168.1.1的MAC地址是什么?" (ARP Request - 广播)
网关: "我的MAC地址是 AA:BB:CC:DD:EE:FF" (ARP Reply)
ARP欺骗攻击:
攻击者: "192.168.1.1的MAC地址是我的MAC(XX:XX:XX:XX:XX:XX)!" (伪造的ARP Reply)
PC-A: 将攻击者的MAC误认为是网关 → 所有流量发送给攻击者
攻击结果
- 中间人攻击(MITM)成为可能
- 会话劫持
- 流量窃听和篡改
- 拒绝服务(DoS)
应对方法
- 静态ARP表:手动固定重要设备的MAC地址
- 动态ARP检测 (DAI):在交换机上验证ARP数据包
- ARP监控工具:使用arpwatch、XArp等监控ARP表变化
- 加密通信:使用HTTPS、VPN,即使被窃听也能保护内容
3.2 MAC泛洪 (MAC Flooding)
这是用虚假MAC地址填满交换机的MAC地址表(CAM表)以妨碍正常操作的攻击。
攻击原理
正常交换机操作:
- 根据MAC地址表中学习到的MAC,仅向特定端口转发帧
- 单播通信实现高效网络运营
MAC泛洪攻击时:
1. 攻击者发送数千~数万个虚假MAC地址
2. 交换机的CAM表被填满(通常8K~32K条目)
3. 交换机像集线器一样工作(向所有端口广播帧)
4. 攻击者可接收所有网络流量
应对方法
- 端口安全 (Port Security):限制每端口允许的MAC地址数量
- 802.1X认证:网络接入前进行用户/设备认证
- VLAN细分:分离广播域
# Cisco交换机端口安全配置示例
Switch(config)# interface FastEthernet0/1
Switch(config-if)# switchport mode access
Switch(config-if)# switchport port-security
Switch(config-if)# switchport port-security maximum 2
Switch(config-if)# switchport port-security violation shutdown
Switch(config-if)# switchport port-security mac-address sticky
3.3 VLAN跳跃 (VLAN Hopping)
未授权访问其他VLAN的攻击,有交换机欺骗和双标签两种方法。
- 交换机欺骗:攻击者伪装成交换机尝试连接Trunk端口
- 双标签:使用两个VLAN标签向其他VLAN发送数据包
应对方法
- 禁用未使用的端口
- 在Access端口禁用DTP(动态中继协议)
- 将Native VLAN更改为未使用的VLAN
- 明确配置Trunk端口
4. 网络层安全 (Layer 3)
网络层负责使用IP地址进行逻辑寻址和路由。
4.1 IP欺骗 (IP Spoofing)
伪造源IP地址以隐藏身份或冒充其他主机的攻击。
攻击用途
- 获取匿名性:隐藏攻击来源
- 绕过认证:绕过基于IP的访问控制
- DDoS攻击:在反射/放大攻击中伪装成受害者IP
- 会话劫持:接管现有连接
IP欺骗示例(DDoS反射攻击):
1. 攻击者 → DNS服务器 (源: 受害者IP, 目的: DNS服务器)
"DNS查询请求"
2. DNS服务器 → 受害者 (源: DNS服务器, 目的: 受害者IP)
"DNS响应(比请求大得多)"
结果: 受害者收到大量未请求的响应流量
应对方法
- 入口/出口过滤:阻止带有异常源IP的数据包
- BCP38/BCP84:在ISP级别应用防欺骗措施
- uRPF(单播反向路径转发):在路由器上验证源IP
- 加密认证:使用加密方法而非IP地址进行认证
4.2 ICMP攻击
ICMP(互联网控制消息协议)用于网络诊断和错误报告,但可能被滥用于攻击。
主要ICMP攻击类型
| 攻击类型 | 描述 | 影响 |
|---|---|---|
| Ping Flood | 发送大量ICMP Echo Request | 带宽耗尽,DoS |
| Ping of Death | 发送异常大的ICMP数据包 | 系统崩溃(旧系统) |
| Smurf Attack | 向广播地址发送欺骗的Ping | 放大的DDoS |
| ICMP Redirect | 注入恶意路由信息 | 流量劫持 |
| ICMP Tunneling | 在ICMP数据包中隐藏数据 | 绕过防火墙,数据泄露 |
应对方法
- ICMP速率限制:对ICMP流量应用速率限制
- 阻止不必要的ICMP类型:阻止Redirect、Timestamp等
- 禁用广播ping:防止Smurf攻击
- 深度数据包检测(DPI):检测ICMP隧道
# Linux iptables ICMP速率限制
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# 忽略ICMP Redirect设置
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
5. 传输层安全 (Layer 4)
传输层通过TCP和UDP协议提供端到端通信。
5.1 TCP SYN Flood
这是利用TCP三次握手漏洞的典型DoS攻击。
TCP三次握手回顾
正常TCP连接建立:
客户端 服务器
| |
|------- SYN ------->| (连接请求)
| |
|<---- SYN-ACK ------| (连接接受)
| |
|------- ACK ------->| (确认)
| |
|==== 连接建立 =====|
SYN Flood攻击原理
SYN Flood攻击:
攻击者 服务器
| |
|------- SYN ------->| (使用欺骗IP发送SYN)
|<---- SYN-ACK ------| (服务器等待响应 - 半开连接)
|------- SYN ------->|
|<---- SYN-ACK ------|
|------- SYN ------->|
|<---- SYN-ACK ------|
...
(创建数千~数万个半开连接)
结果: 服务器的连接表被填满 → 正常用户无法连接
应对方法
- SYN Cookies:不使用SYN队列,用加密cookie管理连接
- SYN代理:防火墙/负载均衡器完成握手后再转发给服务器
- 速率限制:限制每IP的SYN数据包数量
- 增加积压队列:增加允许的半开连接数
- 减少超时:缩短半开连接保持时间
# Linux启用SYN Cookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# 增加SYN积压队列
echo 2048 > /proc/sys/net/ipv4/tcp_max_syn_backlog
# 减少SYN-ACK重试次数
echo 2 > /proc/sys/net/ipv4/tcp_synack_retries
5.2 端口扫描 (Port Scanning)
端口扫描是识别目标系统上开放端口和运行服务的技术,主要用于侦察阶段。
主要扫描类型
| 扫描类型 | 方法 | 特点 |
|---|---|---|
| TCP Connect扫描 | 建立完整TCP连接 | 准确但会被记录 |
| SYN扫描 (半开) | 只发送SYN,用RST代替ACK | 快速且隐蔽 |
| FIN/NULL/Xmas扫描 | 使用异常标志组合 | 尝试绕过防火墙 |
| UDP扫描 | 发送UDP数据包 | 较慢但可检测UDP服务 |
| ACK扫描 | 只发送ACK标志 | 映射防火墙规则 |
# Nmap各种扫描示例
# TCP Connect扫描
nmap -sT 192.168.1.100
# SYN扫描(需要管理员权限)
nmap -sS 192.168.1.100
# UDP扫描
nmap -sU 192.168.1.100
# 服务版本检测
nmap -sV 192.168.1.100
# 操作系统检测
nmap -O 192.168.1.100
# 全端口扫描
nmap -p- 192.168.1.100
应对方法
- 关闭不必要的端口:禁用未使用的服务
- 防火墙规则:只允许授权的IP/端口通过
- IDS/IPS:检测和阻止扫描模式
- 端口敲门:通过特定序列打开端口
- 蜜罐:用虚假服务引诱和分析攻击者
5.3 其他传输层攻击
- 会话劫持:预测TCP序列号接管现有会话
- TCP RST攻击:用伪造的RST数据包强制终止连接
- UDP Flood:用大量UDP数据包耗尽带宽
6. 应用层安全 (Layer 7)
应用层是直接与用户交互的层,各种协议和应用程序在此运行。
6.1 主要应用层威胁
- SQL注入:操纵数据库查询
- XSS(跨站脚本):注入恶意脚本
- CSRF(跨站请求伪造):滥用用户权限
- DNS攻击:DNS欺骗、DNS放大、缓存投毒
- HTTP攻击:Slowloris、HTTP Flood
- 邮件攻击:钓鱼、垃圾邮件、恶意附件
6.2 应对方法
- WAF(Web应用防火墙):阻止Web应用攻击
- 输入验证:验证和转义所有用户输入
- DNSSEC:验证DNS响应的完整性
- 邮件安全:应用SPF、DKIM、DMARC
- 强制HTTPS:加密所有通信
7. 使用Wireshark进行数据包分析基础
Wireshark是最广泛使用的开源数据包分析工具。它是网络故障排除、安全分析和协议学习必不可少的工具。
7.1 Wireshark基本界面
Wireshark主界面组成:
+--------------------------------------------------+
| 菜单栏 / 工具栏 |
+--------------------------------------------------+
| 过滤器栏 (Display Filter) |
+--------------------------------------------------+
| |
| 数据包列表窗格 (Packet List Pane) |
| - 所有捕获数据包的摘要信息 |
| |
+--------------------------------------------------+
| |
| 数据包详情窗格 (Packet Details Pane) |
| - 选定数据包的协议层详细信息 |
| |
+--------------------------------------------------+
| |
| 数据包字节窗格 (Packet Bytes Pane) |
| - 选定数据包的原始数据(十六进制) |
| |
+--------------------------------------------------+
7.2 基本显示过滤器
| 过滤器 | 描述 |
|---|---|
ip.addr == 192.168.1.100 |
特定IP相关数据包 |
tcp.port == 80 |
特定TCP端口 |
http |
仅HTTP协议 |
dns |
仅DNS流量 |
tcp.flags.syn == 1 |
设置了SYN标志的数据包 |
arp |
仅ARP数据包 |
icmp |
仅ICMP数据包 |
!(arp or dns or icmp) |
排除ARP、DNS、ICMP |
tcp.analysis.flags |
TCP分析标志(重传等) |
frame contains "password" |
包含特定字符串的数据包 |
7.3 安全分析应用示例
ARP欺骗检测
# ARP数据包过滤
过滤器: arp
# 查找可疑模式
- 同一IP对应不同MAC地址响应
- 异常多的ARP Reply
- 大量Gratuitous ARP数据包
# 有用的过滤器
arp.duplicate-address-detected
arp.opcode == 2 # 仅ARP Reply
SYN Flood检测
# SYN数据包过滤
过滤器: tcp.flags.syn == 1 && tcp.flags.ack == 0
# 分析要点
- 大量SYN数据包发往同一目的地
- 多个源IP(欺骗迹象)
- 只有SYN没有SYN-ACK持续出现
# 统计检查
Statistics > Conversations > TCP选项卡
Statistics > Endpoints
端口扫描检测
# 检查向多个端口的连接尝试
过滤器: ip.src == [可疑IP] && tcp.flags.syn == 1
# 分析要点
- 短时间内向多个端口发送SYN
- 连续端口号模式
- 大量RST响应(关闭的端口)
# 有用功能
Statistics > Conversations
Statistics > Protocol Hierarchy
7.4 实践技巧
- 捕获过滤器 vs 显示过滤器:捕获过滤器在保存时应用,显示过滤器在显示时应用
- Follow TCP Stream:查看特定连接的完整对话内容
- Expert Information:查看自动分析的警告和错误
- 协议统计:在Statistics菜单中进行各种分析
- 保存和共享:以pcap/pcapng格式保存以共享分析
注意:使用Wireshark进行数据包捕获必须仅在授权的网络上进行。未经授权的数据包捕获是违法的。
8. 分层安全总结
| 层 | 主要威胁 | 核心应对措施 |
|---|---|---|
| 物理层 (1) | 窃听、设备损坏 | 物理访问控制、屏蔽电缆 |
| 数据链路层 (2) | ARP欺骗、MAC泛洪 | DAI、端口安全、802.1X |
| 网络层 (3) | IP欺骗、ICMP攻击 | 入口过滤、uRPF、ICMP限制 |
| 传输层 (4) | SYN Flood、端口扫描 | SYN Cookies、IDS/IPS、防火墙 |
| 应用层 (7) | SQL注入、XSS、钓鱼 | WAF、输入验证、HTTPS |
结论及下篇预告
本篇我们了解了OSI七层模型各层的安全威胁和应对方法。每一层都存在其特有的漏洞,有效的安全需要对所有层进行综合防御。
特别是ARP欺骗、IP欺骗、TCP SYN Flood等攻击是实际环境中经常发生的威胁,因此准确理解其原理并准备适当的应对措施非常重要。利用Wireshark等数据包分析工具可以培养检测和分析这些攻击的能力。
下一篇将介绍防火墙的类型和配置、IDS/IPS系统以及网络访问控制(NAC)。我们将讨论实际网络安全设备如何工作以及如何配置等实战内容。
建议实践:配置虚拟环境(VirtualBox、VMware),使用Wireshark直接捕获和分析数据包。这可以培养仅靠理论无法获得的实战感觉。