生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

现代 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:002613
用户头像

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

关注

评论

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

车家互联再获重磅突破,小度携手极越开启智能生活无限畅联新体验

新消费日报

🔥🔥Java开发者的Python快速进修指南:自定义模块及常用模块

快乐非自愿限量之名

Java Python 开发语言

AI数字人:探索直播带货的未来

青否数字人

数字孪生 数字人

AI数字人播报的意义与未来发展空间

青否数字人

数字孪生 数字人

SourceTree 4.1.5(Git客户端工具)

Geek_幻墨成诗

sourcetree SourceTree Mac

什么是代理IP?代理IP有什么作用?

Geek_bf375d

爬虫 HTTP 跨境电商 IP\ #HTTP

一文了解低代码平台

树上有只程序猿

低代码 数字化 JNPF

IDC 中国数字化转型盛典:兴业银行「基于悦数图数据库」的「智能大数据云平台」获奖

最新动态

华为与央音首席调音团,轻叩无损音质的音乐谜题

脑极体

华为

软件测试/人工智能|探究 LangChain 核心模块:PromptsModelsParsers

霍格沃兹测试开发学社

软件测试/人工智能|什么是LangChain,这篇文章告诉你

霍格沃兹测试开发学社

上传图片到京东api接口的申请步骤有哪些特别之处?

技术冰糖葫芦

AI 模型编译器 API 开发

敏捷领导力(CAL / ALJ)认证周末班 · 2024年1月6-7日 火热报名中

ShineScrum捷行

敏捷领导力

噢!进程的内存不见了

BigBang!

AI数字人直播大屏:创新科技赋能企业的未来

青否数字人

数字孪生 数字人

不是编程太难学,而是信息差要人命

代码生成器研究

编程 赚钱 可视化

凯叔讲故事如何把好内容传递给千万儿童?

最新动态

PDF Expert for Mac(PDF编辑阅读转换器)v3.7.1永久激活版

mac

PDF Expert 苹果mac Windows软件 PDF 编辑器和注释器

软件测试/人工智能|LangChain Memory模块:开启语言数据的存储与回忆之旅

霍格沃兹测试开发学社

大模型助力交互式数据挖掘的探索与发现

鲸品堂

数据挖掘 大模型

CodeWhisperer——一个十分强大的工具

亚马逊云科技 (Amazon Web Services)

Python 人工智能 云上探索实验室 Amazon CodeWhisperer C++

解密人工智能:线性回归

快乐非自愿限量之名

人工智能 机器学习 线性回归

打造企业AI数字人专属IP的重要性

青否数字人

数字孪生 数字人

聊聊如何进行代码混淆

如何正确选型低代码、无代码、aPaaS平台?有这几个重点

互联网工科生

低代码 无代码 aPaaS

【scipy 基础】--空间计算

快乐非自愿限量之名

计算 模块 表空间 scipy

开发体育赛事直播平台不再单一,体育娱乐引领潮流

软件开发-梦幻运营部

程序员必备的学习工具,建议收藏!

伤感汤姆布利柏

程序员 前端 工具 低代码 实用

AI数字人与虚拟人:区别与应用场景

青否数字人

数字孪生 数字人

随手写了个博客多平台发布脚本:Python自动发布文章到Wordpress

爱写字的阿城

直播拍卖软件开发公司源码方案,具备哪些功能助突破困境

软件开发-梦幻运营部

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