如何让macOS的用户交互安全屏障瞬间变成“马奇诺防线”(一)

xiaohui Web安全 2018年9月27日发布
Favorite收藏

导语:假设你是一个攻击者或正在使用恶意软件发起攻击,那在你成功的获得了对Mac的访问后,你会做什么呢?

假设你是一个攻击者或正在使用恶意软件发起攻击,那在你成功的获得了对Mac的访问后,你会做什么呢?一般来说,攻击者最想得到的是以下5方面内容:

1.转储用户的钥匙串;

2.确定攻击设备目前所在的位置,即获取GEO文件;

3.枚举用户设备里的联系人;

4.加载内核扩展,即获取kext文件,kext文件是一个Mac OS X内核扩展,常见于Hackintosh(PC上的黑Apple)。它们通常用于设备驱动程序,运行于系统的核心基底;

5.绕过第三方安全防护措施;

不过Apple也意识到了这些问题,所以在最新版本的macOS上,一些新的安全机制会阻止以上这些操作。现在,这些新的安全机制将会针对此类非法操作,向用户发出警报,以提醒用户。根据Apple的安全设计,只有用户才可以与这些警报进行交互,例如批准操作是否继续。

1.1.png

1.2.png

应该说,Apple的这个安全机制做的非常好,一切都是以用户为中心的。不过,一旦攻击者能够找到一种通过程序化方式或其他方式,来模拟用户与这些警报交互的方式。那就意味着,攻击者可以一举绕过所有的安全机制,让所有的设防都成为“马奇诺防线”。这意味着,如果存在这样的攻击,用户界面就会成为单点故障(Single Point of Failure,SPoF)。 

本文就深入探讨了macOS上,发生这样的攻击的可能性,从滥用这些功能的恶意软件到未修补的新0 day漏洞攻击,我都会讲到。这让小编想到了,今年的DEF CON大会期间,来自Digita Security的首席研究官Patrick Wardle就披露了一个macOS中存在的0 day漏洞,攻击者可以通过模拟用户的点击绕开macOS内核代码签名验证,加载系统内核扩展。具体详情,请点此了解

译者注:Single Point of Failure(SPoF)是指一个系统的这样一个部件,如果它失效或停止运转,将会导致整个系统不能工作。我们当然不希望看到,在一个要求高度可用性的系统中存在这样的部分,但这种情况在网络,软件应用以及其它工业系统中都存在。

各种攻击的可能性

为了达到恶意目的,而以各种方式与UI进行交互的想法,并不是什么新奇的东西,让我们看一下使用此类想法的恶意软件。

注意:本文中描述的攻击在最新版本的macOS上是被阻止的。然而,在本文的末尾,我将披露一些即使在最新发布的Apple操作系统版本上也能工作的0 day漏洞。

OSX.FruitFly是十多年前就被编写的后门,但在2017年初才被发现。我之前写过一篇关于这个恶意软件的研究报告“攻击性恶意软件分析:通过自定义C&C服务器解析OSX.FruitFly.B”,当时我就注意到它有控制鼠标和键盘的能力。

Fruitfly是一个后门,攻击者可利用其对受感染系统的进行完全控制,实现众多监视操作。Fruitfly可以捕捉屏幕截图、按键、网络摄像头图像,并从受感染Mac偷取数据。

Patrick Wardle(Synack首席安全研究员和前NSA分析师)对Fruitfly的样本进行了分析,搭建了自定义命令和控制服务器,对FruitFly后门进行检查,它能执行shell命令、截图、控制鼠标动作、结束进程、甚至会在用户使用Mac时为攻击者发出警示信息。

2.png

以上是一个简洁的GIF说明过程,说明远程攻击者如何通过OSX.FruitFly远程关闭(钥匙串)安全访问提示。

3.gif

