短信拒绝服务漏洞

来源:互联网 发布:windows tts 语音库 编辑:程序博客网 时间:2024/04/30 10:39

趋势科技日前再次发现两个有关Android系统自带短信应用的漏洞,第一个漏洞(CVE-2015-3839)可能允许攻击者插入恶意消息到系统短信箱中导致其崩溃,造成用户无法发送和接收短信,第二个漏洞(CVE-2015-3840)可以伪造短信的发送和接收状态,可能导致用户重复发送短信增加话费。不同于之前的Android Stagefright和Mediaserver组件漏洞,新漏洞瞄准的是Android系统的短信应用。这两个漏洞影响Android系统所有版本,包获最新Android5.1.1(仅影响Android原生系统的短信应用,不包获第三方短信应用)。目前谷歌表示已经正在修复这两个漏洞,同时给出的漏洞评级均为低危。

漏洞一 CVE-2015-3839

此漏洞需要诱导用户安装一个无需任何权限的恶意应用,可导致短信应用拒绝服务(不停崩溃),但不影响整个系统,最终可使用户无法发送和接收短信。这个漏洞来源于设备更新短信状态时的一个空指针异常(NPE)。安卓设备在发送了文字消息之后,会使用”updateMessageStatus”函数来更新SMS-STATUS-REPORT PDU(协议数据单元)格式的短信状态。然而,这个函数的部分代码并没有对操作异常进行恰当的处理,这就导致黑客可以通过不正当的操作去引起短信程序的崩溃。

图片1:函数中没有正确处理异常的代码

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

图片2: 返回一个新”SmsMessage”对象的”createfromPDU”函数

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

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

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

1
2
    //Malicious PDU in bytes
    {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版本的设备中进行操作。

针对安卓4..4.4设备的CVE-2015-3839漏洞攻击概念验证演示视频:

针对安卓5.1.1设备的CVE-2015-3839漏洞攻击概念验证演示视频:

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

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

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

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

1
 <receiver android:name=”.transaction.MessageStatusReceiver”>            <intent-filter>                <action android:name=”com.android.mms.transaction.MessageStatusReceiver.MESSAGE_STATUS_RECEIVED” />            </intent-filter>        </receiver

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

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

  •  注入恶意PDU,并将短信状态标记为“已接收”
    1
    2
    // malicious PDU in bytes
        {00, 02, 00, 02, D0, 65, 61, 60, 80, 90, 25, 12, 23, 61, 60, 80, 01, 25, 12, 23, 00}
  •  注入恶意PDU,并将短信状态标记为“发送失败”
1
2
 // malicious PDU in bytes
    {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版本的设备中进行操作。

针对安卓4..4.4设备的CVE-2015-3840漏洞攻击概念验证演示视频:

针对安卓5.1.1设备的CVE-2015-3840漏洞攻击概念验证演示视频:

相关建议

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

趋势科技能够检测这种类型的攻击,并可以通过相应的保护措施来保护用户的安全。除此之外,趋势科技的移动安全产品可以检测针对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日:谷歌公司采用了修复补丁,并将其推送给用户。

本文前面部分内容为本站翻译,后面发现已有媒体翻译,所以基本参考:http://bobao.360.cn/news/detail/1913.html

0 0