HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

Dan Guido:现代化 iOS 应用的安全性

  • 2016-06-22
  • 本文字数:1211 字

    阅读完需:约 4 分钟

移动应用的流行迎程度与日俱增,越来越多的交易开始通过移动设备完成,安全的重要性日益凸显。在 QCon New York 2016 活动名为“现代化iOS 应用的安全性”的演讲中,Dan Guido 详细探讨了有关iOS 的安全问题。

Guido 首先介绍了 iOS 应用程序中现已采用的安全机制。iOS 的安全模型包含下延至基于硬件和具体设备的加密在内的多层面安全通信机制:

  • 传输层安全:iOS 可支持安全的网络连接。
  • 数据保护:iOS 能够为应用程序使用的几乎所有文件提供强大的加密保护。
  • 代码签名:Apple 要求代码的每个片段必须包含签名,内存中的所有内容能够以每 4KB 页为一个“颗粒”追溯至开发者。
  • 运行时进程安全:iOS 会通过强大的沙箱技术隔离进程,一个进程无法访问另一个进程的内存。
  • 安全飞地(Secure Enclave):带有指纹传感器的新款 iOS 设备可将加密密钥存储在硬件中,这些密钥是在每款设备生产过程中,独立于操作系统专门为该设备生成的。

虽然这些机制为应用提供了安全的运行环境,Guido 进一步展示了一系列需要引起我们重视的威胁。

传输层安全技术并非所有网络连接必须使用的,如果不进行相应的数据加密和证书检查,信息很容易受到中间人攻击。通过对网络连接进行配置即可激活必要的安全机制,或者更简单的做法可以直接在应用中嵌入诸如 TrustKit 这样的库,借此在后台处理安全事宜。

数据保护机制非常强大,以至于最近在 Apple 和 FBI 之间造成了不小的纷争。如果使用内置的硬件密钥对数据进行加密,这些数据将无法在设备之外解密。因此敏感数据应始终使用密码和设备 ID 进行加密。然而开发者依然需要尽量避免数据泄露。有很多应用和工具会尝试从安全性不够高的位置,例如剪贴板、应用偏好设置,以及 Cookie 中查找有用的数据。另外敏感数据应尽量维持最小化痕迹,开发者应当避免备份或同步此类数据,应当从背景屏幕截图和日志中排除敏感数据,键盘缓存也需要及时停用。

根据 Guido 的介绍,遵守相关准则可进一步提高应用安全性,但还有一个问题是开发者不容忽视的:越狱。设备一旦越狱,无论用户主动越狱或在不知情的情况下“被”越狱,上述所有安全机制都会失去作用。如果开发者需要更高的安全性,应当确保设备未被越狱:

  • 越狱检测 – 开发者可以检测越狱操作留下的痕迹,例如某些特殊的文件和进程。
  • 反调试保护 – 开发者需要确保自己的应用程序不能在调试模式下运行,因为任何越狱检测操作在调试模式下都是可见的。
  • 反逆向 – 开发者需要确保自己的代码无法通过再造工程被利用。通常可通过人为增加代码体积或复杂性的方式实现。

最后 Guido 通过一些事实暗示大家,LLVM 只能生成 Bitcode 代码而非机器代码。Apple 使用这种技术的目的在于改进或优化为不同平台提供代码的方法,开发者可以借助这一概念增添 IDE 中已经具备的自动化的安全加固机制。但这一过程中也可以使用其他一些工具,例如 MAST

请注意,Qcon 大会结束后一周内,大部分演讲将免费发布至 InfoQ。

查看英文原文 Dan Guido: Modern iOS Application Security

2016-06-22 19:001650
用户头像

发布了 283 篇内容, 共 106.6 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

kubernetes镜像构建和扫描

CTO技术共享

为什么说:被观察者是 push 数据,迭代者是 pull 数据?

掘金安东尼

前端 函数式编程 8月月更

[JS真好玩] 遇到表格,手动翻页太麻烦?我教你写脚本,一页展示所有数据

HullQin

CSS JavaScript html 前端 8月月更

基于STM32L431设计的云端绿化管理系统(ESP8266+腾讯物联网云平台)

DS小龙哥

8月月更

最新版MySQL8 绝对有用的lag函数实现同比、环比、均差计算

知识浅谈

MySQL 8月月更

【Gopher 学个函数】边学边练,简单为 Go 上个分

梦想橡皮擦

Python 爬虫 8月月更

程序员最容易读错的单词,听到status我炸了

艾小仙

Java 前端

【算法实践】| 手把手带你实现快速排序算法

迷彩

快速排序 算法实践 8月月更

架构实战营 毕业总结

Gor

Curve Testing Camp Time|万元大奖等你来拿!

张慧

分布式存储 curve

机器学习服务文本翻译能力升级,中文直译模型让译文表达更地道!

HarmonyOS SDK

《博弈论》— 人生何处不博弈

蔡农曰

读书笔记 博弈论

P6项目管理系统的优缺点是什么?

爱吃小舅的鱼

项目管理 项目管理软件

C++多态之析构和纯虚析构分析与示例(三)

CtrlX

c++ 后端 面向对象思想 8月月更

数据治理(六):编译Atlas安装包

Lansonli

数据治理 8月月更

电商秒杀系统设计(架构实战营 毕业设计项目)

Gor

头脑风暴:最大子序和

HelloWorld杰少

数据结构 算法 LeetCode 8月月更

SpringBoot 整合 Junit

springboot junit5 8月月更

动态尺寸模型优化实践之Shape Constraint IR Part II

阿里云大数据AI技术

深度学习 编译器 优化

【Java】:二维数组的定义、初始化、长度以及循环遍历等...

翼同学

Java 学习 编程语言 分享 8月月更

golang实战之flag包

程序员欣宸

golang 8月月更

软件测试中的树莓酱定律

BY林子

软件测试 敏捷测试 质量内建

阿里云林小平:如何实现应用的持续发布?

阿里云弹性计算

持续发布 应用 自动化运维

Kubernetes中API安全加固

CTO技术共享

什么是公共云、私有云、混合云、社区云,四者分别有啥区别?

wljslmz

云计算 8月月更

企业分账如何帮助用户解决成本优化和预算分配的问题

阿里巴巴中间件

阿里云 Serverless 云原生 SAE

leetcode 560. Subarray Sum Equals K 和为 K 的子数组(中等)

okokabcd

LeetCode 算法与数据结构

RocketMQ高可用设计之消息重试机制

急需上岸的小谢

8月月更

Latex安装教程(附美赛论文latex模板)

乌龟哥哥

8月月更

Excelize 发布 2.6.1 版本更新,支持工作簿加密保护

xuri

开源 数据分析 Go 语言 Excelize Excel工具

一对一语音直播系统源码——如何解决音视频直播技术难点

开源直播系统源码

软件开发 直播系统源码 语音直播系统源码 语音直播源码 一对一语音直播

Dan Guido:现代化iOS应用的安全性_安全_Ralph Winzinger_InfoQ精选文章