1. 协议基础与威胁模型
各位同学好。我是老周,在安全协议这块摸爬滚打了十几年。今天咱们开始第一讲,先把地基打牢。说白了,你连协议怎么握手、数据怎么封装都不清楚,后面挖漏洞就是瞎猫碰死耗子。
1.1 OSI模型与TCP/IP协议栈回顾
先问个问题:当你打开浏览器访问一个HTTPS网站,数据从键盘到网线,中间经历了什么?
OSI七层模型是理论上的完美参考,但实际互联网跑的是TCP/IP四层栈。我习惯把这两张图放在一起对比着看:
| OSI七层 | TCP/IP四层 | 典型协议 | 核心功能 |
|---|---|---|---|
| 应用层 | 应用层 | HTTP, HTTPS, SSH, WebSocket | 为用户提供网络服务接口 |
| 表示层 | TLS/SSL(加密、压缩) | 数据格式转换、加密解密 | |
| 会话层 | NetBIOS, RPC | 建立、管理、终止会话 | |
| 传输层 | 传输层 | TCP, UDP | 端到端可靠传输、流量控制 |
| 网络层 | 网络层 | IP, ICMP, ARP | 路由寻址、分组转发 |
| 数据链路层 | 网络接口层 | Ethernet, PPP | 帧封装、介质访问控制 |
| 物理层 | RJ45, 光纤 | 比特流传输、电气信号 |
举个例子。我曾经分析过一个IoT设备的固件,发现它在TLS握手时竟然允许SSLv3。为什么?因为底层库默认开了向后兼容。这就是典型的「层抽象带来的安全盲区」——应用层开发者以为传输层是安全的,结果传输层偷偷降级了。
1.2 常见通信协议简介
咱们课程会反复跟这几个协议打交道,先混个脸熟。
HTTP / HTTPS
HTTP是明文传输,你发的每一个字节,中间路由器都能看见。HTTPS就是在HTTP外面套了一层TLS。嗯,这里要注意:很多人以为HTTPS就绝对安全了,其实TLS的版本、密码套件配置不当,照样能被撕开。
TLS
TLS是安全通信的基石。它做了三件事:握手协商密钥、加密传输数据、校验完整性。我见过最典型的漏洞是「证书验证不严格」——客户端不校验服务器证书的域名,中间人直接插进来。
SSH
SSH主要用于远程管理。它的安全模型比TLS简单,但坑也不少。比如弱密钥交换算法、主机密钥固定不变、端口转发滥用。我在一次红队演练中,就是通过SSH的agent转发漏洞,横向移动拿下了整个内网。
WebSocket
WebSocket是HTML5带来的全双工通信协议。它的问题在于:很多开发者不知道WebSocket握手阶段用的是HTTP Upgrade,但后续数据传输完全不受HTTP安全策略保护。跨站WebSocket劫持,就是利用了这个认知差。
1.3 协议安全假设与威胁模型
做安全挖掘,首先要搞清楚:这个协议在设计时,假设了什么样的攻击者?
Dolev-Yao模型
这是协议安全分析的经典模型。它假设攻击者可以:
- 窃听所有通信消息
- 拦截、篡改、重放任何消息
- 伪造新消息并注入网络
- 控制通信信道(但不控制参与方的内部状态)
说白了,Dolev-Yao模型把攻击者想象成「完全控制网络」的魔鬼。你想想看,如果协议在这个模型下还能保证安全,那它在现实世界中基本就稳了。
我刚开始做协议分析时,总觉得这个模型太极端——哪有攻击者能控制整个网络?后来在一次真实的APT事件分析中,我发现攻击者确实在核心交换机上做了端口镜像,所有流量都过了一遍他的手。嗯,从那以后我再也不敢低估Dolev-Yao模型的现实意义了。
1.4 攻击面分析
有了威胁模型,我们来看看具体的攻击手法。这些是咱们课程后面会反复用到的「武器库」。
中间人攻击(MITM)
攻击者插入通信双方之间,转发并篡改消息。典型场景:ARP欺骗、DNS劫持、伪造Wi-Fi热点。防御手段是双向身份认证和完整性校验——但很多协议只做了单向认证。
重放攻击
攻击者记录一次合法通信,稍后重新发送。比如你登录银行时发送了「转账100元」的请求,攻击者把这个请求重放100次。防御方案是加入时间戳、随机数(Nonce)或序列号。
降级攻击
这是我最常挖到的漏洞类型。攻击者强迫通信双方使用较低版本或不安全的算法。比如TLS降级攻击:攻击者篡改ClientHello,告诉服务器「我只支持SSLv3」,服务器如果允许,就退回到有漏洞的版本。
下面这张图,把咱们第一讲的核心逻辑串起来了:
这张图我建议你存下来。后面每一章,我们都会回到这个框架里,往里面填充具体的协议和攻击手法。