Discoverer是微软研究院的Cui团队开发的,用来做基于Net-trace的协议逆向,而且是格式提取,并没有做状态机提取内容。主要思想就是按照文本和二进制两种属性对报文字节流进行分词,再采用序列比对算法对报文属性序列进行初始聚类,进而对各个域进行语义推断,根据识别出的格式标识域取值进行再分类,不断重复这一过程。最后对属性和语义序列相似度高的子类进行合并,解决过分类问题。
主要亮点:
- 通过分词进行初始字段划分
- 以域为单位进行序列比对
- 能够识别各种特殊字段的语义信息


技术细节:

1.Tokenization
对报文序列每一个字节按从左至右顺序依次进行扫描,如果是可打印字符则标记为文本类型,如果不是则标记为二进制类型。随后将两个二进制字节之间的连续文本字节标记为一个segment,通过分隔符delimiter(用常见的一些分隔符如空格)将segment划分成token,并且为了避免将二进制字节识别为文本字节,要求一个token序列长度必须大于某一个阈值(潘璠递归聚类论文设置为5);对于二进制字节由于不好区分边界,所以将每一个二进制字节单独作为一个token。同时在报文序列中匹配Unicode码。最后得到的每一个token都可能与最终对应推断结果中的某一个字段相关联(可能就是这个字段或者是一部分)。
可能存在的问题
- 有的文本类型的字段可能长度小于设置的阈值,导致被判别为二进制字段;
- 有的二进制字节的ASCII值在可打印字符范围内(如空格或者tab),几个连续出现的这种字节可能会识别成文本token;
- 如果一个文本域中恰好含有分隔符符号,但是并不是用作分隔符,就会导致被错误地分成多个token。
2.Initial Clustering by token pattern
这里利用多序列比对算法对报文序列进行对齐比对的时候,Cui等人认为对报文token模式进行比对效果会优于对实际报文序列进行比对,例如,具有相同格式的两个报文,如果有一个字段是变长字段,那么对实际报文序列进行比对可能会得到误差较大的比对结果。而且在对报文序列进行比对过程中,对两个字节的match、dismatch以及gap分数设置也不好确定。
所以基于token模式序列对报文进行聚类,如,一个报文的的token模式序列可以定义为(dir,class_of_token1,class_of_token2,…)注意dir表示报文的方向,class_of_token1是token的类型,而不是指token值。之所以加入方向属性,是因为不同方向的报文通常都具有不同的格式。最后得到的聚类只是一个粗糙的结果,因为不同格式的报文序列可能会有相同的token类型序列,譬如SMTP协议中的两个文本token:“MAIL receiver”,“HELO server-name”他们的token类型是一样的都是两个文本token(因为有空格分隔符),但是他们属于不同格式的报文。于是Discoverer为了解决这个问题,通过对FD格式标识字段的辨识来对上面得到的聚类分组进行再分类。
3.Recursive Clustering
首先说明一下对于token格式推断以及FD格式标识字段的定义。token格式包括两方面含义:Property以及Semantic。

  • Format Inference

    • Property:包括token是文本类型还是二进制类型,以及token是常量还是变量。类型根据tokonization就可以判断;是常量还是变量,也很好判断,对于上面得到的初始聚类结果,对每一类中的某一个token位置的取值作比较,如果是不变的自然是常量,如果是变化的,则是变量(对于变量的识别还可以加上是定长还是变长的判断)。
    • Semantic:包括长度、偏移、cookie的识别,每一个都有一套启发式规则进行辨识。
  • Format Comparison
    格式比较就是为了将推断得到报文格式进行比较,评判他们是不是相同的格式,如果是的话就会对其进行合并。对于推断得到的两种格式,按照token从左到右一次扫描,将他们每个token的Property以及Semantic进行比较。
    理想意义上,如果知道了两个token的语义是一样的那么这两个token就是匹配的。但是通常有一些字段并没有实际语义或者我们目前还不能推断得到其准确的语义信息,所以我们就需要比较这两个token的Property,包括他们的取值类型等等。在匹配时候,遵循下面一些规则:

    • 如果一个定值token的取值在一个变值token的取值范围内出现过至少一次,那么可以认为这个变值token和定值token相匹配;
    • 如果两个变值token之间取值有交叉,呢么也认为他们是匹配的
    • ……..
  • Format Distinguishers
    因为后面需要用FD字段来进行递归聚类,由于FD字段标识了协议字段之间的层次结构,而且可能一个之内存在很多各层次,所以才会使用基于FD字段的递归聚类,以eDonkey协议中的hello报文为例,其格式的BNF形式如下:
    Message –>Protocol+Length+Type+Payload
    Payload –>Hash+IP+Port+ListSize+Tag
    Tag –> ……….
    通过如下规则来辨识FD字段:

    • 首先将每一个token的取值所出现的频数记录下来,由于FD字段的取值比较固定,所以设定一个阈值,将频数小于这个阈值的token记录下来,作为FD候选字段;
    • 对于满足第一个条件的FD候选字段,将初始聚类得到的结果按照每一种FD候选集中FD的取值进行再分类,每一类对应着FD字段取值相同的一些列报文。这里会设置一个得到的子类的最小数目。
    • 最后,对上一步得到的子类进行Format Comparison,去掉格式相同的子类,那么最终留下的子类中的FD字段也就是最终确定下来的FD字段了
      正如上面的eDonkey例子所示,这样的层次可能不止一层,也就是说可能忽悠多个FD字段,所以才会有递归聚类,就是按照每次辨识出来的FD候选字段集进行聚类得到一个FD字段,再一次寻找下一个FD字段,直到结束。

