chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

幽靈攻擊的消減方法

openEuler ? 來源:openEuler ? 作者:openEuler ? 2022-09-14 10:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

引言

現(xiàn)代處理器使用分支預(yù)測和推測執(zhí)行來最大限度地提高性能。例如,如果分支的目標(biāo)取決于正在讀取的內(nèi)存值,CPU將嘗試猜測目標(biāo)并嘗試提前執(zhí)行。當(dāng)內(nèi)存值最終到達(dá)時,CPU要么丟棄,要么提交推測計算。投機邏輯在執(zhí)行方式上是不可信的,可以訪問受害者的內(nèi)存和寄存器,并可以執(zhí)行具有可觀副作用的操作。幽靈攻擊包括誘使受害者投機性地執(zhí)行在正確程序執(zhí)行期間不會發(fā)生的操作,并通過側(cè)通道將受害者的機密信息泄露給攻擊者。

注:幽靈攻擊有很多變體,比如 Spectre Variant 1/2/3/3a/4、L1TF, Foreshadow (SGX)、MSBDS, Fallout、TAA, ZombieLoad V2等1, 這里只介紹 spectre v1, 其他幾個變體暫不涉及。

1、基本概念

亂序執(zhí)行:又稱無序執(zhí)行,它允許程序指令流下游的指令與先前指令并行執(zhí)行,有時甚至在先前指令之前執(zhí)行,從而提高了處理器組件的利用率。

投機性執(zhí)行:通常,處理器不知道程序的未來指令流。例如,當(dāng)無序執(zhí)行到達(dá)條件分支指令時,就會發(fā)生這種情況,該指令的方向取決于先前指令執(zhí)行情況。在這種情況下,處理器可以保留其當(dāng)前寄存器狀態(tài),預(yù)測程序?qū)⒆裱穆窂剑⑼茰y地沿著路徑執(zhí)行指令。如果預(yù)測結(jié)果是正確的,則提交(即保存)推測執(zhí)行的結(jié)果,從而產(chǎn)生比等待期間CPU空轉(zhuǎn)的性能優(yōu)勢。否則,當(dāng)處理器確定它遵循了錯誤的路徑時,它通過恢復(fù)其寄存器狀態(tài)并沿著正確的路徑繼續(xù),放棄 "推測執(zhí)行" 的工作。

分支預(yù)測:在推測執(zhí)行期間,處理器猜測分支指令的可能結(jié)果。更好的預(yù)測通過增加可以成功提交的推測性執(zhí)行操作的數(shù)量來提高性能。

內(nèi)存層次結(jié)構(gòu):為了彌合較快處理器和較慢內(nèi)存之間的速度差距,處理器使用連續(xù)較小但較快的緩存的層次結(jié)構(gòu)。緩存將內(nèi)存劃分為固定大小的塊,稱為行,典型的行大小為64或128字節(jié)。當(dāng)處理器需要內(nèi)存中的數(shù)據(jù)時,它首先檢查層次結(jié)構(gòu)頂部的L1緩存是否包含副本。在緩存命中的情況下,即在緩存中找到數(shù)據(jù),從L1緩存中檢索并使用數(shù)據(jù)。否則,在緩存未命中的情況下,重復(fù)該過程,嘗試從下一個緩存級別檢索數(shù)據(jù),最后從外部內(nèi)存檢索數(shù)據(jù)。一旦讀取完成,數(shù)據(jù)通常存儲在緩存中(以前緩存的值被驅(qū)逐以騰出空間),以防在不久的將來再次需要數(shù)據(jù)。

微體系結(jié)構(gòu)側(cè)信道攻擊:我們上面討論的所有微體系結(jié)構(gòu)組件都通過預(yù)測未來的程序行為來提高處理器性能。為此,他們維護(hù)依賴于過去程序行為的狀態(tài),并假設(shè)未來行為與過去行為相似或相關(guān)。當(dāng)多個程序同時或通過分時在同一硬件上執(zhí)行時,由一個程序的行為引起的微體系結(jié)構(gòu)狀態(tài)的變化可能會影響其他程序。這反過來又可能導(dǎo)致意外信息從一個程序泄露到另一個程序。初始微體系結(jié)構(gòu)側(cè)信道攻擊利用時序可變性和通過 L1 cache 的泄漏從密碼原語中提取密鑰。多年來,通道已經(jīng)在多個微體系結(jié)構(gòu)組件上得到了演示,包括指令緩存、低級緩存、BTB 和分支歷史。目標(biāo)已經(jīng)擴大到包括共址檢測、打破 ASLR、擊鍵監(jiān)測、網(wǎng)站指紋識別和基因組處理。最近的結(jié)果包括跨核和跨CPU攻擊、基于云的攻擊、對可信執(zhí)行環(huán)境的攻擊、來自移動代碼的攻擊以及新的攻擊技術(shù)。

