查看原文
其他

网络协议逆向初探—Netzob简介及优劣性分析

安全大数据分析 绿盟科技研究通讯 2021-03-12

Netzob是一款由法国学者Georges Bossert和Frédéric Guihéry开发的,在网络协议逆向工程中, 用于划定字段边界,描述字段语义,流量生成,和模糊测试通信协议的开源工具。其中:

字段边界:将原始协议报文划分为若干个可识别字段。

字段语义:字段数据所约定的含义,包含静态语义和动态语义。

流量生成:生成与主机进行交互的网络流量。

模糊测试:通过向被测试系统注入大量非预期的输入来发现潜在的漏洞。

应用层协议包括两种基础组成部分:协议状态机和报文格式。这款工具能做到通过主动与被动过程来推断报文格式(词法),和协议状态机(语法)。如图1所示,Netzob的协议逆向分析由三个阶段组成:导入,协议推断,和仿真。

第一阶段:导入

Netzob可导入多种数据,如实时网络通信,进程间通信数据,捕捉的网络通信(PCAP)和oSpy文件格式的API。

使用函数PCAPImporter或FileImporter导入一个或多个文件,Netzob在导入过程中对原始报文进行解码转换,并分层归类。同时,可选择伯克利封包过滤器来限制导入的封包内容,指定导入的网络协议层数和指定导入数据包的数量。数据包导入后的格式为messages。

下图为导入的.pcap格式的Modbus数据包:

第二阶段:协议推断

将导入的messages合并(若有多个文件导入)并提取出规范化的形式Symbol。Symbol是相似报文的抽象化。属性相似的报文在协议里担当相同的角色。例如,TCP会话集中的SYN报文可抽象化为同一符号。Symbol结构明确了一系列可预判的字段(field)。这些字段有固定或可变的长度。图3为由modbus协议生成的messages提取的Symbol。

1词法推断


>>>>

1. 字段分割

a) splitDelimiter字符分割:用于分割的字符可以为ASCII, 自定义, 十六进制字符串, 以及任何符合抽象数据类型AbstractType的对象。

图4的Symbol中,每行都包含字符“#”,因此将“#”作为分割符将每行分成多个字段(图5)。

 图4. Symbol

 图5. 字符“#”分割 

b) splitStatic:根据静态分布的分割。

如图7所示,图6分割后的各字段中:Field-0,field-2。Field-4为动态字段,Field-1和Field-3为静态字段。

图6. Symbol

 图7. 静态分割

c) splitAligned:检测活动的循环部分。用Needleman-Wunsch序列比对算法进行字节定界。此算法对包含可变长度的动态字段更有效。

对图8 Field-2再分割。根据Needleman-Wunsch算法,相似匹配度高的被分配在同一字段(图9)。

图8. Field-2

  图9. 对齐分割

>>>>

2.报文分簇—重组报文

Netzob对分割后的报文进行分簇,使用的函数有:

  • clusterByKeyField

  • clusterbyApplicativeData

  •  clusterBySize

  •  clusterByAlignment

  • clusterByKeyField:根据关键字段分簇重组。

如图10,字符分割后的各字段中,Field-0包含了多种命令,如CMDidentify, CMDbye.等.因此,以Field-0作为 key field来分簇。分簇生成了14个不同的symbol(图11)。

图10. 字符分割的字段

图11. 分簇后的14个symbol

  • clusterbyApplicativeData: 根据协议内嵌的应用数据分簇。用户需自定义Applicative Data,如ACK,SYN(图12)。

    图 12. 自定义应用数据

  • clusterBySize根据长度分簇:相同长度的字段被重新归为一组(图13)。


    图13. 根据长度分簇

  • clusterByAlignment:使用UPGMA(unweighted pair-group method with arithmetic means)非加权组平均法,构造系统树来进行多序列比对,最大化边界。

>>>>

3.各symbol之间的关系(RelationFinder)

确定潜在的报文字段之间的关系并根据所找到的关系修改报文格式。

2语法推断

abstractSession:提取导入的原始报文的序列,包括在同一时间交换的报文。

推断状态机:

状态机是特征化的所有可能的,合理的报文序列。状态机包含一组状态集(states)、一个起始状态(start state)、一组输入符号集(alphabet)、一个映射输入符号和当前状态到下一状态的转换函数(transition function)的计算模型。状态机可以用一个有向图形来描述,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前”节点的转移函数的控制范围内。这些节点中至少有一个必须是终态。当到达终态,状态机停止。

