信任移动SDK



最受欢迎的NPM库中最近的后门故事导致许多人思考我们对第三方代码的信任程度以及我们在项目中使用它的勇气程度(从而有可能替代我们的产品用户)。

但是甚至在“雷声来袭”之前的几个月, Felix Kraus (移动开发人员称为Fastlane的创建者)在我们的Mobius 2018 Piter会议上谈到了类似内容:移动开发人员对第三方SDK的信任。 如果我们从一家知名公司下载流行的SDK,那里一切都还好,还是会出错? 攻击媒介在哪里,在这方面我们应考虑什么?

现在,我们已经转录并翻译了他的报告-因此,在剪切后,您至少可以观看原始视频,至少可以阅读俄语文本。 由于Kraus从事iOS开发,因此所有示例都来自iOS,但Android开发人员可以忽略特定示例并加以考虑。


SDK安全性


在了解了哪些SDK在当今iOS开发中最流行之后,我决定研究它们在最常见的网络攻击中的脆弱性。 多达31%的人被证明是简单的中间人攻击的潜在受害者,这意味着黑客将其恶意代码注入了SDK。

但是总的来说,值得害怕吗? 他可以用您的SDK做的最坏的事情是什么? 这一切真的很严重吗? 您必须了解,应用程序捆绑包中包含的SDK在其范围内运行-也就是说,SDK可以访问您的应用程序所运行的所有内容。 如果用户允许应用程序访问地理位置数据或照片,则该数据也可用于SDK(不需要其他权限)。 可以从SDK访问的其他数据:iCloud加密的数据,API令牌,以及所有包含许多不同信息的UIKit视图。 如果黑客拦截了可以访问此类数据的SDK,那么后果将非常严重。 同时,该应用程序的所有用户将同时受到影响。

这究竟如何发生? 让我们退后一步,谈论基本的网络事物及其滥用。

联播网


我警告您,我的解释将不会100%准确和详细。 我的目标是传达精髓,因此我将以某种简化的形式介绍所有内容。 如果您对这些细节感兴趣,那么我建议您看一下我的博客或亲自探索该主题。

您还记得,HTTPS协议和HTTP协议之间的主要区别在于传输期间的数据加密。 总体而言,HTTP中缺乏加密,这意味着如果需要,位于网络内部的任何主机都可以自由地侦听和修改通过它传输的任何数据包; 同时,无法检查包装的完整性。 所有这些对于公共Wi-Fi网络,受密码保护的网络以及本地以太网都是如此。

使用HTTPS时,网络主机也可以侦听传输的数据包,但是它们无法打开它们-只有数据包元数据可见,尤其是发送和接收主机的地址。 另外,HTTPS提供了验证:收到包裹后,您可以检查它在旅途中是否发生了变化。

以前,一切工作如下。 当您在地址栏中输入“ google.com”而未指定协议时,默认情况下,浏览器会通过HTTP发送您的请求。 但是由于Google服务器更喜欢通过HTTPS进行通信,因此作为响应,您收到了一个带有前缀“ https://”的新链接(重定向)。 这是Charles Proxy(HTTP / HTTPS流量监视工具)的屏幕,演示了此操作:



但是,新链接本身是通过HTTP协议发送的。 很容易理解这里出了什么问题:请求和响应都是通过HTTP传输的,这意味着您可以例如截取响应数据包并将其中的位置URL替换为“ http://”。 这种简单的攻击类型称为SSL Strip。 迄今为止,浏览器已经学会了以稍微不同的方式工作。 但是了解SSL条带对我们进一步有用。

有时您会记得OSI网络模型。 我觉得她有些无聊。 但是后来他发现,奇怪的是,OSI模型并不像那样那样存在,甚至可能有用。

我们不会详细考虑。 需要了解的主要内容:一切都由负责不同事物的几层组成,同时彼此之间始终保持交互。

其中一层正在尝试确定哪个MAC地址对应于特定的IP地址。 为此,发出一个特殊的广播请求,记录第一个响应的设备,然后将数据包发送给它。



问题在于,黑客可以更快地响应请求:“是的,将所有数据包发送给我。” 这称为ARP欺骗或ARP缓存中毒。 在这种情况下,您与Internet的交互方案变为:



现在,所有数据包都通过黑客的设备,如果流量未加密,则可以读取和写入。 对于HTTPS,可能性较小,但您可以跟踪要访问的主机。

有趣的是,事实上,Internet和VPN提供商拥有相同的权力。 它们是您与Internet交互的中介,并且以同样的方式构成了ARP欺骗的潜在威胁。

中间人方法本身并没有什么新鲜之处。 但是,这一切到底如何适用于移动SDK?

移动细节


CocoaPods是iOS开发中使用的标准依赖项管理工具。 将CocoaPods用于开放源代码被认为是安全的-通常托管在GitHub上,通常通过HTTPS或SSH访问。 但是,我设法找到了基于HTTP链接的漏洞。

