接触Android安全测试一年有余,被同被人问到给你一个App,你如何确定其中的安全问题。平时真的缺乏一份总结,这里简单总结一下。博客中的提到的部分攻击面,我比较熟悉,也有很多不太清楚的地方,不妨先简单记录下吧。
根据攻击设备的代价,我们做了如下分类。
- 远程攻击面
- 物理邻接攻击面
- 本地攻击面
物理攻击面
一、远程攻击面
最巨大的、最危险的、最有吸引力的攻击界面,攻击者无需本地物理接触受害者。
1、Networking Stacks(网络协议)
Android系统使用的Linux内核提供的TCP/IP协议栈可能会引入攻击面,1)Linux底层的网络协议栈由C/C++编写,其存在的“缓冲区溢出”等代码问题可能导致远程执行任意代码,2)协议处理过程中某些字段没有判断而导致拒绝服务
检查方法:代码review,并搜索不安全函数
2、Exposed Network Services(暴露的网络服务)
Android本身很少暴露网络服务,多是由应用程序暴露,如开启WIFI热点功能后,会监听TCP 53端口。
检查方法:通过nmap扫描或者本地执行netstat -na|grep LISTEN可以获得暴露的服务,再进行分析。
例子:百度系WormHole算这类漏洞。