honggfuzz漏洞挖掘技术深究系列(5)—— Intel Processor Trace

admin 2021年4月28日08:31:36评论201 views字数 1387阅读4分37秒阅读模式

对于闭源程序的反馈驱动Fuzzing,通常有3种方式:

  • 二进制插桩:使用Pin或DynamoRIO动态插桩监控代码覆盖率,比如winafl

  • 虚拟化技术:使用Qemu或Boch等虚拟化技术实现应用层和内核层的代码覆盖率监控,比如afl、bochpwn

  • 硬件级技术:使用Intel Processor Trace(PT)技术,比如honggfuzz

Intel PT

Intel® Processor Trace (Intel® PT) 是在i5/i7 5000以上型号上加入的功能,由于它是硬件级的特性,相比Qemu或Boch,在性能上和代码工作量会占有一定优势。在Linux上可以通过perf来使用PT,可以先简单看是否支持PT:

查看是否支持PT: ls /sys/devices/intel_pt/format  追踪程序执行: perf record -e intel_pt// program

也可以使用开源工具simple-pt(github.com/andikleen/si)中的ptfeature命令行工具来检测:

./ptfeature pt Supports PT

最新版GDB也支持pt功能了:

gdb program start record btrace pt cont  record instruction-history /m   # show instructions record function-history     # show functions executed

honggfuzz perf_event_open

在程序内通过perf_event_open函数可以使用PT实现BB基本块的覆盖率追踪,传递给指定进程pid来实现监控:

honggfuzz漏洞挖掘技术深究系列(5)—— Intel Processor Trace

将返回的文件描述符传递给mmap映射为可读写的用户内存空间,以便从中读取PT记录的追踪数据:

honggfuzz漏洞挖掘技术深究系列(5)—— Intel Processor Trace

PT记录的追踪数据采用压缩的二进制格式输出,每秒每个CPU都会持续记录并输出,由于是硬件记录的,最早自然是出现在内核空间,为了使用它,就需要将其导出到用户空间,即通过前面mmap方法映射到用户可写的内存空间,然后再去定位数据解码。PT导出的追踪数据被存储在一个叫AUX space的内存区域,它相对perfMmapBuf的偏移记录在perf_event_mmap_page->aux_offset,大小为perf_event_mmap_page->aux_size,上面代码的第二步mmap就是去映射AUX space

接下来就是利用libpt来解码捕获到追踪数据,实现函数位于perf_ptAnalyzePkt中:

honggfuzz漏洞挖掘技术深究系列(5)—— Intel Processor Trace


最后将执行到的BB基本块信息更新到feedback map,之后的实现步骤就跟本系列第1篇驱动反馈中所讲的一致。

到这里,关于《honggfuzz漏洞挖掘技术深究系列》的文章先暂告一段落了,它就相当于是自己的学习笔记,也可以留作日后查询。

本系列的其它文章如下:

honggfuzz漏洞挖掘技术深究系列(1)——反馈驱动(Feedback-Driven)

honggfuzz漏洞挖掘技术深究系列(2)—— Persistent Fuzzing

honggfuzz漏洞挖掘技术深究系列(3)——Fuzz策略

honggfuzz漏洞挖掘技术深究系列(4)—— 扩展Fuzzer


honggfuzz漏洞挖掘技术深究系列(5)—— Intel Processor Trace

本文始发于微信公众号(漏洞战争):honggfuzz漏洞挖掘技术深究系列(5)—— Intel Processor Trace

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年4月28日08:31:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   honggfuzz漏洞挖掘技术深究系列(5)—— Intel Processor Tracehttp://cn-sec.com/archives/361634.html

发表评论

匿名网友 填写信息