2、攻擊舉例

思考下面這個程序,可否在不輸入正確密碼情況下通過驗證?(答案有很多,比如:24個1)

intmain(){
intret=0;
chardef_password[8]="1234567";
charsave_password[8]={0};
charpassword[8]={0};
while(true){
printf("pleaseinputpassword:");
scanf("%s",password);
memset(save_password,0,sizeof(save_password));
if(strcmp(password,def_password)){//比較是否和密碼一致
printf("incorrectpassword!

");
}else{
printf("Congratulation!Youhavepassedtheverification!
");
strcpy(save_password,password);
break;
}
}
returnret;
}

這里對數(shù)組的訪問沒有檢查下標(biāo)是否合法,但是更進(jìn)一步的思考下,加上長度檢查就一定安全了嗎?

實際上,軟件即使沒有漏洞,數(shù)組訪問時都加了下標(biāo)有效性檢查,也是不一定是安全的??紤]一個例子,其中程序的控制流依賴于位于外部物理內(nèi)存中的未緩存值。由于此內(nèi)存比CPU慢得多,因此通常需要幾百個時鐘周期才能知道該值。這時候,CPU會通過投機執(zhí)行把這段空閑時間利用起來,從安全的角度來看,投機性執(zhí)行涉及以可能不正確的方式執(zhí)行程序。然而,由于CPU的設(shè)計了通過將不正確的投機執(zhí)行的結(jié)果恢復(fù)到其先前狀態(tài)來保持功能正確性,因此這些錯誤以前被認(rèn)為是安全的。

具體的,比如下面的代碼片段(完整的在論文2最后):

if(x

假設(shè)變量 x 包含攻擊者控制的數(shù)據(jù),為了確保對 array1 的內(nèi)存訪問的有效性,上面的代碼包含了一個 if 語句,其目的是驗證x的值是否在合法范圍內(nèi)。接下來我們將介紹一下攻擊者如何繞過此if語句,從而從進(jìn)程的地址空間讀取潛在的秘密數(shù)據(jù)。

首先,在初始錯誤訓(xùn)練階段,攻擊者使用有效輸入調(diào)用上述代碼,從而訓(xùn)練分支預(yù)測器期望 if 為真。接下來,在漏洞攻擊階段,攻擊者在 array1 的邊界之外調(diào)用值 x 的代碼。CPU不會等待分支結(jié)果的確定,而是猜測邊界檢查將為真,并已經(jīng)推測性地執(zhí)行使用惡意x訪問array2[array1[x]*4096]的指令。

請注意,從 array2 讀取的數(shù)據(jù)使用惡意x將數(shù)據(jù)加載到依賴于 array1[x] 的地址的緩存中,并進(jìn)行映射,以便訪問轉(zhuǎn)到不同的緩存行,并避免硬件預(yù)取效應(yīng)。當(dāng)邊界檢查的結(jié)果最終被確定時,CPU 會發(fā)現(xiàn)其錯誤,并將所做的任何更改恢復(fù)到其標(biāo)稱微體系結(jié)構(gòu)狀態(tài)(nominal microarchitectural state)。但是,對緩存狀態(tài)所做的更改不會恢復(fù),因此攻擊者可以分析緩存內(nèi)容,并找到從受害者內(nèi)存讀取的越界中檢索到的潛在秘密字節(jié)的值。

3、攻擊的消減方法

攻擊的消減方法主要有以下幾個:

防止投機性執(zhí)行: 幽靈攻擊需要投機執(zhí)行。確保只有在確定導(dǎo)致指令的控制流時才能執(zhí)行指令,將防止推測性執(zhí)行,并防止幽靈攻擊。雖然作為一種對策有效,但防止投機執(zhí)行將導(dǎo)致處理器性能的顯著下降。

防止訪問機密數(shù)據(jù)

防止數(shù)據(jù)進(jìn)入隱蔽通道

限制從隱蔽通道提取數(shù)據(jù)

Preventing Branch Poisoning

關(guān)于使用編譯器(如畢昇編譯器)進(jìn)行 spectre v1 的消減在LLVM社區(qū)4已有針對函數(shù)級別的方案,使用方法如下:

為單個函數(shù)添加屬性.

voidf1()__attribute__((speculative_load_hardening)){}

為代碼片段添加函數(shù)屬性.

#pragmaclangattributepush(__attribute__((speculative_load_hardening)),apply_to=function)
voidf2(){};
#pragmaclangattributepop

添加編譯選項, 整體使能幽靈攻擊防護(hù)

-mllvm-antisca-spec-mitigations=true
-mllvm-debug-only=aarch64-speculation-hardening#查看調(diào)試信息

下面簡單介紹一下編譯器(如畢昇編譯器)的消減原理3。

原始代碼:

if(untrusted_value

生成的匯編大概是這樣:

  CMP untrusted_value, limit
  B.HS label
  LDRB val, [array, untrusted_value]
label:
  // Use val to access other memory locations

消減后:

if(untrusted_value

生成的匯編大概是這樣:

  CMP untrusted_value, limit
  B.HS label
  CSEL tmp, untrusted_value, WZr, LO
  CSDB
  LDRB val, [array, tmp]
label:
// Use val to access other memory locations

可以看到,我們主要使用CSEL+CSDB(Consume Speculative Data Barrier) 兩個指令組合進(jìn)行消減,CSEL 指令引入一個臨時的變量,如果沒有投機執(zhí)行,這個指令看起來是多余的,因為它還是會等于untrusted_value, 在投機執(zhí)行且推測錯誤的情況下,臨時變量的值就變成了0,且 CSDB 確保 CSEL 的結(jié)果不是基于預(yù)測的。

附:編譯器防護(hù)前后反匯編對比

3b35c488-334d-11ed-ba43-dac502259ad0.png

4.編譯器的實現(xiàn)

主要代碼在文件AArch64SpeculationHardening.cpp, 雖然 LLVM社區(qū)4有很多討論5,但代碼一共只有七百行左右,主要有三個步驟:

啟用自動插入投機安全值。

//對于可能讀寫內(nèi)存的指令(不止是load),加固其相關(guān)的寄存器
MachineInstr&MI=*MBB.begin();
if(MI.mayLoad())
BuildMI(MBB,MBBI,MI.getDebugLoc(),
TII->get(Is64Bit?AArch64::SpeculationSafeValueX
:AArch64::SpeculationSafeValueW))
.addDef(Reg)
.addUse(Reg);

其中:如果全是load到 GPR(通用寄存器),就對寄存器加固,否則對地址加固,因為 mask load 的值預(yù)計會導(dǎo)致更少的性能開銷,因為與 mask load 地址相比,load 仍然可以推測性地執(zhí)行。但是,mask 只在 GPR寄存器上很容易有效地完成,因此對于load到非GPR寄存器中的負(fù)載(例如浮點load),mask load 的地址。

將消減代碼添加到函數(shù)入口和出口(初始化)。

for(autoEntry:EntryBlocks)
insertSPToRegTaintPropagation(
*Entry,Entry->SkipPHIsLabelsAndDebug(Entry->begin()));
...
//CMPSP,#0===SUBSxzr,SP,#0
BuildMI(MBB,MBBI,DebugLoc(),TII->get(AArch64::SUBSXri))
.addDef(AArch64::XZR)
.addUse(AArch64::SP)
.addImm(0)
.addImm(0);//noshift
//CSETMx16,NE===CSINVx16,xzr,xzr,EQ
BuildMI(MBB,MBBI,DebugLoc(),TII->get(AArch64::CSINVXr))
.addDef(MisspeculatingTaintReg)
.addUse(AArch64::XZR)
.addUse(AArch64::XZR)
.addImm(AArch64CC::EQ);

將消減代碼添加到每個基本塊。

BuildMI(SplitEdgeBB,SplitEdgeBB.begin(),DL,TII->get(AArch64::CSELXr))
.addDef(MisspeculatingTaintReg)
.addUse(MisspeculatingTaintReg)
.addUse(AArch64::XZR)
.addImm(CondCode);
SplitEdgeBB.addLiveIn(AArch64::NZCV);
...
BuildMI(MBB,MBBI,DL,TII->get(AArch64::HINT)).addImm(0x14);

其他說明,這個方案依賴于X16/W16寄存器(CSEL 要用到),如果已經(jīng)被使用,則只能插入內(nèi)存屏障指令:

BuildMI(MBB,MBBI,DL,TII->get(AArch64::DSB)).addImm(0xf);
BuildMI(MBB,MBBI,DL,TII->get(AArch64::ISB)).addImm(0xf);

5. 總結(jié)2

支持軟件安全技術(shù)的一個基本假設(shè)是,處理器將忠實地執(zhí)行程序指令,包括其安全檢查。本文介紹的幽靈攻擊,它利用了投機執(zhí)行違反這一假設(shè)的事實。實際攻擊的示例不需要任何軟件漏洞,并允許攻擊者讀取私有內(nèi)存并從其他進(jìn)程和安全上下文注冊內(nèi)容。軟件安全性從根本上取決于硬件和軟件開發(fā)人員之間對CPU實現(xiàn)允許(和不允許)從計算中暴露哪些信息有明確的共識。因此,雖然文中描述的對策可能有助于在短期內(nèi)限制攻擊,但它們只是權(quán)宜之計,因為最好有正式的體系結(jié)構(gòu)保證,以確定任何特定代碼構(gòu)建在當(dāng)今的處理器中是否安全。因此,長期解決方案將需要從根本上改變指令集體系結(jié)構(gòu)。更廣泛地說,安全性和性能之間存在權(quán)衡。本文中的漏洞以及許多未介紹的漏洞都來自于技術(shù)行業(yè)長期以來對最大限度地提高性能的結(jié)果。這之后,處理器、編譯器、設(shè)備驅(qū)動程序、操作系統(tǒng)和許多其他關(guān)鍵組件已經(jīng)進(jìn)化出了復(fù)雜優(yōu)化的復(fù)合層,從而引入了安全風(fēng)險。隨著不安全成本的上升,這些設(shè)計需要選擇性修改。在許多情況下,需要改為安全性優(yōu)化的替代實現(xiàn)。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    20170

    瀏覽量

    247999
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11229

    瀏覽量

    223225
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4947

    瀏覽量

    73291

原文標(biāo)題:技術(shù)分享 | 幽靈攻擊與編譯器中的消減方法介紹

文章出處:【微信號:openEulercommunity,微信公眾號:openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    最新防攻擊教程

    最新防攻擊教程 別人攻擊的使用方法 傳奇防御攻擊 傳奇攻擊方法超級CC 超級穿墻CC 穿金盾CC
    發(fā)表于 09-06 20:42

    CC攻擊

    三個方法來確定。   命令行法   一般遭受CC攻擊時,Web服務(wù)器會出現(xiàn)80端口對外關(guān)閉的現(xiàn)象, 因為這個端口已經(jīng)被大量的垃圾數(shù)據(jù)堵塞了正常的連接被中止了。我們可以通過在命令行下輸入命令netstat -an來查看,如果看到類似如下有大量顯示雷同的連接記錄基本就可以被C
    發(fā)表于 09-10 15:59

    網(wǎng)絡(luò)攻擊的相關(guān)資料分享

    持續(xù)檢測現(xiàn)有網(wǎng)絡(luò)中的流量變化或者變化趨勢,從而得到相應(yīng)信息的一種被動攻擊方式。主動攻擊:是指通過一系列的方法,主動地獲取向被攻擊對象實施破壞的一種
    發(fā)表于 12-23 07:00

    cc攻擊防御解決方法

    攻擊ip被cc攻擊時服務(wù)器通常會出現(xiàn)成千上萬的tcp連接,打開cmd輸入netstat -an如果出現(xiàn)大量外部ip就是被攻擊了,這時候可以使用防護(hù)軟件屏蔽攻擊ip或手動屏蔽,這種
    發(fā)表于 01-22 09:48

    技術(shù)分享 | 幽靈攻擊與編譯器中的消減方法介紹

    攻擊者可以分析緩存內(nèi)容,并找到從受害者內(nèi)存讀取的越界中檢索到的潛在秘密字節(jié)的值。3、攻擊消減方法攻擊消減方法主要有以下幾個:防止投機性執(zhí)
    發(fā)表于 09-14 09:48

    KeeLoq密碼Courtois攻擊方法的分析和修正

    KeeLoq 密碼是由Willem Smit 設(shè)計的分組密碼算法,廣泛應(yīng)用于汽車的無線門鎖裝置。Courtois 等人在2007 年提出了破譯KeeLoq 的4 種滑動-代數(shù)攻擊方法,其中第4 種滑動-代數(shù)攻擊
    發(fā)表于 11-19 16:11 ?46次下載

    基于柯西-高斯動態(tài)消減變異的果蠅優(yōu)化算法研究

    針對果蠅優(yōu)化算法易陷入局部極值收斂速度減慢的不足,結(jié)合柯西變異和高斯變異的各自優(yōu)點,提出了變異效能系數(shù)和柯西高斯動態(tài)消減變異因子等概念,進(jìn)而提出了一種柯西高斯動態(tài)消減變異方法,將該方法
    發(fā)表于 11-29 16:23 ?0次下載

    基于攻擊威脅監(jiān)控的軟件保護(hù)方法

    為了增加軟件逆向分析的難度,提高軟件的安全性,提出了一種基于攻擊威脅監(jiān)控的軟件保護(hù)方法。該方法通過在軟件中部署威脅監(jiān)控網(wǎng),來實時檢測并處理軟件執(zhí)行過程遇到的多種攻擊威脅,確保軟件處于一
    發(fā)表于 12-07 10:01 ?0次下載
    基于<b class='flag-5'>攻擊</b>威脅監(jiān)控的軟件保護(hù)<b class='flag-5'>方法</b>

    基于攻擊圖的風(fēng)險評估方法

    震網(wǎng)病毒等事件實證了信息攻擊能對信息物理系統(tǒng)(CPS)帶來嚴(yán)重的物理影響。針對這類跨域攻擊問題,提出了基于攻擊圖的風(fēng)險評估方法。首先,對信息物理系統(tǒng)中的信息
    發(fā)表于 12-26 17:02 ?0次下載
    基于<b class='flag-5'>攻擊</b>圖的風(fēng)險評估<b class='flag-5'>方法</b>

    DDoS攻擊溯源優(yōu)化方法

    針對分布式拒絕服務(wù)( DDoS)攻擊對于網(wǎng)絡(luò)的嚴(yán)重威脅問題,提出基于自治系統(tǒng)(AS)與動態(tài)概率包標(biāo)記( DPPM)的DDoS攻擊溯源優(yōu)化方法。在該方法中,設(shè)計了一種新的包標(biāo)記方案,該方
    發(fā)表于 01-09 11:29 ?0次下載
    DDoS<b class='flag-5'>攻擊</b>溯源優(yōu)化<b class='flag-5'>方法</b>

    基于攻擊預(yù)測的安全態(tài)勢量化方法

    為準(zhǔn)確、全面地預(yù)測攻擊行為并量化攻擊威脅,提出一種基于攻擊預(yù)測的安全態(tài)勢量化方法。通過融合攻擊方、防御方和網(wǎng)絡(luò)環(huán)境態(tài)勢要素,依據(jù)實時檢測的
    發(fā)表于 01-09 15:44 ?0次下載
    基于<b class='flag-5'>攻擊</b>預(yù)測的安全態(tài)勢量化<b class='flag-5'>方法</b>

    噪聲消減方

    為了節(jié)省成本及時間,人們在業(yè)務(wù)及個人生活中進(jìn)行面對面的會議或會談的頻率不比以前了。手機及網(wǎng)絡(luò)電話(VoIP)已經(jīng)成為人們彼此交流方式產(chǎn)生這樣重要變化的推動力量。在語音通信方面,要確保提供良好的用戶體驗,聲音品質(zhì)及噪聲抑制至關(guān)重要。
    發(fā)表于 04-23 11:39 ?1381次閱讀

    服務(wù)器遭到DDoS攻擊的應(yīng)對方法

    DDoS攻擊是目前最常見的網(wǎng)絡(luò)攻擊手段。攻擊者通常使用客戶端/服務(wù)器技術(shù)將多臺計算機組合到攻擊平臺中,對一個或多個目標(biāo)發(fā)起DDoS攻擊,從而
    的頭像 發(fā)表于 12-02 15:56 ?3890次閱讀

    基于概率屬性網(wǎng)絡(luò)攻擊圖的攻擊路徑預(yù)測方法

    為準(zhǔn)確預(yù)測網(wǎng)絡(luò)攻擊路徑信息,提出一種基于概率屬性網(wǎng)絡(luò)攻擊圖( PANAG)的攻擊路徑預(yù)測方法。利用通用漏洞評分系統(tǒng)對弱點屬性進(jìn)行分析,設(shè)計節(jié)點弱點聚類算法以減少弱點數(shù)目,同時提出概率屬
    發(fā)表于 03-24 10:30 ?14次下載
    基于概率屬性網(wǎng)絡(luò)<b class='flag-5'>攻擊</b>圖的<b class='flag-5'>攻擊</b>路徑預(yù)測<b class='flag-5'>方法</b>

    針對Kaminsky攻擊的異常行為檢測方法

    Kaminsky攻擊是一種遠(yuǎn)程DNS投毒攻擊,攻擊成功后解析域名子域的請求都被引導(dǎo)到偽造的權(quán)威域名服務(wù)器上,危害極大。通過模擬攻擊實驗并分析攻擊
    發(fā)表于 04-26 14:49 ?6次下載
    針對Kaminsky<b class='flag-5'>攻擊</b>的異常行為檢測<b class='flag-5'>方法</b>