基础介绍

iOS 系统介绍

  • 移动操作系统
  • 基于在 XNU 内核, Darwin OS
  • iOS 是闭源操作系统
  • 使用 OC 与 Swift 作为开发语言
  • 构建在 Cocoa Touch API

iOS 应用沙盒

  • 基于 TrustedBSD MAC 强制访问框架
  • 第三方应用程序运行在 mobile 用户权限下
  • 只有系统应用以 root 用户运行
  • 应用程序只能访问自己的文件和数据
  • IPC 通信被限制

Jailbreak

不完美越狱:设备重启后,之前的越狱状态会失效,需要手动重新越狱
完美越狱:越狱后设备重启,设备仍处于越狱状态,即重启不会破坏越狱环境

  • 可越狱系统: 7.0 ~ 12.4 ,部分不可越狱
  • 越狱软件,例如 unc0ver iOS11.0 ~ 12.3.x ~ 12.4.1
  • checkra1n ,搭载 A5 ~ A11 处理器的设备 ~ iPhone X

越狱后可以安装Cydia.app

越狱目的:获取root 权限,如果没有越狱,所有的操作就只能局限于沙盒 ( 而越狱之后可以访问设备的整个文件系统、更改系统外观和功能、编写命令行工具、 root App 及动态注人动态库到指定应用等。虽然越狱后可以获取 root 权限,但是原来在沙盒内的应用在越狱之后还是在沙盒内

工具介绍

macos

  • iTerm2: 代替默认的 Terminal ,提供了很多高级设置,例如自动补全、高亮等
  • oh my zsh: 可以自定义主题、 Git 显 7K 、 Tab 补全等
  • Alfred: 快速打开软件,自定义脚本执行
  • libimobiledevice: 提供了很多能与 iOS 交互的工具,例如端口映射査看日志 安装应用,查看应用 bundleid等 。
  • class dump, 经过编译的 Objective-C 二进制文件中含有所有的类、协议、方法和实例变量等信息,工具可以获取这些信息 ,在分析过程中,通过该工具生成的头文件就可以快速找到想要的方法或属性。
  • 转发端口 iproxy 22 2222
  • theos, 越狱开发工具包
  • IDA, Hopper 经典反汇编工具

ios

  • OpenSSH 就可以通过 Cydia 装在手机上,远程连接。
  • Apple File Conduit “2” , 访问越狱设备的文件系统
  • Cydia Substrate, 一个用于持续性动态篡改的框架,允许第三方开发者在越狱系统的方法里打一些运行时补丁和扩展一些方法,是开发越狱插件的基石。
  • appsync, 直接修改一个应用的结构或文件会破解应用本身的签名信息,安装修改后的应用会“FailedtoverifycodesignatureofXXX” 这样的错误。安装 appsync ,让系统不再验证应用的签名。
  • Cycript, 使用 OC 和 js 组合语法查看 修改运行时 App 内存信息工具,其官网提供了它的一些经典使用方法 ,Cydia 中搜索 Cycript 并安装
  • flex3, 第三方修改器 动态修改工具。
  • passionfruit iOS 应用安全分析
  • Frida,跨平台动态分析套件,使用 javascript 脚本注入进程,执行二进制插装。可与调试器共存。在脚本和原生函数中实现了双向 bridge 。可 hook 函数调用修改参数,也可使用脚本调用原生函数实现复杂功能。内置对 Objective C 运行时支持
  • 其他 ,dv cmds,iFIle …

常见检测点

  • 获取 IPA 文件,检测二进制
  • 检测本地数据存储 (caches, binary cookies, plists, database)
  • Bypass certificate pinning(SSLKill Switch)
  • 分析 HTTP(s) 服务端漏洞
  • 越狱检测
  • 分析 App 逻辑
  • 其他:日志输出、应用程序缓存快照、键盘

iOS 应用安全问题

二进制文件

解密二进制文件:dumpdecrypted – decrypt the application from AppStore

应用程序特征

IPA 文件
  • IPA 文件是 ZIP 文件
  • 包含可执行二进制文件,图片以及其他初始化数据
静态分析
  • 通常是 FAT 文件 包含 ARMv7(s) 和 ARM64 架构
  • 分析需要解密(砸壳)位二进制文件

应用程序路径定位

  • 所有的系统应用在 /Applications
  • 使用 installipa 获取应用程序信息

砸壳

ARC

$ otool -Iv CaifuDriver | grep release

SSP

$ tool -Iv CaifuDriver | grep stack

PIE

$ otool -hv CaifuDriver

敏感信息

文件存储

  • 安全问题

    • 存储的数据包括自动登录信息、 Cookie 、手势密码
    • NSUserDefaults 、数据库文件、普通文件
    • iOS 8.3 以下系统版本或越狱设备上, App 数据文件可导出
  • 解决方案
    • 重要数据存储至 Keychain
    • 数据库文件可设置 sqlite key 进行数据库加密
    • 避免明文存储

日志输出

  • 安全问题

    • NSLog 或第三方库 Log 中打印调试信息
    • 输出敏感信息或函数调用流程
  • 解决方案
    • 使用宏来控制开发版本和发布版本的日志输出
    • 注意关闭第三方 SDK 的日志,一般都有相关的接口

手势密码

  • 安全问题

    • 手势密码被反解得到明文
    • 手势密码相关数据可被修改
  • 解决方案
    • 本地认证应采用 设备相关信息 密码 进行 hash
    • 多次验证失败的情况,设置尝试次数阈值
    • 手势密码相关信息加密存储

后台快照

  • 安全问题

    • App 切换至后台时会保存当前界面的快照
    • 泄露界面包含的敏感信息
  • 解决方案
    • [UIApplicationDelegate applicationDidEnterBackground] 处理

数据加密

加密算法

  • 安全问题

    • 算法自身问题
  • 解决方案
    • 避免使用自定义加密算法
    • 使用 AES 、 DES 等算法
    • 针对数据安全性要求高的场景,使用非对称加密

算法关键数据

  • 安全问题

    • 算法 KEY 生成或存储不当
    • 对称加密 KEY 硬编码
    • 攻击者可逆向分析程序获取硬编码数据
  • 解决方案
    • 以设备相关的信息作为基础生成数据 (identifierForVendor)
    • 算法关键数据需具有独立性

网络交互

HTTPS 认证

逐渐放宽服务器的认证要求,并检测流量是否成功通过每个阶段的Burp 代理

  1. Set Burp in proxy settings, make sure that SSL Killswitch is disabled and that Burp Profile is not installed → no certificate validation
  2. Install Burp Profile (certificate) →no certificate pinning
  3. Enable SSL Killswitch →certificate pinned
  4. Bypass certificate pinning manually

数据传输

  • 安全问题

    • 敏感数据使用 HTTP 传输
    • 使用 HTTPS ,未进行服务器证书校验
  • 解决方案
    • 使用 HTTPS 应对数据安全性较高的场景,在客户端进行证书校验
    • 对于 HTTP ,避免明文传数据,在必要的情况下使用非对称加密

WebView & Javascript 交互

  • 安全问题

    • 注册获取信息( GPS 等)接口,恶意网页通过 js 调用获取信息
    • 注册 Native 接口缺陷,恶意 js 代码导致 App 崩溃
  • 解决方案
    • 使用 safari 打开第三方链接
    • 避免注册涉及敏感信息的接口,如获取地理信息位置等
    • 使用 WebView 加载页面并涉及 js 调用时,进行白名单检查

应用完整性

越狱环境检测

  • 安全问题

    • 提示用户处于越狱环境中
  • 解决方案
    • 基于文件系统的检测
    • 基于 API 调用的检测
基于文件的检测
  • /Library/MobileSubstrate/MobileSubstrate.dylib
  • /System/Library/LaunchDaemons/com.saurik.Cydia.Startup.plist
  • /var/cache/apt
  • /var/lib/cydia
  • /bin/sh
  • /etc/sshd_config
  • /Applications/Cydia.app
基于 API 调用的检测
  • fork :在沙盒中 fork 是被限制调用的,检测返回值
  • dyld 系列函数:检测进程都加载了哪些 dylib
    • _dyld_image_count
    • _dyld_get_image_name

进程反调试

  • 威胁

    • 攻击者通过调试,分析程序逻辑
  • 解决方案
    • sysctl 检测进程状态
    • ptrace 禁止调试器附加

进程反注入

  • 威胁 (dylib 注入)

    • 通过 Hook 关键函数,可窃取应用数据
    • 辅助攻击者逆向分析应用程序流程
  • 解决方案
    • 限制模式
    • 设置链接选项 -Wl, -sectcreate,__RESTRICT,__restrict,/dev/null

代码实现缺陷

逻辑缺陷

bp抓包修改包中内容

数据解析

  • JSON 类型混淆
  • 解决方案
    • 保证数据源可信( HTTPS)
    • 验证 JSON 数据合法性( JSON schema)
    • 在使用时验证数据类型的合法性(扩展 NSDictionary)

第三方库

  • 第三方库可能存在的安全隐患

    • 拒绝服务
    • 信息泄露
    • 逻辑缺陷
  • 解决方案
    • 及时更近安全更新

FFmpeg

  • CVE 2016 1897/CVE 2016 1898 远程文件读取
  • 可能导致沙盒内文件被读取并上传给攻击者

AFNetworking

  • 低于 2.5.3 存在证书校验绕过的问题
  • 由于代码实现的逻辑问题引起
  • 攻击者使用非法证书可实现 HTTPS 中间人攻击

其他

开发环境安全性

  • XCodeGhost 事件
  • 开发环境工具链纯净
  • 解决方案:使用官方渠道下载的开发环境

工程编译打包

  • 资源打包不当,信息暴露

    • 泄露内部开发、设计文档
    • 泄露团队成员信息及联系方式
    • 泄露源码
    • 泄露开发密钥及 mobileprovision 文件
  • 解决方案
    • 管理好 Xcode 的 “Build Phases” 、 “Copy Bundle Resources"

iOS应用程序安全风险及漏洞解析相关推荐

  1. 深度解析~iOS应用程序~生命周期

    摘要:iOS应用程序一般都是由自己编写的代码和系统框架组成,系统框架提供一些基本infrastructure给App来运行,而开发者则自己编写代码定制App的外观和行为,了解iOS Infrastru ...

  2. [转]25个增强iOS应用程序性能的提示和技巧

    在开发iOS应用程序时,让程序具有良好的性能是非常关键的.这也是用户所期望的,如果你的程序运行迟钝或缓慢,会招致用户的差评.然而由于iOS设备的局限性,有时候要想获得良好的性能,是很困难的.在开发过程 ...

  3. iOS开发者程序许可协议

    请仔细阅读下面的许可协议条款和条件之前下载或使用苹果软件.   这些条款和条件构成你和苹果之间的法律协议. iOS开发者程序许可协议 目的 你想使用苹果软件(如下定义)来开发一个或多个应用程序(如下定 ...

  4. 弯道超车老司机戏耍智能合约——竞态条件漏洞 | 漏洞解析连载之三

    安全,区块链领域举足轻重的话题,为什么一行代码能瞬间蒸发几十亿市值?合约底层函数的使用不当会引起哪些漏洞?重入漏洞会导致什么风险? 「区块链大本营」携手「链安科技」团队重磅推出「合约安全漏洞解析连载」 ...

  5. 25个增强iOS应用程序性能的提示和技巧 — 中级篇

    本文由破船译自:raywenderlich 转载请注明出处:BeyondVincent的博客 _____________ 在开发iOS应用程序时.让程序具有良好的性能是非常关键的.这也是用户所期望的. ...

  6. php进攻教程,如何对PHP程序中的常见漏洞进行攻击(下)_php基

    如何对PHP程序中的常见漏洞进行攻击(下)_php基 发布时间:2016-06-17 来源: 点击: 次 如何对PHP程序中的常见漏洞进行攻击(下) 翻译:analysist(分析家) 来源:http ...

  7. 如何对PHP程序中的常见漏洞进行攻击(上)

    如何对PHP程序中的常见漏洞进行攻击(上) 创建时间:2001-07-17 文章属性:翻译 文章来源:http://www.china4lert.org 文章提交:analysist (analysi ...

  8. 未签名的应用程序请求对系统进行无限制访问_OWASP Top 10 2017 10项最严重的 Web 应用程序安全风险 (完结篇)...

    OWASP Top 10 2017 | 10项最严重的Web 应用程序安全风险(一)10项最严重的Web 应用程序安全风险(二) A7:2017 跨站脚本(XSS) 当应用程序的新网页中包含不受信任的 ...

  9. 将 75000 行原生 iOS 应用程序移植到 Flutter 后,结果太惊讶!

    [CSDN编者按]很少有文章,介绍如何将大型应用,移植到Flutter.而本文的作者--一位来自澳洲的Native iOS & Flutter的开发者,尝试这样做了,结果让他十分惊讶.到底是什 ...

  10. 25个增强iOS应用程序性能的提示和技巧--高级篇

    在开发iOS应用程序时,让程序具有良好的性能是非常关键的.这也是用户所期望的,如果你的程序运行迟钝或缓慢,会招致用户的差评.然而由于iOS设备的局限性,有时候要想获得良好的性能,是很困难的.在开发过程 ...

最新文章

  1. Python maketrans() 方法
  2. 南洋理工75页最新「深度学习对话系统」大综述论文,最全面概述深度学习对话技术进展...
  3. 不正确的c语言语句是,最基本的C语言语句是( )
  4. ios学习——键盘的收起
  5. python json dumps utf8_Python2操作JSON出现乱码的解决方案
  6. VS Code Remote 发布!开启远程开发新时代
  7. 西南医院微服务咋查得到_#全国最好医院排行榜#发布:成都这4家牛了!四川31个专科排全国前十(总榜)...
  8. 实验五 网络编程与安全-----实验报告
  9. python怎么命名未知数_Python4要来了?快来看看Python之父怎么说
  10. Zookeeper 入门示例
  11. 安装vs2013以后,链接数据库总是报内存损坏,无法写入的错误
  12. 原生JS大揭秘—原型链
  13. mysql ddl 进度_mysql 5.7 Stage Tracking DDL进度跟踪
  14. python阈值分割_Python实现otsu阈值分割算法
  15. element ui html编辑器,vue+element-ui 使用富文本编辑器
  16. 看了本文让你laravel安装laravel-queue-rabbitmq一路顺风
  17. mysql创建新用户
  18. 由Sensor光谱响应曲线联想到的白平衡增益计算
  19. Python 基于透明元素裁切图片(类似Photoshop)
  20. 【经典贪心练习】金银岛

热门文章

  1. mysql版本号xx.xx.xx类型字段排序问题解决
  2. linux修改dns教程,修改Centos的DNS地址
  3. Android DevicePolicyManager 设备管理
  4. PHP将PPT文件转成图片
  5. 大学英语精读第三版(第四册)复习笔记——文章内容摘要
  6. TIMER:肿瘤浸润免疫细胞分析的综合网站
  7. Dynamics AX2012 General ledger
  8. 开源了一个私人云盘——蓝眼云盘
  9. 猫怎么设置虚拟服务器,光纤猫设置虚拟服务器
  10. Ubuntu18.04中cURL 77 错误:error setting certificate verify locations