近期,由两位安全研究人员,Roberto Paleari及Aristide Fattori,发布了关于三星Galaxy手机设备安全漏洞的技术细节。据称,Galaxy手机可在锁屏状态下被未授权的第三方人员用以进行电话外呼和短信发送。
锁屏绕过概述
根据Roberto Paleari及Aristide Fattori发布的技术细节可知,攻击者可借助对手机设备的临时访问或窃取受害用户手机的方式,通过USB接入手机设备并将之连接到Linux工作平台上,最后发送指令来实现电话呼叫及短信发送。
而该方式并没用利用任何软件的漏洞,即使手机关闭了USB调试功能(ADB, Android调试桥,可帮助用户管理设备或模拟器状态)或者USB网络共享功能,也可以实现上述的电话呼叫及短信发送。
实现工作原理
对于这个漏洞,当前的核心问题是当手机通过USB连接到另外的 Linux系统时,一般情况下都可以通过Linux系统的虚拟USB串行口(主要为/dev/ttyACM0设备),来与手机设备通讯。
根据测试情况,当连接到一个 USB控制器(比如一个普通的笔记本电脑),对于三星Galaxy手机而言,此时会暴露出一个串行接口,而通过利用该接口我们可以与手机的USB modem来进行通信。
” Easy” 模式(针对旧的三星手机和固件版本)
对于旧的三星手机和固件版本,如GT-I9192(三星S4 Mini ,版本序号为I9192XXUBNB1),在将手机接入到Linux主机,确认通过接口连接到USB Modem后,即可尝试发送AT (Attention)命令,据分析,其中一些指令会被传递到基带Modem中,而其他一些指令则被用户空间应用进行处理。
而通过上述的接口来运行及传递简单的AT (Attention)命令,理论上,可让一个技术娴熟的攻击者在手机设备执行各类操作。
小百科
AT ,全称为Attention,由Hayes公司发明的,AT指令集主要使得计算机或终端可以与Modem进行通讯。通过发送AT指令来控制移动台的功能,与GSM网络业务进行交互。用户可以通过AT指令进行呼叫、短信、电话本、数据业务、传真等方面的控制。
”Hard” 模式(针对新的三星手机和固件版本)
而在近期的固件版本(例如最新版本的三星S4和三星S6)中来利用此漏洞相比之下是没那么简单的,因为最近期的固件版本中,其默认配置是,当设备连接到主机,开放給主机的只有MTP接口功能,主要用于文件传输。
但经过测试,我们发现,攻击者仍然可以通过将默认配置切换到第二USB配置,来实现与Modem通讯。因此,假设在这种情况下,攻击者在连接到Modem之前,就需要将默认配置切换到USB 配置 #2 。而这个操作可以通过PC终端来实现,而无需解锁手机设备。以下为默认配置的信息,
$ lsusb -v
...
Bus Device : ID 04e8: Samsung Electronics Co., Ltd Galaxy (MTP)
Device Descriptor:
bLength
bDescriptorType
bcdUSB 2.00
bDeviceClass (Defined at Interface level)
bDeviceSubClass
bDeviceProtocol
bMaxPacketSize0
idVendor 0x04e8 Samsung Electronics Co., Ltd
idProduct 0x6860 Galaxy (MTP)
...
bNumConfigurations
Configuration Descriptor:
...
Interface Descriptor:
bLength
bDescriptorType
bInterfaceNumber
bAlternateSetting
bNumEndpoints
bInterfaceClass Imaging
bInterfaceSubClass Still Image Capture
bInterfaceProtocol Picture Transfer Protocol (PIMA )
iInterface MTP
...
Configuration Descriptor:
bLength
bDescriptorType
wTotalLength
bNumInterfaces
bConfigurationValue
iConfiguration
bmAttributes 0xc0
Self Powered
MaxPower 96mA
...
Interface Descriptor:
bLength
bDescriptorType
bInterfaceNumber
bAlternateSetting
bNumEndpoints
bInterfaceClass Communications
bInterfaceSubClass Abstract (modem)
bInterfaceProtocol AT-commands (v.25ter)
iInterface CDC Abstract Control Model (ACM)
...
在此次PoC中,我们开发了一个简单工具(用C语言编写的),名为usbswitcher。通过该工具,我们可将指定的三星手机设备切换到USB 配置 #2。该工具使用了 libusb 库来实现上述功能。而同样的任务,我们也可以通过使用/sys/bus/usb虚拟文件系统来完成。
我们使用的强制手机切换配置的流程为首先重置 USB设备(通过usb_reset()函数来实现),接着切换配置(通过set_configuration()函数来实现)。而有时候,工具usbswitcher的第一次执行可能不会生效,所以需最好运行两次,确保配置已被切换过来。工具usbswitcher源代码链接地址为:usbswitcher.c
测试结果
我们知道,访问Modem最明显的后果是使拨打电话和发送短信称为了可能。对于前者,即呼出电话,可以通过使用以下命令来实现:
ATD+;
该命令实现的效果主要是在锁屏状态下拨打电话号码123456。如以下PoC视频中介绍的一样。
演示视频
对于有些朋友在询问到,是否可以利用该漏洞来获取访问设备的权限,比如访问其通讯录、照片以及内部存储等?对于这个问题,理论上AT命令是可以被基带处理器直接进行处理的,但如我们之前提到的,AT命令在传递的过程中,可能有些AT指令会被用户空间应用解析,所以这种情况下,基带处理器无法处理指令,所以也无法直接实现上述所说的访问权限。
在这个测试中,我们观察到,S4 mini (固件版本序号为 I9192XXUBNB1) 可以支持某些AT指令,这些指令可以用来控制Android系统的设置。比如,在这其中,AT+USBDEBUG指令允许启用USB 调试功能,AT+WIFIVALUE指令可启用或关闭设备Wi-Fi等等。
在近期的手机固件版本,三星可能意识到了这种命令的相关风险,其开始引入一种基于黑名单的过滤机制(由ddexe二进制应用程序来执行),来过滤掉有威胁的命令。举个例子,在测试过程中传递AT+ UsbDebug指令时,我们可以看到以下信息为被记录到Galaxy S6设备的系统日志中,
D/DataRouter( ): write [] bytes of data to USB fd[]
D/DataRouter( ): After the usb select
D/DataRouter( ): read usb data[len:]
D/DataRouter( ): read usb data message:AT+USBDEBUG
D/DataRouter( ): Not allowed AT cmd!!#不允许执行AT指令
D/DataRouter( ): Before the usb select
影响范围
目前,就已经测试过且发现可进行前文所述操作的设备类型包含如下:
SM-G920F, 版本序号:G920FXXU2COH2 (Galaxy S6) SM-N9005, 版本序号:N9005XXUGBOK6 (Galaxy Note ) GT-I9192, 版本序号:9192XXUBNB1 (Galaxy S4 mini) GT-I9195, 版本序号:I9195XXUCOL1 (Galaxy S4 mini LTE) GT-I9505, 版本序号:I9505XXUHOJ2 (Galaxy S4)