DEFCON 26 | 利用传真功能漏洞渗透进入企业内网(Faxploit)

从远古期间的飞鸽传书到后来的邮政快递,写信人与收信人之间的物理消息通报要领徐徐在演酿成长,之后,传真技巧的呈现从某种程度上说,赞助人们走出了信件通报的暗中期间。

然而,技巧成长到本日,就通信手段而言,我们有电子邮件、社交谈天、移动通信渠道、收集办事和高大年夜上的量子卫星通信等等,但在这种见异思迁的信息期间中,传真技巧仍旧没被淘汰,且依旧被广泛应用。根据简单的谷歌搜索可以发明,网上呈现了跨越3亿个的在用传真号码,看来,传真技巧照样我们常用的办公通信要领之一。

为此,CheckPoint 抉择深入钻研一下这种“老派”的通信要领,看看它除了具备喧华的传呼机功能和官僚主义包袱之外,是否存在着严重的收集安然风险。以下为CheckPoint 的相关钻研:

钻研背景

传真通信是使用扫描和光电变换技巧,从发轫将翰墨、图像、照片等静态图像经由过程有线或无线信道传送到接管端,并在接管端以记录的形式重显原静止的图像的通信要领。传真是基于传统电信线路电话互换网(PSTN)与软互换技巧(NGN)的交融。

如今的传真技巧被广泛集成于多功能一体打印机设备中,之后,家庭或企业经由过程以太网、WiFi、蓝牙等接口把这些一体机接入内网应用。当然,为了支持传真功能,这些一体机还连接了传统话务(PSTN)的电话线。

我们在钻研一开始就定下了这种假设,进击者能否仅仅经由过程电话线和响应的传真号码,就能向多功能一体打印机发送恶意传真来实现入侵呢?假如谜底是“能”,那么经由过程这台受控打印机,就有可能深入向企业内网渗透。终于,颠末漫长而乏味的钻研,我们有了冲破。

事实上,我们在多功能一体打印机中发清楚明了几个关键破绽,使用这些破绽,经由过程向其发送构造的恶意传真,就能实现对其完全的入侵节制。这样一来,打开了企业内网之门,也就什么可能都存在了,进击者可以匿伏在多功能一体机中,向脆弱的企业内网电脑提议“永恒之蓝”破绽进击,或经由过程传真要领偷取内网电脑数据并向外回传。

我们把这种进击称之为“Faxploit”进击。以下为实际收集情况中的PoC视频:

演示视频:

逆向固件

首先,在固件逆向阐发历程中,我们应用IDA来识外传真功能中实际的运行进程和情况,有了一些发明:

架构

我们测试的多功能一体机是基于ARM 32bit的CPU架构的大年夜端存储模式(Big-Endian),主CPU应用共享存储区与节制LCD屏幕的MCU元件进行通信。

操作系统

操作系统是Green Hills的ThreadX式嵌入式实时操作系统,它应用平面内存架构,很多义务进程运行于内核模式下,应用同一个虚拟地址空间。也是因为这种平面内存架构的缘故原由,我们觉得义务进程的通信是经由过程消息行列步队要领进行的(FIFO),别的,其虚拟地址空间是固定的,未支配任何地址空间结构随机化(ASLR)保护机制。

DSID值

然而,当我们在阐发T.30状态机义务(“tT30”)时,偶尔发清楚明了很多应用分外ID的追踪措施(trace),深入阐发发明,这些ID也被用于一些以“DSID_”为前缀开首的字符串列表中。实际上,这些字符串看似是与那些应用ID的追踪措施(trace)逻辑相匹配,这也给了我们紧张的逆向提示线索。于是乎,我们从所有不合的DSID列表中创建了一个罗列类型,形成了义务中的各类追踪措施文本描述。以下为trace追踪措施中应用的DSID值:

T.30状态机中的DSID列表:

在追踪措施中利用DSID罗列:

义务不同等性

当我们逆向T.30状态机和之后处置惩罚HDLC的传真猫(“tFaxModem”)时,发明缺少了多个函数指针表。之后我们还发明,有两种老例的代码模式貌似和 allocation/deallocation路径有些相似。每个模块中采纳的措施,是为了接管来自其它模块的消息,或者,也可能是把缓存发送到下一模块中,如下图应用某个功能表从另一个义务接管数据帧:

假如我们不能定位这些模块中采纳的详细措施,也就无法弄清固件中的数据流形式,会对固件的下一步阐发造成阻碍。因为我们无法定位到大年夜多半措施指针的初始化,以是,我们必要一种动态措施,也即调试器来进行调试。

创建调试器

串行调试接口

首先,我们阐发了一体机的主板,想找到上面的串行调试端口,不一会,我们就有了发明。下图为连接JTAGULATOR到打印机的串行调试器:

[1] [2] [3] [4]下一页

但接入调试器之后,我们才发明其调试接口的默认权限是受限的,不能有效地履行我们的预设敕令:

这看起来是必要提权才行了,但提权就得必要破绽啊,那就来找找看吧!

匹配已知破绽

探求已知破绽

当你要exploit一种特定固件时,首先的措施便是去看看它应用了哪些开源代码,比较不合版本,尽可能地找到能用的CVE。这项事情1天已经足够了,对付调试目的来说也是绰绰有余。有两种措施来判断应用的开源代码:

在固件逆向代码中应用字符串查找,从中找出关键字符串

从厂商网站中查找一些产品的开源代码认证信息

别的,要发明这些开源代码破绽有几种措施:

在CVE库中查找与其代码库相匹配的破绽

用认识的破绽进行验证

关注US-CERT每周宣布的CVE更新消息

gSOAP对象包调试破绽 – CVE-2017-9765

在开源代码阐发中,我们发明此中应用了gSOAP库,经阐发确认,gSOAP库曾存在“妖怪绿萝”(Devil’s Ivy)的CVE-2017-9765破绽,是早前在监控摄像头开源软件中爆出的0-day破绽,曾影响了举世大年夜量IoT设备。以下为该破绽代码段的反编译代码:

使用该破绽,向多功能一体机发送跨越2Gb的XML数据时,将造成整型下溢,终极会导致栈缓冲区溢出,可履行随意率性代码,能实现对目标多功能一体机的完全节制。

然则,该破绽的使用存在两个条件限定:

破绽使用代码的传输必要消费大年夜量光阴,优化后,传输光阴照样在7分钟阁下

只能在IDA和每次考试测验掉败时孕育发生的基础串行转储情况下来开拓这个破绽

对Devil’s Ivy的CVE-2017-9765破绽使用

该破绽可以触发栈缓冲区溢出,但存在一些限定型字符。这种字符如下:

弗成打印的: 0×00 – 0×19

‘?’对应的: 0x3F

该破绽的一个好处是溢出无限定,也便是说,我们可以把全部破绽使用链发送到目标设备的栈区中进行进击。

但在嵌入式情况中,我们必要留意的是其CPU的各类缓存可能会对破绽触发造成影响。CPU中接管到的数据包会寄放在数据存储区 Data Cache (D-Cache),而履行指令则会在Instruction Cache (I-Cache)中进行。也便是说,纵然没有NX位支持,因为CPU会经由过程 I-Cache 履行代码,那么我们也不能直接在栈缓冲区中实现破绽Payload的触发。

若何才能绕过以上这些各类限定呢?我们必要用到一种包孕以下部分的Bootstrapping算法使用:

可以刷新D-Cache 和 I-Cache 的基础的ROP(面向返回的编程)节制

加载到调试器收集加载真个解码shellcode

全部调试器可以经由过程收集发送到加载端

在此,我们就不展开详谈破绽使用链构造历程,假如你感兴趣请自己考试测验测试。接下来,我们来说说破绽使用的各类载体。

Scout调试器

我们构建的调试器是一个基于指令的收集调试器,它支持基础的内存读写哀求,还能扩展支持特定固件指令。我们应用调试器从多功能打印机中提取了其内存,然后对它进行了一些扩展测试。

一旦调试器被设置设置设备摆设摆设了附带固件API函数,如memcpy、sleep和send等地址后,因为它是位置无关的,以是调试器就可以加载随意率性地址。Scout Debugger下载地址:https://github.com/CheckPointSW/Scout

ITU T.30 – Fax协议

多功能一体机假如支持传真功能,那么也必然能支持涉及传真设备的ITU-T G3协议标准,该标准定义了传真发送端和接管真个基础功能,以及协议的不合实现阶段,如下图所示:

我们重点来看上图的Phase B和Phase C,Phase B认真发送端和接管端之间的协商(握手),而Phase C则根据协商规定进行数据帧传输。数据帧使用面向比特的高档数据链路节制协议(HDLC),经由过程电话线来进行传输,如下图所示:

掘客进击向量

发送TIFFs

存在一种误解,也便是传真只是一种简单地TIFF报文发送手段。实际上,T.30协议能发送页面,且Phase B阶段协商的参数中就已经包括了页面长度和宽度,而且,Phase C阶段则主如果传输页面的数据行。也便是说,传真终极的输出是一个包孕IFD标签的TIFF文件,IFD标签在该历程顶用于构建协商用的元数据,.TIFF文件中包孕有接管到的页面行。

只管.tiff解析器存在很多破绽,但很多都是在IFD标签的解析代码破绽,而且我们这里的钻研用例中,这些IFD标签都是由多功能打印一体机自己创建的,这里独一会对我们的页面内容履行的处置惩罚历程便是,打印历程中打开其压缩内容。

TIFF压缩

不幸的是,.tiff款式应用的压缩机制有多个名字,是以首先必要把它们找出来。以下是它们的一个基础映射关系:

TIFF Compression Type 2 = G3 without End-Of-Line (EOL) markers

TIFF Compression Type 3 = G3 = ITU T.30 Compression T.4 = CCITT 1-D

TIFF Compression Type 4 = G4 = ITU T.30 Compression T.6 = CCITT 2-D

因为传真基础是诟谇颜色的,以是,压缩机制实际上是一种应用了固定霍夫曼表的诟谇代码行程编码要领(RLE)。是以,我们再对T.4 和 T.6 的代码压缩机制进行阐发,没发明什么可以使用的破绽。

上一页[1] [2] [3] [4]下一页

T.30扩展

在Pahse B阶段,传真猫会进行功能互换,以是它可以找出能支持的最佳传输要领。为此,我们编写了一个简单脚本对这些应用ITU T.30标准的消息进行了语法阐发,下图为对数字识别旌旗灯号(DIS)的解析结果:

看似我们测试的一体机支持ITU T.81 (JPEG) 款式,也便是说,它能发送彩色传真。而在阐发彩色传真的处置惩罚代码历程中,我们有了别的的新发明:接管到的数据按原样存储到.jpg文件中,与.tiff文件中标头由接管端创建的不合,这里的.jpg我们可以对全部文件进行节制。

我们基于标准对这种传真行径进行了反省后发明,因为JPEG款式异常繁杂,其标头Header(也称为标记maker)确凿是经由过程电话线发送的,接管端认真处置惩罚它们并抉择保留下什么。一些标头可能不受接管端支持,会被丢弃,如COM的其它标头则会被轻忽。在我们对固件和开源代码的测试反省中,接管内容总会被无过滤地转储到一个文件中保存,这也就成了进击者的一个很好的“猎物”。

打印彩色传真

概括来说,当目标打印机接管到一个彩色传真,它就会简单地无安然过滤地,把其内容转储到一个.jpg文件中,平日来说,这个文件位于%s/jfxp_temp%d_%d.jpg。然而,接管传真只是第一步,接下来还必要打印传真,为此打印模块必要首先确认接管文件的长度和宽度,以是,还要进行一个基础的语法阐发。

JPEG解析器

存在一些说不清的缘故原由,这种特定固件的开拓者倾向于把主流开源项目中实现的模块功能进行从新编写,改良优化,也便是说,他们不会用开源的libjpeg标准库,转而是用自己的 JPEG 解析器。从进击者角度来说,这便是一个可以使用的点,在开拓者自己开拓的繁杂文件款式解析器中来发明可使用的破绽,彷佛也不是没有可能。JPEG解析器道理异常简单:

先反省图像开始SOI标记:0xFFD8

轮回阐发各个支持标记

完成以上步骤后向调用者返回相关数据

这不,我们就以此为冲破口,发清楚明了以下两个破绽。

CVE-2018-5925 – COM标记解析缓冲区溢出漏洞

根据ITU T.30 standard标准,COM标记 (0xFFFE)是一种大年夜小可变的文本字段,这种文本字段一样平常用来代表文本类型的注释阐明。从这个点上,我们盼望发明某种解析破绽。对照搞笑的是,根据ITU T.30 标准来看,这种COM标记应该要被传真接管端丢弃才是。然而,我们却在此中发清楚明了以下破绽:

解析模块会解析一个低字节序或小端模式的2字节长度字段,并反复履行从传真文件中复制数据到一些全局数组中的操作。貌似数组中的每个条款都有2100字节的大年夜小,而我们的构造的长度字段可以高达64KB,这就给了我们一个大年夜容量的可控缓冲区溢出区域。

CVE-2018-5924 – 解析DHT标记时的客栈缓冲区溢出漏洞

因为上一个破绽的发明是标准实现中不应支持的标记所导致的,以是,我们继承把关注点扩展到了其它标记身上。在解码文件的数据帧时,DHT标记(Difine Huffman Table) 定义了一个特定的霍夫曼表来应用。而且,这个DHT标记破绽涉及到的函数比上个破绽函数还简单轻易一些:

可以看到存在一个读取16字节的初始解析轮回,这是由于每个字节代表了一个长度字段,所有这些字节着末累积成为一个总的长度变量

存在一个全0添补的256字节本地备用客栈

第二个解析轮回会应用之前的长度字段,从传真文件中拷贝数据到本地客栈缓冲区中

一个简单的谋略就能知晓详细的破绽成因:16 * 255 = 4080 > 256,也便是说,我们可以构造一个大年夜容量可控且无限定的客栈缓冲区溢出,这是多好的一个破绽啊。

创建破绽使用代码

比较以上两个破绽,因为DHT标记解析破绽相对轻易实现。在Devil’s Ivy破绽中,此中的调试exploit使用代码,也是使用了一个客栈溢出漏洞,那么这里我们也是一样,仅只必要对调试exploit作出一些小改动即可。

自动化Payload – 实现图灵机机制

我们可以应用同样的收集加载器来构造调试exploit。然而,当前的进击向量有一个主要的上风:完备的进击Payload可以存储在传真发送的“JPEG”中,鉴于它纰谬传真内容履行任何安然过滤反省,是以我们可以把全部Payload都存储在发送文档中,不必要担心它是否会被转储为一个不法的JPEG文件。

而且文件的fd文件描述符也存储在可造访的全局变量中,以是, 我们编写了一个基于文件的加载器,该加载器会从文件中读取Payload,然后把它加载到内存中去。之后,每次Payload想要用输入履行义务时,它就会从同一文件中读取输入并按照此中的指令实现义务操作。为此,我们构建了一个基础的图灵机机制来从发送传真中读取输入并实现操作。

经由过程收集传播

入侵节制一台企业打印机也不错,然则我们想做的远不光这些。实际上,假如能经由过程打印机来节制全部企业内网,那影响和要挟就就异常之大年夜了。以是,我们使用我们破绽阐发团队之前的钻研结果,综合了NSA武器 – “永恒之蓝”( Eternal Blue)和“双脉冲星”(Double Pulsar),利用于这次传真破绽的基于文件的图灵机中来。

我们的破绽Payload具备以下功能特征:

可以节制多功能一体机的LCD显示屏 – 这是一种打印机完全节制权的表现

反省多功能一体机的收集是否为连通状态

应用NSA“永恒之蓝”( Eternal Blue)和“双脉冲星”(Double Pulsar)武器,进击目标内网受害主机,实现入侵节制。

由此,我们经由过程传真破绽远程实现企业内网的多功能一体机入侵节制,并以此为据点,可向企业内网深入进行横向渗透。

上一页[1] [2] [3] [4]下一页

总结

我们测试用的多功能一体机为 HP Officejet Pro 6830,钻研测试注解,这种当前的传真实现协议存在安然隐患,其它啥都不用,仅必要向目标一体机发送一份传真就能完全节制设备,可以此为匿伏据点,用已知的NSA破绽exploit深入向企业内网渗透。

从现在起,传真机也能成为渗透入侵企业内网的道路之一。我们觉得,这种传真技巧存在的安然风险应该被注重,由于它延伸了今世企业收集的安然界限,收集打印机和传真机都有能成为收集架构中的一个入侵风险点。

破绽表露进程

在与惠普公司(HP)进行协商之后,有了以下的破绽表露进程:

2018.5.1向HP公司上报破绽

2018.5.1HP公司谢谢提交并动手处置惩罚破绽

2018.5-2018.6不绝的重现PoC场景,修补破绽

2018.6.2/3与HP公司面对面沟通

2018.7.23发明的两个破绽被标记为高危

2018.8.1HP公司公布固件进级补丁

2018.8.12在 DEFCON 26 会议中首次公开

上一页[1] [2] [3] [4]

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

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

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包