打开三星Q60系列智能电视(2019)

2021-01-28 22:31:06

Warning: Can only detect less than 5000 characters

为了实现其“智能”功能(例如流服务)或与家庭自动化系统的接口,这些智能电视通常配备了网络连接功能。由于OS执行此类功能需要大量的网络服务,因此寻找攻击媒介显然是一个表面。

要了解Samsung Smart TV可能提供的网络服务,我们的第一步是对其进行简单的端口扫描。我们使用了nmap,它为我们提供了以下输出:

通过打开的端口列表,我们现在可以检查一些最有趣的端口。

有趣的是,电视上的各种不同端口上似乎正在运行多个UPnP服务。由于UPnP协议支持发现,因此我们可以使用现成的工具来枚举公开的功能。我们使用Burp套件的“ UPnP BHunter”扩展来做到这一点,该扩展能够执行端点发现并可以生成模板SOAP请求,这些请求通常有助于快速开始模糊测试。

该扩展可以快速发现三个服务,这些服务运行在nmap标识为“ upnp”的三个端口上:

我们可以从Burp从UPnP元数据中提取的参数名称中看到某种“关键代码”:

在“ screen_sharing”服务的端口9119上,UPnP元数据显示电视接收到端点的详细信息,以便电视与之进一步通信:

三星移动设备还支持可与智能电视配合使用的屏幕共享功能。

最后,如果我们观察到从“ dmr”服务返回的元数据,则可以看到对“ DLNA”的引用:

DLNA或“数字生活网络联盟”是在设备之间共享媒体的一组标准(例如,移动电话可能使用DLNA将其屏幕镜像到电视)。它将首字母缩写词DMR定义为“数字媒体渲染器”,通常是媒体服务器。电视似乎很可能使用此服务从网络上的源中发现和播放媒体。

由于UPnP公开了包括版本字符串在内的丰富信息,因此我们编写了Python脚本来扫描网络上的UPnP服务,并从https://cve.mitre.org获取所有相关的CVE。在当前的迭代中,脚本仅检查版本字符串,而不会尝试利用漏洞来确认潜在的CVE是否适用于目标,因此仍然需要手动验证。在这里可用。

该脚本设置了UDP套接字并使用“ M-Search” HTTP方法创建HTTP消息。然后,将HTTP消息发送到端口1900上的多播IP地址239.255.255.250,以允许发现所有UPnP设备。

我们在三星Q60R上进行了测试,最初对大量的比赛感到兴奋。但是,三星似乎在不更新版本字符串的情况下向后移植了这些错误的修复程序,因为我们无法利用其中的任何一个。

回到我们最初的nmap扫描,我们可以看到端口8080上有一个HTTP服务器。用dirbuster对其进行扫描并没有显示很多有用的信息,因此我们转向电视仿真器映像以查看是否可以找到有关它的任何信息。

如上所述,三星使基于qemu的仿真器可供下载以支持软件开发。该仿真器带有Tizen OS的x86版本,尽管我们怀疑此图像与“生产”电视上的图像有所不同,但它仍然非常有用。安装模拟器后,我们可以在磁盘上找到磁盘映像,即&#39:C:\ tizen-studio-data \ emulator \ vms \ T-samsung-5.0-x86 \ emulimg-T-samsung-5.0-x86.x86& #39 ;,我们可以通过qemu-convert将其转换为原始磁盘,然后将其安装为常规Linux ext文件系统。

我们很快可以在/usr/apps/org.tizen.webserver/conf/ATSC_DVB/pluginentries.xml中找到lighttpd配置文件,该文件向我们显示了一些公开的URL。尽管我们目前无法确认这是电视使用的配置文件,但我们可以验证其中包含的端点。

这些端点看起来很有趣(“ / ws / debug”例外,它仅显示静态调试页面)。他们似乎在处理与电视配对的设备,以实现远程控制。我们可以进一步检查电视仿真器映像,以确定负责的二进制文件:

