【协议逆向工程】Part 1 概述
1 协议逆向工程概述
1.1 协议
协议是计算机网络与分布式系统中各种通信实体键相互交互信息时必须遵守的一组规则和约定,这些规则明确规定了所交换的数据格式以及有段的同步问题,从而保证了双方通信有条不紊、可靠地交换信息。
比较著名的网络协议有TCP/IP协议栈中的一些协议,比如IP、TCP、UDP、POP3、SMTP、HTTP等。除了大量标准化的通信协议外,网络中还存在大量私有协议,各种软件厂商或个人处于经济利益、安全、隐私等因素的考虑,并没有公开协议细节;一些恶意软件也采用了自己的私有协议防止被跟踪和分析。
1.2 协议分析技术
协议分析技术主要分为两大类:
(1)对已知协议的识别与分析。
(2)对未知协议的逆向分析。
第一类以协议特征(比如协议格式特征、端口特征、流量特征等)为基础,识别应用使用的通信协议并根据协议规范对协议报文进行分析,前提是协议规范已知。
第二类在协议特征未知的条件下,通过协议报文或协议软件执行过程分析得到协议规范(比如协议字段格式和协议状态机),即协议逆向分析。
1.3 协议逆向工程
协议逆向工程是指在不依赖协议描述的情况下,通过对协议实体的网络输入输出、系统行为和指令执行流程进行监控和分析,提取协议语法、语义和同步信息的过程,是工程化的协议逆向分析方法。随着网络规模的扩大和应用种类的增多,对协议逆向的准时性和时效性要求越来越高,自动化协议逆向分析技术成为人们追求的目标。
2 协议逆向分析流程
以协议规范描述模型为目标,协议逆向分析系统应当包括输入预处理,协议格式提取,协议状态机推断三个阶段。
2.1 输入预处理
协议逆向的原始输入为连续的网络数据流或者处理网络数据流的指令执行轨迹。要实现协议格式提取以及协议状态机推断,首先要以会话个报文为粒度对输入进行分割。分析之前要提出原始输入中的冗余和干扰,比如报文序列中可能出现的重传、乱序、分片。会话划分和报文定界是网络流量分析领域的重要研究方向。目前研究已较为成熟。
2.2 协议格式提取
字段符号特征和结构是格式文法的属性。协议格式提取需依次经过字段识别、结构提取、语义与取值约束判断三个步骤,才可识别每个报文对应的格式。对报文所有格式进行合并,得到统一的协议格式文法和各个报文结构属性。根据分析对象的不同,协议格式提取技术分为两类:
(1)基于网络流量的协议格式逆向分析
(2)基于执行轨迹的协议格式逆向分析
第一类基于网络流量的协议格式逆向分析技术,也叫作基于报文的协议逆向分析技术,或者报文序列分析技术。即以截获的网络数据流作为分析对象,依据协议字段的取值变化频率和和特征推断得到协议格式。其依据是:数据流中的当个报文是协议格式的一个实例,相同格式的报文样本往往具有相似性,可以将具有相似性的报文汇集到一起,推断他们所遵循的报文格式。
第二类是基于执行轨迹的协议格式逆向分析技术,也成为基于指令序列的逆向分析技术,或者指令序列分析技术。以指令执行轨迹为分析对象,利用动态污点分析技术跟踪程序对报文的解析过程,并依据协议实体解析报文字段的具体过程实现协议格式的提取。
基于网络流量的分析技术与基于执行轨迹的分析技术相比,存在以下优点:
(1)时效性强。在报文样本数量大,协议种类多的情况下,运行速度快,能够快速得到结果。
(2)对终端依赖小。在未知目标通信软件的情况下,不需要跟踪报文在终端运行情况。
(3)通用性强。报文序列分析方法不关心报文所在协议的层次,只对报文的格式进行分析。
基于网络流量的分析技术与基于执行轨迹的分析技术相比,存在以下缺点:
(1)在仅提供正例网络流量的前提下,正则语言不可能通过学习得到。
(2)对采用加密和压缩机制的协议,报文字节的取值已被破坏,无法通过网络流量分析进行逆向。
(3)对样本集的覆盖率依赖大,样本中不存在的报文格式,无法网络流量分析逆向。
2.3 协议状态机推断
协议状态机推断是指通过分析捕获的网络协议报文序列和协议实体对该报文序列的解析过程,获得协议实体处理状态迁移的逻辑结构以及行为语义信息,最终构成协议的状态机。
在协议状态机推断过程中,通常需要将报文序列中的报文实例抽象为其所属的报文类型,进而将一个或连续的多个抽象类型标注为一个状态。
经过输入预处理,协议格式提取,协议状态机推断后,形成协议规范文本,为后续网络协议逆向应用奠定基础,比如基于协议的模糊测试技术等。
【协议逆向工程】Part 1 概述的更多相关文章
- SSL/TLS协议运行机制的概述_转
转自:SSL/TLS协议运行机制的概述 作者: 阮一峰 日期: 2014年2月 5日 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和 ...
- Protocol Informatics (PI项目)【基于网络轨迹的协议逆向工程文献学习】
Protocol Informatics[基于网络轨迹的协议逆向工程文献学习]by tsy 声明: 1)本报告由博客园bitpeach撰写,版权所有,免费转载,请注明出处,并请勿作商业用途.恕作者著作 ...
- LoRaWAN协议(四)--入网方式概述
前言 在LoRaWAN中,node最终和服务器能够正常数据交互,需要先入网,入网的本质,也就是获得一些通信相关的参数,有以下几个: NwkSKey AppSKey DevAddr DevEui 其中 ...
- SSL/TLS协议运行机制的概述
互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 ...
- 【转】SSL/TLS协议运行机制的概述
互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 ...
- TCP/IP 协议:链路层概述
我们以一个常见的查看IP指令为出发点(ifconfig -a): 1.链路层是什么 链路层是指硬件层协议.也即网络所使用的硬件,比如:以太网(后文主要讨论对象),令牌环网,FDDI已经RS-232 ...
- SSL/TLS协议运行机制的概述(转)
互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 ...
- SSL/TLS协议运行机制的概述(转)
互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想了解这方面的内容,请参阅RFC文档. 一.作用 ...
- 第03节-BLE协议各层数据格式概述
本篇博客根据韦大仙的视频,整理所得. 对于BLE系统,它分为上下两块.上面那一块,我们称为host主机.下面这一块是controller,你可以简单的认为它就是一个蓝牙芯片. 对于host这一块,它运 ...
随机推荐
- ubuntu 使用dpkg手动安装deb包时发生循环依赖的解决办法
将循环依赖的所有包放到同一个命令行里一起安装,如: sudo dpkg -i libnss3-nssdb_3.28.4-0ubuntu0.14.04.4_all.deb libnss3_3.28.4- ...
- Windows 下运行Makefile文件
下载并安装Microsoft Visual Studio2017 配置环境变量: 计算机右击-属性-高级系统设置-环境变量-选择Path编辑-添加nmake的路径: D:\Microsoft Visu ...
- taro中子父传值
其实网上很多方法,我这只是一个简单的demo,废话不多说直接上代码 import Taro, { Component } from '@tarojs/taro' import { View, Text ...
- js实现多行文本溢出省略
实现效果: css: position: relative; line-height: 20px; max-height: 60px; js: function overflowHiddon(el) ...
- ubuntu(centos) server安装vmware tools
Ubuntu: root登录ubutun $ sudo su vmware中选择菜单虚拟机->安装VMware Tools 命令行如下 // 将cdrom挂载到mnt $ mount -t is ...
- asp.net 导出excel--NPOI
1.使用OLEDB导出Excel ,这种方式有点慢,慎用 /// <summary> /// 使用OLEDB导出Excel /// </summary> /// <par ...
- The type groovy.lang.GroovyObject cannot be resolved
很明显是:编译 Groovy 不通过 解决办法:添加 Groovy 包 比如 maven 项目里: <dependency> <groupId>org.codehaus.gro ...
- 裸奔的bootloader单步调试
2011-03-01 23:25:22 目地:更清晰的了解bootloader的结构及功能.为移植U-boot打基础. 以前只知道大概,今天利用IAR调试工具,看着汇编代码,看着寄存器,看着内存.来单 ...
- jQuery 位置
jQuery 位置 // 默认窗口 $(window) // 查看.指定标签上下滚轮的位置数 $('#id').scrollTop() // 设置.指定标签上下滚轮的位置数 $('#id').scro ...
- mysql 主键外键
外键MUL:一个特殊的索引,用于关键2个表,只能是指定内容 主键PRI:唯一的一个不重复的字段. # 创建一个表用来引用外键 create table class( -> id int no ...