组件安全

(1) 如果四大组件包含 intent-filter,那么系统认为这个组件可以被外部通过隐式调用,所以默认 export 为 true

(2) 如果四大组件不包含 intent-filter,那么系统认为这个组件值只可以被内部通过显式调用,所以默认 export 为 false

Activity

权限

Android 所有组件声明时可以通过指定 android:exported 属性值为 false,来设置组件不能被外部程序调用

如果希望 Activity 能够被特定的程序访问,可以使用 android:permission 属性来指定一个权限字符串,如:

                         

Broadcast

假如使用 sendBroadcast() 发送广播,攻击者可以优先响应该实例发送的广播;假如使用 sendOrderedBroadcast() 发送,攻击者可以使用 abortBroadcast() 终止广播,BroadcastReceiver 实例可能永远无法收到自己发送的广播。

关于优先级:动态注册的广播接收者比静态广播接收者的优先级高,静态广播接收者的优先级根据设置的 android:priority 属性的数值来决定,数值越大,优先级越高。

Service

同 Activity,设置权限防止被其它 app 启动/绑定/停止服务

Content Provider

权限

API Level 低于 17 时,Content Provider 默认为公开

SQL 注入

传递给 Content Provider 的参数应该被视为不可信的

目录遍历

Android Content Provider 存在文件目录遍历安全漏洞,该漏洞源于对外暴露 Content Provider 组件的应用,没有对 Content Provider 组件的访问进行权限控制和对访问的目标文件的 Content Query Uri 进行有效判断,攻击者利用该应用暴露的 Content Provider 的 openFile() 接口进行文件目录遍历以达到访问任意可读文件的目的

参考链接:

http://blog.csdn.net/u013309870/article/details/69228125

http://blog.csdn.net/jltxgcy/article/details/48312359

https://jaq.alibaba.com/blog.htm?id=61


Webview 远程代码执行

CVE-2012-6636

Android API level 16 以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用 WebView.addJavascriptInterface 方法,远程攻击者可通过使用Java Reflection API 利用该漏洞执行任意 Java 对象的方法

影响范围

系统版本低于 4.2 / API Level < 17

利用条件

  1. 使用 addJavascriptInterface 方法注册可供 JavaScript 调用的 Java 对象

  2. 使用 WebView 加载外部网页或者本地网页

  3. 系统版本低于 4.2

POC

利用 addJavascriptInterface 方法注册可供JavaScript调用的 java 对象 “injectedObj”,利用反射机制调用 Android API sendTextMessage 来发送短信

Java 代码:

mWebView = new WebView(this);mWebView.getSettings().setJavaScriptEnabled(true);mWebView.addJavascriptInterface(this, "injectedObj");mWebView.loadUrl("file:///android_asset/www/index.html");

JS 代码

CVE-2014-1939

Android 系统中 webkit 中默认内置的一个 searchBoxJavaBridge_ 接口同时存在远程代码执行漏洞

影响范围

Android 4.0~4.3

利用条件

  1. webkit 内核
  2. Android 4.0~4.3

POC

参考链接

https://jaq.alibaba.com/blog.htm?id=48


SecureRandom 漏洞

SecureRandom 随机性是通过它的 seed 来保证的。如果输入相同的 seed 会导致生成重复的随机数。SecureRandom 内部维护一个 internal random state,它生成随机数的方式具有确定性

漏洞位置

  1. SecureRandom#SecureRandom(byte[] seed)
  2. SecureRandom#setSeed(long seed)
  3. SecureRandom#setSeed(byte[] seed)

触发条件

  1. 调用 SecureRandom 类的构造函数 SecureRandom(byte[] seed)

    或者在生成随机数之前调用 setSeed(long seed)

    或者 setSeed(byte[] seed) 方法设置随机种子

  2. 系统版本低于 4.2

参考链接

https://jaq.alibaba.com/blog.htm?id=47


AllowBackup

在谷歌 2010 年发布 Android 2.2 Froyo (冻酸奶)系统中,谷歌引入一个了系统备份的功能,允许用户备份系统应用和第三方应用的 apk 安装包和应用数据,以便在刷机或者数据丢失后恢复应用。 第三方应用开发者需要在应用的 AndroidManifest.xml 文件中配置 allowBackup 标志(默认为 true )来设置应用数据是否能能够被备份或恢复。当这个标志被设置为 true 时应用程序数据可以在手机未获取 ROOT 的情况下通过 adb 调试工具来备份和恢复,这就允许恶意攻击者在接触用户手机的情况下在短时间内启动手机 USB 调试功能来窃取那些能够受到 AllowBackup 漏洞影响的应用的数据,造成用户隐私泄露甚至财产损失。

参考链接

http://www.droidsec.cn/%E8%AF%A6%E8%A7%A3android-app-allowbackup%E9%85%8D%E7%BD%AE%E5%B8%A6%E6%9D%A5%E7%9A%84%E9%A3%8E%E9%99%A9/

WebView File 域同源策略绕过

