逆向笔记 - iOS系统安全机制

一些经常遇到的问题:

  • 修改app结构后无法运行?
  • 不能直接读取其他应用程序的文件?
  • 程序每次运行的时候地址都不一样?
  • 系统升级了不允许降级?

iOS 系统官方 安全架构

硬件和固件:

  • 设备秘钥、组秘钥、Apple 根证书
  • 加密引擎
  • 内核:
    • Secure、Enclave
    • 安全元件

软件

  • 文件系统
  • 操作系统分区
  • 用户分区(已加密)
  • 应用沙盒
  • 数据保护类
软件.png

硬件和固件:

  • 加密引擎:对 设备密钥、组密钥、Apple 根证书 进行加密
  • Secure Enclave 模块:用来加密和解密
  • 例如:touch ID: 保存用户名和指纹密码

软件:

  • 用户分区: 完全加密的,并且加密功能是不能关闭的。苹果的iOS加密是硬件级别的,所有进出存取的都要通过苹果的 iAS以及 进行加密,而且iAS引擎进行加密的key 是跟硬件相关的。所以说,我不能把一个设备加密的数据拿到另外一个设备上去解密,这样是不能解密的
  • 应用沙盒:提供 数据保护类的 一个 安全机制。
  • 数据保护类: 可以保护应用内数据的安全性,比如我们在应用沙盒里面写入的数据,我们可以通过数据保护类限定,只有在用户解锁了设备之后才能读取这个数据

从 上图可以看出 iOS 安全的几个点:

  • 安全启动链:启动的时候,会保障我们启动的系统是受信任的
  • 系统软件授权机制:能保障我们的系统更新之后就不能退回到原来的老的版本
  • 应用代码签名:所有的运行的代码都要通过苹果的签名才能运行
  • 运行时进程安全性:
    • 沙盒机制(Sandbox): 让应用运行在沙盒里面
    • 数据执行保护(DEP): 能区别哪些是数据,哪些是代码。数据是不能运行的,代码是才可以运行。
    • 地址空间布局随机化(ASLR): 每一次程序加载的时候,他的机地址都是变化的
  • 数据加密保护:保护应用里面的数据的安全性

安全启动链

系统启动过程中每一步包含的所有组件都已经经过 苹果签名,并且只有在验证了信息链后才能继续往后执行。

启动流程:系统启动 -> Boot ROM -> 底层引导加载程序(LLB) -> 引导加载程序(iBoot) -> Kernel

  • Boot ROM: 在iOS 设备里面集成了一段 名为 “Boot ROM” 的代码 片段,这段代码被镶嵌到 处理器的一块存储上并且是只读的。
  • 底层引导加载程序:在系统启动的时候会通过苹果的证书. 对底层引导加载程序,进行签名验证,如果通过验证,底层引导加载程序就会对 引导加载程序进行验证
  • 如果引导加载程序也通过验证,才会去加载内容。
  • 在上面所有加载步骤中,都会有签名验证,如果某一步发现签名验证失败,就会进行到 恢复/固件升级模式。
安全启动链.png

系统软件授权

为避免设备降级为缺少最新安全性更新的早期版本,iOS采用了为名为 “系统软件授权”的过程。
下面的流程是iTunes 刷入固件到手机上面的流程
固件 -> CPU -> iTunes -> 固件签名 -> 服务器 -> 开启验证 -> 验证许可 || 验证许可+随机串 -> 通过验证
如图:


开启验证.png

固件通过 CPU 刷到手机上面去,CPU在写入我们的固件之前,会让 iTunes 把 我们的 固件签名 发送到服务器,如果服务器开启了验证,就返回一个验证许可或者是 验证许可+随机串,拿到验证许可后,通过验证。cpu才会真正把我们的固件刷到手机上去。

如果关闭 开启验证,在早期的版本,只会返回一个验证许可,可以通过保存 SHSH来欺骗cpu刷入我们的固件。
如图:


Snip20170704_7.png

在后面的版本,苹果除了返回验证许可之外,还返回了一个随机串。这个随机串是和硬件相关的,并且只能使用一次。也就保证了这个是不能模拟的,所以保存SHSH无效。
如图:

Snip20170704_8.png

应用代码签名:

为确保所有应用均来自批准的已知来源并且未被篡改,iOS要求所有可执行代码均使用 Apple 颁发的证书进行签名。
包括

  • 可执行代码 : 可执行程序里面的代码
  • 加载的动态库
  • 加载的资源

这三个在我们运行的时候会进行签名验证。
验证通过以后,才能正常运行。
如图:

应用代码签名.png

应用沙盒机制(Sandbox)

/var/mobile/Containers/Data/Application/[GUID]
保证我们所有的应用都是在一个沙盒模块里面,如下图

沙盒模块.png

在这个图片中可以看到:
安装完一个应用后,都是运行在一个隔离的环境,每一个应用都是一个隔离的环境,并且互不干扰,也不能随意去访问其他应用程序的数据。

沙盒的特点:

  • 每个应用程序都有自己的存储空间
  • 应用程序不能直接去访问别的存储空间的内容
  • 应用程序请求的数据都要通过权限检测,如:
    • 短信、照片等

数据执行保护(DEP)

处理器能区分哪部分内存是可执行代码以及哪部分内存是数据。
DEP不允许数据的执行,只允许代码执行。

如图,讲解代码无法再数据段里执行

数据段.png


在上边的图中,恶意代码作为数据,写入到数据段里面去,是不能被执行的,但是如果恶意代码 放在了代码段,就可以执行。

但是:

可以通过ROP创建一块可写入可执行的内存区域

ROP的含义

ROP就是相当于把程序里面不同地方的代码片段组合起来,通过一个指定流程去执行,来达到我们最终的目的

如果我们通过 ROP 写入代码,这个代码是没有被签名的,这个时候代码签名的好处就体现出来了。这段代码是不会被允许执行的

地址空间布局随机化(ASLR)

在 iOS中,二进制文件、库文件、动态链接文件、栈和堆内存地址的位置全部是随机的。

把这些文件加载到内存中的时候,它加载的机地址每次都是随机变化的,可以通过命令来查看应用模块的机地址:

  • image list -o -f

如图:
加载地址是 9dd800


应用模块机地址.png

图片.png

加密和数据保护

文件内容是根据 文件密钥加密的
文件秘钥是 根据 类密钥加密的

Snip20170705_7.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,072评论 25 707
  • 每个人站在不同的角度,看着各自的世界。如果我们每个人都站在不同的角度来观看世界,那么我们就会看见不同的世界。做人也...
    伪装的灵魂阅读 434评论 0 1
  • 议题:30天时间管理训练营小组分享 时间:2016-7-31 21:00~22:00 参与人员:全体 分享队员:...
    月芽儿王子悦阅读 506评论 0 1
  • 今天是一个特别的日子,不是因为平安夜的来临,而是今天来了,过了今天,我就四十岁了。我的生日和平安夜不期而遇,应是预...
    悠我悠心阅读 284评论 0 0