ZKTeco门禁设备漏洞挖掘技术分析

admin 2024年6月14日10:54:41评论30 views字数 7944阅读26分28秒阅读模式

生物识别扫描仪提供了一种独特的解决安全性与可用性之间冲突的方法。它们通过人的独特生物特征来识别个人——这是一个相当可靠的过程,不需要用户付出任何额外的努力。然而,生物识别扫描仪和其他任何技术一样,也有它们的弱点。本文从红队的角度触及了生物识别扫描仪的安全性,并以一种流行的混合终端模型为例,展示了对扫描仪分析的方法。这些方法无疑是相当知名,并且适用于任何类型设备的分析。

我们还讨论了生物识别扫描仪对访问控制系统的好处以及它们在确保当今现实中应有的安全标准的方面的作用。此外,我们讨论了我们在分析其安全水平时发现的一个主要全球供应商的生物识别扫描仪的漏洞。本文对安全研究人员和架构师都将有用。

我们已经通知了供应商我们发现的所有漏洞和安全问题。每种漏洞类型都已注册了CVE条目:CVE-2023-3938、CVE-2023-3939、CVE-2023-3940、CVE-2023-3941、CVE-2023-3942、CVE-2023-3943。

生物识别终端的简要概述

在安全背景下,生物识别终端用于个人识别。它们依赖于分析人的独特身体特征,如指纹、声音、面部特征或虹膜。

重要的是,生物识别终端与传统扫描仪有所不同。首先,它既可以获取生物识别数据也可以验证它。其次,终端可以连接到其他扫描仪,如电子通行证阅读器,或使用内置硬件支持其他认证方法。

它们的主要目的是控制对某个区域或场所的访问。因此,它们可以用于限制对存放机密数据的场所的访问,如服务器房或高管办公室,或控制对危险设施的访问,如核电站或化工厂。

另一个应用是记录员工的工作时间,以提高生产力并减少成功欺诈的可能性。

在安全性方面,可以说生物识别终端提供以下好处:

  1. 高度准确的识别:生物识别数据对每个人都是独特的,这使得它成为可靠的身份验证方式。
  2. 安全性:生物识别数据难以伪造或复制,这增加了系统的安全性。
  3. 用户友好:生物识别识别不需要对象记住密码或携带访问卡。
  4. 高效率:生物识别终端可以快速处理大量数据以减少等待时间。

然而,这些设备并非没有缺点。

  1. 成本:生物识别终端通常比传统的访问控制系统更昂贵。
  2. 错误风险:尽管生物识别数据是独特的,但在某些情况下,系统可能会误识别有损坏指尖等的个人。
  3. 隐私:一些人可能会对他们的生物识别数据被存储和使用而没有他们的同意感到担忧。
  4. 技术限制:一些生物识别识别方法(如面部识别)在光线不足的条件下,或者当对象戴着口罩等时可能会效率较低。

生物识别终端对于渗透测试人员来说是一个相当有趣的目标。这些设备中的漏洞,位于物理和网络边界的交汇处,构成了在分析这两个边界的安全性时可以考虑的风险。

在进攻性安全方面可以实现的一些目标包括:

  • 绕过认证和违反物理访问
  • 生物识别数据泄露
  • 获取对设备的网络访问并利用它来进一步发展攻击

现在我们已经定义了生物识别终端、其应用、好处和缺点,以及与之相关的安全分析目标,我们可以继续分析一个特定的设备。

设备概述

正在审查的设备是由ZKTeco制造的混合生物识别终端。根据分销商的不同,它可能有不同的名称。你可以在下面的照片中看到它的外部外观。

ZKTeco门禁设备漏洞挖掘技术分析
设备外部外观

设备外部外观

该设备具有几个物理接口,支持四种认证方法:生物识别(面部识别)、密码、电子通行证和二维码。

存在以下物理接口:

  • RJ45;
  • RS232;
  • RS485(未使用);
  • Wiegand 输入/输出。

