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


当前第2页 返回上一页

       总结来说,利用SQLite的load_extension远程实施攻击,适用于4.1.2以前的官方Android版本,或者是部分手机厂商的机器,又或者是使用到某些第三方数据库组件的APP。客观来看,这种攻击手法的攻击面并不算宽,并会随着高版本Android的普及和手机厂商的代码跟进而越来越窄。

       那么除了最直接最暴力的load_extension攻击方式之外,SQL注入是不是又变得一无是处了?在魔术师一般的安全人员手里,不管多么不起眼的攻击方式都可能被用到极致。百度xteam的CVE-2014-8507就是一个很好的例子。

0x4合:一条短信就控制你的手机

        接下来,我们回到最开始的问题,如何通过一条短信来控制手机?

        事实上在看到CVE-2014-8507后,笔者花费了大量时间尝试在标准Android机器中,通过彩信发送恶意so库,随后通过短信激活恶意so库的方式,来实现控制手机。最终由于SQLite自身的sqlite3_enable_load_extension保护和系统代码其他若干个方面的限制,成功在smspush进程完成SQL注入后,却没有办法进一步利用恶意so库,无法完成正在意义上的控制手机。

       另外一方面,百度xteam对CVE-2014-8507的利用已经很精彩,结合WAP推送处理代码的特点利用SQL注入提供数据,完成了打开通过短信任意APP的导出Activity的攻击,结合上其他的系统或者APP漏洞,不难达到真正意义上控制手机的效果。

       作为狗尾续貂的补充,接下来和大家探讨一下如何在真实手机中通过自行构造PDU给任何Android 5.0以下机器发送含有SQL注入代码的WAP推送消息。

       承载攻击的是WAP推送功能,而正常的短信APP无法通过短信发出WAP推送,通过短信群发等其他运营商提供的短信接口,也无法发出WAP推送消息。笔者通过一段时间对短信PDU格式的研究后发现,在Android vendor RIL之上进行一些修改,普通的手机也能够发出WAP推送消息。下图6的sendSMS函数(http://androidxref.com/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数据存储的安全性。


标签:SQLite

返回前面的内容

相关阅读 >>

android如何获取qq与微信的聊天记录并保存到数据库详解

python3 Sqlite3限制条件查询的操作

android开发笔记之 数据存储方式详解

python 数据库操作 sqlalchemy的示例代码

Sqlite教程(十):内存数据库和临时数据库

springboot连接sqllite遇到的坑及解决

android 数据存储方式有哪几种

python操作Sqlite数据库的方法详解

python实现e-mail收集插件实例教程

node.js中实现同步操作的3种实现方法

更多相关阅读请进入《Sqlite》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...