Android Security
1.Android基础知识
Android系统架构主要分为:应用层(java)、框架层(java)、库文件(C)&Android运行时(运行java代码的虚拟机)和Linux kernel。
Android四大组件:
Activity:窗口界面。Activity之间通过Intent进行通信。android应用的每一个Activity都必须在AndroidManifest.xml配置文件中声明。
Service:运行于后台,一般不需要与用户交互。一般为其他组件提供后台服务或监控其他组件的运行。有两种工作状态,一种是启动状态,主要用于执行后台计算;另一种是绑定状态,主要用于其他组件和service的交互。配置文件中需要声明全部service。
Content Provider:存放和获取数据并使这些数据可以被所有应用程序访问。应用程序间共享数据的唯一方法。
Broadcast Receiver:为了便于进行系统级别的消息推送。本质是一种全局的监听器,可以实现系统中不同组件之间的通信。发送广播用Intent,接收广播用广播接收器BroadcastReceiver。静态注册&动态注册。
Android安全机制:
安全沙箱:
Android每个应用程序都拥有唯一的UID和GID,每个应用是隔离的(文件/进程)。
数据目录:/data/data/。
两个应用程序共享文件方法:
(1)两个应用使用同样的证书签名,并在样式清单中使用相同shareUserId,可以互相访问彼此的数据目录。
(2)利用content provider,设置权限提供数据。
权限控制:
Normal级:申请后即可使用。
Dangerous级:在安装时由用户确认才可用。
Signature级:必须相同签名才能用。
Signatureorsystem:必须系统用户才可用。
APK反编译
APK实际为Zip压缩包,unzip后可以获得dex文件。dex文件是DalvikVM executes的简称,是执行文件。我们可以获得:AndroidManifest.xml文件(全局配置文件)、Classes.dex(Dalvik字节码)、资源文件和lib文件夹下的库文件.so文件由C/C++编写和签名文件。
APK反编译IDE:APK改之理。so反编译工具:IDA。
想一想:怎么不输入MD5值,获得权限。
2.Android应用攻击面分析
四大组件攻击面分析
- 组件含有权限代理攻击:
造成应用功能泄露、拒绝服务等问题。
- 组件暴露:
exported属性为true,表示对外暴露。
- 组件配置失当:
造成的被劫持问题。
Intent攻击面分析:
数据通信的桥梁,app2app。
可能携带敏感数据,IMEI,key,phone number。
内容为空,拒绝服务。
隐式Intent被劫持
Pending Intent 感觉是A通过B发送信息给C。A交给B将来要发送的包,给如果A不存在了,B依然可以发送信息。“双无”Intent是无component,无action。try catch结构
Webview攻击面分析:
简单小型类似浏览器的组件。
- 远程代码执行。
- File域控制不严。
- 信息泄露。
- Url外部可控。
物理攻击:
- 拆解设备:接口、调试端口、可拆卸的Flash
- USB:
- ADB:4.2.2之前ADB shell不需要认证,之后需要手动点击认证。
邻接攻击:
- GPS欺骗
- 基带
- 蓝牙
- Wi-Fi:wpa算法、中间人攻击。
- NFC:数据传输、移动支付。
3.Android应用测试思路
APK改后缀名后UnZip。
AndroidManifest.xml提取出来。
分析程序包
权限、组件、协议实现、Manifest和逆向代码。
寻找攻击面
导出的组件、监听的端口、IPC、网络协议、密码学实现和Web
监控应用行为
附加调试、敏感函数调用、日志输出、文件系统和网络流量。
模糊测试
组件和文件格式。
Drozer
Android的安全测试框架。
功能:
- 查询已安装的包信息。
- 确定APP的受攻击面
- 查询组件信息
- 启动组件
- 从Content Provider中获取信息
- 检查Content Provider的脆弱性
- 编写自定义模块