Karta:一款新的二进制文件剖析和对照插件 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

Karta:一款新的二进制文件剖析和对照插件

申博_安全预警 申博 172次浏览 已收录 0个评论

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

媒介

“Karta”(在俄语中的意义是“map”)是IDA(一个静态反编译顺序)的源代码辅佐二进制对照插件,该插件的开辟是为了对照一个非常大的二进制文件(一般是固件文件)中的开源库的标记。关于那些天天都要处置惩罚固件文件的人来讲,反复逆转net-snmp(一个免费的、开放源代码的SNMP完成,之前称为UCD-SNMP)非常浪费时刻的。以是,人们急需一种对照插件工具,来辨认运用过的开源码,并在IDA中自动对照它们对应的标记。

人们末了的开辟重点是放在了疾速对照的历程上,但在实践中,就发明纵然他们试图逆向的二进制文件包罗凌驾10万个函数,也仅仅会对照一个包罗300个函数的库,而光这个历程就须要守候几个小时。

事实证明,出于机能缘由而布置的启发式算法对对照效果也有很大影响。Karta的假阳性率非常低,而真阳性率很高。这使得它以至可以或许用于对照中小型二进制文件。

因而,有人认为Karta可以或许成为开辟人员工具箱中的一个重要工具,并应用于以下场景:

1.侦探阶段:肯定二进制文件中运用的开放源代码(包孕它们的版本);

2.优化Clutter:对照运用的开源的标记,从而为逆向工程节省时刻;

3.查找用例:运用已用过的开放源代码列表,个中的标记已在二进制文件中对照,以便在可实行或固件文件中轻松查找用例。

KARTA

如前所述,Karta是IDA*的源代码辅佐二进制对照插件,该插件有两个重要的用处:

1.标识:对静态编译的开源代码的确切版本举行标识;

2.对照:对照已标识的开源代码的标记;

Karta如今是开源的,我可以或许在Github中找到。

由于在分歧体系构造上编译开源库是非常庞杂的事变,因而人们一般会经由过程让插件自力于体系运转来消弭此庞杂的历程。比方,若是我想要对照libpng开源的1.2.29版本(这是我在HP OfficeJet固件中运用的版本),我所要做的就是从Github复制它并在(本文运用的x86)装备上编译它。编译完成后,Karta可以或许天生形貌库的范例.json设置装备摆设文件。运用此设置装备摆设,纵然固件已编译为Big-Endian ARM Thumb情势,Karta插件如今也可以或许在固件中胜利找到库。

Karta由模块构成,IDA反汇编模块可以或许被任何其他反汇编模块替代。

寻觅用例

虽然现在,我已为引见了几个插件用例,但在热点顺序中查找用例多是最风趣的用例。以下是我在研讨历程当中发明的两个真有用例。

HP OfficeJet固件

由于在对HP传真固件研讨时期,我须要将用例用作调试破绽( CVE-2017-9765 )。该破绽许可进击者长途损坏 SOAP Web 效劳背景历程,并在受害者装备上实行恣意代码。在完成Karta的开辟以后,我返回固件并搜检了Karta是怎样资助我举行破绽研讨的。

标识符插件会告诉我固件中运用的开源库是:

· libpng: 1.2.29

· zlib: 1.2.3

· OpenSSL: 1.0.1.j

· mDNSResponder: unknown

· gSOAP: 2.7

我可以或许看到确切运用了gSOAP(编译工具供应了一个SOAP/XML 关于C/C++ 言语的完成,从而让C/C++言语开辟web效劳或客户端顺序的事情变得轻松了很多),疾速的CVE搜刮显现它包罗一个症结的破绽:CVE-2017-9765 。

在疾速编译了此版本的gSOAP的设置装备摆设以后,我运转了对照器并导入了对照的标记。以下图所示,我可以或许看到易受进击的代码函数soap_get_pi与Karta对照。

Karta:一款新的二进制文件剖析和对照插件

反编译的soap_get_pi函数,与Karta对照

这对Karta插件来讲是一个非常好的音讯,这意味着它可以或许在实在的场景中一般事情(惋惜我也只是在调试破绽完成后才晓得这一点)。

一般的闭源顺序:TeamViewer

虽然在固件中轻松找到用例很轻易,但在Windows PC上运用的一样平常顺序中,完成这一点就很难了,为何?在浏览Project Zero在WebRTC上的博客文章时,我发明他们在一个名为libvpx的库中发明了一个破绽:CVE-2018-6155,它可以或许进击VP8视频编码手艺源代码,从而影响了VP8库libvpx而不是WebRTC中的代码。因而,该破绽有可以或许影响运用除WebRTC以外的一切其他库的顺序。

这看起来很风趣,由于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,以下所示。

Karta:一款新的二进制文件剖析和对照插件

vp8_deblock函数的代码片断,易受CVE-2018-6155进击

如今让IDA规复剖析历程,然后继承编译libvpx版本1.6.1的Karta设置装备摆设。设置装备摆设完成后,在IDA完成对二进制文件的剖析以后,我运转了Karta的对照器插件。以下所示,对照器发明了易受进击的函数:

Karta:一款新的二进制文件剖析和对照插件

Karta的对照效果显现它与易受进击的函数相对照(用蓝色凸起显现)

在我将效果导回IDA以后,我可以或许经由过程数字常量清楚地考证这是准确的对照。

Karta:一款新的二进制文件剖析和对照插件

如IDA Pro所示,易受进击的函数与我的插件相对照

此时,我已胜利在TeamViewer顺序中发明了一个破绽,以至还晓得了在调试时确切地安排断点的地位。

全部破绽发明历程约莫须要2个小时,由于IDA的剖析非常耗时,缘由在于TeamViewer是一个非常大的顺序,包罗凌驾143000个函数。

Karta是怎样运转的?

101个函数的二进制对照

简而言之,二进制对照可以或许归结为以下这个历程:若是我们想搜检两个函数(一个来自已编译的开源,另一个来自二进制)是不是透露表现统一个函数,为了可以或许对照这两个函数,我们须要将它们转换成用一致的要领透露表现的内容,一般称为“范例透露表现”。这类透露表现一般包孕我们从函数中提取的一组特征:数字常量列表、字符串列表、汇编指令的数目等等。

当我们实验对照一组相干函数时,比方,在一个已编译的开源项目中,我们将过剩的信息存储在范例透露表现中,以便对函数之间的干系举行编码:被挪用函数列表(被挪用者),列表挪用我的函数(挪用者)等。运用此信息,我可以或许实验根据掌握流图(CFG)中的划定规矩或地位对照两个函数。

此时,我们可以或许运用一些传统的二进制对照工具,如BinDiff或Diaphora。虽然每一个对照工具都有本身奇特的奇妙对照启发式算法,但它们都基于雷同的划定规矩,以对照两个范例透露表现并对效果举行评分,这意味着二进制对照工具首先将一切函数转换为它们的范例透露表现情势。

制止内存瓦解

当剖析一个包罗约莫65000个函数的二进制文件时,好比我运用的OfficeJet打印机的固件,为一切函数构建范例透露表现的历程基础没法扩大。它须要很长时刻(一般凌驾一个小时),而且可以或许在磁盘空间中斲丧凌驾3GB的空间。这意味着,稍后将此数据集加载到内存中常常会致使对照顺序瓦解。

若是我们想要对照伟大的二进制文件中的任何内容,就须要转变对照战略。由于开源库相对较小,我可以或许将题目形貌为:

· M——我的开源函数数目;

· N——我的二进制文件中的函数数目;

由于我愿望在巨细为N的二进制中对照数目为M的函数,个中M << N,是运用依赖于M而不是N的内存。

Karta:一款新的二进制文件剖析和对照插件

二进制地点空间的图解,我试图在个中对照我的库

链接器地位的寻觅

若是我将稍后议论的特殊情况消除在外的话,我可以或许跳过编译历程直接运用以下步调举行链接:

1.编译器自力编译每一个源文件,并建立一个对照的二进制文件(.o用于gcc,.obj用于visual studio);

2.链接器将一切二进制文件组合成一个二进制大工具(一个可以或许存储二进制文件的“容器”);

3.在链接阶段,此大工具将按原样插进去终究顺序或固件;

这致使两个重要的效果:

1.编译后的源代码包罗在固件或可实行文件中的一个一连的大工具中;

2.一旦我们找到了这个大工具的一个标记(被称为锚点),我们就可以或许根据这个大工具中应当包罗的函数的数目来推想二进制中这个大工具地位的下限和上限。

实在,这也是Karta所根据的基础划定规矩。

构建函数干系舆图

对APT34泄漏对象的剖析——HighShell和HyperShell

0x00 前言 最近APT34的6款工具被泄露,本文作为分析文章的第二篇(第一篇文章回顾),仅在技术角度对其中的HighShell和HyperShell进行分析。 0x01 简介 本文将要介绍以下内容: · 对HighShell的分析 · 对HyperShell的分析 · 小结 0x02

Karta是一个源代码辅佐工具,经由过程应用源代码中的信息,我可以或许构建一个映照:哪些函数包罗在哪一个文件中,和该库包罗哪些文件。

以下是对照二进制文件库的历程:

1. 从一个基础标识符剧本最先,该剧本搜检二进制文件是不是运用了该库,和运用的版本——O(N)时刻和O(1)内存斲丧;

2.辨认后,扫描二进制文件以搜刮锚函数——O(N)时刻和O(1)内存斲丧;

3. 运用定位锚函数来放大二进制函数的推想局限,这些函数多是库的一部分—O(1)时刻和O(1)内存斲丧;

4.此时,一切逻辑都将出如今聚焦局限内,其巨细为O(M)。

以下是细致的示例:

1.我有一个含有322个函数的库,应用此要领,我找到了5个锚函数;

2.最低的锚点是二进制文件中的函数#2622;

3.最高的锚点是二进制文件中的函数#2842;

4.锚点之间包罗的局限包孕221(2842 – 2622 + 1 = 221)个函数;

5.我们还须要找到101(322 – 221 = 101)个函数;

6.为了平安起见,在我的要领中,我会在第一个锚点之前包罗101个函数,在末了一个锚点以后也包罗101个函数。

总的来讲,函数的总数目: 423(101 + 221 + 101 = 423)个函数<< 65000个完全的二进制文件。

我如今要做的只是为聚焦功用构建范例透露表现,从而大大提高了我从这一点最先的机能。

注重:这个映照可以或许为构建函数干系舆图供应进一步的资助,由于来自文件a.c的foo()函数应当只与a.c中的函数对照,如许就不须要将它与我们已标识为驻留在分歧文件中的函数举行对照。

挑选锚点

从本质上讲,这些锚点函数在范例透露表现之前都是对照的,这就限定了我在搜刮时可以或许运用的特征。另外,我愿望锚点成为库的独一地标识,如许,我正在处置惩罚的二进制文件中的其他库就不会有任何误报。

在不晓得一切开放源代码的情况下,为庞杂的特征肯定规范非常难题。尽管如此,我照样编写了一些在实践中好像很有用的启发式算法。

Karta:一款新的二进制文件剖析和对照插件

IDA Pro中的OpenSSL函数SHA224_Init

我挑选这个函数是由于它有唯一的数值常量,且可设置装备摆设确切的划定规矩,你可以或许在个中找到src/config/anchor_config.py文件。

对照步调历程

如今我们已晓得了Karta对照引擎背地的重要逻辑是什么,下来就让我完全引见对照的细致步调。

标识符

每一个受支撑的库都有一个标识符,我试图在二进制文件中找到它。由于大多数开源代码都包孕独一字符串,且它们一般都具有完全版本细致信息,因而大多数标识符都是基于字符串的,而且是为他们试图辨认的库设置装备摆设的。一旦找到库,标识符就实验提取版本信息,并对可实行或固件运用的确切版本举行指纹辨认。

开源项目是弗成以或许在编译后的二进制文件中试图隐蔽的,这些库不只一般包罗一个简短的Google搜刮,以辨认字符串地点原始库的独一线索。不外,它们一般包罗不必要的信息。以下是一个来自libpng库的版权声明的示例,它是一个运用二进制文件编译的字符串。

Karta:一款新的二进制文件剖析和对照插件

编译后的二进制文件中包罗libpng的版权字符串

如你所见,在大多数用例中,辨认可实行顺序中是不是存在开源库相对照较轻易。

锚点搜刮

运用标识符中的信息,就可以或许加载特定库版本的设置装备摆设(基于.json *)。第一步是扫描二进制文件,查找与库的锚函数对照的唯一数值常量和唯一字符串。若是没有锚点,我没法扩大库并继承对照历程。

对照最先后,全部设置装备摆设都邑加载到内存中。由于我们不须要对设置装备摆设发出查询,如许就不须要运用更盛行的sqlite数据库了,这类从sqlite到json的转换,会致使设置装备摆设文件的巨细大幅减小。

根据绘制的文件映照干系图,我可以或许精肯定位包罗对照锚函数的每一个文件的地位,并预计其下限和上限(运用前面形貌的雷同逻辑)。

Karta:一款新的二进制文件剖析和对照插件

对照效果的示例图

文件提醒

由于很多开源项目每每包罗源文件称号的调试或跟踪字符串,一般,这些字符串位于上述源文件的函数中,这意味着我们可以或许运用它们作为文件提醒。绘制的文件映照干系图后,我可以或许运用这些提醒来肯定其他文件的地位。

定位署理

由于署理是当地独一的函数,它也可以或许称为当地锚。在它的文件中,它是一个锚,但它包罗的常量弱于全局锚所需的常量,每一个定位的文件都邑实验对照本身的署理。

优化链接器

