ios应用推广_ios应用包怎么添加
由于工作需要,开始学习 iOS 安全测试。本文主要 iOS 平台的安全特性总览。
由于工作需要,开始学习 iOS 安全测试本文主要是 iOS 平台的安全特性概览翻译自 https://github.com/OWASP/owasp-mstg/blob/master/Document/0x06a-Platform-Overview.md 。
iOS 是为苹果移动设备(包括 iPhone、iPad 和 iPod Touch)提供支持的移动操作系统它也是 Apple tvOS 的基础,Apple tvOS 继承了 iOS 的许多功能本节从架构角度介绍 iOS 平台。
将讨论以下五个关键领域:1. iOS 安全架构2. iOS 应用程序结构3. 进程间通信(IPC)4. iOS 应用程序发布5. iOS 应用程序攻击面与 Apple 桌面操作系统 macOS(以前称为OS X)类似,iOS 基于Darwin。
Darwin 是 Apple 开发的开源Unix 操作系统Darwin 的内核是 XNU(“ X不是Unix”),它是一个混合了 Mach 和 FreeBSD 内核组件的混合内核但是,iOS 应用程序在比桌面应用程序更严格的环境中运行。
iOS 应用在文件系统级别彼此隔离,并且在系统 API 访问方面受到很大限制为了保护用户免受恶意应用程序的侵害,Apple 限制并控制了对允许在 iOS 设备上运行的应用程序的访问苹果的 App Store 是唯一的官方应用程序分发平台。
在这里开发人员可以提供他们的应用程序,而消费者可以购买,下载和安装应用程序这种发布方式不同于Android,后者支持多个应用商店和旁载(无需使用官方AppStore 即可在 iOS 设备上安装应用)在 iOS 中,旁载通常是指通过 USB 安装应用程序的方法,尽管在 。
Apple Developer Enterprise Program 下还有一些其他未使用 App Store 的企业级 iOS 应用程序分发方法过去,只有通过越狱或复杂的解决方法才能进行旁载在 iOS 9 或更高版本中,可以通过 Xcode 旁载。
iOS 应用程序通过 Apple 的 iOS 沙箱(历史上称为 Seatbelt)彼此隔离,这是一种强制访问控制(MAC)机制,用于描述应用程序可以访问和不能访问的资源与 Android 广泛的 Binder IPC 相比,iOS 提供的 IPC(进程间通信)选项很少,从而最大程度地减少了潜在的攻击面。
另一个安全优势是统一的硬件以及紧密的软硬件集成每个 iOS 设备都提供安全特性,例如安全启动,硬件支持的钥匙串和文件系统加密(在iOS 中称为数据保护)通常,iOS 更新通常会迅速推广到很大一部分用户,从而减少了支持不受保护的旧 iOS 版本的需求。
尽管 iOS 优势众多,但 iOS 应用开发人员仍然需要担心安全性数据保护,钥匙串,TouchID/Face ID身份验证以及网络安全性等方面仍然会出现错误在以下章节中,我们将介绍 iOS 安全体系结构,说明基本的安全测试方法,并提供逆向工程方法。
iOS 安全架构苹果在《 iOS安全指南》中正式记录了 iOS 安全体系结构,该体系结构包含六个核心功能Apple 针对每个主要的 iOS 版本更新了此安全指南:硬件安全安全启动代码签名沙箱加密和数据保护。
通用利用缓解措施
硬件安全iOS 安全体系结构充分利用了基于硬件的安全功能,以增强整体表现每个 iOS 设备都带有两个内置的 AES 256 位密钥设备的唯一标识(UID)和设备组标识(GID)是 AES 256 位秘钥,并在生产过程中烧录或者编译到应用处理器(AP)和安全防护处理器(SEP)中的。
通过软件或调试接口(例如JTAG)无法直接读取这些密钥加密和解密操作由对这些密钥具有独占访问权的硬件 AES 加密引擎执行GID 是由一类设备中的所有处理器共享的值,用于防止篡改固件文件和与用户的私人数据不直接相关的其他加密任务。
每个设备唯一的 UID 用来保护用于设备级文件系统加密的密钥体系由于在制造过程中未记录 UID,因此,甚至 Apple 也无法还原特定设备的文件加密密钥为了安全删除闪存中的敏感数据,iOS 设备包含一项称为 。
Effaceable Storage的功能此功能实现对存储的底层直接访问,从而可以安全地擦除选定的块安全启动开启 iOS 设备电源后,它将从称为引导 ROM 的只读存储器中读取初始指令,引导系统引导 ROM 包含不可变的代码和 Apple Root CA,Root CA 在制造过程中被烧录到硅芯片中,从而建立了信任源。
接下来,Boot ROM 要确保 LLB(底层 Bootloader)签名正确,而 LLB 还要检查 iBoot Bootloader 签名是否正确验证签名后,iBoot 将检查下一个引导阶段(即iOS内核)的签名。
如果这些步骤中的任何一个失败,引导过程将立即终止,并且设备将进入恢复模式并显示还原屏幕但是,如果 Boot ROM 无法加载,设备将进入一种特殊的低级恢复模式,称为设备固件升级(DFU)这是将设备还原到原始状态的最后手段。
在此模式下,设备不会显示任何活动迹象即,其屏幕将不会显示任何内容这整个过程称为“安全启动链”其目的是验证引导过程的完整性,确保系统及其组件由 Apple 编写和分发安全启动链由内核、引导加载程序、内核扩展和基带固件组成。
代码签名苹果已经实施了精心设计的 DRM(数字版权管理)系统,以确保只有苹果认证的代码才能在其设备上运行,即由苹果签名的代码换句话说,除非苹果明确允许,否则你将无法在没有越狱的 iOS 设备上运行任何代码。
终端用户只能通过官方的 Apple App Store 安装应用程序由于这个原因(和其他原因),iOS 已被比作水晶监狱部署和运行应用程序需要开发者资料和 Apple 签名的证书开发者需要在 Apple 进行注册,加入Apple 开发者计划并按年订阅才能获得全面的开发与部署的可能性。
还有一个免费的开发者帐户,您可以通过侧面加载来编译和部署应用程序(但不能在 App Store 中分发它们)加密和数据保护FairPlay 代码加密适用于从 App Store 下载的应用程序FairPlay 是在购买多媒体内容时作为 DRM(数字版权管理) 开发的。
最初,FairPlay 加密被应用于MPEG 和 QuickTime 流,但是相同的基本概念也可以应用于可执行文件基本思路如下:一旦注册了新的 Apple 用户帐户或Apple ID,就会创建一个公钥/私钥对并将其分配给你的帐户。
私钥安全地存储在你的设备上这意味着FairPlay 加密的代码只能在与你的帐户关联的设备上解密逆向 FairPlay 加密通常是通过在设备上运行应用程序,然后从内存中转储解密的代码来获得的(另请参阅“ iOS上的基本安全性测试”)。
自 iPhone 3GS 发布以来,Apple 已在其 iOS 设备的硬件和固件中内置了加密功能每个设备都有专用的基于硬件的加密引擎,该引擎提供 AES 256 位加密和SHA-1 哈希算法的实现此外,每个设备的硬件中都内置了一个唯一标识符(UID),并将 AES 256 位密钥融合到了应用处理器中。
此 UID 是唯一的,且未在其他位置记录在编写本文时,软件和固件都无法直接读取 UID由于密钥已被烧录硅芯片中,因此无法对其进行篡改或绕过只有加密引擎才能访问它将加密构建到物理体系结构中并使其成为默认的安全功能,就可以对存储在 iOS 设备上的所有数据进行加密。
这就使得数据保护虽然在软件级别实现,但它是与硬件和固件加密一起使用的,从而提供更高的安全性启用数据保护后,只需在移动设备中建立密码,每个数据文件就会与特定的保护类相关联每个类都支持不同级别的可访问性,并根据何时访问数据来保护数据。
与每个类关联的加密和解密操作基于多种密钥机制,秘钥机制利用了设备的 UID 、密码、类密钥,文件系统密钥和每个文件密钥每个文件的密钥用于加密文件的内容类密钥是对文件密钥的封装,并存储在文件的元数据中文件系统密钥用于加密元数据。
UID 和密码保护类密钥这些操作对用户透明要启用数据保护,在访问设备时必须使用密码密码解锁设备密码与 UID 结合使用,还可以创建iOS 加密密钥,从而更能抵抗黑客攻击和暴力破解攻击启用数据保护是要求用户在其设备上使用密码的主要原因。
沙箱FairPlay 代码加密适用于从 App Store 下载的应用程序FairPlay 是在购买多媒体内容时作为 DRM(数字版权管理) 开发的appsandbox是一种 iOS 访问控制技术它在内核级别运行,目的是限制应用程序受到威胁时可能发生的系统和用户数据损坏。
自 iOS 的第一个发行版以来,沙箱就已成为一项核心安全功能所有第三方应用程序都在同一用户(mobile)下运行,并且只有少数系统应用程序和服务以root 用户(或其他特定系统用户)身份运行常规的 iOS 应用程序被限制在一个容器中,该容器限制了对该应用程序自身文件和非常有限数量的系统 API 的访问。
对所有资源(例如文件,网络套接字,IPC和共享内存)的访问都由沙箱控制这些限制的工作方式如下:通过类似于chroot 的进程,app 进程被限制在其自己的目录(在/var/mobile/Containers/Bundle/Application/ 或 /var/containers/Bundle/Application/下,具体取决于 iOS 版本)。
修改了 mmap 和 mmprotect 系统调用,以防止应用程序将可写内存页面变为可执行,并阻止进程执行动态生成的代码结合代码签名和 FairPlay,严格限制了在特定情况下可以运行的代码(例如,通过 App Store 分发的应用程序中的所有代码均已获得 Apple 认证)。
进程彼此隔离,即使它们在操作系统级别上由同一 UID 拥有也是如此不能直接访问硬件驱动程序必须通过 Apple 的公共框架才能访问它们通用利用环节措施每次执行程序时,ASLR 都会将程序的可执行文件、数据、堆和栈的内存位置随机化。
因为共享库必须是静态的才能被多个进程访问,所以每次操作系统启动时(而不是每次调用程序时),共享库的地址都是随机的这使得特定功能和库的内存地址难以预测,从而防止了诸如返回 return-to-libc 之类的攻击,该攻击涉及 libc 中基础函数的内存地址。
XN机制允许 iOS 将进程的选定内存段标记为不可执行在 iOS 上,进程栈和用户模式进程堆被标记为不可执行不可同时将可写页面标记为可执行页面这样可以防止攻击者执行注入堆栈或堆中的机器代码iOS 上的软件开发。
与其他平台一样,Apple 提供了软件开发工具包(SDK),可帮助开发人员开发、安装、运行和测试本地 iOS 应用程序Xcode 是用于 Apple 软件开发的集成开发环境(IDE)iOS 应用程序是用Objective-C 或 Swift 开发的。
Objective-C 是一种面向对象的编程语言,它将Smalltalk 样式的消息传递添加到 C 编程语言中它用于开发 macOS 上的桌面应用程序和 iOS 上的移动应用程序Swift 是 Objective-C 的后继产品,并允许与 Objective-C 互操作。
Swift 于 2014 年随 Xcode 6 一起推出在非越狱设备上,有两种方法可以从App Store中安装应用程序:通过企业移动设备管理这需要 Apple 签署的公司范围的证书通过旁载,即使用开发者的证书对应用进行签名,然后通过 Xcode(或 Cydia Impactor)将其安装在设备上。
仅可以使用相同的证书安装在数量有限的设备上iOS 上的应用iOS 应用程序包含在 IPA( iOS 应用程序商店软件包)文件中IPA 文件是 ZIP 压缩的存档,其中包含执行该应用程序所需的所有代码和资源。
IPA 文件具有内置的目录结构下面的示例从高层次显示了此结构:/Payload/ 文件夹包含所有应用程序数据我们将更详细地说明此文件夹的内容/Payload/Application.app 包含应用程序数据本身(ARM 编译的代码)和关联的静态资源。
/iTunesArtwork 是用作应用程序图标的 512x512 像素 PNG 图像/iTunesMetadata.plist 包含各种信息,包括开发者的名称和ID、包标识符、版权信息、类型、应用程序的名称、发行日期、购买日期等。
/WatchKitSupport/WK 是扩展包的示例该包含扩展和用于Apple Watch 上管理界面和响应的用户交互的控制器IPA Payloads - 深入分析让我们仔细看看 IPA 容器中的不同文件。
苹果使用相对扁平的结构,几乎没有多余的目录来节省磁盘空间并简化文件访问顶级包目录包含应用程序的可执行文件和应用程序使用的所有资源(例如,应用程序图标、其他图片和本地化内容)MyApp:可执行文件,包含已编译(不可读)的应用程序源代码。
Application:应用程序图标Info.plist:配置信息,例如包ID、版本号和应用程序显示名称Launch images:以特定方向显示初始应用程序界面的图像系统使用提供的这些启动图像中的一个作为临时背景,直到应用程序完全加载为止。
MainWindow.nib:启动应用程序时加载的默认接口对象然后,其他接口对象要么从其他 nib 文件加载,要么由应用程序以编程方式创建Settings.bundle:将在“设置”应用中显示的此应用程序的首选项。
Custom resource files:非本地化的资源放置在顶级目录中,本地化的资源放置在应用程序包的特定语言的子目录中资源包括 nib 文件、图像、声音文件、配置文件、字符串文件以及应用程序使用的任何其他自定义数据文件。
应用程序支持的每种语言都有一个language.lproj 文件夹它包含一个 storyboard 和 strings 文件storyboard 是 iOS 应用程序用户界面的直观表示它显示屏幕以及这些屏幕之间的连接。
strings 文件格式由一个或多个键值对和可选注释组成。
在越狱设备上,可以通过多种具有解密主应用程序二进制文件并重构 IPA 文件的工具来得到 IPA 文件同样,在越狱设备上,可以使用 IPA Installer安装 IPA 文件在进行移动安全评估时,开发人员通常会直接向您提供 IPA 文件。
他们可以向你发送实际文件,或提供对他们使用的特定于开发的发行平台的访问权限,例如 HockeyApp 或 TestFlight应用权限与 Android 应用程序(Android 6.0(API级别23之前))相比,iOS 应用程序没有预先分配的权限。
而是当应用程序首次尝试使用敏感 API 时,要求用户在运行时授予权限“设置”>“隐私”菜单中列出了已被授予权限的应用程序,允许用户修改特定于应用程序的设置Apple 将此权限概念称为隐私控制iOS开发人员无法直接设置请求的权限-当使用敏感的 API 时间接请求权限。
例如,当访问用户的联系人时,对CNContactStore的任何调用都会打断应用程序,弹框要求用户授予或拒绝访问权限从 iOS 10.0 开始,应用程序必须包含使用情况描述键,以说明其请求的权限类型和需要访问的数据(例如NSContactsUsageDescription)。
从iOS10开始,如果你的App想要访问用户的相机、相册、麦克风、通讯录等等权限,都需要进行相关的配置,不然会直接crash需要在info.plist中添加App需要的一些设备权限(额外增加的说明)以下API 需要
用户许可:ContactsMicrophoneCalendarsCameraRemindersHomeKitPhotosHealthMotion activity and fitnessSpeech recognition
Location ServicesBluetooth sharingMedia LibrarySocial media accountsiOS 应用程序攻击面iOS 应用程序攻击面由应用程序的所有组件组成,包括发布应用程序和支持其功能所需的资源。
如果没有做到以下,iOS 应用程序可能容易受到攻击:校验 IPC 通信或 URL schemes 的所有入参,另请参阅:Testing Custom URL Schemes校验用户的所有输入字段校验加载到 WebView 中的内容,另请参阅:
Testing iOS WebViewsDetermining Whether Native Methods Are Exposed Through WebViews安全地进行服务器与移动应用程序之间的通信,确保不收中间人攻击,另请参阅:
Testing Network CommunicationiOS Network APIs安全地存储所有本地数据,安全地加载存储中不受信任的数据另请参阅:Data Storage on iOS在被攻破的环境中对自身进行保护,如重打包或者其他本地攻击,另请参与:
iOS Anti-Reversing Defenses- End -
免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186