日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

14-Providing protection for complex software

發布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 14-Providing protection for complex software 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈


相關鏈接: (專題:《learn-the-architecture系列》)

  • 01-Introducing the Arm architecture
  • 02-Armv8-A Instruction Set Architecture
  • 03_Introduction_to_AMBA_AXI
  • 04-TrustZone for Armv8-A
  • 05-Exception model
  • 06-GICv3_v4_overview
  • 07-Armv8-A virtualization
  • 08-Isolation using virtualization in the Secure World_Whitepaper
  • 09-LearnTheArchitecture-MemoryManagement
  • 10-Armv8-A memory model guide–ongoing
  • 11-Memory Management Examples
  • 12-Generic Timer
  • 13-Introduction to security
  • 14-Providing protection for complex software
  • 15-Arm-Confidential-Compute-Software-Stack
  • 16-Understanding the Armv8.x extensions

文章目錄

        • 1、Stack smashing and execution permissions
        • 2、Return-oriented programming(ROP)
        • 3、Jump-oriented programming

1、Stack smashing and execution permissions

最傳統的一種攻擊方式是棧溢出(stack smashing)。 有很多類型的棧溢出。 棧溢出的基本形式涉及惡意軟件將新的操作碼寫入內存,然后嘗試執行寫入的內存。如下演示了這個過程 :

通常,用來發起攻擊的內存是堆棧內存。 這就是名稱stack smashing 的由來。 為了防止棧溢出,現代處理器架構,如Arm架構,有執行權限(execution permissions)的設置。 在Armv8-A中,主要的控制是 翻譯表中的執行比特位。 如下列出translation engine1的EL0和EL1的執行權限:

  • UXN User (EL0) Execute-never
  • PXN Privileged Execute-never

設置其中一個位將頁面標記為不可執行。 這意味著任何分支到該頁內某個地址的嘗試都會觸發一個異常,以Permission錯誤的形式出現。 有單獨的特權和非特權位。 這是因為應用程序代碼需要在用戶空間(EL0)中執行,但不應該使用內核權限(EL1或EL2)執行。 另一種形式的攻擊包括濫用系統調用,試圖獲得特權代碼來從用戶內存調用代碼。

下圖顯示了運行在操作系統(OS)下、具有預期執行權限的應用程序的簡化但典型的虛擬地址空間:

該體系結構還在系統控制寄存器SCTLR_ELx中提供了控制位,以使所有可寫地址不可執行。 啟用此控件將使堆棧等位置不可執行。

無論PXN和SCTLR_ELx控件如何配置,在EL0上可寫的位置永遠不會在EL1上可執行

這些控制加在一起可以為我們所描述的各種攻擊提供強大的保護。 翻譯表屬性和寫入控件可以阻止任何位置的執行,惡意代碼可以寫入,如下圖所示:

2、Return-oriented programming(ROP)

術語: Pointer Authentication Code (PAC)

像我們所描述的執行權限這樣的特性使得執行任意代碼變得越來越困難。 這意味著攻擊者使用其他方法,如面向返回編程(ROP)。 ROP利用了許多現代系統中軟件堆棧的規模優勢。 攻擊者分析系統中的軟件,尋找小工具。 gadget是一段有用的代碼,通常以函數return結尾.

我們正常的程序中,一般都是在進入函數的時候,將返回地址(LR寄存器)做了一個壓棧的操作,函數返回之前,再將LR從棧中還原.

ROP的模型,就是修改棧中LR的值,使其按照攻擊者預設的flow返回. 攻擊者將一串gadget串在一起,形成一個有效的由現有代碼片段組成的新程序:

進程地址空間中可用的任何庫都是gadget的潛在來源。 例如,C庫包含許多函數,每個函數都提供了潛在的gadget。 有了這么多可用的小工具,統計上就有足夠多的小工具可以組成任意的新程序。 有些編譯器甚至被設計為編譯到gadget,而不是匯編器。 ROP攻擊是有效的,因為它是由現有的合法代碼組成的,所以它不會被執行權限或從可寫內存執行的檢查捕獲。 對于攻擊者來說,查找小工具并創建生成新程序所需的序列是非常耗時的。 但是,這個過程可以自動化,并且可以重用來攻擊多個系統。 地址空間隨機化(ASLR)可以幫助防止自動和多次攻擊的實踐。

Armv8.3-A引入了pointer authentication選項。 pointer authentication可以減輕ROP攻擊。
指針身份驗證利用了指針以64位格式存儲的,其實并不是所有這些位都需要表示 地址。 虛擬地址空間的布局如下圖所示:

可以看到,任何有效的虛擬地址的前12位都是0x000或0xFFF。 當pointer authenticatio啟用時,高比特位用于存儲簽名,而不作為地址的一部分。 這個簽名也被稱為Pointer Authentication Code (PAC).
PAC使用指針的高比特位。 bit55位保留來表示是訪問頂部區域還是底部區域。 如下所示:

PAC可用的確切位數取決于虛擬地址空間的配置大小,以及是否被標記指針被啟用。 虛擬地址空間越小,可用位就越多。
為了防止ROP攻擊,在函數的開頭對LR中的返回地址進行簽名。 這意味著以較高的順序添加PAC
寄存器的位。 返回前,返回地址是通過PAC認證的,如果檢查失敗,則返回時產生異常。 下圖顯示了一個例子:

系統提供了5個128-bit keys. 每一個key都存在64-bit系統寄存器中:
? Two keys, A and B, for instruction pointers
? Two keys, A and B, for data pointers
? One key for general use
這些寄存器只能被EL1及其以上的異常級別操作.

