Page 311 - 《软件学报》2025年第8期
P. 311
3734 软件学报 2025 年第 36 卷第 8 期
进行比较, 以查看它们是否相同. 在有限状态机学习当中, SNETFuzzer 实际上是作为 TLS 通信中的客户端, 而被
测系统作为服务端.
输入符号 输入数据包
消息处理
提供
学习程序 和映射 被测系统
输出符号 程序 输出数据包
TLS 协议字母表
图 6 消息处理和映射程序
算法 1. Angluin’s L*算法的伪代码.
输入: S: 字母表的集合 (初始为空), 包含输入; L: 当前的假设有限状态机 (初始为一个初始状态), 包含输入输出;
R: 表示等价关系的表 (初始为空);
输出: L: 学习之后的有限状态机.
function Angluin’s_L*(S, L, R):
1. while L!=目标有限状态机 do:
2. (a) 使用成员查询学习状态机:
3. for each w∈ S do:
4. 执行 w 在 L 上的模拟, 获取模拟的状态序列
5. if 模拟状态序列与目标有限状态机不一致 then:
6. 将 w 添加到 S
7. end if
8. end for
9. (b) 使用等价查询完善假设:
10. for each s ∈ S do:
11. 向被测系统查询 s 在目标有限状态机上的行为
12. if 被测系统返回的行为与 L 上的模拟不一致 then:
13. 将该字符串 s 和目标有限状态机的真实行为添加到 R
14. end if
15. end for
16. (c) 更新假设 L:
17. 通过等价关系 R 更新 L 的状态转移和输入输出
18. end while
19. return L
SNETFuzzer 的学习程序是无法直接传输数据包, 也无法直接处理被测系统返回的数据包. 所以需要如图 6
所示的消息处理和映射程序作为二者的通信中介, 将学习程序生成的输入符号转化成被测系统能够接收和处理
的具体数据包, 并将其发送给被测系统; 其次, 将被测系统返回的数据包转换为学习程序能够理解的输出符号.
这里所提到的输入和输出符号 (symbol) 指的是 TLS 协议字母表中列出的字符串, 每个字符串对应着一种 TLS
协议数据包. 模块的任务就是处理这些符号之间的对应关系, 并将其转化为学习程序和被测系统之间可互相理
解的形式.
消息处理和映射程序首先将根据有限状态机学习程序发送的输入符号, 生成合法的数据包. 比如有限状态机
学习程序发送了输入符号 Certificate, 消息处理和映射程序将依据表 2 的对应关系找到对应的十六进制值并且按

