Android常见安全测试

1. 组件安全检测

漏洞名称 Activity 组件暴露检测
威胁等级 中危
风险描述 Activity 组件的属性 exported 被设置为 true 或是未设置 exported 值 但 IntentFilter 不为空时,activity 被认为是导出的,可通过设置相 应的 Intent 唤起 activity。黑客可能构造恶意数据针对导出 activity 组件实施越权攻击。

参考链接
https://developer.android.com/guide/components/activities.html

漏洞名称 Service 组件暴露检测
威胁等级 中危
检测方法 Service 组件的属性 exported 被设置为 true 或是未设置 exported 值 但 IntentFilter 不为空时,Service 被认为是导出的,可通过设置相 应的 Intent 唤起 Service。黑客可能构造恶意数据针对导出 Service 组件实施越权攻击。

参考链接
https://developer.android.com/guide/components/services.html

漏洞名称 BroadcastReceiver 组件暴露检测
威胁等级 中危
检测方法 BroadcastReceiver 组件的属性 exported 被设置为 true 或是未设置 exported 值但 IntentFilter 不为空时,BroadcastReceiver 被认为是导 出的。导出的广播可以导致数据泄漏或者是越权。

参考链接
https://developer.android.com/guide/topics/manifest/receiver-ele- ment.html

2. APP 漏洞检测

漏洞名称 SSL 通信服务端检测信任 任意证书漏洞检测
威胁等级 高危
漏洞危害 自定义 SSL x509 TrustManager,重写 checkServerTrusted 方法,方法内不 做任何服务端的证书校验。黑客可以使用中间人攻击获取加密内容。

参考链接
https://developer.android.com/reference/javax/net/ssl/X509TrustManag- er.html

漏洞名称 HTTPS 关闭主机名验证漏 洞检测
威胁等级 中危
检测方法 构造 HttpClient 时,设置 HostnameVerifier 时参数使用 ALLOW_ALL_HOSTNAME_VERIFIER 或空的 HostnameVerifier。关闭主机 名校验可以导致黑客使用中间人攻击获取加密内容。

