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

Karta是一款IDA插件,用于在编译过的二进制文件中搜索开源代码,尤其适用于固件分析。通过匹配函数和版本识别,Karta能高效地识别出二进制文件中的开源库,如libpng、zlib等,并有助于在大型二进制文件中查找1-day漏洞。Karta的高准确性和低误报率使其成为安全研究人员的有力工具。
摘要由CSDN通过智能技术生成

介绍
“ 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配置。准备好配置后࿰

### 回答1: 要在 Windows 上自定义 Docker 的安装目录,您可以按照以下步骤进行操作: 1. 打 Docker 官网并下载适用于 Windows 的 Docker 安装程序。 2. 运行安装程序并选择“自定义”选项。 3. 在“选择组件”页面上,取消选择“Docker Desktop”和“Windows 操作系统”。然后,单击“浏览”按钮并选择您要安装 Docker 的目录。 4. 继续进行安装,直到完成。 安装完成后,您可以使用命令行或者 Docker Desktop 来管理 Docker。希望这个回答能够帮助您解决问题! ### 回答2: 在Windows上安装Docker时,默认情况下会将Docker安装到系统盘的"C:\Program Files"目录下。如果你想自定义安装目录,可以按照以下步骤进行操作: 1. 在Docker官方网站上下载最新版本的Docker Desktop安装程序,双击运行该安装程序。 2. 在安装向导的"选择安装类型"页面,点击"自定义安装(Advanced)"选项。 3. 在下个页面,你可以看到"选择目标位置"选项,点击"浏览"按钮。 4. 在弹出的文件夹选择窗口,浏览并选择你希望安装Docker的自定义目录位置。 5. 选择完毕后,点击"确定"按钮。 6. 返回到安装向导页面,可选择是否将Docker图像放置在Windows系统盘上的"C:\ProgramData\Docker"目录下。如果希望修改该路径,可以点击"点击修改"链接选择新的目录。 7. 点击"安装"按钮始安装Docker。 8. 安装完成后,按照向导提示设置Docker的其他选项,例如启用Hyper-V和WSL 2引擎等。 经过以上步骤,你就可以将Docker安装到你所自定义的目录位置了。请注意,自定义安装目录可能会导致某些Docker特性或功能的不正常工作,因此谨慎选择。 ### 回答3: 在Windows上安装Docker时,默认情况下安装目录是在C盘的Program Files文件夹下。如果你希望自定义安装目录,可以按照以下步骤进行操作: 1. 首先,下载Docker的安装程序。你可以访问Docker官方网站(https://www.docker.com/products/docker-desktop)或其他可靠来源下载适用于Windows的Docker安装程序。 2. 运行安装程序。双击下载好的Docker安装程序,然后按照提示完成安装程序的运行。 3. 在安装程序的安装类型(Type of installation)页面上,选择自定义(Custom)安装。 4. 在自定义安装页面上,可以看到一个"Change"按钮,点击它。 5. 然后,选择你想要安装Docker的目录。你可以选择一个已存在的文件夹,或者创建一个新的文件夹作为安装目录。 6. 选择完安装目录后,点击“OK”按钮确认。 7. 返回到自定义安装页面,点击“Next”继续。 8. 接下来,按照安装程序的提示完成安装过程即可。 通过以上步骤,你就可以成功自定义Windows上Docker的安装目录。需要注意的是,安装Docker时请确保目标安装目录具有足够的可用空间,并且你具有足够的权限进行创建或更改目录。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值