自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么你的MacsOS EDR解決方案不應(yīng)該在Rosetta 2下運(yùn)行

安全 移動(dòng)安全
上周,SentinelOne宣布了其v5.0代理的早期可用性,它成為第一個(gè)本機(jī)支持Apple的新M1(又名Apple芯片或arm64 Macs)體系結(jié)構(gòu)的終端安全代理。

上周,SentinelOne宣布了其v5.0代理的早期可用性,它成為第一個(gè)本機(jī)支持Apple的新M1(又名Apple芯片或arm64 Macs)體系結(jié)構(gòu)的終端安全代理。與其他MacsOS的EDR/XDR安全解決方案不同,有了本機(jī)支持,Sentinel代理無(wú)需在Apple的翻譯軟件層(稱(chēng)為Rosetta 2)下運(yùn)行。

在這篇文章中,SentinelOne的研究人員解釋了在這個(gè)領(lǐng)域中所有熱門(mén)術(shù)語(yǔ)的含義,從“Rosetta2”和“Apple Silicon”到“arm64 architecture”和“Universal 2”二進(jìn)制文件,并解釋為什么在Apple Silicon上本機(jī)運(yùn)行安全軟件具有明顯的性能和安全優(yōu)勢(shì)。

去年,蘋(píng)果公司宣布將為Macs設(shè)備構(gòu)建自己的CPU,而不是依靠英特爾作為其處理器,這一消息轟動(dòng)一時(shí)。這些新設(shè)備于2020年末開(kāi)始發(fā)售,并通過(guò)多個(gè)代號(hào)與Intel Macs進(jìn)行了區(qū)別。

蘋(píng)果公司為推銷(xiāo)他們的新設(shè)備創(chuàng)造的第一個(gè)術(shù)語(yǔ)是“Apple silicon”,意思是指基于ARM公司設(shè)計(jì)的芯片的CPU芯片。蘋(píng)果授權(quán)基礎(chǔ)設(shè)計(jì),并自行設(shè)計(jì)。很明顯,他們不想把自己的芯片標(biāo)榜為是ARM芯片,而更愿意用一個(gè)獨(dú)特的品牌名稱(chēng)“Apple silicon”來(lái)體現(xiàn)其品牌價(jià)值。

當(dāng)然,蘋(píng)果公司已經(jīng)在iOS系統(tǒng)中使用他們自己定制的ARM芯片很多年了,并用“A”和數(shù)字說(shuō)明符來(lái)進(jìn)行編號(hào),比如A10、A11、A12等等(當(dāng)前版本的iOS系統(tǒng)搭載的是A14芯片)。大概是為了保持這種編號(hào)的規(guī)定,第一個(gè)Macs ARM芯片被編碼為“M1”。隨著蘋(píng)果不斷迭代設(shè)計(jì),我們希望看到M2和M3等產(chǎn)品。因此,除了被稱(chēng)為“Apple Silicon Macs,蘋(píng)果的第一代非英特爾設(shè)備也被稱(chēng)為“M1 Mac”。

這就有必要是我們研究二進(jìn)制文件——可執(zhí)行文件格式,它是蘋(píng)果和第三方軟件的基礎(chǔ),可以在這些新的M1芯片上運(yùn)行。當(dāng)然,這些必須有一個(gè)與CPU架構(gòu)兼容的格式。在英特爾設(shè)備上,我們有x86_64 Macsh-O可執(zhí)行文件;對(duì)于M1/Apple silicon Macs,本機(jī)二進(jìn)制格式是arm64e Macsh-O。