需要注意的是,在每一次的聚类过程中,确定了一个FD字段后,都需要进行格式推断,因为很可能进行了再分类,以前的字段信息会发生变化,如一个变值字段变成了一个定值字段(子类范围缩小了,这个应该很好理解,举个例子之前一个类里面某一个字段取值有‘a’、‘b’、‘a’、‘c’,之前是一个变值字段,经过再聚类其中得到一个子类中其取值是‘a’、‘a’,自然也就变成了一个定值字段,正式通过这种递归聚类使得得到的初始结果不断精确)。

3.Merging
在进行初始聚类以及递归聚类过程中,其实相应的规则比较Conservative,目的是为了尽可能的将格式相同的报文分到一类中,避免将不同的分到一类中,同时也带来了问题就是可能会将相同格式的报文分到了不同的类,也就是分类太细造成过分类,于是需要Merging这一步,来进行合并。
论文中是使用token序列对其进行合并,首先只允许两个相同类型(文本类型,二进制类型)token进行合并,然后将其token类型序列进行对序列比对。在比对过程中会插入gap,gap过多其实也就意味着他们的相似度较低,于是设置了gap数量限制。个人觉得具体规则没有必要介绍,真的需要实现的话一两句话也说不清楚。
在判断两种格式是否相同时,首先判别gap限制,如果不满足,那么他们肯定不是同一类型;如果满足了,再检查他们之间不匹配的token的数量,如果最多只有一那么就认为是同一中格式进行合并。正式由于这种规则,所以其实我们在使用type-based 序列比对的时候,对于match、mismatch以及gap的分数设置是很重要的,因为结果对这些值比较敏感