普通(非特权)用户与设备交互的选择有限:他们只能点击下面照片中你可以看到的两个屏幕上的按钮之一。

ZKTeco门禁设备漏洞挖掘技术分析

可用的触摸屏按钮

可用的触摸屏按钮

点击按钮会弹出一个提示输入PIN的界面,在我们的情况下,PIN是用户的唯一ID。

ZKTeco门禁设备漏洞挖掘技术分析

用户ID输入界面

用户ID输入界面

如果输入了有效的(已存在的)ID,屏幕会显示可用的用户特定认证选项。示例显示了一个ID为1的用户和两种认证方法:生物识别和密码。

ZKTeco门禁设备漏洞挖掘技术分析

ID为1的用户可用的认证方法

ID为1的用户可用的认证方法

这就是非管理员或未经认证的用户可以使用终端的全部功能。

管理员可用的选项更有趣。拥有管理员权限,我们可以控制几乎所有的设备设置。下面的图像显示了最大访问菜单。

ZKTeco门禁设备漏洞挖掘技术分析
管理员的设备设置菜单

管理员的设备设置菜单

管理员菜单可用于添加新用户,管理他们的访问级别,并更改网络和面部扫描仪设置。正如你将在下面看到的,管理员访问允许实现前一节中列出的所有安全分析目标。获得这种访问级别需要通过管理员身份验证。

黑盒分析

电路分析

我们的工程分析将从黑盒分析开始,即电路分析。下面的照片显示了我们感兴趣的电路板组件。

  1. SoC(HI 3516 DV300);
  2. 内存(K4B4G16E-BCMA,4Gb);
  3. 闪存(THGBMJG6C1LBAI,8Gb,BGA-153);
  4. UART。
ZKTeco门禁设备漏洞挖掘技术分析
电路板

电路板

您可能会注意到电路板上有许多测试点。话虽如此,我们只对标有数字4的测试点感兴趣,因为这些是通用异步接收/发送器(UART)的位置,我们可以使用它与设备通信。标有数字3的闪存也很有趣,因为它以未加密的形式保存了整个固件。

为了检查我们是否正确识别了UART,我们使用示波器通过我们确定为TX端口的连接,这是设备通过它发送外部数据的端口。

ZKTeco门禁设备漏洞挖掘技术分析
示波器连接到UART

示波器连接到UART

在计算了UART数据速率并将示波器设置为该值之后,我们看到这确实是一个UART,设备正在通过它发送启动日志。

ZKTeco门禁设备漏洞挖掘技术分析
启动日志

启动日志

接下来,我们使用PC连接到UART,这帮助我们查看完整的启动日志并确定引导程序为U-Boot。

ZKTeco门禁设备漏洞挖掘技术分析
PC上的UART连接

PC上的UART连接

引导程序配置阻止了任何尝试中断启动(bootdelay = -2)或以任何其他方式与之交互的行为。然而,在设备启动后的一段时间后,我们发现UART从57,600切换到了一个不同的波特率115,200,因为设备开始发送统一的数据包,这表明使用了一种未知的协议。

ZKTeco门禁设备漏洞挖掘技术分析
The unknown protocol as used by the UART

未知的UART协议

每个数据包都以0x53 0x53字节开始,第五个字节总是与最后一个字节相同。在线搜索这两个字节没有找到任何结果。向设备发送类似格式的数据包也没有得到任何响应。

网络分析

另一种黑盒分析是扫描网络端口。我们可以使用Nmap,这是一个公开可用的网络扫描工具,来查看哪些端口是开放的,并尝试识别这些端口上运行的服务及其版本。下面的截图显示了生物识别终端上开放的TCP端口。

ZKTeco门禁设备漏洞挖掘技术分析
开放端口

开放端口

您可能会注意到,该设备在一个非标准端口上支持SSH。从理论上讲,如果我们获得正确的凭据,我们可以连接到它。我们可能可以通过使用字典攻击或暴力破解密码哈希来提取这些凭据。

