首页
社区
课程
招聘
[翻译]EPSON漏洞:EasyMP投影机接管(CVE-2017-12860/CVE-2017-12861)
2017-10-22 17:19 8868

[翻译]EPSON漏洞:EasyMP投影机接管(CVE-2017-12860/CVE-2017-12861)

2017-10-22 17:19
8868
 

EPSON漏洞:EasyMP投影机接管(CVE-2017-12860/CVE-2017-12861)

 

原文地址:https://rhinosecuritylabs.com/research/epson-easymp-remote-projection-vulnerabilities/
翻译:rainbow@pediy

概述摘要:Epson EasyMP漏洞

作为有针对性的定制安全评估的一部分,犀牛安全实验室小组的任务是确定可能干扰一场重要技术会议的任何内容。 除去其他领域,我们研究了爱普生投影机的安全性,特别是EasyMP - 专有的屏幕共享和投影机管理协议。 该工具允许用户通过WiFi远程控制普通投影机功能,包括更改配置和流式传输用户的屏幕。
在这款投影机安全研究过程中,发现了EasyMP的两个zeroday漏洞,这两个漏洞都允许对爱普生投影机进行管理访问(包括通过WiFi远程传输攻击者屏幕)。
第一个漏洞(CVE-2017-12861)是对用于向EasyMP认证用户的4位数PIN的简单暴力破解漏洞。 由于没有锁定或限制功能,攻击者可以在不到30秒内暴力扫描整个密钥空间(10,000个组合)。
第二个也是更严重的漏洞是在多台爱普生设备间确定暴力破解漏洞的过程中发现了的,这是一个硬编码的后门PIN,这个PIN在支持EasyMP管理应用程序(CVE-2017-12860)的所有投影机中都是通用的。 这样就不需要攻击者使用上述的暴力破解方法,因为可以使用后门PIN来立即控制本地网络上任何支持的投影机。
这两个漏洞都负责任地向供应商作出了披露---供应商没有回复。 经过多次尝试解决这些问题但没有一次回应之后,我们决定全面披露这两个漏洞。 披露时间表的详细信息可在本文末尾找到。

背景:爱普生EASYMP的介绍

许多新型的爱普生投影机 - 包括爱普生PowerLite Pro - 支持称为EasyMP的设备管理和屏幕共享应用程序。 该工具允许用户在无需额外的布线的情况下控制关键功能,并将其屏幕显示在支持网络的投影机上,。
EasyMP协议是专用的,但是屏幕共享方面似乎与VNC相关,基于代码中的字符串引用。 当投影机处于EasyMP模式时,它会等待EasyMP连接,成功认证后将投影机上的用户屏幕显示出来。
要使用EasyMP模式,用户首先需要从Epson下载EasyMP软件。 然后,用户需要两条信息来连接专有协议:投影机IP地址和通过投影机本身显示的4位数字PIN(或“关键字”),该数字PIN每5分钟更改一次。

当它处于EasyMP模式并正在等待连接时,投影机将在屏幕上显示相关信息。

CVE-2017-12861 EasyMP暴力破解漏洞

EasyMP PIN码的逻辑是只允许有那些可以看到屏幕的人才能连接到投影机,即假设只有合法用户才能看到屏幕(这种假设是否成立取决于具体环境)。
即使如此,理论上也可以防止某人远程连接和接管画面传送。
到目前为止,我们已经确定并报告了这个系统中的两个漏洞。
第一个问题是在密码尝试失败之后没有锁定或限制。 后门密码是通过针对协议创建一个自制暴力破解器时而发现的,甚至在30秒钟以内的10,000次尝试(0000-9999)之后,投影机仍然接受新的连接尝试。 在这么小的密码空间(10k的排列),产生了重大的风险。
然而,更严重的问题是在测试了暴力破解脚本之后发现的 - 这是一个硬编码的密码后门被硬编码到所有支持EasyMP的Epson投影机中。 除了屏幕上显示的验证关键字,2270将始终可以有效的通过身份验证。

漏洞使用

利用backdoor关键字侵入爱普生EasyMP投影机是非常简单的。 点击目标投影机,然后点击连接。 将弹出一个对话框,询问一个关键字。输入2270而不用输入显示的PIN,然后单击确定。

