技术解析:锁屏绕过,三星Galaxy系列手机也能“被”呼出电话

近期,由两位安全研究人员,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)
技术解析:锁屏绕过,三星Galaxy系列手机也能“被”呼出电话的更多相关文章
- Android 锁屏软件MemoryDebris测试报告
目 录 项目基本信息 第1章 引言 1.1 编写目的 1.2 项目背景 1.3 参考资料 1.4 术语和缩略语 第2章 ...
- iOS10新特性之CallKit开发详解:锁屏接听和来电识别
国庆节过完了,回家好好休息一天,今天好好分享一下CallKit开发.最近发现好多吃瓜问CallKit的VoIP开发适配,对iOS10的新特性开发和适配也在上个月完成,接下来就分享一下VoIP应用如何使 ...
- 【JavaScript 13—应用总结】:锁屏遮罩
导读:上次说了,当弹出登录框时,由于背景色和弹出框时一样的,这样子,其实比较难聚焦到底该操作哪一块.所以,如果,有了颜色的区分,那么通过屏幕遮罩的效果,就可以将我们希望要被处理的东西突出显示.也就达到 ...
- android黑科技系列——修改锁屏密码和恶意锁机样本原理分析
一.Android中加密算法 上一篇文章已经介绍了Android中系统锁屏密码算法原理,这里在来总结说一下: 第一种:输入密码算法 将输入的明文密码+设备的salt值,然后操作MD5和SHA1之后在转 ...
- 重新想象 Windows 8.1 Store Apps (92) - 其他新特性: CoreDispatcher, 日历, 自定义锁屏系列图片
[源码下载] 重新想象 Windows 8.1 Store Apps (92) - 其他新特性: CoreDispatcher, 日历, 自定义锁屏系列图片 作者:webabcd 介绍重新想象 Win ...
- iOS开发——使用技术OC篇&简单九宫格锁屏功能的实现与封装
简单九宫格锁屏功能的实现与封装 首先来看看最后的实现界面. 在这开始看下面的内容之前希望你能先大概思考活着回顾一下如果 你会怎么做,只要知道大概的思路就可以. 由于iphone5指纹解锁的实现是的这个 ...
- WPF技术触屏上的应用系列(六): 视觉冲击、超炫系统主界面、系统入口效果实现
原文:WPF技术触屏上的应用系列(六): 视觉冲击.超炫系统主界面.系统入口效果实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系统,54寸大屏电脑电视一体 ...
- WPF技术触屏上的应用系列(五): 图片列表异步加载、手指进行缩小、放大、拖动 、惯性滑入滑出等效果
原文:WPF技术触屏上的应用系列(五): 图片列表异步加载.手指进行缩小.放大.拖动 .惯性滑入滑出等效果 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系统, ...
- WPF技术触屏上的应用系列(四): 3D效果图片播放器(图片立体轮放、图片立体轮播、图片倒影立体滚动)效果实现
原文:WPF技术触屏上的应用系列(四): 3D效果图片播放器(图片立体轮放.图片立体轮播.图片倒影立体滚动)效果实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7 ...
随机推荐
- robotframework笔记13
变量 介绍 变量是不可或缺的功能机器人框架,他们可以 在大多数地方用于测试数据. 通常,他们使用 参数测试用例表中的关键字和关键字表,但是 也都设置允许变量的值. 一个正常的字 的名字 不能 指定一个 ...
- Android利用V4包中的SwipeRefreshLayout实现上拉加载
基本原理 上拉加载或者说滚动到底部时自动加载,都是通过判断是否滚动到了ListView或者其他View的底部,然后触发相应的操作,这里我们以 ListView来说明.因此我们需要在监听ListView ...
- 错误 undefined reference to __cxa_guard_acquire/release
用gcc编译 c++ 程序时,出现错误 undefined reference to __cxa_guard_acquire linker error, 但是用icc可以正常编译, 问题出在stati ...
- hdu---(5038)Grade(胡搞)
Grade Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Sub ...
- Java中Array的常用方法
0.创建/声明一个数组 1 2 3 String[] aArray = new String[5]; String[] bArray = {"a","b",&q ...
- Oracle select case when
Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...
- 如何给一个网卡配置多个虚拟ip
1.执行命令 ifconfig etho: 192.168.1.101 netmask 255.255.255.0 up 2.要想永久保存,则将刚刚那行代码写入/etc/rc.local (开机都会 ...
- BroadcastReceiver接收系统广播消息
Android常用的广播Action常量: ACTION_TIME_CHANGED:系统时间被改变. ACTION_DATE_CHANGED:系统日期被改变. ACTION_TIMEZONE_CHAN ...
- Oracle中any和all的区别用法
对于any,all的用法,书中说的比较绕口,难以理解,如果通过举例就会比较清晰. any的例子: select * from t_hq_ryxx where gongz > any (selec ...
- 使用read write 读写socket
一旦,我们建立好了tcp连接之后,我们就可以把得到的fd当作文件描述符来使用. 由此网络程序里最基本的函数就是read和write函数了. 写函数: ssize_t write(int fd, con ...