事实是,CocoaPods使得可以使用封闭的源代码安装SDK,而您只需要指定URL。 没有验证流量将被加密的验证,许多SDK提供了HTTP地址。

在这方面,我向CocoaPods开发人员发送了几个请求请求,很快他们就完成了任务。 现在,新版本的CocoaPods会检查用户指定的链接,如果未加密,则会显示警告。 因此,我的建议是:始终更新CocoaPods版本,并且不要忽略警告。

考虑来自非CocoaPods的非感官SDK的安装过程会更加有趣。 以Localytics平台为例。



docs.localytics.com页面未加密。 在这种情况下,这似乎可以忽略,因为这只是文档。 但是请注意,该页面除其他外还包含一个下载二进制文件的链接。 链接可以被加密,但是不能保证任何安全性:由于页面本身将通过HTTP传输,因此可以对其进行拦截,并且可以用未加密的链接替换该链接。 本地开发人员已收到有关此漏洞的通知,并且该漏洞已得到修复。

您可以执行其他操作:不要将链接更改为HTTP,而是保留HTTPS,而是替换地址本身。 发现这一点将非常困难。 查看以下两个链接:



其中之一属于我。 哪一个来自真正的开发人员,哪个不是? 尝试了解。

练习检查


然后,我决定通过实际尝试使用MITM攻击替换SDK的内容来检验我的假设。 事实证明,这并不是那么困难。 要构建和操作电路,我只花了几个小时就安装了最简单的公共工具。



我委托通常的Raspberry Pi进行拦截。 包括在本地网络中,他可以收听其中的流量。 在截获的数据包中,他必须首先用HTTP链接替换所有HTTPS链接,然后用hack.zip文件替换所有Localytics iOS .zip文件。 事实证明,所有这一切都很简单,并且一鼓作气。



trollface.jpg文件出现在生成的存档中,而行“ Modified by KrauseFx”出现在Info.plist文件中。 这样的攻击需要多少? 只有两个条件:

  1. 他们设法访问了您的网络(请记住,对于Internet和VPN提供商而言,这根本不是问题)。 我们可以连接多少咖啡和连锁酒店?
  2. 启动的下载未加密。


您说,“但是我只是在浏览器中查看安全图标,这意味着我会没事的。” 而且,如果您在亚马逊上,那么一切都应该没事吧?

我建议考虑使用亚马逊网站。 AWS Mobile SDK是他们的个人SDK,开发人员可以使用它们与服务进行交互。



“安全”图标(一个著名的网站)似乎没有任何预兆。 但是a-乍看之下。 指示下载SDK的链接根本没有前缀(https://或http://都没有)。 同时,它应该将用户带到另一个主机。 因此,浏览器将从HTTPS切换到HTTP。 如您所见,此处的SDK下载未加密! 目前,该漏洞已由Amazon开发人员修复,但确实存在。

我必须说,现代浏览器的开发也并非不注意安全性问题。 例如,如果您使用HTTPS加载页面,并且通过HTTP链接显示了任何图片,则Google Chrome浏览器会通知您所谓的“混合内容”。 但是没有为下载提供这种安全措施:浏览器无法跟踪页面上指示的下载链接触发了哪个协议。 因此,作为该项目的一部分,我写信给浏览器开发人员,要求提供跟踪混合内容并通知用户有关内容。

Apple ID数据盗窃


现在让我们来看另一个问题。 iPhone用户应熟悉此常规弹出窗口:



左侧是iOS的原始版本,右侧是我的副本。 几个月前,我在自己的博客上写道,关于模拟类似窗口的简便性。 重新创建视图花了20分钟。

iPhone经常请求iCloud身份验证数据,对于用户来说,请求的原因通常仍然不清楚。 用户已经习惯了自动输入密码。 根本不会想到谁在要求密码(操作系统或应用程序)的问题。

如果您认为很难获得附有Apple ID的电子邮件地址,那么请您夸大一下:可以通过通讯录和iCloud容器(如果您可以访问iCloud应用程序,可以从中找到有关信息)进行操作。来自此应用程序的UserDefaults)。 最简单的选择是要求用户亲自输入电子邮件:理论上,这甚至不应该让他感到惊讶,因为在iOS中,确实存在一种不仅要求输入密码而且要求输入电子邮件的窗口。

我以为:“如果我采用请求表单的这段代码,并在SDK欺骗的帮助下,将其渗透到许多不同的应用程序中,以窃取所有iCloud密码? 这个任务有多难?



假设我们有一台完全干净的Mac,没有安装任何VPN或代理,但是在同一网络上,我们有Raspberry Pi。 在Mac上的Xcode中,我们有一个开放的iOS项目项目,其中包含绝对最少的代码-该区域的简单地图显示,仅此而已。

现在打开浏览器,转到Amazon Web Services。 找到AWS Mobile SDK页面并点击下载链接。 解压缩下载的二进制文件并将所有框架拖到Xcode中的项目中。 然后,我们导入库。 我们甚至不需要调用任何代码-只需将其下载即可。 我注意到在整个过程中,Xcode均未发出任何警告。

重新编译应用程序时会发生什么? 窗口的同一副本出现在屏幕上,提示我登录iTunes Store。 我输入密码,窗口消失。 在查看应用程序日志的同时,我看到输入的密码立即显示在其中-Apple ID数据拦截已完成。 将该数据发送到服务器很容易。

在这里,您可以说:“好吧,在开发过程中,我会立即注意到此输入表单,并明白有些问题。” 但是,如果您有成千上万的用户,则可以使它每千只抓取一次,并且在测试过程中不会引起注意。

再说一次,我们进行攻击需要多少时间? 我们的计算机必须在网络上(并且Raspberry Pi就足够了)。 HTTP或HTTPs-在这种情况下没关系,加密不会保存情况。 我使用的所有软件工具-最简单的工具都是我从公共访问中获得的。 同时,我是一个普通的开发人员,没有太多的黑客知识和经验。

管理接管


前面的示例将恶意代码引入了iOS应用程序。 但是,如果我们总体上可以控制开发人员的计算机怎么办? 众所周知,在设备上运行代码的能力为黑客提供了强大的功能。 他将能够通过SSH激活远程访问,安装键盘记录程序等。 他将能够随时观察您,记录您的操作以及使用文件系统。 他还将能够安装新的SSL证书,并使用它们来拦截您对网络的所有请求。 简而言之,某人就有机会在您的计算机上运行代码-而您完全被破坏了。

我以为“我可以使用哪个iOS SDK?” 有一项服务可为SDK提供curl命令和HTTP链接,并将输出重定向到sh命令。 也就是说,您的终端将下载并运行Shell脚本。



就其本身而言,这种安装方法已经使您处于危险之中,请不要这样做。 但是在这种情况下,也使用了HTTP协议。 那怎么办呢?



假设您是用户。 您转到官方文档页面。 注意页面已使用HTTPS协议加密的事实-太好了! 您复制命令,然后在家运行它。 该命令将在几秒钟内执行。 在这段时间内发生了什么?

在这段时间内,一个涉及我的Raspberry Pi的简单攻击机制成功了。 用户加载的updateSDK Shell脚本包含了我自己的代码的少量内容。 现在,我可以通过SSH远程访问您的计算机,并且还安装了键盘记录程序。



左边是“您的”终端,右边是我的Raspberry Pi,它已经实时显示您在键盘上输入的所有内容。 从Raspberry Pi SSH开始,我使用刚在键盘记录器中注册的登录名和密码登录,这样我就可以完全控制Mac及其文件系统。 而且,也许,您的雇主公司可以访问很多东西。

总结


这发生在您身上的可能性有多大? 毕竟,开发人员仍然尝试使用安全的Wi-Fi,购买VPN。

就个人而言,我还以为我一直很小心,直到有一天我打开Mac的设置,并发现有200多个连接到不安全的Wi-Fi网络的历史。 每个这样的连接都是潜在的威胁。 即使使用受信任的网络,也无法100%保证安全性,因为您不知道该网络上的任何设备是否遭到破坏(就像我们刚才看到的那样)。

通过不安全的Wi-Fi网络进行攻击非常普遍。 它们很容易在公共场所举行,例如酒店,咖啡馆,机场,以及会议:)想象一个演讲者在谈论某种SDK,并且像往常一样,部分观众尝试通过连接到此处分发的Wi-Fi并行安装它。 。 正如我所说,很容易滥用您对网络提供商的权利。
使用VPN的方式相同-您只需将自己交给提供商。 还有谁更值得信任-VPN提供商或您的本地网络及其用户? 不清楚

2017年11月,我进行了研究,并分析了iOS最受欢迎的41个最受欢迎的SDK中列出的漏洞(不包括来自Google和Facebook的SDK,它们都受到保护)。



如您所见,有31.7%的SDK未通过测试。 我设法通知了几乎所有供应商有关现有问题的信息。 从一个我立刻收到一个答案,问题在三天内得到解决。 五个团队也做出了反应,但花了更多时间进行修订-大约一个月。 七个根本没有理会我的报告,并且至今没有更正任何内容。 让我提醒您,这与一些鲜为人知的项目无关。 SDK , SDK iOS-, , , iPhone.

, , — . , . . -, , , . , , , , , .

man-in-the-middle, . , SDK. , , SDK, , (, , , ).

, . , GDPR. SDK , — , . . , — . 谢谢您的关注。

, : Mobius 22-23 , , .

Source: https://habr.com/ru/post/zh-CN434106/


All Articles