另一块利用这个想法的Mac恶意软件是OSX.DevilRobber。与其他的恶意软件一样,DevilRobber也有很多别名,例如Miner-D和OSX.Coinbitminer等等。实际上,Intego的研究人员在2011年10月份首次检测到了DevilRobber,而DevilRobber也是当时为数不多的Mac端恶意软件之一。在2017年5月份,DevilRobber只占所有检测到的macOS恶意软件数量的2.4%,但是很快它就一举成为了全球活跃度排名第二的macOS恶意软件。

DevilRobber主要通过感染第三方网站的Mac应用软件来进行传播,由于当时DevilRobber的传播范围实在太大,所以Apple公司也不得不发布紧急更新补丁来降低DevilRobber的影响,而DevilRobber只是通过几个简单的AppleScript命令绕过用户的钥匙串安全访问提示。

恶意广告软件也会利用此想法,例如,OSX.Genieo将自己伪装成浏览器扩展诱导用户进行安装。但是,为了实现此目的,OSX.Genieo必须绕过安全提示,该安全提示试图阻止程序安装浏览器扩展。那此时,广告软件是如何绕过此警报的呢?很简单,就是发送模拟的鼠标点击过程即可。

具体来说,就是通过jtool(功能非常强大的iOS分析工具)转储OSX.Genieo的方法,我们可以看到一个名为SafariExtensionInstaller的类。

4.jpg

想知道clickOnInstallButton按钮的功能是什么吗?看看下面就知道了。

5.jpg

首先,它通过调用一个名为getPopupPosition的方法获取弹出警报窗口的位置。然后它通过CGEventCreateMouseEvent和CGEventPost API发送一些模拟鼠标点击确认的过程。可以看到 0x5是鼠标移动事件,而0x1和0x2对应于左键单击事件,然后恶意广告软件就能够解除警报,并将自身伪装成浏览器扩展。

此类模拟事件的防范措施

在最近的macOS版本中,Apple已经实施了各种防御来阻止这种模拟攻击事件。但是,这些防御措施并不是通用的,而是仅保护某些UI组件,例如某些安全性或访问提示。

在High Sierra系统上,如果有人尝试发送经过程序化的鼠标事件,例如发送钥匙串访问提示,则操作系统将检测并阻止此操作。

6.jpg

具体来说,macOS将检查生成的鼠标事件的进程是否已发生了辅助访问(assistive access)。因为,辅助访问提示也可以防止此类攻击。

7.png

请注意,“辅助访问”的设置必须手动完成,在系统的安全设置中添加要防护的应用程序,这样你才可以查看应用程序的具体进程。或者,你可以转储受SIP保护的系统隐私数据库——/ Library / Application Support / com.Apple.TCC / TCC.db:

8.png

这样,通过CoreGraphics API生成的鼠标模拟事件现在也被发现和阻止了。不过这仅发生在目标UI组件被明确保护时,可以在以下系统日志输出中看到。

9.jpg

如果我们使用 grep搜索"Sender is prohibited from synthesizing events"字符串,就会在核心库中的post_filtered_event_tap_data函数中找到它。

10.jpg

正如我们在上面的反编译中所看到的那样,如果CGXSenderCanSynthesizeEvents函数返回0(false/NO),则会记录此错误消息。如果sandbox_check_by_audit_token方法失败,就会发生这种情况。

正如其名称所提示的那样,sandbox_check_by_audit_token函数检查发送“synthetic”事件的进程是否具有hid-control权限。这个检查似乎是在内核中执行的,具体来说,就是在mpo_iokit_check_hid_control_t函数中。

11.png

防护措施是如何失效的?

如果我是一名黑客,那我的目标很简单,就是利用上述所讲的这种模拟点击的方法在系统上与任何UI上的提示进行交互,比如设计安全性,隐私,访问等的提示。我的最终目的就是像用户一样,随意处理这些提示信息,然后就可以进行我的各种操作,比如转储钥匙串,或批准加载内核扩展。

在下一篇,我会具体讲解防护措施是如何失效的?请继续关注。

本文翻译自:https://objective-see.com/blog/blog_0x36.html如若转载,请注明原文地址: http://www.4hou.com/web/13494.html
点赞 12
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论