MacOS网守和文件隔绕行

2021-04-28 11:09:59

👾想玩吗?我上传了一个概念样本证明...运行时,它只是弹出计算器.App。 ⚠️恶意软件

我还上传了一个恶意软件示例(shlayer.zip),它在野外爆炸了这个漏洞,作为0day! (密码:Infect3D)

" all_your_macs_are_belong_to_us.pdf"但首先,Go将麦克斯系统更新为11.3,因为它包含一个庞大的错误的修补程序,它会影响所有最近版本的麦克斯...一个是这个博客文章主题的错误。

这个错误逐渐绕过了许多核心Apple安全机制,让Mac用户处于严重风险:

打开→拥有......特别是令人担忧的是,拒绝恶意软件作者已经在野外利用它作为0day。哎呀!

Apple将Bug修补为CVE-2021-30657,注意到"恶意申请可以绕过门卫检查"安全研究员CEDRIC OWENS揭示了缺陷,最初向CUPERTINO报告了错误。史诗发现康复! 🤩

CEDRIC注意通过“应用”开发人员工具构建红色团队有效载荷的同时表现出的错误。他发布了一个必须读取的,这一步一步一步地详细说明这个错误是如何实际利用,以偷偷地在红色团队练习中偷偷地提供有效载荷:

"麦斯卡斯守门人旁路(2021)加法"然而,随着错误的根本原因仍然是未知的,我们的博客文章侧重于揭示的原因......最终发现在麦斯科斯政策子系统中奠定深处的缺陷。

在这个博客文章中提供了相当大量的信息,因此让我们分解我们要覆盖的东西:

背景:我们开始讨论普通(用户辅助)感染载体的帖子,并突出苹果推出的安全机制,以使用户保持安全。了解这些核心麦克斯的安全机制非常重要,因为它们是琐碎的错误和完全绕过的错误。

根本原因分析:博客帖子的核心深入挖掘摩托斯的肠道,揭开了错误的根本原因。在本节中,我们'请详细说明缺陷,最终导致被隔离物品的错误分类,例如恶意应用程序。这种错误分类的应用程序,即使是无符号(和不排他性的),将被允许运行不羁。没有警报,没有提示,没有阻止。哎呀!

在野外(0day):不幸的是,一个颠覆恶意软件安装程序已经在野外利用这个缺陷,作为0day。在该帖子的这一部分,我们简要讨论了这个令人担忧的发现。

补丁:接下来,逆向工程苹果' S 11.3更新后,我们描述了Cupertino如何解决这个缺陷。和好消息,一旦修补的摩托斯用户应该重新获得全面保护。

保护&检测:最后,我们' LL介绍了关于保护的简要讨论,最显着地突出了阻滞块已经提供了足够的保护,这是对这个0day的这种事实。在这里,我们' LL还讨论了一个新颖的想法,旨在检测到攻击这个缺陷的先前攻击,并提供简单的Python脚本,Scan.py来自动解决此类检测!

