SDK 可能是数百万 iPhone 上的特洛伊木马
John Donne曾说:“没有人是一座孤岛。”如果如果他生活在21世纪,可能也会对软件说同样的话。表面看来,每个程序都是与众不同的实体,但实际上它们是由其他开发人员和公司编写的几十个组件组成的。
互联网上有数百万第三方库以及软件开发工具包(SDK)。开发人员下载并将它们集成到各自的软件中,从而可以在建立特性和功能的时候节省时间。没必要为每个程序重写所有的功能组件。
但他们是否也会成为安全方面的致命弱点呢?Bay Area的安全专家Felix Krause检查了几个最流行的SDK,发现很多都缺乏传输层的安全性。或者,更加直白地说,他们提供的服务并不安全,恶意的第三方可以趁机拦截或修改传输的内容。
▌你的应用是草地
在深入讨论之前,我想说Krause的研究与平台无关。所有平台上的软件都会受到影响。Windows、Linux、macOS、Android、iOS,还有可能包括Amiga。
虽说如此,在本文中,我将只讨论iOS应用,因为大多数人都很熟悉iOS,而且它也是一个特别有趣的案例研究。恰好Krause也对它很感兴趣,所以他的大部分研究都在是这个平台上进行的。
假设你想利用恶意软件感染一百万iPhone用户。我不知道你为什么要这么做,但你就是要这么做。这是个很棘手的命题。对于初学者来说,苹果iOS的锁定系统比Fort Knox牢靠。iOS也并不适合零基础的初学者,只有那些年薪6-7位数的高手才能玩转iOS。
因此,最后一招:你伪装成一位SDK的开发人员,然后将恶意代码插入到他们的应用中(稍后我们将讨论实现手法)。然后你就掌握了生杀大权,或多或少。虽然苹果的killjoy沙盒可以阻挡大多数的攻击,但是这些恶意代码依然可以访问:
该应用所能访问的任何文件和文件夹;
该应用所能访问的任何权限(包括麦克风以及定位服务!);
属于该应用的iCloud容器;
该应用所能访问的所有钥匙串数据;
应用程序和远程服务器之间交换的所有信息。
哎呀!简而言之,你可以将一个表面上合法的应用程序转变成一台Orwellian间谍机器,记录每个键盘输入,甚至可以记录用户的位置,还可以截获身份认证信息,然后卖给其他犯罪分子。
这一切破坏性的操作可以以不可思议的规模展开。单个SDK可以收割数百个应用程序,最终会导致成千上万的用户受到影响。
▌实现手法
中间人攻击(Man-in-the-middle attacks )已经不是什么新鲜事了。这项研究与他们无关,我们要讨论的是软件中重要的部分是如何传输的,以及更广泛的软件安全生态系统是如何受到影响的。然而,了解这种攻击的原理很重要。
这种攻击要求第三方介入开发人员的计算机和其他人的网络,或者介入网络与提供SDK下载的服务器。处于这个位置可以观察并修改从计算机流传到外部世界的信息。如果你感到好奇,可以参考Krause的博文获取更多技术细节:https://krausefx.com/blog/trusting-sdks
受害者可能在任何地方:酒店、咖啡厅或者机场。这都无所谓。一旦攻击者找到合适的位置,他们就可以开始提供伪造的SDK。Krause指出,在HTML文档中替换文本就是小菜一碟。因此,他们可以更改下载页面上的链接位置,指向其他地方。
Krause举了一个例子,尝试更改Localytics的SDK的位置,新的链接看起来很相似且不太容易引起怀疑。看看你是否可以发现下列链接的差异:
https://s3.amazonaws.com/localytics-sdk/sdk.zip
https://s3.amazonaws.com/localytics-sdk-binaries/sdk.zip
前者是合法的SDK,而后者 “localytics-sdk-binaries”的链接包含恶意性的代码。
Krause还提出了一个概念验证,他可以实时替换ZIP文件和二进制文件的内容。通过一种名叫sslstrip的工具将访问信息从加密格式转化成非保护的信息。具体的步骤如下所示:
开发人员下载SDK;
修改SDK,并插入自己的恶意代码;
攻击者压缩代码;
攻击者监视网络访问,等待开发人员下载SDK;
然后用自己的压缩包替换符合要求的ZIP文件。
▌开发商提供的SDK并非安全
Krause的研究所强调的攻击方式是一种威胁,就因为开发商提供的SDK一点都不安全。
Krause研究了41款最受欢迎的SDK。其中13个很容易受到中间人攻击,而有5个提供的SDK根本无法安全地下载。这些SDK之中很多来自大名鼎鼎的科技公司。
拿亚马逊(他们在3天内就修复了该问题,还是不错的)来举个例子。这个总部位于西雅图的科技巨头在极度不安全的HTTP上提供AWS(Amazon Web Services)SDK的下载。
另外一个主要的SDK提供商Localytics(它也解决了这个问题)有一个未经加密的文档子网站链接到了它的SDK。如上所述,攻击者可能拦截该链接,并将其替换为恶意的替代品。
Krause在披露这个问题之前,为SDK开发人员提供了机会,可以让他们解决问题,这样做很符合道德标准。也就是说他联系了每个公司的相关利益关系人,给他们三个月的时间来解决问题,直到他满意。
要修复这个问题所需要的工作量微不足道。与许多需要数周时间修复的漏洞不同,开发商只需要确保在加密渠道内下载SDK。
令人很沮丧的是,有些供应商并没有采取任何有意义的行动。在本文发布前五天,Krause写信告诉我,近三分之二受影响的SDK提供商未能保护他们的SDK下载。他说:
我刚刚浏览了列表,并检查了SDK提供商是否修复了他们的网站:
我在2017年11月和12月通知了所有受影响的人员,让他们有足够的时间在公开发表博文之前解决问题。受影响的13个SDK中,有1个在三个工作日内解决了问题,4个在一个月内解决了问题,发布此文时仍然有8个SDK很容易受此攻击。仍然有受影响的SDK提供商没有回复我的电子邮件,或者只是回复了“我们会调查的”,所有这些提供商都是使用率前50名的SDK。
这就让人很震惊了……
▌软件食物链
在考虑这个问题的时候,你可能觉得软件就如同你在超市买一块牛排。买的时候你会假设它是可以安全食用的。要做到这一点,那么制造过程中的每个阶段都需要得到适当的处理。从农场到餐桌,每个人都需要做好自己的工作。
软件也一样。最终用户从超市(对于软件来说就是应用商店)购买一款软件,肯定是假设不会对他们造成伤害。但是,想要这个假设变成现实,那么每个人都需要遵守安全条例,而不仅仅是开发人员。
原文:https://hackernoon.com/sdks-could-be-the-trojan-horse-for-millions-of-iphones-3d67a3a8be93
译者:弯月