基本知识Android架构
- Kernel内核层
漏洞危害极大,通用性强
驱动由于多而杂,也可能存在不少漏洞 - Libaries系统运行库层
- 系统中间件形式提供的运行库
包括libc、WebKit、SQLite等等 - AndroidRunTime
Dalvik虚拟机和内核库
- 系统中间件形式提供的运行库
FrameWork应用框架层
提供一系列的服务和API的接口- 活动管理器
- 内容提供器
- 视图
- 资源管理器
- 通知管理器
Application应用层
- 系统应用
主屏幕Home、联系人Contact、电话Phone、浏览器Browser - 其他应用
开发者使用应用程序框架层的API实现的程序
- 系统应用
Andoroid常用组件
- Acitivity活动
- Service服务
- BroadcastRecviver广播接收器
- ContentProvider内容提供器
Android App常见漏洞 (OWASP Mobile Top 10)平台使用不当
概述
平台功能的滥用,或未能使用平台的安全控制。如Intent误用、权限误用等风险
很广泛,可能涉及移动平台各个服务举例
iOS系统中,将密码数据存放在本地文件而没有存放在密钥链中,导致可以从伪加密的备份数据中读取
Android系统中,Intent使用不当导致恶意用户劫持修改intent的内容,以原进程的身份权限执行任意动作不安全的数据存储
- 不安全的通信
典型漏洞及挖掘方法数据存储漏洞
数据文件或目录
- SharedPreferences
data/data/程序包名/shared_prefs/*.xml- 创建配置文件时没有使用MODE_PRIVATE模式,导致其他程序可以读取配置文件
- 明文存储,而root用户可读,导致敏感数据泄露
SQLiteDatabases
data/data程序包名/database/*.db- 创建数据库时没有使用MODE_PRIVATE模式
InternalStorage
data/data/程序报名/files/*- MODE_PRIVATE
- 明文存储
- ExternalStorage
/mnt/sdcard/*- 明文存储
- SharedPreferences
- 检测方法
- 浏览/data/data/包名目录下的各个文件和目录,检查是否存在others用户可读的文件
- 检查配置文件、数据库等是否存在明文敏感信息
- 挖掘方法
- 代码检测
检查openFileOutput、getSharedPrefreences、openOrCreateDatabase等函数的mode参数是否为MODE_PRIVATE(0×0000)
- 代码检测
数据通信漏洞
- 使用HTTP等明文协议将敏感信息传送至服务端
- 通过局域网嗅探、恶意公共WIFI、恶意代理服务、DNS劫持等手段捕获明文通信,产生中间人攻击
SSL证书弱校验
- APP中缺乏对SSL证书的校验
客户端中应该实现X509TruestManager类,包括checkServerTrusted\checkClientTrusted\getInstance三个方法 - 证书校验失败会导致异常,然后由应用程序对证书校验异常进行处理
- 未对服务器证书校验会导致TLS中间人攻击
使用HttpsURLConnection时,实现自定义HostnameVerifier过程中未对主机名做验证,则默认不检查证书域名与站点名是否匹配。或者在设置HttpsURLConnection的HostnameVerifier时,将其设为ALLOW_ALL_HOSTNAME_VERIIER则接受所有域名. - 攻击方法
- 开启Fiddler的HTTPS解析功能,生成并导出自签名证书,安装到手机中
- 开启Fiddler代理,并允许远程主机连接该代理
- 挖掘方法
- 搜索.method public checkServerTrusted
- 定位.method和end method
- 检查是否存在return-void
- 同理检查verify(String, SSLSession)的返回值是否恒为True、X509HostnameVerifier的参数是否为ALLOW_ALLHOSTNAME_VERIFIER
- APP中缺乏对SSL证书的校验
SSL证书强校验
可能通过Xp、Patch等方法绕过
组件暴露漏洞
- Android:exported是四大组件中都有的一个属性,用来表示是否支持其他应用调用当前组件
- 如果有intent-filter,默认值为true;反之默认则为false
- exported导出组件的权限控制
- 绕过认证
- activity暴露后被第三方调用,可能在没有密码的情况下登录/重置密码
- 敏感信息泄露
- recviver暴露后被第三方启动,可能查看到调试等信息中包含的敏感信息
越权行为
- 低权限程序通过调用高权限程序暴露的组件,执行高权限动作
挖掘方法
- 查看AndroidManifest.xml
- 通过drozer的attacksurface工具进行安全评估
弱加密漏洞
- 密码硬编码
反编译、root查看等可以取得 - AES/DES弱加密
ECB模式容易受到分析或重放攻击
WebView
主要包括三种漏洞: