浅谈Android App漏洞

2021-05-17 10:22:40 6829

图1是对某应用市场的Android App产品中近50款应用定期监控的漏洞统计数据分布。


1.jpg

图1  某应用市场近50款应用漏洞统计数据


一、 敏感信息泄露

敏感信息可分为产品敏感信息和用户敏感信息两类。

泄露后直接对企业安全造成重大损失或有助于帮助攻击者获取企业内部信息,并可能帮助攻击者尝试更多的攻击路径的信息,如登录密码、后台登录及数据库地址、服务器部署的绝对路径、内部IP、地址分配规则、网络拓扑、页面注释信息(开发者姓名或工号、程序源代码)。

用户隐私保护主要考虑直接通过该数据或结合该数据与其他的信息,可以识别出自然人的信息。一旦发生数据泄露事件,可以被恶意人员利用并获取不当利润。

用户敏感信息是例如在App的开发过程中,为了方便调试,通常会使用log函数输出一些关键流程的信息,这些信息中通常会包含敏感内容,如执行流程、明文的用户名密码等,这会让攻击者更加容易地了解App内部结构方便破解和攻击,甚至直接获取到有价值的敏感信息。

所以要在产品的线上版本中关闭调试接口,禁止输出敏感信息。

二、Content Provider的SQL注入

在使用Content Provider时,将组件导出,提供了Query接口。由于Query接口传入的参数直接或间接由接口调用者传入,攻击者构造SQL注入语句,造成信息的泄露甚至是应用私有数据的恶意改写和删除。

解决方案如下。

1.Provider不需要导出,请将export属性设置为False。

2.若导出仅为内部通信使用,则设置protectionLevel=Signature。

3.不直接使用传入的查询语句用于 projection和selection,使用由 Query 绑定的参数selectionArgs。

4.完备的SQL注入语句检测逻辑。

三、 利用可调试的App

说到任意调试漏洞,就要提到AndroidManifest.xml,它是每个Android程序中必需的文件。它位于整个项目的根目录,描述了package中暴露的组件(Activities、Services等)、它们各自的实现类、各种能被处理的数据和启动位置。除了能声明程序中的 Activities、ContentProviders、Services和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)。

而在AndroidManifest.xml文件中,debuggable属性值被设置为True时(默认为false),该程序可被任意调试,这就产生了任意调试漏洞。

可被动态调试,增加了APK被破解、分析的风险。

目前动态调试器的功能都很强大,如果debuggable属性为True,则可轻易被调试,通常用于重要代码逻辑分析、破解付费功能等。

图2是IDA的调试界面,可以下断点、单步执行,调试过程中可以看到变量内容,即使没有Java代码,反编译后的Smali代码也比较容易阅读,加上动态调试,对App的逆向分析将变得很容易。


2.jpg

图2  IDA调试界面


四、中间人攻击

HTTPS 中间人攻击漏洞的来源有:没有对 SSL 证书进行校验、没有对域名进行校验、证书颁发机构(Certification Authority)被攻击导致私钥泄露等。

实现的X509TrustManager接口的Java代码片段如下。其中的checkServerTrusted()方法实现为空,即不检查服务器是否可信。


image.png


五、动态注册广播组件暴露风险

Android可以在配置文件中声明一个Receiver或动态注册一个Receiver来接收广播信息,攻击者假冒App构造广播发送给被攻击的Receiver,是被攻击的App执行某些敏感行为或返回敏感信息等,如果Receiver接收到有害的数据或命令时,可能泄露数据或做一些不当的操作,会造成用户的信息泄露甚至财产损失。

六、WebView密码明文保存漏洞

在使用WebView的过程中忽略了WebView setSavePassword,当用户选择保存在WebView中输入的用户名和密码,则会被明文保存到应用数据目录的databases/webview.db中。如果手机被Root就可以获取明文保存的密码,造成用户的个人敏感数据泄露。

七、加密算法漏洞

以下几种行为会有产生加密算法漏洞的危险。

(1)使用 AES/DES/DESede 加密算法时,如果使用ECB 模式,容易受到攻击风险,造成信息泄露。

(2)代码中生成秘钥时使用明文硬编码,易被轻易破解。

(3)使用不安全的散列算法(MD5/SHA-1)加密信息,易被破解。

(4)生成的随机数具有确定性,存在被破解的风险。











提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: