前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >honggfuzz漏洞挖掘技术深究系列(5)—— Intel Processor Trace

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

作者头像
泉哥
发布2019-07-18 17:52:32
2K0
发布2019-07-18 17:52:32
举报
文章被收录于专栏:漏洞战争漏洞战争

对于闭源程序的反馈驱动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:

代码语言:javascript
复制
查看是否支持PT:
ls /sys/devices/intel_pt/format

追踪程序执行:
perf record -e intel_pt// program

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

代码语言:javascript
复制
./ptfeature pt
Supports PT

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

代码语言:javascript
复制
gdb program
start
record btrace pt
contrecord instruction-history /m   # show instructions
record function-history     # show functions executed

honggfuzz perf_event_open

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

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

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中:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漏洞战争 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Intel PT
  • honggfuzz perf_event_open
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档