该二进制文件非常适合进行模糊处理和进一步研究,因为它可以处理配对设备的授权并且可以通过网络访问。

端口8002只是端口8001上服务的HTTP端点的HTTPS版本。

三星记录了端口8001为应用程序开发人员提供调试功能。如上述三星页面所述,将电视置于“调试模式”才能使用其中的大多数功能。

三星告诉我们可以通过网络浏览器访问端点“ / api / v2 /”,实际上我们可以:

这是有趣的功能,在我们其他研究中可能会有用。

“三星调试桥”使用此端口以方便调试和部署到电视。我们将在后面详细讨论。

到目前为止,我们已经观察到电视上的开放端口,找到了一些有趣的攻击面,并确定了负责任的二进制文件。这些二进制文件可以在以后进行分析,方法是从仿真器映像中提取它们,或者从电视本身中提取它们。我们的下一个工作将处理后一个任务-从电视中提取二进制文件。

我们感兴趣的电视的下一个方面是调试功能的可用性,该功能适用​​于三星工程师,我们可能会滥用这些功能来获取有关运行环境的更多信息。我们最初希望通过连接到板上的调试轨迹来获得外壳很容易,但是事实证明这出乎意料地困难。但是,我们的分析揭示了有关该系统的许多其他有趣的细节。

对以前的三星电视进行的一些研究表明,存在“服务端口”,即一个3.5毫米插孔,可传输RS232信号。一旦在电视的服务菜单中启用了该服务端口,用户就可以调整通常不可用的各种设置,并查看大量的调试信息–有关此信息,请参阅samygo Wiki。但是,快速查看Q60R系列上的物理连接器可发现实际上没有此类端口。我们认为该端口似乎仍然可用,只是没有将物理插孔连接到板上,因此我们开始对板进行分析。一旦我们从电视上取下了后盖,内脏就干净又简单了。电视的右侧有一个电源板。这负责产生主板运行时产生的干净DC以及显示面板背光所用的高电压–因此,在断开连接时,应格外注意避免产生讨厌的电击。对我们而言,更有趣的是左侧的面板,其中装有电视的几乎所有“智能”设备。一旦将其从电视上卸下并卸下铝制散热器,就可以对其进行很好的观察:

板上有很多有趣的东西-从丝网印刷的线索到带有有趣字幕的未组装连接器!首先,确定一些主要的IC,然后寻找有趣的连接器。

靠近板中心的大芯片(此处标记为“ B”)很可能是为板供电的主要SoC(“片上系统”)。我们可以看到附近有两个DRAM芯片(“ C”),每个芯片的大小为1GByte,几乎可以肯定它们是主系统RAM。在这些旁边,有一个eMMC闪存芯片(“ F”)。这可能是存储根文件系统的位置。板上还有其他一些闪存芯片,例如D和F,但是它们很小,分别为512KByte和1Mbyte,因此它们很可能用于存储电视非智能功能内部的设置,例如校准和设置。 QLED面板或DDC信息,用于通过HDMI连接时识别电视。

尽管庞大的SoC调试连接器(“ A”)看起来很诱人,但它需要一些昂贵的专有工具才能连接,因此我们没有做进一步研究。它可能直接从SoC的系统总线传送高速信号,因此需要高速电子设备进行操作。最后,在面板底部附近,我突出显示了三个未填充的连接器。板子丝网上最左边标记为“ cn1502_serif”,这可能表示它已用于某种串行接口。右侧是cn2300_CX_DB。最后,如果您查看电路板的底面,则会看到未填充的连接器封装,标记为CON701_DB。在它下面(并连接到它)下面是两个测试点,分别标记为“ uart_tx_sw”和“ uart_rx_sw”,表明它们已连接到软件UART(即串行端口)。如果您跟踪这些测试点的连接位置,您会发现它们分别连接到电阻器(r1512ex和r1513ex),然后连接到未填充的IC引脚(称为IC702_RS)。通常,当设备需要RS232端口时,将使用电平转换器将TTL逻辑信号转换为RS232所需的更高电压。似乎这就是这里发生的情况–未安装的IC可能是电平转换器。进一步观察IC占用空间,我们可以看到两个引脚连接到主SoC。如果存在电平转换IC,则这些可能是TTL电平逻辑信号,通常会转换为RS232。我们可以简单地连接到这些信号并自行处理它们。当然,如果不进一步验证我们的理论,我们还不够鲁are地将这些端口直接连接到计算机。让我们连接一个示波器,以观察系统启动期间这些引脚的行为。蓝色表示怀疑是电视的串行输出,黄色表示怀疑是电视的串行输入。

