目前市场上提到了很多关于android安全的问题,那么提到android的安全,我决定从以下几个方面初级探究一下:
(本文在撰写的过程中调研了多篇论文和博客,感谢作者们的辛勤劳动,感谢他们在互联网时代的自由和共享精神)
(1)android的安全性分析:
android本身有自己的一套安全机制:下面我们将对图中的知识进行解释
沙箱:每个程序有自己的一个uid,这样在unix内核的基础上,加上每个文件都是自己的uid。而且在内存的访问过程中,也是不能够访问到别的应用程序的。
java语言:这是由于java语言的语言特性,编译期的类型检查(C++中float型赋值int型是可以的,但是在java中这样是不行的,java中这种类型检查在编译时更加彻底),自动的存储管理(也就是java虚拟机会给你分配内存),数组的越界检查(这样缓冲区溢出就无法使用)
3A原则:验证程序是否可以获得这种访问权限,授权程序是否可以使用哪些权限,记录程序用了哪些网络服务
权限控制:permission机制。
签名机制:验证签名,但是只能验证程序自身的完整性
但是针对权限控制着一块,还有与生俱来的粗粒度问题:
对同一文件的访问:就是说android系统要是指定别的用户不能访问一个文件,那么这个文件就不能被任何用户访问,无法说某一个特定用户可以使用。
一个软件的安装:安装过程中,如果某一步不同意,则整个软件无法被使用。
获得权限的粒度粗:比如你获得了internet权限,那么你访问网络,使用各种协议,访问任何端口都可以了,这种权限的粒度本身就不够细致。
(2)android的安全问题:
让我们来具体的从攻击的层面上来分析一下:
基于硬件攻击:turbosim 这种sim卡实现中间人攻击
基于内核的攻击:基于内核的这种攻击和原本在linux下的rootkit攻击形式的一种一样,如果通过动态加载模块的方式,可以劫持系统的函数执行,但是在android系统上,由于模块是不支持动态加载的,而且即使可以动态加载(在编译android内核时编译成可加载的模式),但是也需要获取root权限。
基于核心程序攻击:对android核心库,例如dalvik库,sqlight等等,这些库本身会有缓冲区溢出的漏洞也会造成安全问题
应用程序攻击:这种基于android逆向的攻击,或者恶意程序的攻击,或者基于jni那套反射机制(私有成员函数和变量都可以获得)尤其最为严重。
攻击的具体技术上来分析如下(攻击的具体技术可以用于不同的攻击层面上):
android逆向:通过加入一些恶意程序片段,重新打包这种方式,或者截取其中加密解密的算法。
绕过权限机制:如下图,A不可以访问C,B和B导出的模块D可以访问C,A可以访问D,那么A就可以间接的访问C,这种机制的不安全性是由于D这样的导出模块对谁可以访问他没有特定的限制
反射机制:反射机制可以将原本java中私有的函数和变量拿到。
(3)android的安全对抗:这部分看雪论坛非虫大神的书中都有提到
由于时间问题,今天就先写到这儿。