因此,我們有一個(gè)基于ARM的M1/Apple硅處理器架構(gòu)和運(yùn)行在上面的arm64二進(jìn)制文件。這似乎很簡(jiǎn)單,但有一個(gè)問(wèn)題:過(guò)去15年或更長(zhǎng)時(shí)間里為英特爾Macs電腦編寫(xiě)的所有軟件呢?不要忽視這樣一個(gè)事實(shí):至少在未來(lái)的兩年內(nèi),蘋(píng)果仍在銷(xiāo)售和生產(chǎn)帶有英特爾芯片的Macs電腦。同時(shí)擁有兩個(gè)完全不兼容的軟件目錄的兩個(gè)硬件產(chǎn)品線(xiàn)是站不住腳的。蘋(píng)果需要找到一種方法,讓在英特爾設(shè)備上構(gòu)建的軟件能夠在新的M1設(shè)備上運(yùn)行。

輸入Rosetta 2和通用文件格式。

英特爾、ARM和對(duì)翻譯軟件的需求

Rosetta這個(gè)名字源于著名的“Rosetta Stone”,正是這塊石碑讓我們得以將埃及象形文字翻譯成現(xiàn)代語(yǔ)言。蘋(píng)果原始的Rosetta軟件實(shí)際上幫助公司在2000年代中期將早期的架構(gòu)PowerPC轉(zhuǎn)化為英特爾。

由于 M1 芯片底層架構(gòu)和過(guò)去不同,由此帶來(lái)的應(yīng)用生態(tài)兼容性問(wèn)題是首先需要解決的,為此蘋(píng)果也開(kāi)啟了為期兩年的 Mac 過(guò)渡計(jì)劃。具體來(lái)說(shuō),蘋(píng)果借助的是 macOS 11 Big Sur 系統(tǒng)以及其內(nèi)置的 Universal 2、Rosetta 2 和 Virtualizaion 三種技術(shù)來(lái)解決問(wèn)題。不過(guò)話(huà)雖如此,可能還是會(huì)有小伙伴會(huì)比較猶豫,這些措施真的可以解決 M1 芯片 Mac 的軟件兼容性問(wèn)題嗎?特別是原來(lái)在 x86 架構(gòu)上的應(yīng)用,開(kāi)發(fā)者還沒(méi)有及時(shí)做適配,能在 Mac 上很好地運(yùn)行嗎?

對(duì)于這個(gè)問(wèn)題,其實(shí)蘋(píng)果已經(jīng)給出了專(zhuān)門(mén)的解決方案,就是 Rosetta 2。

Rosetta 2 是內(nèi)置在 macOS 11 Big Sur 系統(tǒng)里的,在幕后工作,只有當(dāng)你第一次下載一款 x86 應(yīng)用,第一次打開(kāi)時(shí),才會(huì)提示你安裝 Rosetta 2。

換句話(huà)說(shuō),Rosetta 2 的存在完全不會(huì)對(duì)你過(guò)去一直以來(lái)使用 Mac 的習(xí)慣造成影響,它幾乎是無(wú)感的,悄悄做著翻譯工作。

想要知道你使用的 App 到底是原生在 Mac 上運(yùn)行的,還是經(jīng)過(guò) Rosetta 2“翻譯”之后的,只要在 “應(yīng)用程序”文件夾中找到這個(gè)應(yīng)用的圖標(biāo),右鍵打開(kāi)菜單欄里的 “顯示簡(jiǎn)介”,如果應(yīng)用種類(lèi)后面有一個(gè) “Intel”,說(shuō)明這個(gè)應(yīng)用就是 x86 版本經(jīng)過(guò) Rosetta 2 翻譯的。

基于這樣的機(jī)制,Rosetta 2 能夠幫助 x86 架構(gòu)的應(yīng)用在 M1 芯片的 Mac 上保持流暢快速的響應(yīng),從而獲得很好的使用體驗(yàn)。

當(dāng)然,Rosetta 2 做翻譯的方案畢竟只是權(quán)宜之計(jì),不會(huì)一直存在,只是在開(kāi)發(fā)者們將自己的應(yīng)用全面轉(zhuǎn)到 M1 芯片原生狀態(tài)之前扮演過(guò)渡的作用。

