iOS安全机制汇总

957 阅读3分钟

证书

苹果颁发的CA证书:

1、个人开发者/公司开发者账号/企业级开发者账号

2、CA根证书 -> 开发者证书 / 生产证书(App Store或者企业级分发平台)

沙盒机制:

每个iOS App都有自己的沙盒目录,保证各自数据安全,但也限制了应用之间文件的共享,后期Apple开放了一个共有空间的文件夹.app给所有的App公用。

代码签名

1、找到ipa包,复制一份出来,修改后缀ipa为zip,然后解压,在Payload目录下就有我们的.app文件了

2、在终端中输入命令 codesign --verify YourApp.app,如果没有输出任何信息则表示签名信息没有被破坏

3、在终端中输入命令 codesign -vv -d YourApp.app,输出签名相关信息如下:

Executable=/Users/hao/Archives/Debug 2021-12-27 17-26-26/Payload/YourApp.app/YourApp

Identifier=com.wokeji.your

Format=app bundle with Mach-O universal (armv7 arm64)

CodeDirectory v=31900 size=196420 flags=0x0(none) hashes=15262+7 location=embedded

Signature size=23445

Authority=Apple Development: 论语 周 (HRXXXXXXXX)

Authority=Apple Worldwide Developer Relations Certification Authority

Authority=Apple Root CA

Signed Time=Dec 27, 2021 at 5:26:13 PM

Info.plist entries=50

TeamIdentifier=XXXXXXXXX

Sealed Resources version=2 rules=10 files=1837

Internal requirements count=1 size=188

用户权限隔离

iOS使用了用户权限进行隔离。系统中的浏览器、电话、短信以及从AppStore上下载的应用,这些都以mobile用户权限运行,只有重要的系统进行才能以root用户权限运行。 这样一来计时恶意软件安装成功,也会由于存在权限限制,而大大降低恶意攻击的可能性。

数据执行保护

iOS系统有DEP(Data Execution Prevention,DEP)数据执行保存机制,该机制可以有效区分内存中的数据区域和可执行的命令。他只允许执行二进制代码而不能执行数据,数据段只能读写,不能执行,如果我们通过vm_protect函数将数据段的属性修改为可读可写可执行就会报错。

地址随机化

ASLR(Address Space Layout Randomization)能够让动态库文件、代码段、数据段的内存地址在每次加载的时候都是随机的。

_dyld_get_image_vmaddr_slide函数可以获取模块的ASLR偏移地址 _dyld_get_image_header函数可以获取模块的基址

程序每次运行偏移地址和基址都是随机的,比般情况下和上次运行不会相同 每次重启手机之后,在内核中模块的基地址也是随机的。

后台程序

Android应用有Service,它可以在后台执行任务,iOS只有少量的功能:音乐播放、获取位置信息等能在后台运行。除此之外iOS还有个特殊的守护程序deamon 一直监听一些系统级别的功能,如电话功能,以保证用户在使用其他App的时候能及时的接电话。