通过 WebView 对 Javascript 的延时执行和将当前 Html 文件删除掉并软连接指向其他文件就可以读取到被符号链接所指的文件,然后通过 JavaScript 再次读取 HTML 文件,即可获取到被符号链接所指的文件。

利用条件

  1. 组件可导出
  2. WebView 没有禁止使用 file 域
  3. WebView 打开了对 JavaScript 的支持

参考链接

https://jaq.alibaba.com/blog.htm?id=62


Android HTTPS 中间人劫持

由于客户端没有校验服务端的证书,因此攻击者就能与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容

漏洞位置

X509TrustManager 、HostnameVerifier 、 setHostnameVerifier (X509HostnameVerifier hostnameVerifier)

触发条件

自定义的 X509TrustManager 不校验证书
或实现的自定义 HostnameVerifier 不校验域名接受任意域名
或使用 setHostnameVerifier (ALLOW_ALL_HOSTNAME_VERIFIER)

参考链接

https://jaq.alibaba.com/blog.htm?id=60


Android 应用本地拒绝服务漏洞

Android应用本地拒绝服务漏洞源于程序没有对 Intent.getXXXExtra() 获取的异常或者畸形数据处理时没有进行异常捕获,从而导致攻击者可通过向受害者应用发送此类空数据、异常或者畸形数据来达到使该应用 crash 的目的,简单的说就是攻击者通过 intent 发送空数据、异常或畸形数据给受害者应用,导致其崩溃。

触发条件

  1. 组件可导出
  2. getIntent() 的 intent 附带空数据、异常或畸形数据
  3. 处理 getXXXExtra() 获取的数据时没有进行异常捕获

参考链接

https://jaq.alibaba.com/blog.htm?id=55


URL Schema 安全

Android 中可以通过点击网页内的某个链接打开 APP,或者在其它 APP 中通过点击某个链接打开另外一个 APP

Custom Scheme URI 打开APP

APP 获取到来自网页的数据后,生成一个新的 intent,然后发送给别的组件使用这些数据。比如使用 Webview 相关的 Activity 来加载一个来自网页的 url,如果此 url 来自url scheme 中的参数,如:jaq://jaq.alibaba.com?load_url=http://www.taobao.com

如果在 APP 中没有检查获取到的 load_url 的值,攻击者就可以构造钓鱼网站,诱导用户点击

Intent-based URI 打开 APP

语法:

intent:HOST/URI_path // Optioinal host#Intent;package=[string];action=[string];componet=[string];scheme=[string];end

如果未配置 intent 过滤策略,则可将 payload 作为任意的参数放入 intent 中

利用 Intent Selector

Intent Selector 机制提供一种 main intent 不匹配的情况下可以设置替补的方案

如:

intent:#Intent;S.xxx=123; SEL;component=com.android.chrome/.xyz;end

其中的 SEL 关键字就是设置了一个 component 为 com.android.chrome/.xyz 的 selector intent

参考链接:

https://jaq.alibaba.com/community/art/show?articleid=265

http://blog.csdn.net/l173864930/article/details/36951805?spm=a313e.7916648.0.0.11b0b6cXNqLdb


Shared Preferences 安全

  1. 使用 MODE_WORLD_READABLE 模式创建 Shared Preferences 文件,使得其他应用对该 Shared Preferences 文件具备可读的权限
  2. 使用 MODE_WORLD_WRITEABLE 模式创建 Shared Preferences 文件并含有 “android:sharedUserId” 属性值,使得其他应用对该应用的 Shared Preferences 文件具备可写的权限
  3. 在具备 root 权限的程序或用户对任何应用程序通过任意模式创建的的 Shared Preferences 文件都具有可读可写的权限


UXSS 漏洞

Android 4.4 前 webkit 存在

参考链接

https://security.tencent.com/index.php/blog/msg/70


可重打包风险

逻辑漏洞

敏感信息硬编码

数据传输安全

代码篡改

更多相关文章

  1. 安卓系统的启动流程
  2. android 在线预览pdf文件(目前最全)
  3. Android7.0适配教程与心得
  4. Android(安卓)持续集成实践(二)——配置 Docker + gitlab-runner
  5. Android(安卓)项目中文件夹作用(res文件夹详细介绍)
  6. Android工程编译时报 Error running app: Default Activity not
  7. Ogre3d 之使用 Android(安卓)NativeActivity
  8. ShareSDK for Android(安卓)只有新浪微博分享
  9. 学习android随手记 之 android:name android:id

随机推荐

  1. android PathData生成问题
  2. Android Studio报错:Could not GET 'https
  3. Android Studio(十):添加assets目录
  4. Android 复习资料
  5. Android(安卓)GPS 定位的实现
  6. Android界面编程之实现改变图片透明度并
  7. 【android】Intent 和 Intent Filter
  8. Android 异步加载深入解析
  9. Android 下拉刷新控件SwipeRefreshLayout
  10. 配置adb环境变量及查看sharepreference