當(dāng)時(shí),Rosetta的研發(fā)者使用了一種通用的文件格式,它是一種“FAT”二進(jìn)制文件,其中包含PowerPC和Intel二進(jìn)制文件。無(wú)論CPU是PowerPC還是Intel,操作系統(tǒng)都從FAT通用二進(jìn)制文件中提取正確的文件,并在CPU上本機(jī)運(yùn)行它。但是,如果Intel CPU遇到只有PowerPC二進(jìn)制文件的軟件,它將執(zhí)行Rosetta轉(zhuǎn)換器,并將PowerPC二進(jìn)制文件傳遞給Rosetta執(zhí)行。

對(duì)于M1 Mac,蘋(píng)果采取了類(lèi)似的方法:開(kāi)發(fā)者(比如SentinelOne)使用Universal 2二進(jìn)制格式在一個(gè)版本中發(fā)布他們軟件的Intel和arm64版本。使用Universal 2二進(jìn)制格式,操作系統(tǒng)會(huì)檢查它運(yùn)行在哪個(gè)體系結(jié)構(gòu)上,并自動(dòng)選擇適當(dāng)?shù)腶rm64(適用于M1 Mac)或Intel(適用于x86_64)片來(lái)執(zhí)行。然而,如果M1 Mac遇到尚未進(jìn)行本機(jī)轉(zhuǎn)換的開(kāi)發(fā)人員提交的Intel二進(jìn)制文件,它就會(huì)將二進(jìn)制文件傳遞給Rosetta 2轉(zhuǎn)換機(jī)制來(lái)處理。

按著蘋(píng)果公司的說(shuō)法,整個(gè)過(guò)程對(duì)用戶(hù)來(lái)說(shuō)應(yīng)該是“透明的”,在這里“透明”的意思是“不可見(jiàn)的”,而不是“明顯的”。然而,Rosetta 2的工作方式與原始的Rosetta并不完全相同,這對(duì)性能和安全都有影響,用戶(hù)應(yīng)該注意這一點(diǎn)。

新的體系結(jié)構(gòu)意味著終端安全性面臨新的挑戰(zhàn)

原始的Rosetta和Rosetta 2的主要區(qū)別在于進(jìn)行翻譯的時(shí)間。對(duì)于Rosetta 2,蘋(píng)果希望避免在原始Rosetta機(jī)制下影響一些嚴(yán)重消耗資源的軟件的性能問(wèn)題,比如Adobe CS2。

最初的Rosetta的問(wèn)題在于,每次運(yùn)行該軟件時(shí)都會(huì)翻譯該軟件,從而在每次啟動(dòng)時(shí)都反復(fù)給CPU造成負(fù)擔(dān)。 Apple采用Rosetta 2的方法是,通過(guò)在軟件首次啟動(dòng)時(shí)進(jìn)行“提前”(AOT)翻譯并將該翻譯保存以供將來(lái)發(fā)布,來(lái)盡可能地避免這種情況。

雖然這是一種改進(jìn)仿真軟件性能的好方法,但也有缺點(diǎn),特別是從安全軟件的角度來(lái)看。

相對(duì)于翻譯后的代碼,本機(jī)arm64代碼至少具有兩個(gè)性能優(yōu)勢(shì),而翻譯后的代碼與大型,復(fù)雜的程序(例如EDR產(chǎn)品)特別相關(guān)。

我們上面提到的Ahead-of-Time轉(zhuǎn)換是通過(guò)名為oahd_helper的幫助程序進(jìn)行的。該程序負(fù)責(zé)在首次運(yùn)行x86_64二進(jìn)制文件時(shí)創(chuàng)建轉(zhuǎn)換后的AOT二進(jìn)制文件。要翻譯的x86_64代碼的大小越大,啟動(dòng)時(shí)間越長(zhǎng)。當(dāng)需要oahd_helper轉(zhuǎn)換非常大的Intel可執(zhí)行文件時(shí),這又會(huì)導(dǎo)致設(shè)備上的內(nèi)存和CPU占用過(guò)多。

