Android渠道的SQL注入缝隙浅析(一条短信操控你的手机)威尼斯人 - 威尼斯人

Android渠道的SQL注入缝隙浅析(一条短信操控你的手机)威尼斯人

2019年02月16日10时47分25秒 | 作者: 梦秋 | 标签: 缝隙,短信,手机 | 浏览: 11957

0x0前语

      14年11月笔者在百度xteam博客中看到其公开了此前报告给Google的CVE-2014-8507缝隙细节——体系代码在处理经由短信承载的WAP推送内容时发生的经典SQL注入缝隙,影响Android 5.0以下的体系。所以对这个缝隙发生了爱好,想深入分析看看该缝隙的损害,以及是否可以经过一条短信来制造进犯PoC。

      在时断时续的研讨过程中,笔者发现了SQLite的一些安全特性演化和短信缝隙运用细节,本着技能讨论和共同进步的准则,结合曾经把握的SQLite安全常识一同收拾共享出来,同各位安全专家一同讨论Android渠道中SQLite的安全性,如有过错之处,也请咱们指正。

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

      鼎鼎大名的SQL注入缝隙在服务器上的杀伤力不必多说,惋惜虎落平阳被犬欺,SQL注入缝隙在Android渠道长时刻处于比较鸡肋的状况。比较典型的缝隙比如可以参阅:http://www.wooyun.org/bugs/wooyun-2014-086899。

      尽管Android渠道很多运用SQLite存储数据导致SQL注入很常见,而SQL注入的发现也相对简略,但其损害非常有限:在无其他缝隙辅佐的情况下,需要在受害者的手机上先装置一个歹意APP,经过这个歹意载体才或许盗取有SQL注入缝隙的APP的隐私数据(如图1)。很多人会说,都可以装置歹意APP了,可以运用的缝隙多了,还要你SQL注入干嘛。正是因为这个原因,导致SQL注入缝隙一向不被咱们所重视。


图1 经过SQL注入缝隙获取某APP的灵敏信息0x2承:长途进犯的大杀器

14年TSRC渠道的白帽子雪人提出了一种存在已久,在Android渠道却鲜未被提起的SQL注入运用方法:load_extension。经过一些简略缝隙的合作,SQL注入缝隙可以到达长途代码履行的可怕威力。

     简略来说,为了便当开发者可以很简便的扩展功用,SQLite从3.3.6版别(http://www.sqlite.org/cgi/src/artifact/71405a8f9fedc0c2)开端供给了支撑扩展的才能,经过sqlite_load_extension API(或许load_extensionSQL句子),开发者可以在不改动SQLite源码的情况下,经过动态加载的库(so/dll/dylib)来扩展SQLite的才能。


图2 SQLite从3.3.6版别开端支撑动态加载扩展

       便当的功用总是最早被黑客运用来施行进犯。凭借SQLite动态加载的这个特性,咱们仅需要在可以猜测的存储途径中预先放置一个掩盖SQLite扩展规范的动态库(Android渠道的so库),然后经过SQL注入缝隙调用load_extension,就可以很轻松的激活这个库中的代码,直接形成了长途代码履行缝隙。而在Android渠道中有缝隙运用经历的同学应该都很清楚,想要把一个歹意文件下载到手机存储中,有许多实践可操作的方法,例如收到的图片、音频或许视频,网页的图片缓存等。相似的事例笔者也见到过,如下图长途运用SQL注入load_extension在某APP中履行了歹意的SQLite扩展。


图3 Android  APP中SQL注入导致的长途代码履行

0x3转:攻与防的对立统一

       也许是SQLite官方也认识到了load_extension API的才能过于强壮,在放出load_extension功用后仅20天,就在代码中(http://www.sqlite.org/cgi/src/info/4692319ccf28b0eb)将load_extension的功用设置为默许封闭,需要在代码中经过sqlite3_enable_load_extensionAPI显式翻开后方可运用,而此API无法在SQL句子中调用,断绝了运用SQL注入翻开的或许性。


图4 SQLite默许封闭了load_extension才能

        恰巧的是,出于功用和优化的原因,Google从 Android 4.1.2开端经过预编译宏SQLITE_OMIT_LOAD_EXTENSION,从代码上直接移除了SQLite动态加载扩展的才能(如图4)。


图5 Google在Android 4.1中禁用了load_extension

       尽管有了以上两层安全加固,但Android渠道的安全问题往往不是这么简单就可以处理的。和Android渠道形形色色的机型和体系版别相同,部分手机生厂商和第三方数据库组件并未跟从官方代码来封闭本身代码中SQLite动态加载扩展的才能,默许便可以直接运用SQL注入load_extension,导致这些手机或许APP极易被长途进犯。

       总结来说,运用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数据存储的安全性。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表威尼斯人立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章