此外,还有两个服务无法自动识别。运行在端口6668/TCP的服务是Tuya服务器,但我们无法找出它的目的。运行在端口4370/TCP的服务更有趣,因为它使用了供应商的专有协议,该协议被其许多设备支持。在网络搜索该协议后,我们发现有文档可用,这使我们的分析变得更加容易。

ZKTeco门禁设备漏洞挖掘技术分析
搜索端口4370/TCP上的协议

搜索端口4370/TCP上的协议

摄像头和二维码扫描器分析

我们对设备的概述提到它支持二维码认证。我们决定看看如果我们向设备呈现的代码包含可能破坏处理逻辑的无效数据会发生什么。我们通过让设备扫描包含恶意SQL代码的二维码来实现结果。

一个基本的SQL注入导致设备将我们识别为有效用户。

ZKTeco门禁设备漏洞挖掘技术分析

借助SQL注入获得访问权限

借助SQL注入获得访问权限

我们进一步注意到,让设备扫描包含1KB或更多数据的二维码会导致它进入紧急重启,这表明它的某些组件经历了溢出。在逆向工程和固件分析部分将对此进行更详细的讨论。

获取和解包固件

厂商的网站不会让任何人随意下载固件的最新版本。你可以下载一个包含更新算法的PDF文件,但它受到密码保护,我们在任何公共网站上都找不到这个密码。

因此,我们获取固件有两个选择:移除闪存并使用编程器转储它,或者尝试在网络上找到副本。

在网络上搜索固件

为了开始搜索固件,我们需要找出它的名称和大致版本。我们正在分析的是一个刚从盒子里拿出来的未使用过的设备,因此我们有管理员权限。因此,我们可以查看设备详情并找到当前固件版本。

ZKTeco门禁设备漏洞挖掘技术分析

设备设置菜单中看到的固件详情

设备设置菜单中看到的固件详情

我们拥有的版本是ZAM170-NF-1.8.25-7354-Ver1.0.0。我们使用该字符串及其部分进行网络搜索。

在运行一些复杂的Google搜索查询后,我们发现了几个在国际分销商网站上看起来非常像我们的终端的设备。

ZKTeco门禁设备漏洞挖掘技术分析
国际分销商网站上的类似设备

国际分销商网站上的类似设备

我们还找到了固件,尽管它是一个早期版本。

ZKTeco门禁设备漏洞挖掘技术分析
同系列固件

同系列固件

固件足以让我们弄清楚更新是如何进行的。下载并分析了固件后,我们发现更新本身是一个文本文件的一部分,需要通过专用软件转换。

ZKTeco门禁设备漏洞挖掘技术分析
更新文本文件

更新文本文件

转换过程不太复杂,"DataX"变量中包含的十六进制文本记录被转换为字节格式以产生固件。

ZKTeco门禁设备漏洞挖掘技术分析
更新二进制文件

更新二进制文件

对文件的快速分析发现它被加密了。这导致我们检查了存档中的其他文件。

仔细检查后发现,设备支持仅影响特定库和可执行文件的部分固件更新。我们在从分销商网站下载的固件存档中找到了一个这样的较小更新包。

ZKTeco门禁设备漏洞挖掘技术分析
部分更新存档

部分更新存档

ZKTeco门禁设备漏洞挖掘技术分析

Partial update files

部分更新文件

通过对“standalonecomm”可执行文件的快速分析,我们发现该文件处理在端口4370/TCP上接收到的请求。该可执行文件还具有固件更新功能。处理程序调用了一个外部的“zkfp_ExtractPackage”文件提取函数。

ZKTeco门禁设备漏洞挖掘技术分析
更新文件提取代码

更新文件提取代码

ZKTeco门禁设备漏洞挖掘技术分析
外部更新图像提取函数

外部更新图像提取函数

我们在其他任何更新文件中都没有找到该函数,因此我们转而在网络上搜索。这引导我们找到了一个包含其头文件中函数的代码库。

ZKTeco门禁设备漏洞挖掘技术分析

搜索提取函数

搜索提取函数

