Week 11
目录
TCP/IP 攻击(Attacks on TCP/IP)
拒绝服务攻击(Denial of Service, DoS)原理
- 目标:耗尽目标的资源(Resource Exhaustion),包括:
- 带宽(Bandwidth)
- CPU 或路由器处理能力(Processing Ability)
- 内存(Memory)、磁盘空间(Disk Space)
- 文件描述符(File Descriptors)、套接字(Sockets)等操作系统资源
- 人类认知极限(Cognitive Limits)
- 策略:
- 控制尽可能多的攻击者(Attackers)
- 寻找放大器(Amplifiers),如利用高带宽资源或发布到高流量网站(如 slashdot.org)
- 解释:DoS 攻击通过过载目标系统的关键资源,使其无法正常提供服务。例如,耗尽服务器的内存或带宽会导致服务中断。
SYN 洪泛攻击(SYN Flooding)
- 定义:一种简单的拒绝服务攻击,利用 TCP/IP 三次握手(Three-Way Handshake)的漏洞。
- 攻击过程:
- 攻击者(Attacker)向受害者(Victim)发送大量 SYN 包(包含初始序列号 ISN$_A$)。
- 受害者回应 ACK(确认 ISN$_A+1$)和 SYN(包含 ISN$_B$),并分配资源(内存、进程、套接字)存储连接信息。
- 攻击者不完成握手(不发送最后的 ACK),导致受害者资源耗尽。
- 关键点:
- 攻击者的链路速度快于受害者(Faster Link)。
- 受害者资源耗尽后无法处理合法请求。
- 图示:
- 解释:SYN 洪泛攻击利用了 TCP 协议中服务器必须为每个连接分配资源的特性,通过伪造大量未完成的连接请求耗尽服务器资源。
Smurf 攻击(Smurfing)
- 定义:利用 ICMP 回显请求(Echo Request,俗称“ping”)的广播功能进行拒绝服务攻击。
- 攻击过程:
- 攻击者向局域网(LAN)发送一个伪造源地址(受害者的 IP)的 ICMP 回显请求。
- 局域网内所有主机响应此广播,生成大量回显回复(Echo Reply)发送到受害者。
- 受害者被大量响应流量淹没。
- 关键点:
- 放大效应(Amplification):单条消息触发数百条响应。
- 放大器设备无需被攻破(No Compromise Needed)。
- 图示: ![Smurf 攻击示意图
- 解释:Smurf 攻击利用广播功能放大流量,是一种高效的 DoS 攻击方式,尤其在早期网络中常见。
序列号预测(Sequence Number Prediction)
- 场景:假设 Bob 信任 Alice(通过
/etc/hosts.equiv
认证),攻击者 Mallory 试图冒充 Alice。 - 攻击过程:
- Mallory 向 Alice 发起 SYN 洪泛,阻止其响应。
- Mallory 向 Bob 发送伪造的 SYN 包(ISN$_A$)。
- Bob 回应 ACK(ISN$_A+1$)和 SYN(ISN$_B$)。
- Mallory 猜测 Bob 的序列号 ISN$_B$(基于序列号生成规律:每秒增 128,000,每次新连接增 64,000)。
- Mallory 发送 ACK(ISN$_B+1$)和数据包(PSH(DATA)),完成伪造连接并注入恶意数据。
- 关键点:
- 基于 IP 地址的认证问题(Authentication by Source IP Address)。
- 弱序列号生成(Poor ISN Generation)使猜测更容易。
- 攻击者无需看到回复包(Blind Attack)。
- 可用于注入数据或关闭现有 TCP 连接。
- 解释:序列号预测攻击利用了早期 TCP 实现中序列号生成的可预测性,结合 IP 地址伪造,绕过认证机制。
会话劫持(Session Hijacking)
- 定义:攻击者在认证后接管两个合法方之间的 TCP 连接,成为中间人(Man-in-the-Middle)。
- 机制:
- TCP 包通过序列号验证(Sequence Numbers)。
- 攻击者通过伪造序列号正确的包,插入或干扰现有连接。
- 基于去同步的会话劫持(Desynchronisation):
- Mallory 监听 Alice 和 Bob 的连接。
- 在关键时刻(如 Alice 输入密码后),Mallory 向双方发送伪造包,增加序列号(Sequence Numbers)。
- Alice 和 Bob 认为对方后续包为旧包(Outside Window),连接被破坏。
- Mallory 成为中间人,控制双方通信。
- 空数据去同步(Null Data Desynchronisation):
- Mallory 向 Alice 和 Bob 发送空数据包(NOP),增加序列号。
- 后续合法包被视为无效,Mallory 接管连接。
- 早期去同步(Early Desynchronisation):
- Mallory 在握手阶段发送 RST(重置)包,关闭 Alice 与 Bob 的连接。
- Mallory 伪装成 Bob 继续与 Alice 通信,或伪装成 Alice 与 Bob 通信。
- 解释:会话劫持利用 TCP 协议对序列号的依赖,通过伪造合法序列号包,攻击者可窃听或修改通信内容。
源路由(Source Routing)
- 定义:在 IPv4 和 IPv6 中,发送者可通过源路由(Source Routing)指定数据包的路径。
- 类型:
- 严格源路由(Strict Source Routing, SSRR):指定每一跳(Hop)。
- 宽松源路由(Loose Source Routing, LSRR):仅指定途经的主机组。
- 攻击利用:
- 允许攻击者进行非盲攻击(Non-Blind Attacks),因可接收回复包。
- 绕过防火墙或网络限制。
- 防御:
- 内核可禁用源路由(Ignore Source Routing)。
- 防火墙和路由器可阻挡源路由包,并触发警报。
- 解释:源路由允许攻击者控制数据包路径,增加攻击灵活性,但现代网络常禁用此功能以降低风险。
端口扫描与指纹识别(Port Scanning and Fingerprinting)
- 端口扫描(Port Scanning):
- 发送数据包到目标主机的所有端口,检测开放服务(Open Services)。
- 示例(nmap 扫描结果):
# nmap 192.168.0.1-255 Interesting ports on cosmic.spectre.net (192.168.0.1): Port State Protocol Service 22 open tcp ssh 139 open tcp netbios-ssn Interesting ports on orbital.spectre.net (192.168.0.2): Port State Protocol Service 7 open tcp echo 9 open tcp discard 21 open tcp ftp 25 open tcp smtp 53 open tcp nameserver 80 open tcp http
- 指纹识别(Fingerprinting):通过端口状态和服务信息推断目标系统类型。
- 检测:
- 端口扫描生成大量网络流量(Noisy Activity),易被入侵检测系统(Intrusion Detection System, IDS)发现。
- 解释:端口扫描是攻击者的常见侦察手段,用于发现目标系统的开放端口和服务,为后续攻击做准备。
防火墙(Firewalls)
- 定义:防火墙(Firewall)是一种包过滤网关(Packet Filtering Gateway),通过限制暴露服务(Services)增强安全性。
- 类型:
- 静态包过滤网关(Static Packet Filtering Gateway):
- 基于访问控制列表(Access Control Lists, ACLs)过滤包。
- 优点:速度快;缺点:功能弱,维护繁琐。
- 动态包过滤网关(Dynamic Packet Filtering Gateway):
- 状态检查(Stateful Inspection),根据包头动态决定是否允许。
- 应用层网关(Application-Level Gateway):
- 作为代理(Proxy),提供用户认证,禁止直接 IP 连接。
- 缺点:不支持所有服务,使用较少。
- 静态包过滤网关(Static Packet Filtering Gateway):
- 解释:防火墙通过规则限制网络流量,保护内部网络,但对某些攻击(如应用层攻击)效果有限。
FTP 反弹攻击(FTP Bounce Attacks)
- 定义:利用 FTP 服务器(FTP Server)发起反弹攻击,绕过防火墙。
- 攻击过程:
- 攻击者找到位于防火墙后的 FTP 服务器,允许写入目录。
- 攻击者登录,上传包含 SMTP 命令的文件(伪造邮件)。
- 使用 PORT 命令指定受害者的邮件端口(SMTP Port)。
- 使用 RETR 命令触发文件传输,FTP 服务器向受害者邮件端口发送伪造邮件。
- 示例:
- 上传文件内容:
hello pizza.com mail from: server.good rcpt to: victim.gg data ... end
- 上传文件内容:
- 关键点:
- 防火墙无法有效阻止此类攻击。
- 攻击者可发送看似合法的伪造邮件。
- 解释:FTP 反弹攻击利用 FTP 协议的 PORT 命令,将攻击流量伪装为合法 FTP 传输,难以被防火墙检测。
路由跟踪(Traceroute)与防火墙探测(Firewalking)
- 路由跟踪(Traceroute):
- 通过递增 IP 包的生存时间(Time-to-Live, TTL),映射数据包路径。
- 每跳过期时,生成 ICMP 错误消息(Time-to-Live Exceeded)。
- Windows 版本:tracert。
- 防火墙探测(Firewalking):
- 类似 Traceroute,用于探测防火墙或网关的访问控制列表(ACLs)。
- 方法:发送 TTL 比目标网关多一的包:
- 若网关允许流量,包转发到下一跳并过期,返回消息。
- 若网关阻挡流量,包被丢弃,无响应。
- 通过扫描确定网关的 ACL 配置。
- 解释:Traceroute 和 Firewalking 利用 TTL 机制探测网络拓扑和防火墙规则,为攻击者提供关键信息。
IP 安全(IP Security, IPSec)
- 定义:IPSec 是一种安全协议套件(Protocol Suite),为 IPv4 和 IPv6 提供安全通信。
- 主要功能:
- 认证头(Authentication Header, AH):
- 提供认证(Authentication)和完整性(Integrity)。
- 传输模式(Transport Mode):保护上层协议和部分 IP 头字段,仅限主机实现。
- 隧道模式(Tunnel Mode):保护整个内部 IP 包,包括完整 IP 头。
- 封装安全负载(Encapsulating Security Payload, ESP):
- 提供机密性(Confidentiality)。
- 可用于传输模式或隧道模式。
- 认证头(Authentication Header, AH):
- 限制:
- 不防御流量分析(Traffic Analysis)、不可否认性(Non-Repudiation)或拒绝服务攻击。
- 应用:用于建立虚拟专用网络(Virtual Private Networks, VPNs)。
- 解释:IPSec 通过加密和认证增强网络层安全,但无法解决所有攻击场景,如 DoS 或流量分析。
地址解析协议(Address Resolution Protocol, ARP)
- 定义:ARP 将 IP 地址映射到硬件地址(MAC Address)。
- 工作流程:
- 数据包发送到路由器。
- 路由器查询 ARP 缓存(ARP Cache),查找目标 IP 对应的 MAC 地址。
- 若缓存中有记录,直接返回 MAC 地址。
- 若无记录,ARP 广播请求,目标主机响应其 MAC 地址,更新缓存。
- 解释:ARP 是局域网通信的基础协议,负责 IP 到 MAC 的映射,但缺乏认证机制,易被攻击。
ARP 攻击(ARP Attacks)
- 问题:ARP 缺乏强认证(Strong Authentication),易被利用。
- 攻击类型:
- ARP 缓存投毒(ARP Cache Poisoning):
- Mallory 伪造 ARP 回复,将 Alice 的 IP 关联到自己的 MAC 地址。
- Alice 和 Bob 的流量通过 Mallory,成为中间人攻击(Man-in-the-Middle)。
- 即使在全交换网络(Fully Switched Network)中也有效。
- MAC 泛洪(MAC Flooding):
- 发送大量伪造 ARP 回复,溢出交换机的端口/MAC 表,使其进入广播模式。
- 拒绝服务(Denial-of-Service):
- 更新 ARP 缓存为不存在的 MAC 地址,导致合法帧被丢弃。
- 连接劫持(Connection Hijacking)与克隆(Cloning)。
- ARP 缓存投毒(ARP Cache Poisoning):
- 解释:ARP 攻击利用协议的信任机制,通过伪造 MAC 地址实现流量拦截或服务中断。
防止 ARP 欺骗(Preventing ARP Spoofing)
- 方法:
- 在交换机启用 MAC 绑定(MAC Binding):固定 IP 和 MAC 对应关系。
- 使用静态 ARP 表(Static ARP Tables):手动配置,适合小型网络。
- 部署 arpwatch(Unix 系统):监控 ARP 缓存变化并报警。
- 挑战:
- 静态 ARP 表在大规模动态网络中难以管理。
- 解释:防止 ARP 欺骗需权衡安全性和管理成本,静态配置在小型网络可行,但在动态环境中复杂。
域名系统(Domain Name System, DNS)
- 定义:DNS 将域名(Name Address)映射到 IP 地址。
- 问题:默认无认证机制,易被攻击。
- 攻击类型:
- 黑客攻击名称服务器(Nameserver)或投毒 DNS 缓存(Cache Poisoning)。
- 导致的攻击:
- 伪造信任关系(如
/etc/hosts.equiv
、NFS)。 - 冒充服务器(如 Web 服务器)。
- 拒绝服务攻击。
- 伪造信任关系(如
- 解释:DNS 攻击利用域名解析的信任机制,伪造映射关系以重定向流量或窃取数据。
DNS 安全扩展(DNS Security Extensions, DNSSEC)
- 定义:DNSSEC 使用数字签名(Digital Signatures)增强 DNS 安全性。
- 功能:
- 数据来源认证(Origin Authentication)。
- 认证不存在记录(Authenticated Denial of Existence)。
- 数据完整性(Data Integrity)。
- 新记录类型:
- RRSIG:数字签名记录。
- DNSKEY:公钥记录。
- DS:用于认证 DNSKEY 的信任链。
- NSEC/NSEC3:用于证明记录不存在。
- NSEC3PARAM:NSEC3 参数。
- 示例:
fedoraproject.org. 46 IN RRSIG AAAA 5 2 6020 ...
- 问题:DNSSEC 采用率低,因小错误可能导致流量丢失。
- 解释:DNSSEC 通过加密签名验证 DNS 数据真实性,但复杂性和潜在风险限制了其普及。
基础设施攻击(Infrastructure Attacks)
- ICMP 攻击:
- 互联网控制消息协议(Internet Control Message Protocol, ICMP)用于传递错误消息和网络状态。
- 可伪造 ICMP 错误消息,欺骗目标主机不可用。
- 防火墙通常阻挡 ICMP 流量。
- 其他协议攻击:
- 路由协议(如 RIP、EGPR、BGP、OSPF)易被攻击。
- 域名注册商(Domain Name Registrars)被攻击可更改根名称服务器记录。
- 解释:基础设施攻击针对网络核心协议,利用缺乏认证的漏洞干扰服务或重定向流量。
应用层:Web 安全(Web Security)
- 特点:
- 网站涉及多种技术:JavaScript、SQL、Python、PHP、HTML、CSS 等。
- 依赖第三方服务(Google Analytics、PayPal 等)。
- 使用协议:HTTP(S)、JSON、DNS。
- 问题:
- 网站全球可访问,宕机后需快速恢复,安全常被忽视。
- 依赖的框架和工具常未及时更新,易受漏洞攻击。
- 解释:Web 应用的复杂性和开放性使其成为攻击的重点,任何组件的漏洞都可能导致系统失效。
Web 漏洞概述(Web Vulnerabilities Overview)
- 主要漏洞:
- SQL 注入(SQL Injection, SQLi):利用未过滤输入执行恶意 SQL 查询。
- 跨站脚本攻击(Cross-Site Scripting, XSS):注入恶意脚本到网页。
- 跨站请求伪造(Cross-Site Request Forgery, CSRF):伪造用户请求。
- SSL 剥离(SSLStrip):将 HTTPS 降级为 HTTP,窃取数据。
- 不安全框架(Insecure Frameworks):使用过时或漏洞框架。
- 不安全机器(Insecure Machines):未修补的系统漏洞。
- 原因:带内信令(In-Band Signalling)问题,未过滤输入可能被当作控制信号执行。
- 解释:Web 漏洞多源于输入验证不足,攻击者可通过用户输入操控系统行为。
Web 服务器架构(Web Server Architecture)
- 应用服务器(Application Servers):
- 处理 HTTP 请求,包含:
- 后端代码(Back-end Code)
- 业务逻辑(Business Logic)
- 数据库接口(Database Interface)
- 缓存层(Caching Layers)
- 处理 HTTP 请求,包含:
- 语言与框架:
- Python:Flask、Django
- PHP:CodeIgniter、CakePHP
- Ruby:Ruby on Rails
- JavaScript:Express.js
- ASP.NET
- 数据库:
- SQL 关系型数据库(Relational Databases):MySQL、PostgreSQL、SQLite
- NoSQL 非关系型数据库(Non-Relational Databases):MongoDB、Cassandra
- 解释:应用服务器是 Web 架构的核心,处理动态内容生成,依赖数据库和框架,但漏洞常出现在这些组件中。
互联网面向 Web 服务器(Internet Facing Web Servers)
- 功能:
- 直接接收客户端 HTTP 请求。
- 通常通过负载均衡器(Load Balancer, LB)分发请求到后端服务器。
- DDoS 防护:
- DDoS 缓解服务(如 CloudFlare)作为第一层,过滤攻击流量。
- 合法包转发到负载均衡器,攻击包被丢弃。
- 解释:互联网面向服务器是外部访问的入口,负载均衡和 DDoS 防护提高可用性,但需确保安全配置。
SQL 注入(SQL Injection)
- 定义:通过未过滤的用户输入(Unsanitized Input)修改 SQL 查询,导致数据库被恶意操作。
- 示例:
- 代码:
$id = $_REQUEST['id']; $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; $result = mysql_query($query);
- 正常访问:
http://example.com?id=15
- 查询:
SELECT first_name, last_name FROM users WHERE user_id = '15'
- 查询:
- 攻击访问:
http://example.com?id=%27%3B+DROP+TABLE+users%3B+--
- 查询:
SELECT first_name, last_name FROM users WHERE user_id = ''; DROP TABLE users; --'
- 结果:删除 users 表(DROP TABLE)。
- 查询:
- 代码:
- 工具:sqlmap(Python 开发的自动化 SQL 注入工具)。
- 影响:
- 读取敏感信息(Read Sensitive Data)。
- 修改数据(INSERT、UPDATE、DELETE)。
- 执行管理操作(如 DROP、SHUTDOWN)。
- 读取数据库系统文件。
- 解释:SQL 注入利用了动态拼接 SQL 查询的漏洞,攻击者通过输入恶意代码控制数据库操作。
真实世界影响(Real World Impact)
- SQL 注入的普遍性:
- PHP 应用中尤为常见,因常直接使用数据库命令。
- 每小时面临大量 SQL 注入攻击。
- 后果:
- 泄露敏感信息(Data Leakage)。
- 修改或删除数据。
- 执行高危操作(如删除数据库)。
- 访问服务器文件系统。
- 解释:SQL 注入的高发性源于开发中忽视输入验证,自动化工具如 sqlmap 使攻击更易实施。
可能考法与示例考题
可能考法
- 概念题:解释 SYN 洪泛、Smurf 攻击、ARP 缓存投毒等攻击的原理及防御方法。
- 分析题:分析会话劫持或 SQL 注入的攻击流程,说明如何利用协议或代码漏洞。
- 应用题:设计防御措施(如防火墙规则、DNSSEC 配置)应对特定攻击。
- 代码分析:识别代码中的 SQL 注入漏洞并提供修复方案。
- 比较题:比较 IPSec 的 AH 和 ESP 模式,或静态与动态防火墙的优缺点。
示例考题
-
问题:描述 SYN 洪泛攻击的工作原理,并说明如何防御此类攻击。
- 参考答案(中文):
SYN 洪泛攻击利用 TCP 三次握手的漏洞,攻击者发送大量伪造的 SYN 包给受害者,受害者为每个 SYN 分配资源并回应 ACK 和 SYN,但攻击者不发送最终 ACK,导致受害者资源耗尽。防御方法包括:
- 使用 SYN Cookie:服务器不立即分配资源,而是将连接信息编码在 SYN-ACK 的序列号中,等待客户端确认。
- 增加资源池(如增大连接队列)。
- 部署防火墙过滤异常流量。
- Reference Answer (English):
SYN Flooding exploits the TCP three-way handshake by sending numerous forged SYN packets to the victim, which allocates resources and responds with ACK and SYN. The attacker never sends the final ACK, exhausting the victim’s resources. Defenses include:
- Using SYN Cookies: The server encodes connection details in the SYN-ACK sequence number, deferring resource allocation until client confirmation.
- Increasing resource pools (e.g., larger connection queues).
- Deploying firewalls to filter anomalous traffic.
- 参考答案(中文):
SYN 洪泛攻击利用 TCP 三次握手的漏洞,攻击者发送大量伪造的 SYN 包给受害者,受害者为每个 SYN 分配资源并回应 ACK 和 SYN,但攻击者不发送最终 ACK,导致受害者资源耗尽。防御方法包括:
-
问题:分析以下代码中的 SQL 注入漏洞,并提出修复建议。
$id = $_REQUEST['id']; $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
- 参考答案(中文):
漏洞:代码直接将用户输入
$id
拼接进 SQL 查询,未进行过滤。若输入为'; DROP TABLE users; --
,将执行删除表操作。 修复建议:- 使用参数化查询(Prepared Statements):
$stmt = $pdo->prepare("SELECT first_name, last_name FROM users WHERE user_id = ?"); $stmt->execute([$id]);
- 过滤输入:使用
intval($id)
确保$id
为整数。 - 限制数据库权限,防止高危操作(如 DROP)。
- 使用参数化查询(Prepared Statements):
- Reference Answer (English):
Vulnerability: The code directly concatenates user input
$id
into the SQL query without sanitization. An input like'; DROP TABLE users; --
could execute a table drop. Fix Suggestions:- Use parameterized queries:
$stmt = $pdo->prepare("SELECT first_name, last_name FROM users WHERE user_id = ?"); $stmt->execute([$id]);
- Sanitize input: Use
intval($id)
to ensure$id
is an integer. - Limit database permissions to prevent dangerous operations (e.g., DROP).
- Use parameterized queries:
- 参考答案(中文):
漏洞:代码直接将用户输入