其次,對(duì)于需要在運(yùn)行時(shí)解析的復(fù)雜程序代碼的某些部分,無(wú)法進(jìn)行完整的AOT轉(zhuǎn)換。由于局部環(huán)境變量和條件的原因,有時(shí)直到運(yùn)行時(shí)才能確定需要運(yùn)行什么代碼。雖然理論上開(kāi)發(fā)人員可以提前編譯所有可能的代碼分支,但這既效率低下又容易出錯(cuò)。必要時(shí)確定運(yùn)行什么代碼并即時(shí)進(jìn)行編譯(即時(shí)編譯或JIT編譯)的效率和防錯(cuò)性要高得多。

在其他條件相同的情況下,當(dāng)你在本機(jī)處理器上運(yùn)行本機(jī)代碼時(shí),JIT編譯是沒(méi)問(wèn)題的,但當(dāng)代碼必須通過(guò)Rosetta進(jìn)行翻譯時(shí),這意味著盡管使用了AOT編譯,但仍然需要進(jìn)行一些即時(shí)編譯。當(dāng)這種情況發(fā)生時(shí),內(nèi)核將控制權(quán)轉(zhuǎn)移給一個(gè)特殊的Rosetta翻譯存根,由它來(lái)處理這項(xiàng)工作。簡(jiǎn)而言之,任何足夠復(fù)雜的程序(如EDR解決方案)都需要通過(guò)Rosetta實(shí)時(shí)翻譯至少一部分Intel代碼,而與運(yùn)行本機(jī)arm64代碼的安全解決方案相比,這種翻譯將導(dǎo)致性能損耗。

蘋(píng)果也在自己的官方文件中也提到了這一事實(shí):

“翻譯過(guò)程需要時(shí)間,所以用戶(hù)可能會(huì)認(rèn)為翻譯后的應(yīng)用程序有時(shí)會(huì)啟動(dòng)或運(yùn)行得更慢。”

通過(guò)設(shè)計(jì),本機(jī)M1軟件更安全

但是性能并不是唯一需要擔(dān)心的事情。更重要的是,本機(jī)M1代碼比通過(guò)Rosetta翻譯運(yùn)行英特爾代碼更安全。這是因?yàn)閙acOS Big Sur(acOS Big Sur是蘋(píng)果公司研發(fā)的桌面端操作系統(tǒng),于北京時(shí)間2020年6月23日在2020蘋(píng)果全球開(kāi)發(fā)者大會(huì)上發(fā)布,該操作系統(tǒng)適用于一部分Mac電腦。)帶來(lái)的變化之一只適用于Apple silicon Macs,即本機(jī)arm64代碼不能在M1 Mac上執(zhí)行,除非它有有效的代碼簽名。

除非附加了有效的簽名,否則Apple Silicon Mac在任何情況下都不允許執(zhí)行本機(jī)arm64代碼。但是,翻譯后的x86_64代碼不受此限制:翻譯后的x86_64代碼完全可以通過(guò)Rosetta執(zhí)行,而沒(méi)有任何簽名信息。

你可以在M1 Mac上用一個(gè)簡(jiǎn)單的“hello world”程序輕松驗(yàn)證這一點(diǎn)。如果首先將下面的程序編譯為arm64e,請(qǐng)注意操作系統(tǒng)在嘗試執(zhí)行時(shí)是如何阻止它的,但是一旦我們重新編譯了與x86_64可執(zhí)行文件相同的源文件,就可以在沒(méi)有代碼簽名且沒(méi)有代碼的情況下運(yùn)行hello.out:

這就允許了軟件篡改的可能性,即通過(guò)Rosetta(Rosetta)翻譯僅以英特爾二進(jìn)制代碼運(yùn)行的軟件,其代碼簽名可能被刪除,代碼被修改,程序在沒(méi)有有效開(kāi)發(fā)者代碼簽名的情況下通過(guò)Rosetta(Rosetta)執(zhí)行。