Discoverer相关推荐

  1. zabbix server监控项报警提示:“Zabbix discoverer processes 75% busy”

    解决方法:编辑/etc/zabbix/zabbix-server.conf,将StartDiscoverers参数增大,默认为1,将该参数增大到合适的数值,比如4.然后重启zabbix-server就 ...

  2. discoverer初始化环境

    discoverer有些报表是有关联类似po_headers_v,po_lines_v的view的,如果想要在discoverer中查看这些view的数据,会提示"查询不返回任何数据&quo ...

  3. Discoverer导出的多层BOM如何拼装为能够直接体现采购层的单层BOM?

    Discoverer导出的多层BOM如何转为能够直接体现采购层的单层BOM? 这个标题可能有点拗口! 我们发现Discoverer导出的FG零件清单,只有第一层. 第一层的每个Phantom件又有其它 ...

  4. Prometheus源码学习(4) 通过2.24对实例化Discoverer代码的改进学习依赖倒置

    前面读的是 2.19.2 版本的代码,最新更新了 2.24.1,发现在实例化 Discoverer 时改进了设计.这个改变是在 2.21 做出的. 2.19.2 中的实现方式 在 discovery. ...

  5. 解决CentOS“Zabbix discoverer processes 75% busy”的问题

    2019独角兽企业重金招聘Python工程师标准>>> 解决CentOS"Zabbix discoverer processes 75% busy"的问题 运维  ...

  6. Zabbix server: Utilization of discoverer processes over 75%

    Zabbix server: Utilization of discoverer processes over 75% 解决方案: #修改zabbix服务端配置文件 vi /usr/local/etc ...

  7. oracle discoverer 10g手册 下载,Discoverer Desktop安装手册

    <>><>> 密级:机密 总页数:10页 Discoverer Desktop安装手册 (V 1.0) 版权所有Jusin Hao(luckyfriends),转载 ...

  8. discoverer java_discoverer应用产品用户登录不了

    一.无法使用应用产品用户(系统用户)登录discoverer 1. 检查是否在"工具->选项"里头勾选"连接到标准EUL和应用产品EUL": 2. 如果还 ...

  9. Oracle Discoverer 产品

    初玩oracle discoverer 的一系列产品,没有搞清楚他们之间的关系. 想浏览awm建立的aw时,下了一个discoverer desktop,结果怎么都弄不好,仔细看了下文档,才发现是搞错 ...

最新文章

  1. TableView/CollectionView 滑动顶部效果优化
  2. 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
  3. quartus总线怎样连接(例如,怎么和ROM连接)
  4. JavaScript笔记-点击button提交form表单
  5. RDS查看Binlog日志内容
  6. FreeBSD之netgraph简要解析
  7. 5、Oracle备份(oracle备份脚本配置)
  8. 计算机阅卷系统 流程,河北鑫众博电脑阅卷系统六步操作过程
  9. SQL注入漏洞-SQL注入中information_schema的作用
  10. 音乐类软件LoveMusic开发(三)----登录界面
  11. OpenCV 对比度增强
  12. 最新河南电信、网通(联通)、铁通DNS地址ip
  13. 北京市参加汽车摇号条件
  14. js中深克隆与浅克隆
  15. 优麒麟配置java环境变量
  16. 中国人民大学与加拿大女王大学金融硕士——在这里,打开精彩“识界”
  17. 行业分析-全球与中国3D自动X射线检测(AXI)市场现状及未来发展趋势
  18. 洛谷 P5594 【XR-4】模拟赛 视频讲解(二维数组、模拟)
  19. fish shell一个专为90后设计的命令行shell
  20. 悲观锁、乐观锁和自旋锁

热门文章

  1. 国内免费可用的stun服务器(2020.7.14)
  2. Vue 项目运行后自动弹出网页
  3. 海外微信、支付宝、银联国际、海外信用卡及海外支付本地化
  4. AI正由感知智能时代向认知智能时代迈进
  5. 北大肖臻老师《区块链技术与应用》系列课程学习笔记[18]以太坊-Mining算法
  6. XWPFDocument 导出word 文字+图片
  7. 翻转课堂教学动态网站设计论文
  8. sw槽钢插件_solidworks焊接型材支架制作实例
  9. Python3爬虫实战一之爬取网易云音乐热评
  10. 我每天闹钟偷能量种的树变荒漠了?