ZKTeco门禁设备漏洞挖掘技术分析
头文件中的提取函数

头文件中的提取函数

我们在同一个代码库中发现了一个实现了该函数的库。

ZKTeco门禁设备漏洞挖掘技术分析
代码库中的库具有提取函数

代码库中的库具有提取函数

ZKTeco门禁设备漏洞挖掘技术分析
在库中搜索提取函数

在库中搜索提取函数

分析提取函数后,我们发现它也用于解密固件。下面的截图显示了解密代码。

ZKTeco门禁设备漏洞挖掘技术分析
更新文件解密代码

更新文件解密代码

使用的加密是XOR,密钥由更新文件的最后16个字节和文件大小组成。看来现在我们拥有了生成密钥并解密固件所需的所有必要数据。

解密后,文件显示它仅更新了一些可执行文件、库和配置文件。

ZKTeco门禁设备漏洞挖掘技术分析
解密后的更新存档

解密后的更新存档

这不是一个大问题,因为处理端口4370/TCP上入站数据的可执行文件——我们要找的那个——在下载的存档内容中。我们仍然想要完整的固件,所以我们尝试了另一个选项:读取闪存。

从闪存中获取固件

如本节开头所述,可以从电路板上的闪存中提取固件的副本。

ZKTeco门禁设备漏洞挖掘技术分析

电路板上的闪存

电路板上的闪存

闪存是BGA-153封装内的eMMC,可以很容易地在网上找到编程器夹具。读取闪存后,我们得到了一个包含如下所示各个部分的文件。

ZKTeco门禁设备漏洞挖掘技术分析
闪存结构

闪存结构

部分名称基本上是不言自明的,但我们仍然运行了binwalk,这是一个公开可用的容器数据分析工具,以确保它们的准确性。下面是binwalk的输出结果。

ZKTeco门禁设备漏洞挖掘技术分析
闪存转储的binwalk输出

闪存转储的binwalk输出

除了所有的可执行文件和一个Linux内核,闪存还包含了系统仅有的两个用户的凭证。

ZKTeco门禁设备漏洞挖掘技术分析
/etc/shadow的内容

/etc/shadow的内容

假设用户通过SSH访问设备,我们尝试对哈希进行暴力破解以获取他们的密码。我们成功地获得了用户“zkteco”的密码,他确实有通过SSH访问终端的权限。

ZKTeco门禁设备漏洞挖掘技术分析
通过SSH使用凭据登录

通过SSH使用凭据登录

不幸的是,这个用户没有最高权限,但我们仍然获得了对许多敏感系统文件和正在运行的服务列表的访问。

ZKTeco门禁设备漏洞挖掘技术分析
设备上运行的可执行文件

设备上运行的可执行文件

主要服务名为“main”。它控制屏幕上显示的所有内容,并通过一个名为“hub”的服务与其他必要服务通信。后者是一种消息代理,为服务之间的通信提供了一个方便的接口。另一个有趣的服务是“pushcomm”:一个HTTP客户端,向设备配置中指定的服务器发送请求。换句话说,如果攻击者能让设备与他们控制的网络服务器通信,就可以使用该客户端攻击设备。继续阅读以了解如何使用此方法实施攻击。另外,请注意,所有服务都以最高权限运行,这使得劫持设备变得更加容易,因为任何允许代码或命令执行的漏洞都会使攻击者获得最高权限。

分析端口4370/TCP上的协议

我们选择standalonecomm服务作为我们分析的主要对象,因为它实现了端口4370/TCP上的供应商专有协议,并包含了攻击者可能不当实现的有趣命令。

如本文开头所述,协议文档可从一个GitHub存储库获得,这大大简化了分析,因为可以将知识应用于反汇编代码,以找到感兴趣的命令的处理程序。

协议结构相当简单且典型。一个数据包由头部和有效载荷组成。有效载荷本身也分为头部和数据,后者主要由命令决定。在某些情况下,它是一个四字节数字,在其他情况下,是一个字符串或数据集。协议设计的详细描述可以在公开可用的文档存储库中找到。

