當前位置: 主頁 > 新聞 >
 

在(編譯器)開關的切換之間達到更好的安全性 啟動指標驗證與分支目標識別指令

本文作者:Nicolas Devillard       點擊: 2023-11-07 11:35
前言:
Arm 架構暨技術部門安全架構師 Nicolas Devillard
2023年11月7日--科技正深植於我們生活的每個面向,隨著資料點與連接性的增加,帶來了改變人們生活、但卻相形複雜的數位解決方案。管理此類解決方案的安全性是 Arm 運算架構師的首要任務,而這點也反映在更廣泛的產業的意向上。根據 PSA Certified 2023 年安全性報告,75% 的技術決策者把安全性視為企業的優先要務。

全面性的安全性策略
rm 致力於和晶片與軟體合作夥伴合作,為不斷發展演進的安全性最佳實務作法與技術提供全面性的策略。在軟體安全性方面,我們在近期發布的架構更新中,鎖定數個與記憶體相關的多個安全性漏洞。我們於 2019 年針對 Armv8.5 指令集導入記憶體標籤擴充(MTE)。我們也推出了以下功能:
在Armv8.3-A 導入指標驗證(Pointer Authentication, PAC)
在 Armv8.5-A 導入分支目標識別(Branch Target Identification, BTI)
在 Armv8.1-M 導入 PACBTI 聯合支援性

這些全都是針對強化軟體的可靠性而設計的技術,可協助減少某些級別的安全性漏洞,包括在所有嚴重安全錯誤中佔比最高的記憶體安全違規與記憶體損壞。

瑞薩電子全新的微控制器採用 PACBTI
Renesas(瑞薩電子)近日發表全新的 RA8 系列的微控制器(MCU),這也是業界首款採用Cortex-M85 架構的 MCU,Cortex-M85 是 Arm 迄今效能最高且最安全的 Cortex-M 處理器。RA8 系列運用了 Arm Helium 技術,不但可提升 DSP(數位訊號處理)與 ML(機器學習)的效能,同時也讓從事創新的人員可以在不影響安全性的情況下,充分掌握 AI 的商機。

瑞薩電子物聯網平台部門副總裁 Daryl Khoo 表示:「我們很興奮能在全新的 RA8 系列中採用了Arm Cortex-M85 與 Helium 技術,為要求極高的 AI 實作與其它使用場景帶來所需的更高效能。」他指出:「此外,PACBTI 與鎖定 PSA Certified Leve 3 信任根元件認證的全新 RSIP-E51A 整合式安全性引擎,能為開發人員提供低接觸的防竄改功能,進而為各個產業產品不可或缺的複雜應用提供安全保護。」

除了來自 Arm 架構與瑞薩電子安全 IP 帶來諸多有關效能與安全性的強化技術,RA8 系列也是首款導入 PACBTI 安全性延伸指令集、且基於 Cortex-M 架構開發的晶片。

首先,與記憶體損壞相關的常見風險為何?
在程式運行中,破壞的指標可以把程式執行導到軟體的其它部分,如 gadget。Gadget 是軟體中可以被攻擊者利用的部分函式,目的是要破壞裝置或系統。這些函式可以讀取任意檔案或記憶體位置、開啟 socket、衍生另一個程序,或升級權限。攻擊者可以結合這些函式以重新使用既有的軟體來執行惡意的攻擊。我們幾乎可以在所有的程式或函式庫中找到 gadget。有心者常把它們當成踏板,好讓來自遠端的更複雜的攻擊,可以堂而皇之地入侵機器。

什麼是返回導向與跳轉導向編程?他們與指令序列有何關聯?
返回導向 (ROP)與跳轉導向(JOP)編程,是利用記憶體損害,把程式的執行重新導至可用的指令序列的兩種攻擊技倆。ROP 攻擊會對軟體堆疊進行掃描,以搜尋可串接成新程式的指令序列。另一方面,JOP 攻擊則鎖定以其它形式之間接(絕對)分支結束的程序,例如函式指標或 case 敘述,而攻擊者可以將之劫持以便把指令序列串聯起來。

PAC 是什麼?它如何針對這些攻擊提供保護?
PAC 是一種防禦機制,透過確認位址在使用前沒有遭到修改,以達成阻礙 ROP 的目的。Arm 指令集架構(ISA)中已新增了新的指令,可將驗證碼插入到 Cortex-A 64 位元與 Cortex-M 32 位元的標回傳位址中最高位元。它隨後會在使用該位址從函式返回之前,先檢查驗證碼。最終結果是攻擊者無法修改驗證碼或位址,或甚至不能以另一個回傳位址取代堆疊中的回傳位址,原因是這會觸發異常並停止程式的運行,而不是導致任意程式碼的執行。