指針簽名的模型:

How is the PAC checked?

如下圖所示,采用PAC*指令,進行指針簽名和指針驗簽的模型:

instructions introduce

  • PACIxSP Sign LR, using SP as the modifier.
  • PACIxZ Sign LR, using 0 as the modifier.
  • PACIx Sign Xn, using a general-purpose register as modifier.
  • AUTIxSP Authenticate LR, using SP as the modifier.
  • AUTIxZ Authenticate LR, using 0 as the modifier.
  • AUTIx Authenticate Xn, using a general-purpose register as modifier.
  • BRAx Indirect branch with pointer authentication.
  • BLRAx Indirect branch with link, with pointer authentication.
  • RETAx Function return with pointer authentication.
  • ERETAx Exception return with pointer authentication.
    注: x是指使用A密鑰還是使用B密鑰

Use of the NOP space
為了兼容,在不支持Pointer authentication的處理器上,使用NOP代替AUTIASP

Enabling pointer authentication
SCTLR_ELx:
? EnIx - Enables instruction pointer authentication using key x
? EnDx - Enables data pointer authentication using key x

3、Jump-oriented programming

術語:Jump-Oriented Programming (JOP)

攻擊者利用BLR或BR指令可以跳轉任何可執行地址,攻擊模型如下所示:

Branch target instructions

為了幫助防范JOP攻擊,Armv8.5-A引入了Branch target instruction(BTIs)。 BTIs也被稱為landing pads。 可以對處理器進行配置,使間接分支(BR和BLR)只能允許目標著陸臺指令。 如果一個間接分支的目標不是一個著陸臺,一個分支目標異常會生成,如圖所示:

Enabling branch target checking
在翻譯表中使用一個新的位(GP位),為每個頁面啟用了對landing pad的支持。 每個頁面控件允許文件系統包含landing pad保護代碼和legacy代碼的混合物,如下所示:

How BTI is implemented?
PSTATE包含一個字段BTYPE,該字段記錄了分支類型。 在執行跳轉分支時,跳轉分支的類型被記錄在PSTATE.BTYPE中。 下面的列表顯示了BTYPE對于不同跳轉分支指令的值:
? BTYPE=11: BR, BRAA, BRAB, BRAAZ, BRABZ with any register other than X16 or X17
? BTYPE=10: BLR, BLRAA, BLRAB, BLRAAZ, BLRABZ
? BTYPE=01: BR, BRAA, BRAB, BRAAZ, BRABZ with X16 or X17
執行任何其他類型的指令,包括直接分支,都會導致BTYPE被設置為b00

總結

以上是生活随笔為你收集整理的14-Providing protection for complex software的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91国在线啪 | 免费裸体美女网站 | 久久丁香网| 影音先锋成人资源网站 | 香蕉视频污在线观看 | 国产精品亚洲а∨天堂免在线 | 国产伦理一区 | 欧美高清视频 | 亚洲av成人精品一区二区三区 | 日韩中文字幕视频在线观看 | 国产成人精品一区 | 久久综合五月婷婷 | 久本草精品| 久久精品中文字幕 | 成人午夜影视 | 国产高清精品在线 | 久久国产精品精品国产色婷婷 | 欧美中文在线观看 | 综合久久婷婷 | 禁久久精品乱码 | 野外吮她的花蒂高h在线观看 | 天天色天天射天天操 | 亚洲午夜小视频 | 国产精品果冻传媒 | 亚洲一区二区三区四区在线 | 激情小说在线观看 | 日韩射吧 | 三级黄色生活片 | 免费av小说| 国产1区2区在线观看 | 中文字幕2区 | 色呦呦精品 | 亚洲一区二区自偷自拍 | 韩国女主播一区二区 | 99自拍网| 911国产视频 | 打屁股黄文 | 综合五月婷 | 6080午夜伦理| 日韩免费视频观看 | 久久久久久久久久久久久av | 久伊人 | www.视频一区| 国产精品探花一区二区三区 | 天天夜夜啦啦啦 | 久久五| 亚洲午夜久久久久久久国产 | www.久久精品| 91中文字幕在线播放 | 青草综合| 刘亦菲国产毛片bd | 欧美一区二区视频在线 | 97精品人妻一区二区三区 | 丁香激情网 | 国产精品v欧美精品v日韩 | 操三八男人的天堂 | 久久国产一二三 | 艳妇臀荡乳欲伦交换h漫 | 日本在线看片 | 国产精品久久免费视频 | 欧美aaa级| 在线超碰 | 高潮喷水一区二区三区 | 一区二区不卡视频 | 久久精品一区二区三区四区 | 日韩欧美成人网 | www天天操 | 人妻久久一区二区三区 | 爱情岛论坛自拍 | 亚洲区小说区图片区 | 国产精品-区区久久久狼 | 日韩欧美v| 国产精品久久久久桃色tv | 丁香花国语版普通话 | 日韩成人在线视频 | 中文字幕在线精品 | 黑丝久久 | 久久国产激情视频 | 午夜蜜桃视频 | 综合激情视频 | 黄色永久免费网站 | 亚洲播播 | 你懂得在线 | 性欧美精品男男 | 亚洲精品999| 国产免费无码一区二区 | 无遮挡的裸体按摩的视频 | 欧美少妇b| 日韩理论在线观看 | 国产欧美精品一区 | 欧美一区二区三区婷婷 | 美女破处视频 | 男女做受视频 | 国产黄色小视频在线观看 | 国产又爽又色 | 中文字幕二 | 亚洲不卡影院 | 性色欲情网站iwww九文堂 | 超碰91在线观看 |