毕业倒计时阅读笔记2-使用协议状态模糊测试分析DTLS实现
关函题目:使用协议状态模糊测试分析DTLS实现-2020年
链接:文章地址:Analysis of DTLS Implementations Using Protocol State Fuzzing
上一集中阅读了DTLS协议,国产的DTLCP协议,本次来看对DTLS协议实现的测试。
本文只是学习笔记,部分信息来源于ChatGPT。
论文拓展TLS-Attacker框架以支持DTLS协议分析,对多个 DTLS协议的实现进行了状态模糊测试,发现了多个安全漏洞和非一致性行为
1 - TLS-Attacker 框架
TLS-Attacker 是一个开源的 Java 框架,专为分析和测试 TLS协议而设计。允许自定义的协议流程,灵活地修改消息内容,从而发现实现中的漏洞和安全缺陷。
根据相关资料,TLS-Attacker 主要用于测试以下方面:
协议状态机测试:通过构建自定义的消息序列,测试 TLS 实现的状态机是否正确处理各种协议流程,识别潜在的状态机漏洞。(wcventure.github.io)
消息内容修改:利用可修改变量(Modifiable Variables)机制,动态地更改消息中的字段,以测试实现对异常或边界情况的处理能力。(acsac.org)
模糊测试(Fuzzing):通过系统地变异消息内容,发现实现中的缓冲区溢出、内存泄漏等安全问题。
协议兼容性和配置测试:验证 TLS 实现是否正确支持各种协议版本、密码套件和扩展,确保其与标准的一致性。(OWASP)
已知漏洞验证:模拟已知攻击(如 Heartbleed、ROBOT 等),验证 TLS 实现是否易受这些攻击的影响。(acsac.org)
TLS-Attacker 的核心组件包括:
- WorkflowTrace:定义了 TLS 会话的消息流程,支持发送和接收操作的灵活组合。
- Modifiable Variables:允许动态修改消息字段,以模拟各种异常情况。
- Action 系统:支持多种操作,如发送/接收消息、激活/停用加密、打印调试信息等,增强了测试的灵活性。
此外,TLS-Attacker 还提供了多个子项目,如 TLS-Scanner、TLS-Anvil 等,用于自动化测试和漏洞扫描。这些工具可以帮助开发者和安全研究人员系统地评估 TLS 实现的安全性。
2 - 扩展的DTLS测试框架
2.1 - DTLS协议
DTLS(数据报传输层安全协议)被引入以确保在不可靠传输环境下(UDP)的通信安全 DTLS是TLS协议的变体,专为处理UDP的无连接特性设计,如消息丢失、乱序、分片以及DoS攻击防护。这些特性使得DTLS的协议分析比基于TCP的TLS更为复杂。
3 - DTLS协议的安全测试
3.1 - 协议状态模糊测试框架
模型学习(Model Learning) 的方法,推断协议实现的行为模型框架组成:
组件名 | 职责 | 类比 |
---|---|---|
LEARNER(学习器) | 不断“提问”系统:发送输入消息,看系统怎么回应 | 提问者 |
MAPPER(映射器) | 把学习器生成的“符号指令”翻译成真正的 DTLS 消息,并把响应翻译回来 | 翻译官 |
SUT(System Under Test) | 被测试的协议实现(比如服务器) | 被提问者 |
什么是 Mealy 机? Mealy machine,有限状态自动机,基于它的当前状态和输入生成输出的。通过模型学习得到的 Mealy 机,描述协议如何响应一系列消息,“模拟”这个 DTLS 实现的大致行为。
与标准规范对比:
- 学习器不断向被测系统(SUT)发送各种组合的协议消息;
- 记录响应行为,推导出一个状态机;
- 将该模型与 标准协议规范 进行比对;
- 标记出任何“不应该发生”或“与其他实现差异明显”的行为,即为非规则行为。
3.2 - 实验测试与结果
- 测试对象:广泛使用的 DTLS 实现,包括通用TLS实现(如OpenSSL、GnuTLS、MbedTLS等),也有专为物联网设计的轻量级实现(如Scandium和TinyDTLS)
- 测试信息:版本,timeout,符号表(密码套件和是否启用证书),状态数目,巴拉巴拉
4 - 安全漏洞
4.1 - 非规则行为的识别
非规则行为指的是协议实现中的某些不符合标准规范或者异常的状态响应逻辑。识别非规则行为来寻找安全漏洞。
例如:
- 不规则的握手流程:
- 提前完成握手(Early Finished)在握手还没完成时就提前进入通信状态【身份认证绕过】
- 忽略ChangeCipherSpec 消息,就完成握手【明文传输】
- 用较高的message_seq值启动握手,违背了DTLS规范要求【不符合规范】
- 握手消息顺序错误,未正确验证握手消息的顺序【协议状态异常】
- 不规范的Cookie计算:
- 在计算Cookie值时出现错误,无法正确验证后续的ClientHello消息
- 直接逃过Cookie交换
- 状态机异常:
- 异常的状态转换路径,同一输入消息在不同状态下表现完全不同
4.2 - 安全漏洞
其实在非规则行为中已经分析了,漏洞主要因为没有符合规范,例如没有对握手流程和消息顺序的严格验证。并且因为存在代码复用,所以一个协议中的漏洞可能影响到另一个协议的安全性。
- 提前握手:没有证书或CertificateVerify消息的情况下完成握手
- 允许提前发送Finished消息
- 多次发送ChangeCipherSpec
- 错误重传HelloVerifyRequest
- 错误地将大多数消息当作ClientHello处理,无效握手
- 无效epoch号握手
- 错误处理重传的Finished消息,并未正确发送适当的警报
5 - 后记
论文中用了“黑盒模型学习 + 状态模糊测试”的方法,来做协议的自动化安全测试。将网络协议看作是“状态的转移”,用Mealy机进行行为模拟,与标准规范进行对比,找出非规则行为
协议测试总结:
- 是否按照协议规范进行实现 –> 大部分安全问题
安全检测测试:
- 是否跳过/错误实现关键步骤:提前握手等
- 是否绕过认证逻辑
- 确保明文进行了加密
- 消息乱序等问题
临界值、非法输入测试:
- 构造异常信息:长度为0,超长,非法编码,使用不兼容的密码条件和身份验证
- 是否崩溃、返回异常、错误接受信息没报警
6 - QUIC协议
QUIC(Quick UDP Internet Connections)传输层协议
基于UDP
- 低延迟(0-RTT / 1-RTT 连接建立);
- 减少握手开销(集成 TLS 1.3);
- 可靠传输 + 多路复用(避免 TCP 队头阻塞);
- 更好的中间网络穿越性;
- 加密优先,强制加密通信。