【转】Android安全研究经验谈
本文转载自:http://www.cnblogs.com/whp2011/archive/2015/01/26/4250875.html
一、安全研究做什么
攻击角度:对某个模块进行漏洞挖掘的方法,对某个漏洞进行利用的技术,通过逆向工程破解程序、解密数据,对系统或应用进行感染、劫持等破坏安全性的攻击技术等。
防御角度:查杀恶意应用的方法,检测和防范漏洞利用,为增强系统和第三方应用的安全性提供解决方案等。
通常,攻与防是相对模糊的,一种安全技术往往两端都适用,也许更值得留意的是一种技术背后的思路和意识。
二、需要具备的知识
安全涉及的知识范畴是无限的,但大多数时候可以遇到问题再去了解相关知识。
三、要掌握的理论知识
操作系统原理,非常重要,是认识某一个具体系统的前提。
微软开源的Windows Research Kernel(WRK)同样也非常棒的学习资料。
动手编译系统内核,用调试器一步步分析调试内核比单纯阅读源码和分析文章更有帮助。
尝试编写内核驱动模块或分析已有的内核Rootkit来深入理解操作系统。
就移动平台而言,理解操作系统有助于进一步理解Android系统本身,而在理解Android系统之后,才能开始讨论Android系统的安全问题。
四、几门需要掌握的语言
不需要特别强的软件开发能力,需要关注某种语言的内部实现过程。
掌握C/C++,能理解该语言被编译器处理后汇编层面的实现原理。
了解Java,需要理解Dalvik/ART虚拟机内部的实现过程。
对x86/ARM汇编,能读懂即可,遇到不会的指令可以从指令集中查找。
掌握一门脚本语言,用来快速编写小工具或POC,推荐Python,因为开源社区中大部分Android安全分析类工具都是用Python编写的,例如,知名的Androguard和Drozer。
五、逆向工程
逆向工程绝对是一项必备技能。分析恶意软件行为还是分析闭源软件,都要逆向工程。
六、理解Android系统
Android源码非常庞大,只看组件也要好几年,何况还有Linux内核、基带、bootloader、TrustZone等底层模块。
我们只需了解支撑Android系统运转的核心服务,以及Android系统的安全机制设计即可,其余内容用到时再去分析。
1.组件
(1)Zygote:Android应用的孵化器,一切Android程序由此进程fork而来。
(2)Binder:Android的进程间的通信机制,它是Android平台最核心的功能组件。
(3)Package Manager Service:应用安装包管理服务,不仅负责包的安装和卸载,更重要的是负责Android应用信息的查询和控制,例如Android权限管理。
(4)Activity Manager Service:管理Android框架层的进程,也包含了Android应用四大组件的逻辑实现。
(5)Dalvik虚拟机:虽然即将被ART取代,但Dalvik依然是帮助我们理解虚拟机和Android可执行程序文件格式的好教材。
2.安全机制
(1)沙箱隔离:沙箱是基于不同应用之间User ID的不同而实现的,其本质是Linux对于不同用户间访问权限的隔离。
(2)应用权限控制:Android系统应用需要申请相应的权限才能访问系统的资源和信息,大多数权限由Android框架层的API进行控制,另一部分权限映射到应用所在的Group ID上,由Linux内核做出控制。
(3)SELinux:Linux内核层的安全增强,是一套独立于传统Linux权限访问控制的强制性权限控制机制。Google已经将这套机制移植到Android内核,给内核漏洞利用带来了一些挑战。
七、Android安全研究的热点方向与现状
1.手机Root与内核漏洞挖掘利用
Android2.x时代,往往利用一些用户层程序的漏洞即可将手机root,现在则主要依赖内核漏洞。
Android为Linux内核引入了新的内核模块,以及不同厂商的驱动方案。这就为系统内核引入了新的安全隐患,无论是高通、MTK还是三星猎户 座,或者华为海思的芯片,多少都出现过一些内核漏洞,这是Android平台内核的一个主要攻击点。随着Google将SELinux引入 Android,攻击面有所减小,但不能完全解决内核漏洞利用问题。
防御角度讲,同样面临挑战:一些APT攻击如果利用内核漏洞,将能拿到系统的完全控制权。Android平台内核漏洞长期以来一直都在持续曝光,漏洞利用与防范依然是持续的热点。
从这个方向入手,首先需要了解Linux内核,然后不断对目前已经公开的CVE漏洞进行分析,理解漏洞的成因和各个类型。
在漏洞利用方面,由开源项目run_root_shell可作为参考,该项目包含了多个经典漏洞的利用实现,入门的好材料。
此外,还可以关注国外的POC程序或对一键root类产品做分析。
2.Android应用与系统框架才呢过漏洞挖掘
Android应用本身的问题主要集中在4大组件上,通常是一些逻辑处理问题导致信息泄露、身份认证绕过等。
得益于Android沙箱机制,应用本身的攻击面相对较小。
此外,围绕WebView或者SSL漏洞所引发的安全问题也比较常见。
框架层漏洞也是逻辑漏洞居多,但危害往往比应用更大。著名的高危漏洞有Master Key签名绕过、WebView远程代码执行等。
目前已有的一些开源漏洞挖掘工具,如Drozer和Intent Fuzzer。可以再此基础上进行改进。
3.恶意软件攻防
数量上看,隐私窃取和钓鱼软件是目前Android平台主要的恶意软件类型。
若用户对应用申请的权限毫不知情,一款应用便能轻松获取用户的短信、通讯录、地理位置、录用等私密信息。
Android平台需要有主动防御程序控制应用获取隐私的行为,目前有2种方法实现:一种是集成到ROM代码中,另一种是利用API Hook实现。无论使用哪种方式,目前面临的问题都是如何更智能地为用户管理权限,以减少防御软件频繁弹窗打来的打扰。
市面上还充斥着大量的仿冒支付类应用,它们看起来可能与正版应用没有区别,因为这些仿冒软件是由正版应用篡改而来的。通常都会有用户名和密码窃取的恶意代码。安全软件需要通过签名、代码特征等方法对此进行识别。
从趋势上看,恶意软件再也不局限在Android安装包(APK)的形式进行分发,而往往会带有Linux可执行文件(ELF),对系统进行深层次 的攻击。目前市面上的安全产品对APK文件的查杀已比较成熟,但对于系统原生层的恶意软件查杀还没有特别完善的实现,对于一些APT级别的新型威胁防御也 仍在探索阶段。
知名恶意软件Oldboot就是恶意程序使用底层技术对抗查杀的典型案例,完整的分析已经公开。
4.支付安全
手机支付一般通过短信验证码和独立支付密码解决支付者身份认证问题,但仍然存在短信遭人窃听或密码被窃取的风险,一些厂商模仿PC上的U盾方案,推出音频盾或蓝牙盾解决认证问题。而利用ARM架构下的TrustZone将支付认证过程独立于操作系统之外也是一个方向。
5.应用加固(加壳)与逆向工程
国内知名的加固方案有:梆梆加固、360加固保、爱加密等。
6.企业安全BYOD
仅就终端设备来说,BYOD方案是将手机系统隔离出两个环境:一个公用,一个私用,两者互不影响。
八、实例:Android4.4.2系统vold漏洞
1.如何第一时间得知漏洞
不是所有的漏洞都会被CVE收录,很多事秘密修补的。一种方法是,看版本升级时Android源码中的Change Log,运气好的话,可以从AOSP的git commit信息中注意到下面的话:
Project:platform/system/vold
0de7c61:Validate asec names
点击相关链接,就能看到Google秘密修补了该漏洞的信息。、
2.如何掌握漏洞细节
3.如何利用这个漏洞获取root
by retme
【转】Android安全研究经验谈的更多相关文章
- Android安全研究经验谈
安全研究做什么 从攻击角度举例,可以是:对某个模块进行漏洞挖掘的方法,对某个漏洞进行利用的技术,通过逆向工程破解程序.解密数据,对系统或应用进行感染.劫持等破坏安全性的攻击技术等. 而防御上则是:查杀 ...
- Android多线程研究(6)——多线程之间数据隔离
在上一篇<Android多线程研究(5)--线程之间共享数据>中对线程之间的数据共享进行了学习和研究,这一篇我们来看看怎样解决多个线程之间的数据隔离问题,什么是数据隔离呢?比方说我们如今开 ...
- Android Launcher 研究学习
Launcher是系统启动后第一个启动的程序,是其它应用程序的入口,也就是我们的手机程序的桌面程序; 一.Launcher的定义及构成: <1>通过查看官方提供的Launcher源码可以知 ...
- Hook android系统调用研究(一)
本文的博客链接:http://blog.csdn.net/qq1084283172/article/details/55657300 一.Android内核源码的编译环境 系统环境:Ubuntu 14 ...
- 【转】Android Launcher研究 (一)
这份源码是基于2.1的launcher2,以后版本虽有变化,但大概的原理一直还是保留了. 一.主要文件和类 1.Launcher.java:launcher中主要的activity. 2.DragL ...
- Android多线程研究(1)——线程基础及源代码剖析
从今天起我们来看一下Android中的多线程的知识,Android入门easy,可是要完毕一个完好的产品却不easy,让我们从线程開始一步步深入Android内部. 一.线程基础回想 package ...
- 【转】Android ROM研究---Android build system增加模块
原文网址:http://hualang.iteye.com/blog/1141315 Android build system就是编译系统的意思 在我们需要向自己编译的源代码中增加模块的时候,需要一些 ...
- android反编译经验谈
反编译这事,找对了工具其实非常简单. 反编译工具下载地址http://pan.baidu.com/s/1eQvshwu android的反编译要经过两个步骤: 1.把dex文件转为jar 2.jar转 ...
- Android深入研究Adapter重绘
一直以来Adapter的使用都仅仅是流于表面,仅仅知道要实现几个抽象的方法,把Adapter设置给某种listView,就能够非常好的工作起来.所谓理解仅仅是建立在主观的猜想上面,认为应该是这样,对, ...
随机推荐
- 【BIM】BIMFACE中创建雾化效果
背景 在BIM运维场景初始化的时候,一般都是首先将整个运维对象呈现在用户面前,例如一座大厦.一座桥梁.一个园区等等,以便于用户进行总览,总体把握运维对象,如果这个宏大的场景边界过于清晰,与背景融合也不 ...
- 深度学习环境搭建:window10+CUDA10.0+CUDNN+pytorch1.2.0
去年底入手一台联想Y7000P,配置了Nvidia GeForce GTX 1660 Ti GPU,GPU内存6G,但是因为有GPU服务器,所以一直没有在这台笔记本上跑过模型,如今经过一番折腾,终于在 ...
- Jmeter系列(9)- jmeter插件入门篇
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 jmeter4.0以上,如现在最 ...
- Spring中资源的加载原来是这么一回事啊!
1. 简介 在JDK中 java.net.URL 适用于加载资源的类,但是 URL 的实现类都是访问网络资源的,并没有可以从类路径或者相对路径获取文件及 ServletContext , 虽然可以通过 ...
- C. Fountains
\(整体思路没错,但是我貌似太麻烦了.......\) \(分情况讨论\) \(Ⅰ.coin和diamond各选一个物品,这个简单\) \(Ⅱ.在coin中选两个或者在diamond选两个\) \(开 ...
- spring学习笔记(六)自定义spring-boot-starter(2)
上篇文章我们主要讲了spring自动装配的原理,我们知道了springboot在启动的时候会自动去读.factories文件,在factories文件中,autoConfiguration对应的就是我 ...
- POI问题总结,关于数字级联及多级级联(三级以上)
目录 最近公司业务需要用到excel,并且要导出模板,今天为止所有的功能都已经实现了,在这里对出现的一些问题做一个总结. 效果图: 这是一个五级联动的数据,其中第一列是数字开头,实现了五级联动 问题1 ...
- 02_互联网基本原理和HTML入门
上节课的知识复习 互联网的原理:服务器.浏览器.HTTP.知道网页文件是真实的物理存在,用HTTP请求这个文件. 要知道网址的含义:http://www.iqianduan.cn/aaa 请求哪个文件 ...
- 这么简单的ES索引生命周期管理,不了解一下吗~
对于日志或指标(metric)类时序性强的ES索引,因为数据量大,并且写入和查询大多都是近期时间内的数据.我们可以采用hot-warm-cold架构将索引数据切分成hot/warm/cold的索引.h ...
- Linux系统如何安装qt-desinger
前言:最近想在python3.7.3下玩下PyQt5,写UI有两种方式一种是使用手写,第二个就是使用Qt Designer工具来写,所以首先就是安装PyQt5和pyqt5-tools工具了. 一.安装 ...