[参考链接](https://developer.android.com/reference/javax/net/ssl/HostnameVerifi- er.html)

漏洞名称 隐式意图调用漏洞检测
威胁等级 中危
检测方法 封装 Intent 时采用隐式设置,只设定 action,未限定具体的接收对象,导 致 Intent 可被其他应用获取并读取其中数据。Intent 隐式调用发送的意图 可能被第三方劫持,可能导致内部隐私数据泄露。

参考链接
[https://developer.android.com/guide/components/intents-filters.html]

漏洞名称 程序数据任意备份漏洞检测
威胁等级 高危
检测方法 安卓 AndroidManifest.xml 文件中 android: allowBackup 为 true。app 数据可 以被备份导出。

参考链接
https://developer.android.com/guide/topics/manifest/application-elemen- t.html#allowbackup

漏洞名称 程序可被任意调试漏洞检测
威胁等级 中危
检测方法 安卓 AndroidManifest.xml 文件中 android:debuggable 为 true。app 可以被 任意调试,攻击者可以发起动态调试攻击。

参考链接
https://developer.android.com/guide/topics/manifest/application-elemen- t.html#debug

漏洞名称 Webview 存在本地 Java 接口 漏洞检测
威胁等级 中危
检测方法 android 的 webView 组件有一个非常特殊的接口函数 addJavascriptInter- face,能实现本地 java 与 js 之间交互。在 targetSdkVersion 小于 17 时, 攻击者利用 addJavascriptInterface 这个接口添加的函数,可以远程执行 任意代码。

参考链接
https://developer.android.com/reference/android/webkit/WebView.html

漏洞名称 WebView 忽略 SSL 证 书错误漏洞检测
威胁等级 高危
漏洞危害 WebView 调用 onReceivedSslError 方法时,直接执行 handler.pro- ceed()来忽略该证书错误。忽略 SSL 证书错误可能引起中间人攻 击。

参考链接
https://developer.android.com/reference/android/webkit/WebView- Client.html

漏洞名称 Intent Scheme URLs 攻击 漏洞检测
威胁等级
检测方法 在 AndroidManifast.xml 设置 Scheme 协议之后,可以通过浏览器打开 对应的 Activity。攻击者通过访问浏览器构造 Intent 语法唤起 app 相应 组件,轻则引起拒绝服务,重则可能演变为提权漏洞。

参考链接
https://developer.android.com/guide/components/intents-filters.html

漏洞名称 全局文件可读写漏洞检 测
威胁等级 中危
检测方法 APP 在创建内部存储文件时,将文件设置了全局的可读权限。攻击者 恶意读取文件内容,获取敏感信息。

参考链接
https://developer.android.com/ reference/android/content/Context.html#MODE_WORLD_READABLE

漏洞名称 全局文件可读写漏洞检 测
威胁等级 高危
检测方法 APP 在创建内部存储文件时,将文件设置了全局的可写权限。攻击者 恶意写文件内容,破坏 APP 的完整性。

参考链接
https://developer.android.com/ reference/android/content/Context.html#MODE_WORLD_WRITEABLE

漏洞名称 配置文件可读可写漏洞检测
威胁等级 中危
检测方法 使用 getSharedPreferences 打开文件时,如果将第二个参数设置为 MODE_WORLD_READABLE。当前文件可以被其他应用读取导致信息泄 漏。

参考链接
https://developer.android.com/reference/android/content/Context.html#g etSharedPreferences(java.lang.String, int) https://developer.android.com/reference/android/content/Context.html# MODE_WORLD_READABLE

漏洞名称 配置文件可读可写漏洞检测
威胁等级 高危
检测方法 使用 getSharedPreferences 打开文件时,如果将第二个参数设置为 MODE_WORLD_WRITEABLE。当前文件可以被其他应用写入,导致文件 内容被篡改,影响应用程序的正常运行或更严重的问题。

参考链接
https://developer.android.com/reference/android/content/Context.html#g etSharedPreferences(java.lang.String, int) https://developer.android.com/reference/android/content/Context.html# MODE_WORLD_WRITEABLE

漏洞名称 DEX 文件动态加载漏 洞检测
威胁等级 中危
检测方法 使用 DexClassLoader 加载外部的 apk、jar 或 dex 文件,当外部文 件的来源无法控制时或是被篡改,此时无法保证加载的文件是否 安全。加载恶意的 dex 文件将会导致任意命令的执行。

参考链接
https://developer.android.com/reference/dalvik/system/DexClass- Loader.html

漏洞名称 AES 弱加密漏洞检测
威胁等级 中危
检测方法 在 AES 加密时,使用“AES/ECB/NoPadding”或“AES/ECB/PKCS5padding”的 模式。ECB 是将文件分块后对文件块做同一加密,破解加密只需要针 对一个文件块进行解密,降低了破解难度和文件安全性。

参考链接
https://developer.android.com/reference/javax/crypto/Cipher.html

漏洞名称 Provider 文件目 录遍历漏洞检测
威胁等级 中危
漏洞危害 当 Provider 被导出且覆写了 openFile 方法时,没有对 Content Query Uri 进行有效判断或过滤。攻击者可以利用 openFile()接口进行文件目录遍 历以达到访问任意可读文件的目的。

参考链接
https://developer.android.com/reference/android/content/Content- Provider.html#openFile(android.net.Uri, java.lang.String)

漏洞名称 activity 绑定 browserable 与 自定义协议漏洞 检测
威胁等级 低危
检测方法 activity 设置“android.intent.category.BROWSABLE”属性并同时设置了自 定义的协议 android:scheme 意味着可以通过浏览器使用自定义协议打 开此 activity。可能通过浏览器对 app 进行越权调用。

参考链接
https://developer.android.com/reference/android/content/Intent.html#CA TEGORY_BROWSABLE

漏洞名称 动态注册广播漏 洞检测
威胁等级 中危
检测方法 使用 registerReceiver 动态注册的广播在组件的生命周期里是默认导出 的。导出的广播可以导致拒绝服务、数据泄漏或是越权调用。

参考链接
https://developer.android.com/reference/android/content/Context.html#r egisterReceiver(android.content.BroadcastReceiver, android.content.In- tentFilter, java.lang.String, android.os.Handler)

漏洞名称 开放 socket 端口 漏洞检测
威胁等级 低危
检测方法 app 绑定端口进行监听,建立连接后可接收外部发送的数据。攻击者 可构造恶意数据对端口进行测试,对于绑定了 IP 0.0.0.0 的 app 可发起 远程攻击。

参考链接
https://developer.android.com/reference/java/net/Socket.html#Socket(ja- va.net.InetAddress, int)

漏洞名称 Fragment 注入漏 洞检测
威胁等级 低危
检测方法 通过导出的 PreferenceActivity 的子类,没有正确处理 Intent 的 extra 值。攻击者可绕过限制访问未授权的界面。

参考链接
https://developer.android.com/reference/android/preference/Preference- Activity.html#isValidFragment(java.lang.String)

漏洞名称 Webview 启用访 问文件数据漏洞 检测
威胁等级 高危
漏洞危害 Webview 中使用 setAllowFileAccess(true),App 可通过 webview 访问私 有目录下的文件数据。在 Android 中,mWebView.setAllowFileAccess(true)为默认设置。当 setAllowFileAccess(true)时,在 File 域下,可执行任意的 JavaScript 代 码,如果绕过同源策略能够对私有目录文件进行访问,导致用户隐私 泄漏。

参考链接
https://developer.android.com/reference/android/webkit/WebSettings.ht ml#setAllowFileAccess(boolean)

漏洞名称 unzip 解压缩(Zip- perDown)漏洞检 测
威胁等级 高危
检测方法 解压 zip 文件,使用 getName()获取压缩文件名后未对名称进行校验。 攻击者可构造恶意 zip 文件,被解压的文件将会进行目录跳转被解压 到其他目录,覆盖相应文件导致任意代码执行。

参考链接
https://developer.android.com/reference/java/util/zip/ZipEntry.html#get- Name()

漏洞名称 未使用编译器堆栈保护技术漏洞检测
威胁等级 低危
检测方法 为了检测栈中的溢出,引入了 Stack Canaries 漏洞缓解技术。在所有函 数调用发生时,向栈帧内压入一个额外的被称作 canary 的随机数,当 栈中发生溢出时,canary 将被首先覆盖,之后才是 EBP 和返回地址。 在函数返回之前,系统将执行一个额外的安全验证操作,将栈帧中原 先存放的 canary 和.data 中副本的值进行比较,如果两者不吻合,说明发生了栈溢出。不使用 Stack Canaries 栈保护技术,发生栈溢出时系统 并不会对程序进行保护。
修复意见 使用 NDK 编译 so 时,在 Android.mk 文件中添加:LOCAL_CFLAGS := -Wall -O2 -U_FORTIFY_SOURCE -fstack-protector-all

参考链接
https://en.wikipedia.org/wiki/Stack_buffer_overflow#Stack_canaries

漏洞名称 未使用地址空间随机技术漏洞检测
威胁等级 低危
检测方法 PIE 全称 Position Independent Executables,是一种地址空间随机化技 术。当 so 被加载时,在内存里的地址是随机分配的。不使用 PIE,将 会使得 shellcode 的执行难度降低,攻击成功率增加。

参考链接
https://en.wikipedia.org/wiki/Position-independent_code#Position-inde- pendent_executables

漏洞名称 动态链接库中包含执行命令函数漏洞检测
威胁等级 低危
检测方法
在 native 程序中,有时需要执行系统命令,在接收外部传入的参数执 行命令时没有做过滤或检验。攻击者传入任意命令,导致恶意命令的 执行。

参考链接
http://baike.baidu.com/subview/627587/14965930.htm#2

漏洞名称 随机数不安全使用漏洞
威胁等级 低低危
漏洞危害 调用 SecureRandom 类中的 setSeed 方法。生成的随机数具有确定性, 存在被破解的可能性。

参考链接
https://developer.android.com/reference/java/security/SecureRan- dom.html#setSeed(long)

漏洞名称 FFmpeg 文件读取漏 洞检测
威胁等级 低危
检测方法 使用了低版本的 FFmpeg 库进行视频解码。在 FFmpeg 的某些版本 中可能存在本地文件读取漏洞,可以通过构造恶意文件获取本地 文件内容。

参考链接
http://ffmpeg.org/

漏洞名称 libupnp 栈溢出漏洞 漏洞检测
威胁等级 低危
检测方法 使用了低于 1.6.18 版本的的 libupnp 库文件。构造恶意数据包可造 成缓冲区溢出,造成代码执行。

参考链接
https://sourceforge.net/projects/pupnp/files/pupnp/libUPnP %201.6.18/

漏洞名称 Webview 组件远程代 码执行(调用 get- ClassLoader)漏洞检
威胁等级 中危
漏洞危害 使用低于 17 的 targetSDKVersion,并且在 Context 子类中使用 add- JavascriptInterface 绑定 this 对象。通过调用 getClassLoader 可以绕 过 google 底层对 getClass 方法的限制。

参考链接
https://developer.android.com/reference/android/content/Contex- t.html#getClassLoader()

漏洞名称 AES/DES 硬编码密钥 漏洞检测
威胁等级 高危
检测方法 使用 AES 或 DES 加解密时,采用硬编码在程序中的密钥。通过反 编译拿到密钥可以轻易解密 APP 通信数据。

参考链接
https://developer.android.com/reference/javax/crypto/spec/Se- cretKeySpec.html#SecretKeySpec(byte[], java.lang.String)

漏洞名称 Android 应用克隆 漏洞检测
威胁等级 高危
检测方法 该漏洞影响使用 WebView 控件,开启 file 域访问并且未按安全策略开 发的 Android 应用 APP。检测方法为:1.检测 WebView 中是否setAllowFileAccessFromFileURLs****setAllowUniversalAccessFromFileURLs配置为 true;2.检测 WebView 是否可以直接被外部调用,并能够加载外部可控的 HTML 文件

参考链接
http://www.cnvd.org.cn/webinfo/show/4365

移动安全架构设计基本原则

在应用系统软件开发设计的过程中,对应用系统的总体设计应当满足如下
安全原则:

原则 说明
最小权限原则Least Privilege 应用软件的每个模块如进程、用户只能访问当所必需的信息或者资源。赋予每一个合法动作最小的权限,以保护数据以及功能避免受到错误或者恶意行为的破坏。
权限分离原则Separation of Duties 对业务的操作、管理和审计权限应该由软件中的不同角色的用户分别承担;普通用户和管理员用户信息应该存放在不同的数据表中。
深度防御原则Defense in Depth 在应用程序对业务数据进行处理的每个阶段都要考虑安全性问题,不能仅在某个阶段做安全防御,这样单点防御一旦被突破将造成安全风险。
容错保护原则Fail Secure 当程序出现故障时或系统异常当系统失败时,可以进入到一个失败保护的状态。如果用户请求失败,系统仍可保障安全。
单点异常终止原则Single Point of Failure 当用户提交数据超出预期时,应立即终止程序的执行,不要试图加以修正并继续执行下去。
外来代码安全原则Least Third Party Compo-nents 严格控制第三方函数与插件的使用,对外来代码必须进行详细的安全测试。
代码重用原则Leveraging Existing Com- ponents 尽可能的重用软件已有的模块,这样可以降低引入新的漏洞和攻击界面的可能性。
数据保护原则Data Protection 对用户数据的保护功能应涵盖用户数据存储的完整性、用户数据传输保密性、数据传输的访问控制、剩余信息的保护、数据反转操作等内容;应对系统中关键数据(如用户密码等)的存储和网络传输时应采用加密保护,实用加密加密算法应该符合国际标准、国家标准和业界标准。
可审计原则Auditing 在应用系统中设计审计日志记录的功能,并对应用系统产生的日志增加完备的审计功能
开放设计原则Open Design 开放设计与“不开放即安全”的原则相对而 言,认为设计本身不应具有神秘感。这一原则的 具体表现可以参见应用于加密设计的 Kerchoff 定 律,“系统不应单纯依赖私密性,若落入敌人手 中则毫无优势可言”;开放设计以提高系统兼容 性和可扩展性。
抗抵赖原则Anti Repudiation 对于涉及支付交易等重要的业务场景,系统设计应有效地防止通信双方抵赖,如采用电子证书签名等方式。
规范性Standardization 系统设计所采用的安全技术和安全产品应符合国际标准、国家标准和业界标准,为系统的扩展升级、与其他系统的互联提供良好的基础。
可扩展性Scalability 以当前业务安全需求为基础,充分考虑发展的需要,安全功能模块子系统以插件或接口方式以方便未来的扩展。
实用性Practicable 安全功能设计需要尽可能的考虑投入产出比,同时尽量控制对用户体验的影响。
符合性Regulatory Compliance 安全功能的设计尽可能的要符合国家规范、行业规范以及业界的通用标准,如等级保护等规范。

你可能感兴趣的:(Android常见安全测试)