什麼是 BTI?
BTI 是一種用來阻礙 JOP 攻擊的防禦機制。BTI 整體的目標是透過把「分支」限制在原先鎖定的位址,以便在不同的分支間提供更堅強的安全保障。這會讓攻擊者更難以操控程式的控制流程。攻擊者可以藉由修改跳轉指標來濫用分支,以達成程式任意執行,並迫使已執行的執行緒跳轉到程式碼的另一個區域(通常是攻擊者想要的指令序列)。BTI 把分支目標的概念加入到 Arm 指令集架構(ISA)中,如此一來,分支來到非分支目標的指令時,就會引起異常。倘若攻擊者想辦法破壞了記憶體,讓分支重新導至無效的區域,整個執行就會中止。

PAC 與 BTI 能提供什麼層級的保護?
透過 PAC 與 BTI 對回傳位址與分支位址增加嚴格控管的能力,可以讓我們大幅降低可用的 ROP 與 JOP 指令序列數量。美國國家安全局(NSA)發現,Linux 發行版倘若運用 PAC 與 BTI,可用的指令序列數量會減少 50 倍(資料來源:github.com/nsa-cyber)。另一方面,據 Arm 進行的研究顯示,在啟動 PAC 與 BTI 之後,glibc(運行 Arm Cortex-A CPU)上可用的指令序列數量則減少 97% 以上。
 
(資料來源:把這些技術運用到真實的程式碼)

如何使用 PAC 與 BTI?
Arm 最近的架構(包括最新的 Armv9 架構)都加入了 PAC 與 BTI 指令,成為 Arm ISA 的一部份。當我們在編譯程式碼時,這些指令會自動加入二進制程式碼,因此不會變成可用的指令序列合集。開發人員只需在指令建置中啟動安全性保護即可。

哪些處理器支援 PAC 與 BTI 指令?
所有的 Armv9-A CPU 都已將 PAC 與 BTI 內建至處理器中,並且會固定進行安全性與功能的更新與改善。例如,在最新 Armv9 架構的 Cortex-A CPU 中,Arm 在為所有的 Armv9 CPU 設計啟動此一安全性功能時,就導入了全新的 QARMA3 PAC 演算法以提升效能。至於 Cortex-M 處理器系列中,Cortex-M85 亦支援 PAC 與 BTI 指令。

Cortex-A 與 Cortex-M 上的 PAC 與 BTI,又有何不同?
運行在 Cortex-A 上的作業系統與應用程式是龐大生態系的一環,當我們把 PAC 與 BTI 等安全性功能部署至所有二進制程式碼時,必須特別留意。光是以正確的選項全部進行重新編譯是不夠的,我們還要考量下列各點:
作業系統必需包含這些功能的支援,以及;
當我們混合人工撰寫的組合程式與支援 BTI 的程式碼時,必須格外小心。

搭載 Cortex-M 處理器的裝置問題往往會比較少,原因是韌體經常是從頭開始進行編譯,這會更易於產出符合 PAC 與 BTI 指令的軟體堆疊。最新的 Cortex-M 處理器在效能方面,已經縮小其與應用 CPU 之間的差距。因此,也難怪它獲得的關注與 CPU 相關的威脅不相上下。

那些編譯器支援 PAC 與 BTI 指令?
LLVM 是一套編譯器與工具鏈技術,自 2018 年發行的第八版起,便在各個 Cortex-A CPU 的設計上支援 PAC 與 BTI。同時,GCC 是 GNU 專案為了支援各種程式語言而產出的最佳化編譯器,它自 2022 年 7 月起就在 Cortex-A CPU 的設計上支援 PAC 與 BTI(use -mbranch-protection=standard)。GCC 13.1 版則在 2023 年 4 月為 Cortex-M85 處理器新增對 PAC 與 BTI 的支援。至於 Cortex-M 運算平台,Arm Compiler 6(AC6)支援 PACBTI 指令,而 IAR Embedded Workbench for Arm 則為 Arm Cortex-M85 提供對 PACBTI 的支援。更多有關 PAC 與 BTI 的硬體支援細節,請參考這篇部落格。

哪些程式語言支援 PAC 與 BTI?
理論上來說,任何具備 LLVM 或 GCC 後端的編譯語言都可獲得支援,但仍取決於編譯器連接到其基礎設施的位置。這兩種編譯器套件都包含了對 PAC 與 BTI 的 C 與 C++ 支援。Rust 與 Go 等程式語言則已將 PAC 與 BTI 作為實驗性功能提供支援。更多有關 Rust 對 PAC 與 BTI 提供的實驗性支援資訊,請參考這裡。

