上周,SentinelOne宣布其v5的早期可用性。arm64Macs)架构端点安全代理。与MacsOS的其他EDR/XDR安全解决方案不同,有了原生支持,Sentinel代理不需要在Apple的翻译软件层下运行,称为Rosetta2。在这篇文章中,SentinelOne研究人员解释了该领域所有流行语的含义,来自“Rosetta2”和“AppleSilicon”到“arm64架构”和“Universal2”二进制文件,并解释为什么AppleSilicon原生运行安全软件具有明显的性能和安全优势。苹果公司去年宣布将为Mac构建自己的CPU而不是依赖英特尔的处理器时引起了轰动。这些新设备于2020年底开始销售,并通过几个代号与英特尔Mac区分开来。Apple为推销其新设备而创造的第一个术语是“Applesilicon”,意思是基于ARM公司设计的芯片的CPU芯片。Apple许可基本设计并自行设计。显然,他们并不想将自己的芯片贴上ARM芯片的标签,而是更愿意用一个独特的品牌名称“Applesilicon”来体现自己的品牌价值。当然,Apple多年来一直在iOS中使用他们自己的定制ARM芯片,编号为“A”和数字说明符,如A10、A11、A12等(当前版本的iOS由A14芯片提供支持).据推测,为了保持这种编号惯例,第一批Mac的ARM芯片被编码为“M1”。随着Apple继续迭代其设计,我们期待看到M2和M3之类的东西。因此,Apple的第一代非英特尔设备也被称为“M1Mac”,而不是被称为“AppleSiliconMac”。这就是让我们有必要查看二进制文件的原因——可执行文件格式是Apple和可以在这些新M1芯片上运行的第三方软件的基础。当然,这些必须有与CPU架构兼容的格式。在Intel设备上,我们有x86_64Macsh-O可执行文件;对于M1/Apple硅Mac,本机二进制格式是arm64eMacsh-O。所以我们有一个基于ARM的M1/Apple硅处理器架构和运行在其上的arm64二进制文件。这看起来很简单,但有一个问题:过去15年或更长时间里为IntelMac编写的所有软件呢?不要忽视这样一个事实,即至少在未来两年内,Apple仍将销售和生产配备IntelMac的Mac。芯片Mac。同时拥有两个硬件产品线和两个完全不兼容的软件目录是站不住脚的。Apple需要找到一种方法,让基于Intel设备构建的软件在新的M1设备上运行。输入Rosetta2和通用文件格式。英特尔、ARM和翻译软件的需要Rosetta以著名的“罗塞塔石碑”命名,它使我们能够将埃及象形文字翻译成现代语言。Apple最初的Rosetta软件实际上帮助该公司在2000年代中期将早期的架构PowerPC转换为英特尔架构。由于M1芯片的底层架构与以往不同,由此产生的应用生态兼容性问题需要首先解决。为此,苹果还推出了为期两年的Mac过渡计划。具体来说,Apple使用macOS11BigSur系统及其内置的Universal2、Rosetta2和Virtualization技术来解决这个问题。不过话虽如此,可能有些朋友还是有些犹豫。这些措施真的能解决M1芯片Mac的软件兼容性问题吗?特别是对于x86架构上的原有应用,开发者没有及时适配。在Mac上能正常运行吗?对于这个问题,苹果其实已经给出了一个特殊的解决方案,就是Rosetta2。Rosetta2内置于macOS11BigSur中,在幕后工作,只会在你第一次下载x86应用并打开时提示你安装Rosetta2这是第一次。也就是说,Rosetta2的存在根本不会影响你使用Mac的习惯。它近乎麻木不仁,默默地做着翻译工作。如果你想知道你正在使用的应用程序是原来在Mac上运行还是被Rosetta2“翻译”后,只需在“应用程序”文件夹中找到该应用程序的图标,右键单击打开“显示配置文件”“在菜单栏”中,如果应用类型后面有“Intel”,则表示该应用是Rosetta2翻译的x86版本。基于这种机制,Rosetta2可以帮助x86架构的应用保持流畅和快速在M1芯片Mac上响应,从而获得良好的用户体验。当然,Rosetta2的翻译方案终究只是权宜之计,不会永远存在,只是在开发者全面转移应用前起到过渡作用到M1芯片的原生状态。当时,Rosetta的开发人员使用一种常见的文件格式,一种包含PowerPC和Intel二进制文件的“FAT”二进制文件。无论CPU是PowerPC还是Intel,操作系统都会提取正确的文件来自FAT通用二进制文件并在CPU上本地运行。但是,如果IntelCPU遇到只有PowerPC二进制文件的软件,它会执行Rosetta翻译器并将PowerPC二进制文件传递给Rosetta执行。对于M1Mac,Apple采取了类似的方法:开发人员(例如SentinelOne)使用Universal2二进制格式在一个版本中发布了他们软件的Intel和arm64版本。使用Universal2二进制格式,操作系统会检查它正在运行的架构,并自动选择合适的arm64(适用于M1Mac)或Intel(适用于x86_64)片来执行。但是,如果M1Mac遇到开发人员提交的未进行本地转换的Intel二进制文件,它会将二进制文件传递给Rosetta2转换机制进行处理。按照苹果的说法,整个过程应该对用户“透明”,这里的“透明”是指“不可见”,而不是“显而易见”。但是,Rosetta2的工作方式与原始Rosetta的工作方式并不完全相同,用户应注意其性能和安全隐患。新架构意味着端点安全的新挑战原始Rosetta和Rosetta2之间的主要区别在于进行翻译的时间。对于Rosetta2,Apple希望避免在原始Rosetta机制下影响某些资源消耗大的软件(例如Adob??eCS2)的性能问题。原始Rosetta的问题在于软件每次运行时都会进行翻译,每次启动都会反复占用CPU。Apple对Rosetta2的处理方法是通过在软件首次启动时进行“提前”(AOT)翻译并为将来的版本保存该翻译来尽可能避免这种情况。虽然这是提高仿真软件性能的好方法,但它也有缺点,尤其是从安全软件的角度来看。与翻译后的代码相比,原生arm64代码至少有两个性能优势,这与EDR产品等大型复杂程序尤其相关。我们上面提到的Ahead-of-Time转换是通过一个名为oahd_helper的帮助程序完成的。该程序负责在第一次运行x86_64二进制文件时创建转换后的AOT二进制文件。要翻译的x86_64代码越大,启动时间越长。当需要oahd_helper来转换非常大的Intel可执行文件时,这反过来会导致设备上的内存和CPU使用率过高。其次,对于一些需要在运行时进行解析的复杂程序代码,无法进行完整的AOT转换。由于局部环境变量和条件,有时无法确定哪些代码需要在运行时运行。虽然理论上开发人员可以提前编译所有可能的代码分支,但这既低效又容易出错。确定在必要时运行什么代码并即时编译它(即时或JIT编译)会更加高效和防错。在其他条件相同的情况下,当您在本机处理器上运行本机代码时,JIT编译很好,但是当必须通过Rosetta翻译代码时,这意味着尽管使用AOT编译,一些即时编译是必需的.当发生这种情况时,内核将控制权转移到一个特殊的Rosetta翻译存根,由它来处理这项工作。简而言之,任何足够复杂的程序(例如EDR解决方案)都需要通过Rosetta实时翻译至少一些英特尔代码,与运行原生arm64代码的安全解决方案相比,这种翻译会导致性能下降。Apple在其官方文档中也提到了这一事实:“翻译过程需要时间,因此用户有时可能会认为翻译后的应用程序启动或运行速度较慢。”原生M1软件在设计上更安全但性能并不是唯一需要担心的事情。更重要的是,原生M1代码比通过Rosetta翻译运行英特尔代码更安全。这是因为macOSBigSur(acOSBigSur是苹果开发的桌面操作系统,于北京时间2020年6月23日在2020年苹果全球开发者大会上发布。该操作系统适用于部分Mac电脑。)即将发生的变化之一仅适用于Apple硅Mac,即原生arm64代码无法在M1Mac上执行,除非它具有有效的代码签名。AppleSiliconMac不允许在任何情况下执行本机arm64代码,除非附加有效签名。但是,翻译后的x86_64代码不受此限制:翻译后的x86_64代码无需任何签名信息即可完全由Rosetta执行。您可以在M1Mac上使用简单的“helloworld”程序轻松验证这一点。如果您首先将下面的程序编译为arm64e,请注意操作系统在尝试执行时如何阻止它,但是一旦我们重新编译与x86_64可执行文件相同的源文件,我们就可以在没有代码签名和运行hello.out的情况下运行它:这允许软件篡改的可能性,即通过罗塞塔(Rosetta)翻译仅以英特尔二进制代码运行的软件,其代码签名可能被删除,代码被修改,并且程序是在没有有效开发人员编写代码的情况下签名,是由罗塞塔(Rosetta)执行的。虽然尝试此类攻击的攻击者还有其他障碍需要清除,但在M1Mac上,原生arm64代码本质上比翻译后的Intel代码更安全,因为后者不需要任何代码签名检查就绪即可运行。这自然引出了Rosetta本身是否可以用作攻击媒介的问题。尽管所有组件都被系统完整性保护锁定,但Rosetta是一个多方面的复杂机制,由许多互锁部分组成,每个部分都有一个潜在的攻击面。研究人员已经对Rosetta的某些部分进行了一些初步的、出色的逆向工程,但是关于这个翻译层还有很多东西需要了解,研究仍在进行中。总结毫无疑问,Apple在Rosetta2上比原来的Rosetta已经取得了长足的进步,这可以解释为什么一些软件开发人员还没有进行转换,并且可能还没有理解原生M1支持的优势。其他开发人员可能更愿意让他们的解决方案在Rosetta下运行,以利用他们尚未或无法转换为ARM的传统英特尔模块。但是,如上所述,出于性能和安全原因,在Apple芯片上本地运行安全软件的好处是显而易见的。与其他地方一样,Apple可以在人们不注意的情况下在某些地方禁用Rosetta2。最后,同样不可避免的是,正如最初的Rosetta在Apple最终完全从Intel的PowerPC架构过渡几年后停产一样,Apple最终将放弃对Apple硅平台上的翻译软件的支持。本文翻译自:https://www.sentinelone.com/blog/why-your-macos-edr-solution-shouldnt-be-running-under-rosetta-2/