打开连接对话框的EasyMP主窗口。 检查复选标记(1),单击连接(2),输入2270作为关键字(3),然后单击确定(4)。
点击连接后,程序将连接到投影机,弹出以下对话框。

EasyMP控制面板对话框。 允许用户控制投影机输入并显示其屏幕。
一旦你连接并选择了EasyMP输入,你将看到你的屏幕已被投影。 完成后,只需单击控制面板对话框上的断开连接,投影机将返回到之前显示的内容。

使用EasyMP程序使投影机显示用户屏幕。

漏洞发现过程

这个漏洞是使用Python编写的暴力破解器发现的。 暴力破解器通过重放验证请求包并每次更改PIN码来实现。 然后它检查响应数据包中的一个标志,以确定认证是否成功。 EasyMP utility在失败的密码尝试时对其进行了超时编码,因此编写宏来攻击该应用程序是不切实际的。 实际的认证协议在尝试失败后没有超时或锁定,因此是主要的目标。

EasyMP流量分析

编写恶意软件的第一步是分析EasyMP程序和投影机之间的流量。 Wireshark是一个数据包捕获应用程序,用于捕获认证数据包。 认证的工作原理是将包含PIN码的数据包发送到投影机的3620端口。 如果密码正确,则返回特定数据包,如果密码错误,则返回不同的数据包。 暴力破解器查看返回的数据包的第51个字节,并将其与零进行比较,以确定身份验证是否成功。

Wireshark的屏幕截图显示投影机在认证请求后返回的数据包。 此数据包中的第51个字节说明验证是否成功。

暴力破解专有协议

为了允许暴力破解器模拟EasyMP程序,原始认证请求数据包以十六进制格式复制到python脚本中,使用密码作为迭代变量。 然后脚本使用套接字将数据发送到目标投影机并接收响应以进行分析。
在完成暴力破解器后,将它以EasyMP模式运行在几台投影机上。 在运行它的时候,我们注意到,PIN2270不管是在屏幕上显示什么,都是成功的。 经过进一步测试,它似乎是一个后门关键字,适用于所有支持EasyMP的投影机。
我们的Python脚本在Rhino Security Labs Github中。

CVE-2017-12860:EASYMP 后门 PIN

二进制确认:逆向EASYMP

