最强辅助!IDA 辅助工具Karta——二进制文件中搜索开源代码

介绍
“ Karta”是IDA的python插件,其功能是在已经编译过的二进制文件中搜索是否使用了开源的代码。该插件是为了匹配大体积二进制文件中的开放源代码库的开源代码(通常是查找固件)。对于每天处理固件的人来说,反复的执行net-snmp显然是在浪费时间。所以需要一个工具来识别二进制文件所使用的开源,并在IDA中自动匹配。

这个插件的初衷是加快匹配的过程。用几个小时去匹配一个包含300个函数的库是很低效的一件事,更何况实际工作过程中逆向的工程会远大于此,比如超过100,000个函数的体积。当然,结合逆向工程行业的一些经验教训,我们解决了这个问题,并取得了比预期更好的结果。

事实证明,出于性能原因而部署的启发式方法对匹配结果也有很大的影响。该插件产生的误报率非常低,而准确性很高。这对于匹配中小型二进制文件也很有用。

因此,我们认为Karta可以成为研究人员的重要工具。

Karta的功能如下:

  • 侦查阶段–鉴别二进制文件中使用的开源代码,包括其版本。
  • 清除混淆状况-为使用的开源代码匹配符号,从而节省逆向工程看起来是已知功能的时间。
  • 查找1 day–使用已使用的开源代码列表,其符号已在二进制文件中匹配,可以轻松地在可执行文件\固件文件中查找1 day。

Karta
如前所述,Karta是IDA的源代码辅助二进制匹配插件。该插件实现了2个功能:

  • 1.标识–标识静态编译的开源代码的确切版本。
  • 2.匹配–匹配已识别开源的符号。
    该插件的源代码现在可以在Github中找到。

有时在不同体系架构上编译开源库是一件非常困难的事,因此我们通过使插件体系架构独立来消除了此步骤。例如,如果我们要匹配libpng开源版本1.2.29 (在HP OfficeJet固件中使用的版本),我们要做的就是从Github克隆它并在我们的(x86)机器上编译它。编译之后,Karta可以生成一个描述该库的规范的.json配置文件。使用此配置,即使固件已编译为Big-Endian ARM Thumb模式,我们的插件现在也可以成功地在固件中找到该库。

Karta由模块组成,IDA反汇编器模块可以用任何其他反汇编模块代替。

寻找 1 day
虽然我们描述了插件的几个使用案例,但在流行软件中寻找1day可能是最有趣的。这是我们研究的两个现实的例子。

HP OfficeJet固件
在我们的FAX研究过程中,我们需要1天的时间才能用作调试漏洞。最终,我们使用了Devil’s Ivy。在完成Karta的开发之后,就该回到固件并检查Karta如何帮助我们进行研究了。

Karta的返回结果显示固件中使用的开源库是:

  • libpng: 1.2.29
  • zlib: 1.2.3
  • OpenSSL: 1.0.1.j
  • mDNSResponder: unknown
  • gSOAP: 2.7
    在这里我们可以看到确实使用了gSOAP,并且快速的CVE搜索表明它包含一个关键漏洞:CVE-2017-9765(Devil’s Ivy)。

在为该版本的gSOAP快速编译配置后,我们运行了匹配器并导入了匹配的符号。在这里我们可以看到Karta匹配了易受攻击的代码函数soap_get_pi:

在这里插入图片描述

图1:反编译的soap_get_pi函数,与插件匹配。

对于我们的插件来说,这是个好消息:它可以在实际情况下按预期工作。

普通的闭源软件– TeamViewer
在固件中轻松找到1day很方便,但是我们在Windows PC上使用的日常程序又如何呢?在阅读Project Zero在WebRTC上的博客文章时,我们看到他们在一个名为libvpx的库中发现了一个漏洞:

CVE-2018-6155 在称为VP8的视频编解码器中可以免费使用。有趣的是,由于它会影响VP8库libvpx而不是WebRTC中的代码,因此它有可能影响使用WebRTC之外的使用该库的软件。由于此错误,发布了针对libvpx的通用修复程序。

这看起来很有趣,因为Project Zero特别指出此漏洞“具有影响使用WebRTC以外的其他功能使用该库的软件的潜力。” 我们已经在计算机上安装了TeamViewer,听起来应该使用相同的开源库,让我们检查一下。

我们在IDA中打开了TeamViewer.exe,并在进行分析的同时开始工作。我们下载了最新版本的libvpx(1.7.0),为其编写了一个简单的标识符,并将其添加到Karta。由于我们等不及IDA完成分析,因此我们停止了分析并运行Karta的标识符插件。确定的开源是:

  • zlib: 1.2.5
  • mDNSResponder: unknown
  • libjpeg: 8b
  • libvpx: 1.6.1
    TeamViewer不仅使用libvpx,而且使用的是2017年1月以来的旧版本。

查看Google发行的补丁,我们知道我们感兴趣的函数是vp8_deblock,如下所示:

在这里插入图片描述

图2: vp8_deblock函数的代码片段,容易受到CVE-2018-6155的攻击

我们让IDA恢复分析,并着手为libvpx版本1.6.1编译Karta

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值