Android app漏洞挖掘初探(1)-android权限机制和默认场景配置

来源:互联网 发布:java培训讲师工资 编辑:程序博客网 时间:2024/06/05 15:28

开始学习。

一 android权限机制

在android系统的安全模型中,应用程序在默认的情况下不可以执行任何对其他应用程序,系统或者用户带来负面影响的操作。如果应用需要执行某些操作,就需要声明使用这个操作对应的权限。(在manifest文件中添加< uses-permission >标记)。
android 系统提供了一系列这样的权限,具体可以查看android 权限。当然,app也可以自定义属于自己的permission 或属于开发者使用的同一个签名的permission。定义一个permission 就是在menifest文件中添加一个permission标签。如果权限控制不当,那么就会导致各种越权等安全问题的发生。

使用权限 添加uses-permission

<usespermission android: name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="23"/>

为了保证application的正常运行,需要系统授予app的权限声明。这个权限是在用户安装应用的时候授予的。6.0后运行时进行权限处理。

android:name的值可以是其他app通过<permission>声明的(用于两个应用之间的交互),也可以是系统的权限名称,例如读取联系人权限、打开摄像头权限等。android:maxSdkVersion用来标注该权限所支持的最大api版本号,如果当从某个特定版本时,不需要该权限时就可以加上该限制。

自定义权限 Permission

<permission android:description="string resource"android:icon="drawable resource'android:label="string resource"android:name="string"android:permissionGroup="string'android:protectionLevel= ["normal"|"dangerous"|"signature"|"signatureOrSystem"] />
android:description:对权限的描述,一般是两句话,第一句话描述这个权限所针对的操作,第二句话告诉用户授予app这个权限会带来的后果。android:label: 对权限的一个简短描述。android:permissionGroup: 权限所属权限组的名称。android:protectionLevel: 权限的等级。

Normal, 表示权限是低风险的,不会对系统、用户或其他应用程序造成危害。
Dangerous, 表示权限是高风险的,系统将可能要求用户输入相关信息,才会授予此权限;
Signature, 表示只有当应用程序所用数字签名与声明引权限的应用程序所用数字签名相同时,才能将权限授给它;
signatureOrSystem,与signature类似,只是增加了rom中自带的app的声明,是指系统image中APP和具有相同签名
的APP可以访问和共享此App,谷歌建议不要使用这个选项,因为签名就足够了。

对于普通和危险级别的权限,我们称之为低级权限,应用申请即授予。其他两级权限,我们称之为高级权限或系统权限。当应用试图在没有权限的情况下做受限操作,应用将被系统杀掉以警示。系统应用可以使用任何权限。权限的声明者可无条件使用该权限。
相关漏洞:权限泄漏漏洞。

二 默认设置漏洞

AndroidManifest.xmI配置文件中默认设置相关问题

1. allowBackup默认设置风险

Android 2.1以上的系统可为APP 提供应用程序数据的备份和恢复功能,该AndroidMainfest.xml。文件中的allowBackup 属性值控制,其默认值为true。当该属性没有显式设置为false 时,攻击者可通
adb backupadb restore 对APP 的应用数据进行备份和恢复,从而可能获取明文存储的用户敏感信息,如用户的密码、证件号、手机号、交易密码、身份令牌、服务器通信记录等。利用此类信息攻击者可伪造用户身份,盗取用户账户资产,或者直接对服务器发起攻击。
android:allowBackup如果不显示设置,默认值为true。应显示设为false;

android:restoreAnyVersion设置这个属性表示应用程序准备尝试恢复任何备份的数据集,即使备份比设备上当前安装的应用程序
的版本要新。这个属性设置为true,即使是在版本不匹配而产生数据兼容性提示的时候,也会允许备份管理来恢复备份的数据,所以要谨慎使用。这个属性的默认值是false。

2. Debuggable默认设置风险

这个属性用于指定应用程序是否能够被调试,即使是以用户模式运行在设备上的时候。如果设置为true,则能够被调试,否则不能调试,默认值是false。
客户端软件AndroidManifest.xml 中的调试标记如果开启,可被Java 调试工具例如jdb 进行调试,获取和篡改用户敏感信息,甚至分析并且修改代码实现的业务逻辑,例如窃取用户密码,绕过验证码防护等。

3. 组件默认导出风险
请参考app漏洞挖掘初探(0)

WebView的默认设置问题

在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者简单的展示一些在线内容等。WebView功能强大,应用广泛,一方面它增强了APP的上网体验,让APP功能更多样化,另一方面它也引入了很多的安全问题。在过去几年WebView中被披露的重大漏洞包括了任意代码执行漏洞、跨域、密码明文保存等,这些安全问题可以直接导致用户敏感信息泄露,移动终端被恶意攻击者控制。setAllowFileAccess()setAllowContentAccess()setAllowFileAccessFromFileURLs()setAllowUniversalAccessFromFileURLs()

setSavePassword()

WebView默认开启密码保存功能mWebView.setSavePassword(true),如果该功能未关闭,在用户输入密码时,会弹出提示框,询问用户是否保存密码,如果选择“是”,密码会被明文保到/data/data/com.package.name/databases/webview.db ,如果手机被root之后,获取root权限的APP就可以任意读取私有目录下的文件去获取用户的密码,因此建议用户密码需要加密存储

setAllowFileAccess()

在File域下,能够执行任意的JavaScript代码,
同源策略跨域访问能够对私有目录文件进行访问等。APP对嵌入的WebView**未对file/// 形式的URL做限制**,会导致隐私信息泄露,
针对IM类软件会导致聊天信息、联系人等等重要信息泄露,针对浏览器类软件,则更多的是cookie信息泄露。

JELLY_BEAN( Android 4.1) 以前的版本默认是setAllowFileAccessFromFileURLs(true),允许通过file域url中的Javascript读取其他本地文件,在JELLY_BEAN及以后的版本中默认已被是禁止。但是有个例外,当setAllowUniversalAccessFromFileURLs()的值为true时这个函数设置的值就不起作用了。在JELLY_BEAN以前的版本默认是setAllowUniversalAccessFromFileURLs(true),允许通过file域url中的Javascript访问其他的源,包括其他的本地文件和http,https源的数据。在JELLY_BEAN及以后的版本中默认已被禁止。

原创粉丝点击