盡管?chē)L試進(jìn)行此類(lèi)攻擊的攻擊者還有其他障礙需要清除,但仍然存在這樣的情況:在M1 Mac上,本機(jī)arm64代碼比翻譯后的Intel代碼在本質(zhì)上更安全,因?yàn)楹笳邿o(wú)需進(jìn)行任何代碼簽名檢查就可以運(yùn)行。

這自然就引出了一個(gè)問(wèn)題:Rosetta本身是否可以用作攻擊媒介。盡管所有組件都通過(guò)系統(tǒng)完整性保護(hù)進(jìn)行了鎖定,但Rosetta是一個(gè)多方面且復(fù)雜的機(jī)制,由許多聯(lián)鎖部件組成,每個(gè)部件都有潛在的攻擊面。

在Rosetta的某些部件上,研究人員已經(jīng)完成了一些初始的、出色的逆向工程,但關(guān)于這個(gè)轉(zhuǎn)換層還有很多需要了解的地方,研究仍在進(jìn)行中。

總結(jié)

毫無(wú)疑問(wèn),蘋(píng)果在Rosetta 2上比原始Rosetta有了長(zhǎng)足的進(jìn)步,這也許可以解釋為什么某些軟件開(kāi)發(fā)人員尚未進(jìn)行過(guò)渡,也許還不了解本機(jī)M1支持的優(yōu)勢(shì)。其他開(kāi)發(fā)人員可能更愿意讓他們的解決方案在Rosetta下運(yùn)行,以利用他們尚未或無(wú)法轉(zhuǎn)換為ARM的舊式Intel模塊的優(yōu)勢(shì)。

但是,如上所述,出于性能和安全方面的考慮,在Apple芯片上本機(jī)運(yùn)行安全軟件的好處顯而易見(jiàn)。就像在其他地方,蘋(píng)果可能會(huì)在某些地方禁用Rosetta 2,而不會(huì)引起人們的注意。最后,同樣不可避免的是,正如最初的Rosetta在蘋(píng)果最終完全從Intel的PowerPC架構(gòu)過(guò)渡過(guò)來(lái)之后的幾年就停產(chǎn)了,蘋(píng)果最終將放棄對(duì)Apple silicon平臺(tái)上的翻譯軟件的支持。

本文翻譯自:

https://www.sentinelone.com/blog/why-your-macos-edr-solution-shouldnt-be-running-under-rosetta-2/

 

責(zé)任編輯:趙寧寧 來(lái)源: 嘶吼網(wǎng)
相關(guān)推薦

2020-09-18 07:01:38

分頁(yè)offsetlimit

2021-01-08 10:48:48

碼農(nóng)編程編碼測(cè)試

2023-04-04 08:10:40

CSS字體元素

2018-10-07 23:00:37

2022-12-16 09:47:29

2020-06-05 14:09:42

Kubernetes容器應(yīng)用程序

2020-03-09 13:58:19

機(jī)器人機(jī)器人流程自動(dòng)化RPA

2016-06-13 09:30:59

Linux云計(jì)算云解決方案

2018-11-12 10:14:56

網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全技術(shù)周刊

2019-04-04 14:33:19

云計(jì)算云端企業(yè)

2023-08-01 08:18:09

CSSUnset

2018-02-06 08:49:07

LinuxUnix命名管道

2020-06-21 21:25:14

物聯(lián)網(wǎng)WiFiIOT

2013-07-15 10:32:32

Windows虛擬機(jī)紅帽

2018-11-20 14:03:17

數(shù)據(jù)科學(xué)數(shù)據(jù)分析數(shù)據(jù)科學(xué)家

2020-06-09 09:19:14

數(shù)據(jù)庫(kù)

2019-09-02 09:30:40

2015-09-28 08:57:06

Ruby APPNeo4j

2009-01-03 15:07:38

ibmdwAIX

2020-01-10 11:08:46

云計(jì)算公共云IT
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)