以下为Netzob中可生成的状态机:

  • 状态机链Chained States Automata: 图14为一个基本的自动机,包括一系列来描述报文传输的命令和响应的序列。每发送一个报文都将创建一个新的状态(State1-State8)。一系列报文的状态组成了状态机链。

图14. 状态机链


  • 单状态机 One State Automata: 图15的状态机中只生成了一个状态(main state),其中包含了每一个合理的接收与发送报文。

图15. 单状态机

  • PTA Automata: 合并不同的从Prefix Tree Acceptor中抽象得来的报文序列来生成状态机(图16)。

    这里用到的Prefix Tree前缀树,是一种多叉树结构,图17为一棵Trie树,包含了关键词:{‘to’, ’tea’, ‘ted’, ‘ten’, ‘a’, ‘in’, ‘inn’}. Trie树把每个关键字保存在一条路径上. 两个有公共前缀的关键字,在Trie树中前缀部分的路径相同。

    图16. PTA状态机

图17. 前缀树示 

第三阶段:仿真


1流量生成

流量生成– 与真实的服务器通信来验证报文格式是否正确

a) 启动Netzob中内置的服务器(IP client, Raw Ethernet client, SSL client, TCP client/server, UDP client/server)

b.)如图18所示,连接一个客户端,让推断出的报文与服务器通信。客户端代表通信的远端端口,可以收发生成的状态机和报文格式的数据。为了确保接收与发送的Symbol和具体消息能够相互转化,使用一个抽象层(Abstraction Layer),图19为抽象层的内容。

图18. 流量生成

图19. 抽象层

图20. Incoming messages

从图20结果来看,收到的报文格式是正确的,服务器能分析它们并发送正确回应。

2模糊测试

模糊测试(Fuzzing)通过向被测试系统注入大量非预期的输入来发现潜在的漏洞。

如图21,选定一个有动态字段(CMDencrypt)的报文,改变报文结构。

图21. 生成非预期报文

下图可看出Netzob只发出了最后一个字段的CMDencrypt报文。

 

图22. 发送非预期报文

图23为用原始报文和改过的报文向服务器询问过程。含有动态字段的原始报文发送到服务器,得到了回应。而被修改过动态字段的测试报文发送后得到了错误消息。

图23. Fuzzing过程

如图24所示,服务端得到了错误消息,解析最后一个字段时产生了bug。

图24. 错误消息

总结

Netzob主要用 Needleman-Wunsch算法和UPGMA对报文分割分簇,以此来划定字段边界。提取字段类型特征,将类型具体化为表达式,并用搜索算法识别内在符号的依赖关系来描述字段语义。Netzob用主动推断的方式基于报文序列方法推断状态机,利用询问和应答的反馈不断扩充已有样本来推断状态机。但Netzob对于字段之间存在的顺序、并列和层次三种结构关系缺乏描述,也无法分析出字段取值所需要满足的特定约束条件。Netzob对于字段语义的描述引入过多的先验知识,因此对于未知网络协议分析具有一定的局限性。


参考文献

[1] Amossys. “Security Blog.” AMOSSYS Security Blog ATOM, blog.amossys.fr/How_to_reverse_unknown_protocols_using_Netzob.html.

[2] “使用Netzob逆向未知协议.” www.anquanke.com/post/id/85441.

[3] Georges Bossert. Security Evaluation of Communication Protocols in Common Criteria

[4] 吴礼发.网络协议逆向分析及应用,2016

[5] https://baike.baidu.com/item/%E7%8A%B6%E6% 80%81%E6%9C%BA/6548513


内容编辑:安全大数据分析实验室  王语嫣   责任编辑:肖晴

期回顾


本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。

关于我们



绿盟科技研究通讯由绿盟科技创新中心负责运营,绿盟科技创新中心是绿盟科技的前沿技术研究部门。包括云安全实验室、安全大数据分析实验室和物联网安全实验室。团队成员由来自清华、北大、哈工大、中科院、北邮等多所重点院校的博士和硕士组成。

绿盟科技创新中心作为“中关村科技园区海淀园博士后工作站分站”的重要培养单位之一,与清华大学进行博士后联合培养,科研成果已涵盖各类国家课题项目、国家专利、国家标准、高水平学术论文、出版专业书籍等。

我们持续探索信息安全领域的前沿学术方向,从实践出发,结合公司资源和先进技术,实现概念级的原型系统,进而交付产品线孵化产品并创造巨大的经济价值。

长按上方二维码,即可关注我们

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存