最初在设备上使用黑盒方法发现后门密码,暴力破解可能的组合,并确认2270始终能通过身份验证。
然而,由于已有类似的恶意攻击导致类似的后门程序(例如Juniper设备中所确认的-我们决定确认问题的位置/上下文,并向供应商提供确认和修补问题的详细信息。 为了确定这一点,我们逆向了爱普生固件。

获得(加密)固件映像

第一步是抓取固件。 然而所测试的投影机型号 - PowerLite Pro G5650W - 没有任何固件可用,爱普生网站的评论提供了其他型号的固件更新。 该站点上最接近的型号是PowerLite Pro G6050W,用于在这里进行测试。
我们做的第一件事是在十六进制编辑器中打开54Mb的固件映像。

在Winhex中打开的固件映像,Winhex一款十六进制编辑器。 注意在红色框中的前5个字节为我们在以后使用它们。
我们立刻确定该文件是经过加密或混淆的。 通常,固件映像将具有一些可读的字符串,但整个映像中没有一个字符串。 为了弄清楚发生了什么,我们从爱普生下载了固件更新工具,并用其打开了固件。

固件更新实用程序窗口。 固件已经完成处理,路径现在显示在文本框中。
点击浏览并选择文件后,路径显示之前出现了可疑的长时间延迟。 我们怀疑这是在进行解密/解压缩。
测试正是这样,我们尝试更改固件映像中的一个字节并将其加载到程序中 - 这会使程序立即崩溃。 这本身就是一个很小的成功,就意味着固件更新实用程序正在对文件进行某种处理 - 很可能是文件解密,我们需要在此之后提取内存中的映像。

Windows对话框告诉我们固件更新实用程序已经崩溃(单个字节更改后)。
现在我们知道固件更新实用程序正在解密该文件,我们需要弄明白在哪里解密和如何解密。为此,我们将软件加载到Windows调试器Windbg中。 然后,我们使程序崩溃,并且定位到程序在哪里发生崩溃。 崩溃发生在位置0x507F,如上图截图中的“异常偏移”之后所示。
接下来,我们在IDA Pro反汇编器中打开了更新程序。该反汇编器将程序变为汇编语言,所以我们可以看到程序在幕后做了什么。 我们来到到偏移量0x507F,然后在导致崩溃点的代码附进 看一看。最终,我们能够找到解密程序。

IDA中反汇编的屏幕截图。 可以在红色框1中看到对解密程序的调用。

 

现在我们知道解密程序在哪里,我们可以用它来解密固件。 我们在Windbg中打开固件更新实用程序,并在解密程序之前设置一个断点。 断点导致调试器暂停执行。 暂停时,我们可以探索内存和寄存器值并检查程序。
我们运行程序,直到它触发解密程序之前的断点(上面的截图中的解密固件)。 检查汇编代码和寄存器,我们确认固件映像位于更新实用程序内存中。
红框2(下图)显示了对解密功能的调用。 在调用之前,我们看到寄存器ESI被移入寄存器EDI(红框1)。 EDI是传递给解密函数的参数之一。

程序汇编代码包含对解密功能的调用。 在调用解密程序之前,固件的位置被传递到EDI(1),在解密程序被调用之前(2)。
我们怀疑EDI可能包含内存中固件映像的地址,所以我们检查了EDI中的内容。

寄存器窗口显示所有寄存器的值。 EDI(1)包含内存中固件的地址。 EBX(2)包含固件数据的长度。
EDI包含地址98d0020,如上面的红色1所示。

我们在内存窗口中浏览到98d0020,看看是些什么。 下面的红色框1显示我们导航到地址98d0020。 下面的红色框2显示了我们在这个位置的内存的前5个字节。 如果您回到开头的Winhex屏幕截图,您将看到它们与固件映像中的字节相同。
这证实了EDI包含固件的地址。 另一个重要的事情是数据的长度。 这是存储在EBX中,是36b3200。 这在上面的红色框2中看到。

内存窗口显示内存中加密的固件映像。 地址可以在红色框1中看到。前5个字节(红色框2)与文章第一张照片中显示的固件图像相同,确认我们找到了映像。
现在我们已经确认了映像在内存中的位置,我们可以运行解密程序,看看会发生什么。该例程大约需要15秒钟的时间才能运行,但是完成之后,EDI所指的固件映像已经被解密了。 你可以看到地址是相同的(红色框),但所有的数据已经被更改了,因为它已被解密。

内存窗口中显示已被解密固件映像。
现在我们得到了在内存中有解密的映像,但是我们如何提取它呢? 我们记得,EBX包含的映像的长度是0x36b3600。 所以从EDI到EDI + 0x36b3600是我们解密的固件映像。 为了从内存中提取出来,我们使用Winhex来记录进程的内存快照。

Winhex拍摄固件更新实用程序的内存的快照。

我们将快照保存为文件,然后在Winhex中将其打开。将其保存为文件重映射内存地址,因此我们不再知道映像位置。 为了再次找到它,我们搜索了出现在图像中的第一个字符串。 结果以黄色突出显示。 然后,我们将图像的开始标记为块的开始。 我们浏览到当前位置+ 0x36b3600,并将其标记为块的结尾。

Winhex导航窗口。 浏览解密的固件映像的结尾并选择所有字节。

Winhex编辑菜单。 用于将选定的固件映像字节导出到自己的文件中。
现在我们将该块复制到一个新文件中,并且我们获得了一个的解密固件映像。 得到固件的明文版本,硬件部分已经结束。

分析(解密过的)固件映像

固件映像像可能很棘手,因为它们是通常包含各种信息的二进制大对象。 这可以包括可执行文件,压缩文件系统,数据文件和许多其他格式。 幸运的是一个名为Binwalk的工具可以帮助我们了解这些二进制对象的组成。 Binwalk寻找表示某些类型文件的开始的签名。 运行Binwalk后,我们在图像中找到了一个CramFS文件系统。

在Binwalk中的CramFS文件系统签名结果。
经过一些无意义的和错误的起始点,我们找到了CramFS的签名。 CramFS是一种非常受欢迎的嵌入式系统文件系统,它很有可能包含投影机的操作系统。
我们提取了这部分的图像,并将其隔离成一个新的文件。 然后我们使用一个名为Cramfsck的工具来解压文件系统。 解压缩后,我们发现它是一个嵌入式Linux系统。

嵌入式操作系统的目录结构清楚地显示其为linux。
现在我们有了操作系统,我们将如何找到管理关键字认证的可执行文件和例程? 我们可以逐一查看所有的可执行文件,但是这将花费很长时间。 我回想起当我们正在进行数据包嗅探时,投影机将返回字符串“EEMP”,然后是一些数字。

Wireshark显示验证后从投影机返回的数据包。
为了节省时间,我们针对整个目录运行strings命令,然后在结果中搜索EEMP。 在30秒内,我们已经找到可执行文件。

在strings的结果中搜索EEMP。 EEMP存在于一个名为“vortexd”的可执行文件中,该文件负责管理EasyMP认证”

分析可执行文件

最终,我们终于得到了负责验证EasyMP连接会话到投影机身份验证的二进制文件。 我们将其加载到IDA中,并为后门关键字(2270)进行了文本搜索 - 出现了一个结果。

IDA中的十六进制转储显示硬编码的后门密码。

IDA中的反汇编视图显示了对后门关键字的引用。
有一个代码引用它之前的8个字节的数据,所以我们检查了该引用来自哪里。 引用位于名为AnalyzeRequestConnect的函数中。 看一下引用的例程,,它实际上在存储堆栈之前对进址进行了加8,所以这是对后门关键字的直接引用。

后门关键字之前的8字节地址加载到R3(1)中。 然后将该地址加8以给出后门关键字(2)的地址,然后在(3)将后门关键字推送到当前堆栈地址的1B处。
该例程取得2270并将其存储在堆栈0x1B处。 接下来的代码中,我们找到另一个对0x1B的引用。

在IDA中的认证程序汇编代码。
截图(1)中的第一个例程是实际的关键字检查发生的位置。 如果关键字无效,那么它将跳转到第3个例程(2),它将关键字与堆栈偏移量0x1B('2270')进行比较。
如果用户提供的关键字与实际随机生成的关键字或硬编码的后门关键字相匹配,则允许连接继续。

结论

在一项常规的安全评估过程中,我们的任务是确定爱普生投影机的潜在安全隐患。 针对管理应用程序的4位密码认证的黑盒研究中,由于EasyPM证实缺少认证超时或锁定措施,使得易受暴力破解攻击。
在同一研究的过程中,确定了与具有硬编码的后门PIN 2270相同的应用程序,其将针对所有支持的投影仪进行认证。 多次负责任的尝试向爱普生公司披露(包括通过“MITR”),但都没有成功。

披露细节和时间表

8/02/17 - 向供应商的初步宣传(多渠道,因为没有安全联系页面)
8/13/17 - 通过通用的爱普生技术支持部门的电子邮件联系
8/14/17 - 爱普生技术支持部门的回应 - “请提供更多的安全漏洞的详细信息...”
8/14/17 - 提供了关于漏洞的细节; 便于后续跟进提供了联系信息
8/15/17 - 爱普生技术支持部门的回应 - “我把这个问题提交给了管理层。会再联系你...“。
没有进一步回复
8/15/17 - 联系MITRE; CVE发布
8/25/17 - 跟供应商联系。 无回复
9/14/17 - 与供应商的最终联系尝试。 无回复
9/19/17 - 完整披露漏洞


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞1
打赏
分享
最新回复 (3)
雪    币: 30
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
uubs 2017-10-26 09:30
2
0
大佬,想问一下,你们一般在哪些地方看这种外文呢?小白想多接触一点。
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
聖blue 2017-10-27 22:02
3
0
不错!
雪    币: 31
活跃值: (111)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuss 2019-10-27 21:17
4
0
非常详细,谢谢
游客
登录 | 注册 方可回帖
返回