如何避免恶意软件:详解 iOS 应用安全机制
前言
近几年移动设备性能的飞跃式发展,使得更为强大的移动 App 成为可能。这些 App 在极大地丰富了我们生活的同时,也带来了潜在的安全隐患。不像桌面电脑,我们的移动设备上存储了大量的个人隐私,许多网站也将「短信验证码」作为用户身份验证的关键一环。这些信息一旦泄露,后果不堪设想。而在诸多移动平台中,iOS 以其几乎百毒不侵的安全性著称。本文将深入剖析苹果在 iOS 内设下的层层应用安全机制,解构 iOS 「金刚不坏之身」背后的秘密。
App 也有身份证:「数字签名」
就像人类一样,在 iOS 中,每个 App 都必须持有自己的「身份证」——数字签名。iOS 中的签名检查机制就像一名严格的警察,任何应用程序都必须持有有效的签名才能被获准运行。这些「数字签名」来自开发者的「身份证」——「数字证书」。没有数字签名或者签名无效的程序都会被 iOS 拒之门外。那么,苹果设置这个「身份证检查」的用意何在呢?
由于给 App 签名必须使用苹果发放的证书,苹果得以将开发者分发 App 的途径限制为两条。第一种是通过 App Store 。开发者必须加入「iOS 开发者计划」才能获得苹果发放的「开发者证书」并为他们的 App 签名。之后,他们的 App 还必须经过苹果的严格审核才能上架 App Store 并提供下载。苹果的审查过程确保了所有在 App Store 上架的 App 都不存在任何恶意行为,因此 App Store 是最安全的获取 App 的渠道。
发布 App 的另一条路径是加入苹果的「iOS 企业开发者计划」。有些企业需要特制的内部 App ,但出于保密目的又无法公开在 App Store 上上架这些 App 。注册了「iOS 企业开发者计划」的公司可以使用苹果发放的「企业证书」自行签名 App 并在企业内发放给员工安装。虽然通过这种途径分发的 App 没有经过 App Store 审核,但是在「企业证书」没有泄露的情况下没有人能假冒这些企业开发恶意软件。即便证书真的发生了泄露,苹果也能迅速撤销对应的企业证书来防止恶意软件的扩散。
无论是哪种途径,要想发布 iOS 软件,开发者或者任何组织都必须先向苹果公司注册来获取证书以便给自己的 App 发放「身份证」——数字签名。在注册的过程中,开发者或组织的真实身份信息都会被苹果登记在案。这种做法能很好地震慑恶意软件的开发者。毕竟一旦自己的小勾当被发现,就要被苹果查水表了。相比之下,Android 虽然也要求 App 在安装之前拥有数字签名,但并不要求用于签名的证书来自 Google 。因此,即便发现了恶意软件,Google 很难追踪幕后的开发者是谁,也无法撤销对应的证书来阻止恶意软件。
为了避免被发现,一些不怀好意的开发者会尝试通过往用户已安装的程序中注入恶意代码来实现入侵,但这一切都逃不过 iOS 的法眼。在 App 运行时,iOS 会持续检查 App 所有代码的签名。一旦发现 App 被恶意篡改,iOS 就会立刻阻止该程序的运行。iOS 这样严格的签名检查虽然一定程度上牺牲了用户的自由度(不能运行未签名或经过第三方修改 App ),但换来的是极高的安全性。
我的东西你别乱动:沙盒保护
一个恶意软件想要搞点破坏,总得读读写写点文件。即便一个恶意软件通过了iOS 的签名检查,它也没法造成任何破坏,因为苹果在 iOS 中使用了非常简单粗暴的方法来保护设备安全——沙盒机制。我们可以把自己的设备想象成一个巨大的房子,每个房间里都住着一个 App 。这些房间的们都从外部被反锁,任何一个 App 都无法离开自己的房间去访问或者修改其他 App 在他们房间里储存的信息。如果程序 A 想要和程序 B 进行交流,他们只能求助于不断游走于房间之间的保安——iOS。程序 A 会把要给程序 B 的文件交给 iOS ,并向 iOS 提出对应的请求。iOS 会随后验证请求是否合法并把文件和程序 A 的请求转交给程序 B 。B 处理完之后再通过 iOS 转交回 A 。App 也无法读取、修改操作系统的文件,或者在未经你授权的情况下读取你的某项个人资料。这看似繁琐的流程确保了 iOS 的高度安全。假如你刚下载的一个 App 想要偷偷读取你的支付宝密码,它一定会立马被 iOS PIA 飞。尽管这样「一刀切」的政策使得 iOS 不能像其他操作系统一样具有极高的扩展性,但也从根本上解决掉了设备的安全问题。
那「Wirelurker」是怎么回事?
看了这么多,你肯定有点半信半疑:如果 iOS 像你说的这么安全,那又怎么解释前段时间爆发的「Wirelurker」?首先,Wirelurker 通过企业证书绕过了 iOS 的代码签名检查来安装在设备上。其次, Wirelurker 是一个双平台的病毒,它不仅可以感染 iOS 设备,也可以感染 Mac 设备。在未越狱设备上,虽然 Wirelurker 的 iOS 版本受限于 iOS 的沙盒机制,无法访问用户隐私,但 Wirelurker 的作者十分聪明:由于只要用户在第一次连接时选择了「信任」某台电脑, iOS 就会允许该电脑读取设备上存储的个人资料,病毒作者于是借此通过使用 Mac 版的 Wirelurker 来实现了对沙盒机制的绕过。在 Mac 带有 Wirelurker 的情况下,所有「信任」了该电脑的 iOS 设备都会被感染。而在已越狱设备上,Wirelurker 的 iOS 版本就更加可以大施拳脚,肆无忌惮地读取设备上包括通讯录、短信、支付宝数据等等隐私信息。
你可以做些什么
尽管 iOS 有着非常强大的安全保护机制,但世界上并不存在绝对安全的操作系统。作为用户,笔者推荐你采取以下几个措施来确保自己设备的安全。
第一,请不要越狱。尽管越狱能让你享受各种插件带来的乐趣,它也让苹果精心设计的安全机制功亏一篑。
第二,只从 App Store 获取 App 。App Store 上的所有 App 都在发布前经过苹果审查,确保他们不存在任何恶意代码。笔者非常不建议你使用「苹果助手」一类号称「免费正版」的软件。这类「助手」通过非法盗取企业证书,重新签名被盗版的 App 来伪装成企业应用以绕过 iOS 的签名检查。通过这种途径获得的 App 十分不稳定,经常发生闪退。此外,由于 App 的数字签名已经不是原开发者的签名,这些 App 有被篡改并被植入恶意代码的风险。一个外表是「星巴克」的 App 内心可能实际上是「猩疤客」。最重要的是,这是彻头彻尾的盗版,是严重的盗窃行为,根本不是所谓的「免费正版」。
第三,不要随意「信任」计算机。在你将设备第一次连接至某台电脑时,iOS 会弹出对话框询问你是否「信任」这台计算机。一旦你选择了「信任」,这台电脑就有权访问你存储在设备上的所有个人信息。尽管 iOS 可以阻止安装在设备中的 App 窃取你的隐私,但是像「Wirelurker」这样的恶意软件还是可以通过感染被设备「信任」的电脑来绕过沙盒机制并读取你存储在设备中的资料。
第四,谨慎赋予 App 隐私读取权限。在某个 App 第一次申请读取你的某项隐私(例如照片、通讯录、使用麦克风或相机等等)之前,iOS 都会询问你是否批准。如果你认为某个 App 不需要读取你的资料(例如,一个游戏要求读取你的通讯录和照片),那么请坚定地按下「不允许」。独立的隐私权限控制是 iOS 的另一大优点。在 Android 上,你只能要么同意一个 App 读取它所想读取的所有个人隐私,要么不安装这个 App 。
写在最后
不像 Android 和我们熟悉的 Windows 电脑,苹果在 iOS 中设下了极严格、极坚固的 App 安全保护机制。尽管你看不到他们,但在背后时时刻刻他们都在保护你的设备。因此,你不必在信息安全上过多地花费心思,只需尽情在 App 的世界中畅游。让自己隐于无形,可能也就是安全保护的最高境界吧。
喜欢少数派?欢迎关注我们的微博:@少数派sspai ,微信公众号: sspaime
少数派( http://sspai.com )