协议认证及其问题

协议的有趣特性包括用户认证,这需要知道设备上设置的密码。在我们的设备上,密码称为“COMKey”,由管理员设置。默认情况下,密码设置为0,即没有密码,所有请求都可以在没有任何认证的情况下运行。

此外,COMKey可以是从0到999999的整数,因此可能的密码数量有限,可以通过网络暴力破解。我们在分析设置密码的代码时遇到了这个限制。

ZKTeco门禁设备漏洞挖掘技术分析
COMKey设置代码

COMKey设置代码

用于生成所谓的“MAC”(消息认证码)的协议认证方法也不够安全。生成过程依赖于可逆操作,因此如果我们能够监视网络上的流量,一旦客户端成功认证,我们就可以恢复密码。生成代码在下面的截图中显示。

ZKTeco门禁设备漏洞挖掘技术分析
MAC生成代码

MAC生成代码

SessionId变量是服务器生成的两字节值,并发送给客户端,以便它可以从COMKey计算MAC并将结果值返回给服务器。

与密码相关的另一个安全风险是COMKey以未加密形式存储在设备数据库中,因此任意文件读取漏洞将允许我们发现它并通过网络协议进行认证。另一个可能的场景是通过SSH登录并读取数据库以获取协议密码,而无需进行网络暴力破解攻击。

下面的图表说明了协议认证机制。

ZKTeco门禁设备漏洞挖掘技术分析
协议认证机制

协议认证机制

客户端发送一个连接命令(CMD_CONNECT),服务器返回代表SessionId的两个字节,并与COMKey结合以生成MAC。客户端将MAC与CMD_AUTH命令一起发送,服务器验证该MAC。如果MAC有效,服务器响应CMD_ACK_OK,客户端现在可以在当前TCP会话中使用所有可用的服务器命令。

命令处理器的漏洞分析

所有因成功认证而可用的命令都由一个带有命令ID切换器的大型函数处理。下面是它的图形表示。

ZKTeco门禁设备漏洞挖掘技术分析
命令处理器的图形表示

命令处理器的图形表示

分析该函数并不涉及任何复杂性:这只是时间和注意力的问题。

我们立即挑选出名称中包含“DOWNLOAD”、“UPLOAD”、“DELETE”或“UPDATE”等词的命令作为相关分析对象。

例如,CMD_DOWNLOAD_PICTURE下载用户图像。它接受一个文件名作为参数,但在将文件名插入文件打开函数之前,它不会以任何方式进行验证。这允许传递比如说目录遍历字符作为文件名来获取任意系统文件。处理器代码在下面的截图中显示。

ZKTeco门禁设备漏洞挖掘技术分析
图像下载处理器

图像下载处理器

由于standalonecomm以最高权限运行,该命令可用于获取/etc/shadow。

在找到进一步传递文件名而不进行任何过滤的命令后,我们检测到几个文件读取漏洞。我们还发现了一个允许将文件上传到任意路径的函数。鉴于服务所授予的权限,该函数可以被利用以获得对设备的无限访问。

对CMD_DELETE_PICTURE的分析揭示了由于要删除的图像名称直接插入命令中,然后传递给“system”函数,因此存在嵌入shell命令的可能性。

ZKTeco门禁设备漏洞挖掘技术分析
图像删除处理器

图像删除处理器

我们编写了PoC脚本以确认漏洞可以被利用。请参阅下面的脚本输出。

ZKTeco门禁设备漏洞挖掘技术分析
PoC脚本输出

PoC脚本输出

我们还发现了与使用不安全的strcpy/sprintf函数以及在“memcpy”函数中缺乏复制缓冲区大小验证相关的几个缓冲区溢出漏洞。我们将以CMD_CHECKUDISKUPDATEPACKPAGE处理器为例来检查这个问题。

ZKTeco门禁设备漏洞挖掘技术分析

CMD_CHECKUDISKUPDATEPACKPAGE处理器

CMD_CHECKUDISKUPDATEPACKPAGE处理器