大多数Mac恶意软件感染是用户(天真或错误)运行他们不应该的结果。虽然这种感染,是的,但是,需要用户互动,但它们仍然非常成功。事实上,最近发现的Silver Sparrow恶意软件,在几周内成功地感染了超过30,000 Mac,即使此类感染确实需要这样的用户互动。 (参见:“Mysterious Silver Sparrow Malware发现在30k Macs")上嵌套。

恶意软件作者如何说服这些用户感染自己?啊,在一个无数的创造性,狡猾,偷偷摸摸的方式,如:

是的,当用户落下一些感染载体(例如盗版应用程序)时,我们共同摇动我们的头脑和奇迹“好吧,你期望了什么!?"但其他感染载体更侧视,可以说不是以任何方式都没有错。例如,在供应链攻击中,被黑客攻击和合法产品的基准攻击,并且特制于特洛伊,因此责备无意中下载并运行此类软件的用户是不合理的。

无论谁在故障(或不),苹果似乎都感到亲自攻击。除了想要对他们的股东用户最适合的课程,他们有一个秉承的形象!请记住,“Mac不会得到恶意软件!” (Tm值)。

除了多年来,所有开玩笑(和批评),苹果都采取了几个重要的步骤,旨在预防任何和所有“用户辅助”感染。在这里,我们简要重新回顾了包括添加OS级安全机制(如文件隔离,网守和应用公证)的主要步骤。对这些基础Macos保护机制的理解是重要的,因为许多用户都很重要,甚至一些企业已经到了(完全)取决于他们。除非Apple船舶破坏了所有此类保护的错误代码,否则这是罚款(ISH)!

文件隔离,在osx豹(10.5)中引入了2007年的一路返回!当用户首先打开诸如应用程序的下载文件时,文件隔离区向用户提供了在允许文件执行之前需要显式确认的警告。这个想法只是为了确保用户理解它们确实打开了应用程序(即使文件看起来像,例如,PDF文档)。

有关文件隔离的示例,请允许我们查看osx.laoshu恶意软件。为了让用户偷偷摸摸自己感染自己,攻击者将针对性受害者发送定制的电子邮件与恶意URL的链接。如果用户点击链接,将自动下载恶意应用程序(伪装为PDF文档):

恶意应用程序(OSX.Laoshu),伪装为PDF(图片信用:Sophos)。如果用户将尝试打开它们(可理解)认为是PDF文档,则文件隔离会将弹出到行动,警告用户实际上是一个申请,而不是无害的PDF文件:

文件隔离在行动中(图像信用:Sophos)。理想情况下,用户将认识到他们的(近的)人造PAS,感谢文件检疫将被挫败!应该指出的是,即使在今天,批准的(即公证)申请的文件隔离提示也会显示。

遗憾的是,用户通常通过忽略或只需通过文件隔离警报来感染自己。为了解决这个问题,以及不断发展恶意软件感染载体,Apple在osx狮子(10.7)中引入了门守。内置文件隔离,网守检查下载项目的代码,并阻止那些不遵守系统策略的信息。 (例如,它检查项目是否使用有效的开发人员ID签名):

一个网守概述Apple的逻辑植根于(MIS)信念中,恶意软件作者无法获得此类Apple开发人员ID,因此他们的恶意软件将保持无符号,因此由Gatekeeper慷慨地阻止。在上面的图像中,注意当执行未签名的恶意软件时,网守将阻止并警告用户。此外,网守提示没有选项以允许(未签名)的代码运行。因此,用户受到保护。赫雷?

当然,它转身对攻击者获得苹果开发人员ID的相当微不足道,从而签署他们的恶意创作。例如,在对流行的Macupdate.com网站的供应链攻击中,攻击者Trojanized和(RE)签署了Firefox等流行软件:

Trojanized Firefox(注意:"开发人员ID应用程序:Ramos Jaxson")如果用户下载并运行了Trojanized Firefox,则网守将允许它......因为它是“有效地”(RE)签名。因此,系统将被感染。

遗憾的是,即使在今天,攻击者仍然琐碎的攻击者获得此类Apple开发人员ID,因此签署恶意创作:

我注意到十几个网站繁荣(甚至通过谷歌广告)购买/销售/租用Apple开发人员企业账户和Apple开发人员证书。我猜麦斯科斯恶意软件已经开始😂🌻🌼pic.twitter.com/pqnrukqhuf

- Taha Karimז(@ Lordx64)4月3日,2021年4月3日

应该注意的是,即使网守被绕过文件隔离提示,仍将显示给用户。回想一下,这样的提示需要明确的用户批准。尽管如此,由于守门人未能成为灵丹妙药,苹果必须再次回应......又一次。

最近,MacOS Catalina(10.15)在引入应用公证要求时,在打击用户辅助感染的另一步。这些要求确保苹果在允许运行之前扫描并批准所有软件,给予用户,(如苹果指出的),“信心”那个软件,“已经检查了恶意组件”:

公证概述注意,类似于网守警报,在公证警报中,用户无法选中允许不传达的代码运行。因此,Apple未被扫描和公证的代码将被阻止。

公证显而易见的是最具武装组织,但可以说是“最好的”方法,尚未保护麦斯科斯州用户从无意中感染自己。......而且相当悲惨导致黑客滑入我的DMS,因为公证显然毁了他们的整个操作。哈!

公证与黑客在我们详细介绍麦克斯中的逻辑缺陷之前,允许攻击者进行微不足道,可靠地绕过所有这些基础,让我们简要介绍隔离区属性。您可能一直在想,麦克斯如何知道如何分析文件,以便可能显示文件隔离,网守或公证提示?答案是Quarantine属性!

只需放置,只要项目从Internet(通过诸如浏览器的应用程序)下载,麦斯卡斯或下载该项目的应用程序,都将使用名为com.apple.quartine的扩展属性标记为它。您可以为自己确认这一点。首先通过浏览器下载任何文件,然后运行MacOS的“扩展属性”实用程序,XATTR以及文件路径:

请注意,-p选项将打印出指定的扩展属性的内容。对于com.apple.quartine这包括各种标志,时间戳,下载文件的负责任的应用程序,以及映射到com.apple.launchservices.quarantineventsv *数据库中的密钥的uuid。

每当用户首次尝试打开包含隔离属性的文件(即从Internet下载的任何内容),麦斯科座将在暂停状态下启动进程。然后,系统将在文件上执行无数的复杂检查,旨在触发适当的警报或提示。在现代版本的MacOS上,用户将被显示:

a(文件隔离区)提示要求明确的用户同意(如果项目有效签名和公证)。 …或者

a(公证)警报通知用户无法运行文件(如果项目未有效地签名和公证)。

如果允许该过程(签名&公证)和用户批准,则系统将毫无疑问(恢复)它...允许它现在执行。

如果文件不包含com.apple.quartine属性,则MacOS假定它' s一个本地文件。因此,均未执行任何检查,因此不会显示提示/警报。这是通过设计,而不是一个错误。虽然这意味着已经在框上的恶意软件可以下载无符号/不排他性(第二阶段)有效载荷,但是剥离隔离区属性,然后启动所述有效负载而不担心警报......事实仍然是初始恶意软件(或其交付机制)将拥有隔离属性,因此将在推出时进行此类支票和/或警报。

但如果我告诉过你,绕过任何和所有此类提示,那么何时何地绕过任何琐碎和可靠的方式!? ......意思,如果用户只需双击该文件,游戏吓坏了!? 🥲

自2007年以来(引入文件隔离区时)麦斯科斯队启动了用户在尝试启动从互联网下载的应用程序时提醒用户。而现在,在最近的麦斯科斯版本中,除非该申请已经被Apple扫描并明确批准(公证),宏将拒绝运行该文件......或者会拒绝!

不幸的是,由于Apple的策略引擎中深入了解了一个微妙的逻辑错误,可以制作一个恶意应用程序,虽然无符号(并且因此不公开),将被允许在没有提示和警报时启动。没有文件隔离提示,没有网守警报,没有公证警报......没有!

在以下演示中,下载了名为“patricks_resume”的概念应用程序的证明。虽然它似乎是一个无害的PDF文件,但是在打开时,虽然无符号,不通的和隔离,但它能够启动Calculator.App(或者真的做得几乎没有其他事情):

请注意,已剥削的系统是一个完全修补的M1 MacBook,运行最新的MacOS Big Sur(11.2.3)。

毫无符号,不排他性和隔离,似乎在MacOS中引入了此错误...因此,旧版本的宏似乎并不脆弱。如果我不得不猜到,很可能与MacOS 10.15的新公证逻辑一起引入。因此,尝试安全和锁定宏的目标是完全被反馈的:

......同时,在Cupertino? (图片信用:@URUPZIA)

显然,这种漏洞是非常糟糕的,因为它提供了恶意软件作者的能力返回他们经过验证的目标和感染麦斯科斯用户的方法。虽然我们将谈论第三方保护方法(苹果的补丁之前存在!)以及检测该错误的剥削尝试方法,首先让我们走过揭开根本原因的过程,潜在的缺陷。

我们的分析是对完全修补的麦斯科斯大学(11.2.3)系统进行的。由于"安全" M1系统上的功能(阻碍调试),我们' LL坚持到英特尔/ X86_64系统。然而,随着缺陷是逻辑问题,底层架构的系统是无关的(如上面视频中的M1系统的开发方式所示)。

虽然潜在的缺陷在麦克斯的肠子深处发现,但不要担心我们会轻松地轻松。

首先,查看我们对触发漏洞的概念应用程序(Poc.App)的证明(因为这将无法提醒,即使它是无符号,不排他性和隔离的)。

我们的概念应用证明应用程序的捆绑包是“缺少”几个标准组件,最值得注意的是没有信息文件。 (INFO.PLIST文件包含有关应用程序的元信息,例如其可执行​​文件的路径)。相反,应用程序仅由名为PoC.App的目录,内容子目录,麦斯科群组子目录,然后在其中的文件中组成,该文件与(顶级)应用程序(PoC)匹配的文件。

应用程序的可执行组件(PoC)不是Mach-O二进制文件,而是A(Bash)脚本:

就第一次观察而言,事实证明,应用程序捆绑包的许多标准组件(例如,INFO.PLIST文件)确实是可选的。事实上,系统似乎将在.app中作为应用程序结束的任何东西。要测试此功能,只需创建一个空文件夹名称foo.app并双击它。虽然它错误(因为它只是一个文件夹,没有可执行内容),但错误提示确认系统确实尝试将其推出为应用程序:

...通过应用程序来启动(和失败)来启动(如果我们添加内容文件夹,那么(在其中)麦斯科群岛文件夹中,最后(在那之内)可以成功运行!虽然相当赤裸裸的是,这显然是所需要的。值得重新重新介绍,没有info.plist文件,可执行项目的名称必须与应用程序的名称匹配。这就是MacOS仍然能够确定当用户双击“App”时执行的内容。因此,对于我们的裸骨概念应用程序(PoC.App)证明,项目的名称必须是PoC:

我们裸BOC应用程序' S捆绑结构" Appify" GitHub上的开发人员脚本将以编程方式为您创建如此裸露的应用程序(无意中会触发此漏洞)。

在继续前进之前,让我们将MacOS应用程序策略颠簸到最高,最严格的级别,以便只允许来自麦斯科座应用商店的应用程序。在理论上这意味着外部应用程序,即使公证化将被操作系统阻止:

应用程序策略虽然指出,该漏洞还呈现较低/默认策略设置。也就是说,它是不相关的并且不受系统策略设置的影响。

让我们现在上传这个“裸骨”应用程序,然后下载它来模拟攻击。一旦下载,我们可以确认,正如所预期的那样,应用程序已自动使用com.apple.quartine扩展属性自动标记:

因此,我们可以假设(并稍后确认)该错误与丢失(或损坏)com.apple.quartine属性无关。由于存在此隔离属性,我们将看到它仍将通过MacOS的“应该 - 此应用程序被允许运行”逻辑评估。

我们还可以确认(通过诸如Whatsyoursign等工具),该应用程序是无符号(因此也不是不协调):

poc.app:由于应用程序已被标记为隔离属性,并且它是无符号(因此未公证)的事实,因此肯定会认为它会被宏封锁所封锁的事实,因为它毫无符合。但正如我们早早所说,这不是这种情况......它被允许运营不羁。

由于允许隔离的应用程序(没有警报或提示),这意味着一个错误是麦斯科斯州应用程序“评估”逻辑的某个错误。不幸的是(对于我们),当用户启动应用程序时不少于有多次用户模式应用程序,涉及系统守护程序和内核。

在2016年在Shmoocon的谈话中标题为“Gatekeeper暴露”来吧,看,征服"我提供了详细的(虽然现在有些日期了)这些互动:

启动应用程序是一个复杂的折磨,因为此话语以来,Apple已扩展(阅读:复杂)此过程,将XPC调用添加到其系统策略守护程序,syspolicyd及其xprotect(反病毒)代理,xprotectservice。

而不是煞费苦心地行走每一个口学和内核互动,而让我们看看我们是否可以通过更多被动方法来首先归零。日志消息!

回想一下,我们的概念应用程序证明是一个相当异常的“裸骨”应用程序,其可执行组件是脚本(与正常MACH-O二进制)。

我们的想法让虫子可能撒谎的更好的位置相当简单。监视系统日志让我们运行:

一个“正常”应用程序...包含标准应用程序捆绑文件(例如Info.Plist文件),以及标准MACH-O可执行文件。

基于脚本的应用程序(Script.App)...包含标准应用程序包文件(例如Info.Plist文件),但是(Bash)脚本作为其可执行文件。

我们的概念验证应用程序(PoC.App)...缺少标准应用程序包文件(例如info.plist文件),并将(bash)脚本作为可执行文件。

这三个都是无符号的,从互联网上下载(即,用com.apple.quartine扩展属性标记)。随着“正常”和基于脚本的应用程序都被阻止(如预期),理想情况下,我们将迅速揭示任何不同的逻辑,这些逻辑可以在允许我们PoC运行的错误方向上果断地指向我们!

在最近的麦克斯版本上,Apple统一所有日志记录,并提供了一个新的实用程序(Aptly命名)日志来解析并查看所有日志消息。如果使用Stream参数执行,则日志实用程序将是

......