速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

现代 iOS 应用安全

  • 2016-08-08
  • 本文字数:1688 字

    阅读完需:约 6 分钟

在 QCon 纽约 2016 大会上, Trail of Bits 首席执行官兼安全专家 Dan Guido 阐述了如何确保 iOS 应用安全,包括正确地使用所有 iOS 安全配置,而且不要忘记,应用可能运行在一部已经越狱的手机上。

如 Guido 所言,iOS 应用安全取决于操作系统层,后者提供了应用程序代码签名和一个沙箱模型。代码签名让追踪每个 4KB 页的所有者成为可能,而沙箱模型会限制应用访问其他的应用,保护系统文件和资源,这样,即使是恶意应用也很难制造任何麻烦。

据 Guido 介绍,iOS 安全的基础是 Secure Enclave,这是一个在制造时分配的单独的设备密匙,在应用层无法访问,也就是说,无法在 Secure Enclave 外面读取安全密钥。这项技术被用于 iOS 上所有的加密操作以及 Apple Pay 和 Keychain 保护。

按照 Guido 的说法,开发人员应该遵循三个基本的 iOS 应用安全原则。

  • 仅使用 HTTPS:这通过总是在 URL 指定https来实现。在这种情况下,NSURLConnectionNSURLSession会使用 App Transport Security (ATS),这可以保证你恰当地使用了 TLS 1.2、证书验证等。此外,Guido 建议使用 TrustKit ,该框架让你可以轻松地部署绑定到任意 iOS 或 OS X 应用的 SSL 公共密钥,监控绑定验证失败。

  • 使用加密:应该使用 DPAPI 和 Keychain 加密所有的文件、密码和令牌。Guido 用一些时间介绍了 DPAPI 提供的选项:

    • 加密文件:NSFileProtectionCompleteNSFileProtectionCompleteUnlessOpenNSFileProtectionCompleteUntilFirstAuth
    • 将 NSData 写到磁盘:NSDataWritingProtectionCompleteNSDataWritingProtectionCompleteUnlessOpenNSDataWritingProtectionCompleteUntilFirstAuth

    Stack Overflow 上有个帖子提供了有关它们的一些值得注意的细节。

  • 清理:这是避免留下敏感数据的基本步骤。虽然几乎所有存储在磁盘上的文件都是加密的,但是 Guido 警告说要提防若干不容易察觉的危险。特别地,iTunes 备份的存储是不加密的,因此,通过攻击桌面操作系统而不是 iOS窃取敏感数据就成为一种可能。Guido 提到,你可以禁止使用 NSURLIsExcludedFromBackupKey密钥向 iCloud 或 iTunes 同步。此外,在UIPasteboard、URL 或者键盘缓存、iOS 自动获取的应用后台快照、cookies、NSLog 记录等地方,应用通常会留下一定量未加密的潜在敏感数据。所有这些风险都可以通过遵循恰当的策略来避免,例如,重写applicationDidEnterBackground,将hidden设为YES;使用secureTextEntry,禁用自动更正,从而规避键盘缓存,等等。

Guido 总结道,做完这些基本工作后,就可以考虑消除其他层面的风险,比如自定义 URL 处理器、UIWebView中的 XSS、XML 解析、SQL 注入,等等。

不过,当应用运行在已经越狱的手机上时,所有那些配置就都不是很有效了。越狱是禁用了基本安全机制的漏洞利用程序。它们可以被用来攻击手机,并取得手机的控制权,但有趣的是,用户因为种种原因自愿越狱,比如访问第三方应用商店,替换默认应用,自定义操作系统外观,解锁设备。按照 Guido 的说法,多达 700 万 iPhone 用户已经越狱了他们的手机,也就是说,运行在这些手机上的恶意应用可以绕过所有的设备安全机制,比如 Keyraider 就窃取了 225000 台设备的 Apple ID 证件用于应用内购买。

对于运行在已经越狱的手机上的应用,有几种方法可以提升它的安全性。

  • 当运行在已经越狱的设备上时,检测成功越狱后留下的系统工件。通常,这可以归结为实现若干检查,比如是否存在 ssh、Cydia.app 文件、fork()系统调用,等等
  • 拒绝调试或钩挂应用程序的尝试,防止绕过越狱检查的攻击者使用调试器或者特定的工具,如 tsProtector xCon 。通常,这可以通过在运行时使用sysctl找出谁是应用的属主来实现:如果它不是launchd或内核,就可以退出或更改执行。
  • 增加理解由 IDA Pro Hopper Binary Ninja 生成的拆解应用代码的难度。其实现可以借助一些迷惑技术将不使用的代码增加 100 倍,加密符号,使用谓词,等等。

