接触Android安全测试一年有余,被同被人问到给你一个App,你如何确定其中的安全问题。平时真的缺乏一份总结,这里简单总结一下。博客中的提到的部分攻击面,我比较熟悉,也有很多不太清楚的地方,不妨先简单记录下吧。
根据攻击设备的代价,我们做了如下分类。
物理攻击面
最巨大的、最危险的、最有吸引力的攻击界面,攻击者无需本地物理接触受害者。
Android系统使用的Linux内核提供的TCP/IP协议栈可能会引入攻击面,1)Linux底层的网络协议栈由C/C++编写,其存在的“缓冲区溢出”等代码问题可能导致远程执行任意代码,2)协议处理过程中某些字段没有判断而导致拒绝服务
检查方法:代码review,并搜索不安全函数
Android本身很少暴露网络服务,多是由应用程序暴露,如开启WIFI热点功能后,会监听TCP 53端口。
检查方法:通过nmap扫描或者本地执行netstat -na|grep LISTEN可以获得暴露的服务,再进行分析。
例子:百度系WormHole算这类漏洞。
这里指SMS、MMS、电话等蜂窝网络服务暴露的攻击面。
SMS、MMS服务使用WAP协议,其中的WAP PUSH消息可被用来发送Service Loading request (SL消息),SL消息可以去调用USSD(Unstructured Supplementary Service Data)功能来执行充值、语音邮箱查询等操作
USSD指令:当你使用手机键盘输入一些网络已预先制定的数字或者符号比如*#等,再按send也就是拨号键就可以向网络发送一条指令,网络根据你的指令选择你需要的服务提供给你。可以用来打电话、修改PUK等 http://baike.baidu.com/link?url=ImBFOug4QRZFJHhypYHxY1i2ZPzzsgQw5Fq-LhWuGD1Bmcvry02IMXqG3QyP7sgZ
WAP PUSH:服务信息或推入信息,是种特殊格式短信 WAP PUSH某站点或某业务链接通短信发送支持WAP PUSH功能手机,通过阅读条短信(服务信息)打短信链接直接访问业务,节省寻找业务时间
WAP Push的内容有两种,一种是SI,service indication;另一种 SL,service loading。这两种内容类型的目的都是发送URL链接到手机上。SI是以异步方式发送一个通知、警示、提醒等信息到手机上,用户会看到屏幕上显示这条通知文字内容,然后,提示你是否去那个页面,如果去,手机将激活为WAP浏览器,打开这个链接,浏览其内容。SL则是直接发送一个 URL链接到手机上,手机不会给用户任何提示,自动地启动WAP微浏览器,下载这个URL对应的内容,显示在手机上。让人觉得好像是推送了一个页面下来了似的。MMS就是利用这个机制实现的,已知攻击是发送tel://开头的SL指令可触发手机打电话 http://www.cnblogs.com/edward259/archive/2010/01/29/1659415.html
指由于Android上安装的App或者系统提供的服务(App)引入的远程攻击面。
主要有URL钓鱼、MitM、XSS、CSRF方面的威胁
android 4.1之前版本使用的是android browser,4.4之前使用chrome for android ,4.4之后使用基于chromium的web browser(libwebview-chromium.so存在于framework层,为上层应用提供API,由于是随framework更新,因此更新慢,容易受到half day攻击)
另外,还有其他第三方浏览器由于存在漏洞而引人的攻击面
使用webview技术而引人的攻击面 利用WEB View的攻击:例如 addJavascriptInterface和Android AD network。客户端使用webview的xss、csrf等。
包括:
广义上也算远程攻的一种,只是攻击的范围受到限制。 包括:
1.用户位置信息被APP滥用,泄露用户隐私
2.GPS spoofing : 发送虚假GPS信号导致GPS设备定位错误
基带处理芯片(CP)及android.telephony.stack协议栈
1.假基站
2.针对RIL层的攻击:相关硬软件如USRP,BladeRF,开源协议栈OSmocom
包含近30种Profile,每一个profile描述了蓝牙的一种功能
比如:
1.HFP(Hand-free profile)/HSP(Headset profile)定义了如何控制麦克风、外放等外设
2.FTP(File transfer profile)
3.DUN(Dial-up Networking profile)
4.HID(Human Interface Device profile)
5.AVRCP(audio/video Remote Control profile)
可能的攻击方法:Bluejacking,Bluesnarfing,Bluebugging
使用的此等协议栈:L2CAP/RFCOMM 4.2之后使用Bluedroid在Framework层对上层导出API接口
https://source.android.com/devices/bluetooth.html
功能点:连接internet,WIFI直连
协议和算法:WEP、WPA、WPA2、开源协议栈:wpa_supplicant
可能的攻击:Rogue热点、MITM
读取Tag,数据传输(Beam)、移动支付
调用关系:物理NFC芯片->内核:libpn544_fs.so->
Native:libnfc_jni.so,libnfc.so,libnfc_ndef.so->
Framework:com.android.nfc ->上层APP
攻击者通过安装本地App达到攻击的效果。
Exploring the File System
文件系统访问权限设置、SUID/SGUID设置,Owner设置
检查工具:adb shell和Canhazaxs
Applications life cycle
应用生命周期中引入的攻击面
install
安装流程中引入的攻击面,如超长应用名攻击,畸形AndroidManifest.xml标签,APK占位攻击,签名漏洞等。
Applications run
运行流程中引入的攻击面
backup
应用备份恢复时引入的攻击面,如ALLOW-BACKUP漏洞
Finding Other Local Attack Surface
System Calls
在源码中以“SYSCALL_DEFINE”定义
Sockets
sockets恶意调用
Binder
Shared Memory
Baseband Interface
Attacking Hardware Support Services
API
JAVA Native Interface
JNI恶意调用,JNI-DOS
AIDL service Calls
TrustZone Proxy
TurstZone Proxy是链接非安全世界和安全世界的代理
CDEV file_operations
驱动源码中file_operations中定义了驱动节点的接口,如open/write/read/mmap/ioctl
USB、adb等。
参考文献:http://colbert337.github.io/2015/08/24/android-attack-surface/