是否已有運用 PAC 與 BTI 指令的實際專案?
Google 的 Chromium 專案與 Javascript V8 引擎目前已經針對 Arm64 進行發布,內含 PAC 與 BTI 的指令編譯。像 Debian 與 RedHat 等一些 Linux 發行版,則已經部署相容的二進制程式碼,以支援 PAC 與 BTI。與此同時,其它的專案接下來發行新版本時,也都考慮增添這兩項安全性功能。例如,德國的 SuSE 公司的 Tumbleweed 專案就會支援 PAC、BTI 與其它 Arm 特定的功能。請點擊以下連結以獲取更多資訊。
 
以 Armv9 強化 Chromium 的控制流程完整性
SuSE 公司的 Tumbleweed 專案支援 PAC/BTI 與其它 Arm 特定的功能
Fedora 對 Aarch64 指標驗證提供支援

若同樣的程式碼必須在較舊款的處理器上運行該怎麽辦?
PAC 與 BTI 指令(PAC、PACBTI、AUT)屬於 NOP(無操作)領域。對於無法識別出 NOP 指令的較舊款處理器,PAC 與 BTI 指令還是可以運作,但無法獲得安全性的效益。

PAC 與 BTI 對效能與程式碼的大小會帶來何種衝擊?
瑞薩電子已在 Cortex-M85 RA8D1 上跑出一些標準的基準測量值。
編譯器:Arm Compiler 6.20 with -mbranch-protection=standard

Coremark :
 

PacBTI

PacBTI

編譯器

最佳化水準

程式碼大小

byte

效能

coremark/Mhz

程式碼大小

byte

效能

coremark/Mhz

Os

27568

4.143

31824

3.860

Ofast

37160

5.496

40900

5.236

Omax

37848

6.194

40756

6.133

         
AudioMark:
 

PacBTI

PacBTI

編譯器

最佳化水準

程式碼大小

byte

效能

audiomark/Mhz

程式碼大小

byte

效能

audiomark/Mhz

Os

70616

3.874

77072

3.923

Ofast

88472

3.835

94440

3.887

Omax

86456

3.864

90376

3.859


EEBMC
消費者 CJPEG
(壓縮器)
 

PacBTI

PacBTI

編譯器

最佳化水準

程式碼大小

byte

效能

(迭代/秒)

程式碼大小

byte

效能

(迭代/秒)

Os

44670

49.23

51016

48.94

Ofast

63942

50.4

69984

50.15

Omax

69438

61.35

74160

61.72

一如預期,PAC 會影響到函式調用,原因是與指標驗證出現的時間點衝突。對於多數時間用在數位訊號處理(DSP)或矩陣運算的運算密集韌體,影響則是相當小。效能方面幾乎沒影響,且這方面的影響也可利用編譯器的最佳化進行減緩,它會造成程式碼變大,但效能卻差不多。

以 Arm 技術建構安全且安心的數位體驗
Arm 不斷推出更多內建的安全性功能,以消除攻擊者從遠端或本地攻擊裝置漏洞的方式,不論這些裝置是在資料中心、消費科技產品,或是嵌入式產品。透過 PAC 與 BTI 指令取得對抗 ROP 與 JOP 型態攻擊的內建防護,讓既有的程式碼更加安全且穩固。由於 Armv8 與 Armv9 架構已普遍應用在 Arm 生態系中,PAC 與 BTI 將可大規模地提供安全性的效益,推動 Arm 技術持續鞏固全球的數位安全性。

關於 Arm
Arm 技術正在定義運算的未來。Arm 先進的低功耗處理器設計與軟體平台,已促成超過 2,500 億顆晶片的先進運算,我們的技術安全地驅動包含感測器、智慧型手機甚至於超級電腦等產品。Arm 攜手超過 1,000 家的技術合作夥伴,使人工智慧得以在任何場景順利運作。而在網路安全領域,我們也致力於為從晶片到雲端的數位世界奠定信任的基礎。世界的未來將建構於 Arm 之上。

所有資訊都「依目前情況」提供,且並不帶保證或代表性。此一文件可以自由分享,但不得修改且必須註明出處。Arm 是 Arm Limited(或其子公司)的商標或註冊商標。所有其他品牌或產品名稱乃為所屬個別公司之財產。© 1995-2023 Arm Group.
 
欲獲得更多第一手資訊,請造訪 Arm 繁體中文網頁:https://www.arm.com/zh-tw/
關注 Arm Taiwan 臉書粉絲團:https://www.facebook.com/ArmTaiwan/
本新聞部落格由頤徳公關代 Arm Taiwan 發布
 

 

電子郵件:look@compotechasia.com

聯繫電話:886-2-27201789       分機請撥:11