android4.4使用device-mapper-verity(dm-verity)提供启动验证,对透明的设备提供完整性检查其特性是在浏览到设备模块的同时看到是否存在一些文件或者程序,并其肯定是否符合预期的配置。linux
使用的是加密哈希树,每一块都有一个SHA256哈希android
只须要保证顶级的根节点哈希可信算法
引导分析的公共密钥必须通过OEM验证,用来验证签名的哈希以确认设备的系统分区是否被篡改shell
使用dm-crypt、使用随机生成的AES CBC模式的128位的密钥缓存
每个单元会被非顺序访问,使得每一个扇区都要有独立的IV安全
安卓对每一个扇区加密是用加盐向量初始化(ESSIV),使用SHA256算法进行哈希ESSIV:SHA256,从而生成每一个扇区的IVapp
IV(SN)=AESs(SN),其中s=SHA256(K),K为用散列算法加密的二次密钥s密钥K,SN为扇区号dom
因为ESSIV不改变CBC的延展性,也不能保证加密块的完整性,所以攻击者仍可经过磁盘上的密钥明文对加密磁盘进行攻击。编码
磁盘加密密钥经过与另外一个128位的AES密钥加密,由用户提供的密码衍生出来的。加密
使用PBKDF2和128位随机盐值做为密钥导出方式,将获得的master ley和盐值存储到磁盘上,占整个分区的最后16KB,被称为加密页脚。
滑动解锁、密码锁、PIN锁、图形锁
全部的屏幕锁密码存储在/data/system/gesture.key
具体加密代码LockSettingsService中的patternToHash
能够尝试用字典与该密码对比从而得出答案,可是咱们也能够直接用adb命令删除掉对应文件。此时,系统将认为不存在密码
rm /data/system/gesture.key
这是针对root过的系统,若是没有root权限,咱们能够在recovery模式下清除掉全部系统中的数据也能删除掉屏幕锁。若是没有打开usb调试模式的设备,则没法使用adb shell模式,也就没法解除屏幕锁。
相似屏幕锁,也只须要将/data/system/gesture.key文件删除
相对以上两种方式比较安全,可是密码忘记后难以查询,输入错误到必定次数会销毁SIM卡
ADB Server 、ADB Deamon、ADB Command-line。
android客户端是经过TCP协议保持与ADB Server进行会话,一般为localhost:5037
私钥文件adbkey--存在主机上,是标准的OpenSSL PEM格式
公钥文件adbkey.pub--包含公钥基础64编码标准RSA PUBLIC KEY结构
SELinux组成部分:对象管理器(OM)、访问权限缓存(AVC)、安全服务和安全策略
SEAndroid是一种基于安全策略的强制访问控制容许加载新的访问控制模块(MAC)安全机制。
传统Linux的不足:
存在特权用户root
对于文件的访问权划分不够细
SUID程序的权限升级
DAC问题
SELinux特色:
MAC对访问的控制强制化
TE对于进程只赋予最小权限
domain迁移、防止权限升级
RBAC对用户只赋予最小权限
SELinux运行模式:
SELinux经过MAC的方式来控管程序,控制的主体是程序,而目标是文件
SEAndriod主要采用了两种强制访问方法:TE(对于进程只赋予最小权限)、MLS(多等级权限安全)
SEAndroid的上下文由四个组成部分user、role、type、sensitivity。即为身份识别、角色、安全类型、安全等级(其中最重要的是安全类型,全部policy都围绕安全类型展开)
SEAndroid中user为u、role有两个为r和object_r。关于安全上下文配置的核心文件主要是file_contexts
文件、seapp_contexts文件和ocontexts文件。多等级安全的安全等级分为s0~sn,s0为最低。
3中模式:Enforcing(强制模式)、Permissive(宽容模式)、Disable(关闭模式)