该漏洞源于在从用户网络数据包复制数据时,处理器使用用户指定的数据包大小。目标缓冲区位于栈中,大小为1028字节。用户在数据包中指定更大的数据大小会导致缓冲区溢出。可执行文件没有栈溢出保护。恶意行为者可以利用该漏洞来调用ROP链并执行任意代码,从而打开对设备的远程访问。

最后,我们几乎在任何将用户在网络数据包中传递的字符串值直接插入数据库查询的地方都发现了SQL注入漏洞。

pushcomm分析

如上所述,pushcomm服务向设备配置中指定的服务器发送请求。要设置服务器地址,管理员会进入“COMM”菜单并打开“Cloud Server Setting”。管理员定义要连接的IP地址和端口,还可以根据需要启用其他选项。下面的截图显示了配置菜单。

ZKTeco门禁设备漏洞挖掘技术分析
COMM菜单

COMM菜单

ZKTeco门禁设备漏洞挖掘技术分析
云服务器设置菜单

云服务器设置菜单

对可执行文件的分析表明,它容易受到与standalonecomm相同的问题的影响。然而,利用这些缺陷需要启动一个web服务器并使设备与之通信。有不止一种方法可以做到这一点:通过更改数据库或管理员菜单中的设置,或者通过ARP欺骗。

请注意,其中一个pushcomm命令名为“SHELL”,它会在设备上运行任何命令。

ZKTeco门禁设备漏洞挖掘技术分析

SHELL处理器

SHELL处理器

执行该命令所需的一切就是启动一个web服务器并实现以下处理器。

ZKTeco门禁设备漏洞挖掘技术分析
调用SHELL的处理器示例

调用SHELL的处理器示例

总的来说,pushcomm和standalonecomm代码之间有很大的重叠,特别是在数据库查询方面。

二维码处理器分析

在文章开头,我们提到当我们让设备扫描带有SQL注入的二维码时,设备将我们认证为不同的用户。然而,当我们分析代码时,发现二维码所能包含的数据大小被限制在20字节以内。这阻止了复杂的UNION和SELECT注入,这些注入可以用来从数据库的不同字段中获取任意数据。设备扫描我们的恶意二维码(在我们的情况下是带有SQL注入的代码)时生成的数据库查询如下所示。

ZKTeco门禁设备漏洞挖掘技术分析
使用二维码时的数据库查询

使用二维码时的数据库查询

我们还发现,让设备扫描包含大量数据的二维码可以导致设备重启。查看代码时,我们看到这个是由于一段等待相机数据的代码无法在预定的两秒内接收到数据,并将此视为故障,响应发送了“重启”命令。

ZKTeco门禁设备漏洞挖掘技术分析
相机数据等待代码

相机数据等待代码

结论

旨在提高物理安全性的生物识别设备既可以提供方便、有用的功能,也可能为您的IT系统带来新的风险。当像生物识别这样的高级技术被包含在一个安全性不足的设备中时,这几乎抵消了生物识别认证的好处。因此,配置不当的终端容易受到简单攻击,使入侵者很容易侵犯组织关键区域的物理安全。

我们对ZKTeco生物识别终端的分析共发现了24个漏洞。其中许多漏洞是类似的,源于数据库包装库中的错误。我们将这些概括为“多个漏洞”,并指出了类型和原因,从而得到了较少数量的CVE。

就冷冰冰的统计数字而言,结果如下:

  • 6个SQL注入漏洞;
  • 7个缓冲区栈溢出漏洞;
  • 5个命令注入漏洞;
  • 4个任意文件写入漏洞;
  • 2个任意文件读取漏洞。

我们在GitHub存储库中提供了Kaspersky研究团队检测到的漏洞的描述。

原文始发于微信公众号(3072):ZKTeco门禁设备漏洞挖掘技术分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月14日10:54:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ZKTeco门禁设备漏洞挖掘技术分析https://cn-sec.com/archives/2847642.html

发表评论

匿名网友 填写信息