CVE-2015-3839漏洞能够使短信程序崩溃

研究人员在安卓系统中发现了两个新漏洞,它们可以破坏手机和平板电脑中特定的短信功能。第一个漏洞,即CVE-2015-3839,这个漏洞允许攻击者将恶意信息注入系统的短信应用程序之中,并引起程序崩溃,从而达到阻止用户发送或接收信息的目的。与此同时,第二个漏洞,即CVE-2015-3840,这个漏洞允许攻击者篡改短信或彩信的发送/接收状态,这将导致用户发送多条付费信息。
 

不同于近期被披露出来的”Stagefright”漏洞以及其他针对安卓系统媒体服务器部件的漏洞,这两个新型漏洞针对的是安卓系统的消息传递部件。目前,所有版本的安卓系统都存在这两个漏洞,包括最新版的Android 5.1.1 Lollipop在内。但是,这两个漏洞对Vanilla版本的影响最为严重(安卓Vanilla指的是纯净的,没有定制任何程序的安卓OEM版本,它是由谷歌公司直接发行的原生系统)。这是因为,“纯净”的Vanilla操作系统仍然使用了原生的短信应用程序,而这个程序仍然存在这些漏洞。而那些非Vanilla版本的安卓系统已经进行了升级,并且使用了定制版的短信应用程序,有的用户也使用了第三方的短信程序来代替系统自带的短信app。
 

我们已经将漏洞的信息报告给了谷歌公司,他们已经采用了我们所建议的漏洞补丁,并推送了更新补丁来修复这些漏洞。这两个漏洞的危险系数评级均为“低风险”。我们仍在继续监视各种针对这些漏洞的潜在攻击。
 

CVE-2015-3839漏洞能够使短信程序崩溃。
 

函数中没有正确处理异常的代码
 

相较于之前披露的能够使手机陷入无限重启的安卓漏洞,这个漏洞的破坏性更强。与安卓的媒体服务器漏洞差不多,攻击者可以利用CVE-2015-3839漏洞,并在不需要请求任何权限的情况下诱导用户安装恶意软件。不同的是,这个漏洞只允许攻击者在短信程序上执行拒绝服务(DoS)攻击,而无法对整个设备发动攻击。攻击之后,用户就无法再使用短信程序来发送或接收信息了。
 

这个漏洞来源于设备更新短信状态时的一个空指针异常(NPE)。安卓设备在发送了文字消息之后,会使用”updateMessageStatus”函数来更新SMS-STATUS-REPORT PDU(协议数据单元)格式的短信状态。然而,这个函数的部分代码并没有对操作异常进行恰当的处理,这就导致黑客可以通过不正当的操作去引起短信程序的崩溃。
 

为了实现目的,攻击者需要绕过”updateMessageStatus”函数的空指针检测部分。他们可以使用”createfromPDU”函数(此函数用于解析PDUs数据,并存储消息对象),然后返回一个新的”smsMessage”对象。这个函数并不会对消息对象”wrappedMessage”进行验证,而且总会以3GPP(GSM)和3GPP2(CDMA)形式返回一个新的”smsMessage”对象。
 

返回一个新”SmsMessage”对象的”createfromPDU”函数
 

这样一来,黑客就可以成功地绕过”updateMessageStatus”函数的空指针检测了。然而,如果”wrappedMessage”对象恰好为空,调用”getStatus”函数同样可以引起系统发生“空指针异常”错误。由于进行函数调用操作的”updateMessageStatus”函数并没有对异常进行处理,那么整个短信应用程序将会崩溃并中止运行。
 

空指针异常导致com.android.mms包中发生堆栈崩溃
 

接下来,攻击者只需要注入恶意的协议数据单元(PDUs),然后引起系统发生“空指针异常”错误。我们将恶意的协议数据单元(PDUs)注入了”MessageStatusService”之中,就成功地引起了程序的崩溃。//MaliciousPDUinbytes
 

{00,02,00,02,D0,65,61,60,80,90,25,12,23,61,60,80,01,25,12,23,00,FF};
 

在下面的演示视频中,研究人员会给大家讲解如何在安卓4.4.4以及5.1.1版本的设备中进行操作。
 

CVE-2015-3840漏洞允许攻击者篡改短信或彩信的发送/接收状态,将导致用户发送多条付费信息。
 

攻击者可以利用这个漏洞,在不需要得到”WRITE_SMS”权限许可的情况下修改短信/彩信的状态。攻击者可以对安卓安全模块进行权限提升攻击,然后使用一个未经授权的恶意程序来修改短信/彩信的接收状态和信息数据。
 

这个漏洞来源于一个存在于”MessageStatusReceiver”服务(AndroidManifest.XML文件包含有这个服务)中的漏洞。这个服务会根据SMS-STATUS-REPORT PDU的状态来触发消息状态更新。由于它没有相关的保护措施,所以它可以允许任何未经授权的第三方应用程序发送伪造的广播以及入侵短信/彩信的数据。
 

黑客可以利用这个有漏洞的receiver来更新信息的状态:
 

这样一来,攻击者就可以篡改一条已经成功发送的消息状态,并将其标记为”发送失败”,这很有可能会诱导用户重新发送这条消息。情况还有可能更加糟糕,攻击者可以使用一个恶意程序来监视并修改信息的内容,他们可以还可以让用户向一个收费的服务号码持续不断地发送付费信息,以此来骗取用户的钱财。
 

为了利用这个漏洞,我们注入了下列恶意的PDU,并将其广播给含有漏洞的receiver:
 

注入恶意PDU,并将短信状态标记为“已接收”
 

//maliciousPDUinbytes
 

{00,02,00,02,D0,65,61,60,80,90,25,12,23,61,60,80,01,25,12,23,00}
 

注入恶意PDU,并将短信状态标记为“发送失败”
 

//maliciousPDUinbytes
 

{00,02,00,02,D0,75,71,60,80,70,42,34,56,61,60,80,01,25,14,15,40}
 

在下面的演示视频中,研究人员会给大家讲解如何在安卓4.4.4以及5.1.1版本的设备中进行操作。
 

相关建议:
 

通常来说,安卓设备的更新补丁总是零散发布的,所以在修复补丁推送给终端用户之前,用户们可以考虑更换手机的短信程序。用户们也可以考虑安装相应的手机防护程序来防御这种安全威胁。
 

趋势科技能够检测这种类型的攻击,并可以通过相应的保护措施来保护用户的安全。除此之外,趋势科技的移动安全产品可以检测针对CVE-2015-3839漏洞以及CVE-2015-3840漏洞的恶意软件,例如AndroidOS_MsgDoS.A和AndroidOS_MsgCrack.A。
 

漏洞披露的时间轴
 

6月4日:我们将漏洞的详细信息报告给了谷歌公司。
 

6月7日:谷歌公司确认了相关信息,并为漏洞分配了编号CVE-2015-3839和CVE-2015-3840。
 

7月20日:我们向谷歌公司提供了能够修复漏洞的相关代码。
 

8月7日:谷歌公司采用了修复补丁,并将其推送给用户。
 

网友评论