在上面的解说中,我假设了一种条件,就是开源将被编译为单个一连的大工具,而且内部文件不会相互隐约处置惩罚。不幸的是,实际情况并非如此。

实际上,当我末了实验在Adobe PDF的二进制文件(2d.x3d)中对照libtiff时,获得的效果其实不抱负:只要176/500个函数对照。经由观察,该链接器好像与具有雷同二进制构造的函数殽杂了。比方,用分歧的称号或分歧的称号局限(来自分歧文件的静态函数)完成了两次的函数。

Karta:一款新的二进制文件剖析和对照插件

来自libtiff的两个雷同的函数,实在它们位于分歧的文件中

Karta:一款新的二进制文件剖析和对照插件

来自IDA Pro的剖析,显现运用了左侧的函数而不是右侧的函数

虽然这类优化减少了可实行文件的巨细,但它由于会举行隐约处置惩罚,且转变了掌握流程图。且稍后举行频频疾速搜检,我发明这类优化也会损坏其他二进制对照工具的对照效果。

我决议像处置惩罚链接器那样处理这个题目,在编译开源库的范例透露表现时,我对每一个函数的链接器视图举行哈希,并将其存储为独一的函数ID。 早先我本身对字节举行了哈希处置惩罚,然则当两个函数援用雷同的全局变量而且该变量驻留在每一个文件中的分歧偏移量时,会引入一些毛病。拜见下图,我经由过程对大多数操作码的字节举行哈希,并在援用导出的全局变量时对指令的文本举行哈希,处理了这个题目。

Karta:一款新的二进制文件剖析和对照插件

文件tif_dirwrite.c中的函数TIFFClampDoubleToFloat()

Karta:一款新的二进制文件剖析和对照插件

文件tif_dir.c中的函数TIFFClampDoubleToFloat()

在对照历程当中,对照器会查找任何可以或许兼并的线索。当对照器在掌握流图中发明两个函数是雷同函数时,兼并就会发作。此时,二进制函数就晓得它所代表的源函数的数目,而且将生存它对照的兼并源函数的列表。

运用此优化,我如今可以或许修复掌握流图中的非常,由于每一个检测到的兼并都有用地将掌握流图扩大到链接器优化之前的原始状况。在雷同的二进制文件(2d.x3d)上再次测试时,效果显着优化:对照了248/500个函数,对照度提高了41%。

可以或许看到,Karta可以或许让链接器对函数_TIFFNoFixupTags的优化:

Karta:一款新的二进制文件剖析和对照插件

来自Karta的对照效果,胜利地标识了链接兼并函数

对照效果

如今是测试Karta怎样处置惩罚原始的OfficeJet固件的时刻了,我在盘算机上的虚拟机(VM)中测试了这个插件,效果以下:

Karta:一款新的二进制文件剖析和对照插件

测试的OfficeJet固件上的对照效果

可以或许看到,不到30秒就可以或许对照一个包罗300个函数(如libpng)的开源顺序。另外,我还可以或许对照一切援用的库函数。

注重事项

1.当Karta处置惩罚函数的范例透露表现时,它与架构无关;

2.由于我的对照是从对照的开源库的角度举行的,以是我还可以或许推导出关于“外部”函数的信息,这些函数不是库的一部分,然则可以或许从库中挪用。比方,libpng运用zlib。

Karta:一款新的二进制文件剖析和对照插件

在libpng对照历程当中对照的外部zlib函数

另外,在大多数情况下,我可以或许对照规范库中的函数,比方:memcpy,memcmp,malloc等。

与已知的BinDiff工具的对照

由于我没法对照一切现有的二进制对照工具,以是我挑选存眷以下经常使用的工具:

BinDiff:BinDiff是二进制文件的对照二进制对照工具,可以或许资助破绽研讨人员和工程师疾速找到反汇编代码中的差别和相似之处。运用BinDiff,你可以或许辨认并断绝供应商供应的修补顺序中的破绽修复顺序。你还可以或许在统一二进制文件的多个版本的反汇编之间借用标记和解释,或运用BinDiff网络代码被盗或专利侵权的证据。

以下,我会对它们是不是开源 、是不是支撑大型二进制文件、是不是有源代码辅佐、是不是标识版本等方面举行对照。

Karta:一款新的二进制文件剖析和对照插件

对照效果表

2019第四届SSC平安峰会|议题征集正式启动

SSC安全峰会于2016年创办于西安,每年举办一届,迄今为止已成功举办了三届,得到了行业充分认可和社会各届广泛关注,成为我国中西部最具盛名,影响力最大,知名度最高的网络安全峰会,进一步推动了陕西及整个西北地区的信息安全产业发展


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明Karta:一款新的二进制文件剖析和对照插件
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址