Android平台的SQL注入漏洞浅析(一条短信控制你的手机)

时间:2021-05-25

0x0前言

14年11月笔者在百度xteam博客中看到其公开了此前报告给Google的CVE-2014-8507漏洞细节——系统代码在处理经由短信承载的WAP推送内容时产生的经典SQL注入漏洞,影响Android 5.0以下的系统。于是对这个漏洞产生了兴趣,想深入分析看看该漏洞的危害,以及是否能够通过一条短信来制作攻击PoC。

在断断续续的研究过程中,笔者发现了SQLite的一些安全特性演变和短信漏洞利用细节,本着技术探讨和共同进步的原则,结合以前掌握的SQLite安全知识一同整理分享出来,同各位安全专家一起探讨Android平台中SQLite的安全性,如有错误之处,也请大家斧正。

0x1起:食之无味,弃之可惜

鼎鼎大名的SQL注入漏洞在服务器上的杀伤力不用多说,可惜虎落平阳被犬欺,SQL注入漏洞在Android平台长期处于比较鸡肋的状态。比较典型的漏洞例子可以参考:http:///4.4.4_r1/xref/frameworks/opt/telephony/src/java/com/android/internal/telephony/RIL.java)在每次发送短信前都会被系统调用,其中的第二个参数我们可以得到完整的原始PDU,通过对PDU内容进行一些修改,我们可以把普通的短信变成WAP推送消息。在此位置进行改动,随后PDU在替换后向底层传之后,也能成功的被基带解析并发送,接收方也能成功的接受并处理。


图6 Android vendor RIL中的短信发送函数

普通短信的PDU中,包含了信息中心的号码,发送方的号码,接收方的号码,时间戳以及短信内容文本(如下图7)。而WAP推送和普通短信的最重要区别,就是WAP推送承载的是WBXML格式的多媒体消息而不是普通文本,通过修改PDU中的类型标志位并附加上WBXML格式的内容,一条合法的WAP推送消息就能成功的从手机中发出。


图7 典型的短信PDU格式

为了方便测试和演示,笔者写了一个转换WAP推送的Xposed模块(如下图)。激活后,通过短信APP中发送给任何人的普通短信都会自动转换成包含CVE-2014-8507 SQL注入漏洞的WAP推送,自动打开对方手机的设置界面。关键的PDU处理代码请点击这里下载,请勿用于任何非测试用途。


图8 转换普通短信为WAP推送的Xposed模块代码

0x5后记:如何使APP的数据库使用更安全

从2014年腾讯整体漏洞的数据来看,跟数据库安全相关的全部都跟SQL注入漏洞有关。因此,能够封堵SQL注入漏洞,基本上就能安全的使用数据库了。下面结合历史漏洞给出以下几点安全建议供大家参考(如果是腾讯的同学就方便多了,我们终端安全团队为业务定制了数据库安全组件):

1.不直接使用原始SQL语句,而是使用具备预编译参数能力的SQL API;

2.如果一定要使用原始SQL语句,语句中不应有进行任何字符串拼接的操作;

3.如非必要,记得主动调用SQL API关闭动态加载扩展的能力;

4.使用数据加密(如SqlCipher)扩展SQLite数据存储的安全性。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章