深入浅出 App 端安全漏洞之备份功能开启及本地拒绝服务漏洞

上次介绍了有关 App 端敏感信息泄露的问题,那么在 App 端还有哪些安全漏洞值得开发者深思及注意呢?

当一款 App 装在手机 A 上,用户张三登录过该 App ,登录数据被保存在该手机 A 上。执行备份后在另一台手机 B 恢复,恢复完成后,在手机 B 上打开该 App ,则该 App 自动以张三的账号登录了,这样就存在账号被盗用风险。而蒲公英专家测试在以往进行安全测试项目中多次遇到此类漏洞,其中不乏游戏、金融等存有个人账户财产等的 App 。

以上出现的应用漏洞称之为备份功能开启漏洞:

顾名思义,备份功能开启漏洞是指系统备份功能允许用户备份系统应用和第三方应用的 apk 安装包和应用数据,以便在刷机或者数据丢失后恢复应用。 当第三方应用开发者设置该应用数据可被备份或恢复时,则该应用程序数据即可在手机未获取 ROOT 的情况下通过 adb 调试工具来备份和恢复。

如果此漏洞未及时查找修复,极易被攻击甚至造成极大损失。恶意攻击者只要接触用户手机,短时间内即可启动手机 USB 调试功能来窃取那些能够受到 AllowBackup 漏洞影响的应用的数据,造成用户隐私泄露甚至财产损失。

此漏洞曾在某银行 App 项目中被证实存在,通过数据备份,在另一部手机恢复后以原账号即可登录。2015年,国内众多大型互联网公司,如新浪微博、百度云网盘、美团、大众点评、去哪儿网等应用中也均存有该漏洞,可见用户信息安全岌岌可危。

如下图,左为一信息备份数据界面,右为该信息在另一手机恢复打开相同 App 后,直接可登录:

本次介绍的另一漏洞为本地拒绝服务漏洞:

本地拒绝服务漏洞,浅显来讲,就是本地应用中处理交互与通讯的程序不能判断及阻止异常数据的入侵,从而导致应用崩溃或是向用户继续传送异常数据。

Android 系统提供了 Intent 机制来协助应用间的交互与通讯,Intent 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述。Android 系统则根据此 Intent 的描述,负责找到对应的组件,将 Intent 传递给调用的组件,并完成组件的调用。本地拒绝服务漏洞源于程序没有对 Intent.GetXXXExtra() 获取的异常或者畸形数据处理时没有进行异常捕获,从而导致攻击者可通过向受害者应用发送此类空数据、异常或者畸形数据来达到使该应用崩溃的目的,简单的说就是攻击者通过Intent发送空数据、异常或畸形数据给受害者应用,导致其崩溃。

针对序列化对象而出现的拒绝服务主要是由于应用中使用了 getSerializableExtra() 的 API ,而开发者没有对传入的数据做异常判断。

如下为在以往测试中所遇到的代码漏洞:
漏洞应用代码片段一:

所受攻击代码如下:

漏洞应用代码片段二:

所受攻击代码如下:

=

此类漏洞可以导致安全防护等应用的防护功能被绕过或失效(如杀毒应用、安全卫士、防盗锁屏等),而且也可被竞争方应用利用来攻击,使得自己的应用崩溃,造成不同程度的经济利益损失。

以上为本次介绍的两大安全漏洞,对开发者来说,在开发过程中需要持续重视和关注,你放松警惕,则漏洞一直在那,当某天被攻击,大量信息泄露受损,后果不堪设想。