我们在这里可以看到一个不错的二进制波形,其中包含低压串行线将包含的二进制1和0。请注意,峰峰值电压约为3.5v(右上方),与TTL信号电平相对应。我们还可以通过示波器测量脉冲的长度(请参见下图),它显示出大约8.8微秒的脉冲宽度。由此,我们可以计算出信号的波特率-将1秒除以8.6微秒,得出113636。鉴于大多数串行UART的宽容性,这几乎可以肯定是115200波特率信号。

既然我们已经验证了理论,那么我们继续并连接到廉价的USB-to-TTL串行适配器,然后在minicom中打开一个终端。我们受到以下欢迎:

干净的ASCII!这可以验证我们是否已正确连接到调试端口,尽管我们收到的文本还不是很有趣-稍后会详细介绍。我们也可以类似的方式连接到第二个串行端口CN2300_CX_DB。但是,只重复显示以下ASCII值就没那么有趣了:

让我们把注意力转到第一个端口。如果您还记得的话,SamyGO Wiki告诉我们,我们可以通过隐藏的服务菜单启用调试模式以获取一些信息。最终用户不希望访问此服务菜单。三星工程师可以使用特殊的遥控器进入此菜单,该遥控器带有标有“ factory”的按钮。尽管我们没有,但是仍然可以访问菜单-有几种不同的方式来传输此代码,并且由于我们已经通过USB IR Toy设置了LIRC,因此对我们来说很容易。我们可以简单地通过Web UI发送“工厂”代码和“信息”代码。完成此操作后,我们将在电视屏幕上显示一个服务菜单:

从这里我们可以将“ RS232模式”(位于“控制”下的“子”菜单下)设置为“调试”。下次重新启动电视时,我们会从串行控制台获得大量调试信息,这是很有意义的:

虽然SamyGO Wiki建议我们可以在串行控制台中输入“ TDM代码”以进入其他服务菜单,但他们在Wiki上提供的代码均未对我们的Q60系列产生任何影响。看起来我们似乎不走运,但是老鹰眼的查看者可能会注意到代码已经打印到调试控制台上了-作为内核命令行的一部分!

是的,那个“ SELP_ENABLE”参数包含我们需要的代码。如果我们在串行端口中键入该代码20196873,然后按Enter,控制台将变为活动状态,并且我们键入的内容将回显给我们。如果然后键入所有其他电视型号– 20089999所使用的常规TDM代码,则可以从TDM调试菜单中看到:

但是,不幸的是,此菜单中没有任何选项对我们获取外壳程序有用。该仿真器包含不同的调试菜单版本,其中包含一个简单地生成bash的选项-但该选项未内置在电视的二进制文件中。但是,我们可以启用大量调试信息,这些信息稍后可能会有用–我们希望TDM控制台的详细信息对整个社区都有用,即使它们没有产生我们所需的Shell。

由于到目前为止,我们获取外壳程序访问的尝试均未成功,因此我们探索了获取可分析的根文件系统映像的可能性。当然,可以从三星网站上下载固件升级,但是不幸的是,它们似乎是加密的,因此我们将注意力转移到了主板本身上。我们之前在板上观察到一个大的8GByte闪存芯片,推测它可能包含某种固件。它的大容量表明它拥有根文件系统,也可能装有操作系统的内核,因此我们着手转储其内容。我想在这里指出的一件事是,我们目前不知道

......