最后一点,Guido 强调了全面实施上述所有配置的重要性,借助一个 LLVM 的修改版本在编译时修改代码,不依赖个体程序员在必要的地方增加检查。

感兴趣的读者可以在 InfoQ 上观看完整视频

查看英文原文 Modern iOS Application Security

2016-08-08 19:002759
用户头像

发布了 1008 篇内容, 共 392.6 次阅读, 收获喜欢 344 次。

关注

评论

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

24小时自助共享洗车有人洗吗

共享电单车厂家

24小时无人自助洗车 自助洗车加盟 车白兔自助洗车 自助洗车店

代码合规性:开发人员使用Helix QAC的5大原因

龙智—DevSecOps解决方案

静态代码分析 Helix QAC 静态代码分析器

没有可观测性,DataOps 注定失败|TheNewStack

观测云

一文搞懂│什么是跨域?如何解决跨域?

前端 经验分享 跨域 7月月更

加盟自助洗车真的不用招人吗

共享电单车厂家

自助洗车加盟 车白兔自助洗车 无人自助洗车

什么是真正的HTAP?(一)背景篇

StoneDB

MySQL OLAP OLTP HTAP StoneDB

24小时自助共享洗车店要多少钱

共享电单车厂家

自助洗车加盟 车白兔洗车 24小时自助共享洗车 自助共享洗车店

【森城市】GIS数据漫谈(四)— 坐标系统

ThingJS数字孪生引擎

游戏有什么用?| 游戏应用价值研究案例征集

易观分析

游戏

大数据培训 Hive 相关知识的全面总结

@零度

hive 大数据开发

无需CORS,用nginx解决跨域问题,轻松实现低代码开发的前后端分离

葡萄城技术团队

nginx 前后端分离 cros

【计算讲谈社】第六讲|三星堆奇幻之旅:只有云计算才能带来的体验

大咖说

云计算 三星堆 数字空间 阿里云大咖说 计算讲谈社

用对工具,CI事半功倍

龙智—DevSecOps解决方案

ci 持续集成 ⾃动化构建 ⾃动化部署

助力开发者,全方位解读 APISIX 测试案例

API7.ai 技术团队

开源 测试 APISIX 网关

Apache APISIX Meetup 南京站!我们 7.30 见!

API7.ai 技术团队

API网关 APISIX Meetup Workshop

5分钟快速梳理你的HTTP体系

程序员海军

前端 HTTP 7月月更

24小时共享自助洗车店你见过吗

共享电单车厂家

24小时共享自助洗车 自助洗车加盟 自助洗车店

网络安全网格概念以及特点简单普及

行云管家

网络安全 网络安全网格

全球云市场增势迅猛,数据安全进入法治化的强监管时代

行云管家

云计算 网络安全 数据安全

红象云腾大数据基础平台与龙蜥社区操作系统再次完成联合测试

OpenAnolis小助手

开源 操作系统 龙蜥社区 红象云腾 兼容性互认证

Java实现有getMin功能的栈

工程师日月

Java 算法 7月月更

MySQL 添加用户并授予只能查询权限

叫练

Python|类与对象

AXYZdong

Python 7月月更

Gartner:无需数据中台,API就能胜任连接前端和后端的工作

雨果

数据中台 API

华为影像XMAGE:求尽世间像,终见菩提心

脑极体

直播带货系统源码

开源直播系统源码

软件测试 APP开发 直播系统源码 直播带货系统源码

【7.8-7.15】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

阿里云E-MapReduce 极客大赛开放报名 数十万奖金等你挑战

Lily

比赛

Dimitra 和 Ocean Protocol 解读农业数据背后的秘密

股市老人

【用户文章】P4合并实践指南之实例拆解Resolve

龙智—DevSecOps解决方案

P4合并 解决冲突

知识干货:基础存储服务新手体验营

hum建应用专家

数据库

现代iOS应用安全_安全_Sergio De Simone_InfoQ精选文章