《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 業界動態 > 一個硬件安全工程師眼中的Meltdown

一個硬件安全工程師眼中的Meltdown

2018-01-08
作者:Tbsoft博士
關鍵詞: Meltdown 安全漏洞

  1、現代計算機體系結構(Architecture,也譯作架構或者系統結構)和CPU微體系結構(Microarchitecture,也譯作微架構或者微結構)

  現代計算機的體系結構基本都是基于馮·諾依曼體系結構,也就是“存儲程序方式”,即程序指令代碼(指令)和數據都放在內存中,運行時CPU從內存中逐條取指令并執行,指令還可以在必要時訪問內存數據。

  哈佛結構是馮·諾依曼結構的一種變形,特點是將程序(指令)存儲器和數據存儲器分開,即有兩塊獨立的內存,一塊存放指令,一塊存放數據,但沒有脫離“存儲程序方式”這種基本的方式,因此仍然屬于馮·諾依曼結構的變形或者改進。

  對于程序員,即使是匯編語言甚至機器語言程序員,最多也只能涉及到內存指令和數據這一級,計算機暴露給程序員的,只能是馮·諾依曼結構或者哈佛結構,稱為計算機體系結構(Architecture)。

  但CPU本身是由運算器、控制器、寄存器等部件組成的硬件電路,內存指令被取入CPU后,在CPU內部還要經過復雜的指令譯碼等過程,才能驅動CPU硬件電路相應部件,按照指令具體需求進行相應動作,最終完成指令執行,這一過程是由CPU內部的取指令、指令譯碼、部件驅動等硬件電路完成的,不同CPU差異很大,即使指令集相同的CPU也可以有不同的電路實現方法,這種CPU內部硬件電路的結構,稱為CPU的微體系結構(Microarchitecture)。

  CPU微結構是設計CPU的核心,對于程序員而言,CPU微結構并不暴露給程序員,最底層的程序員的極限也只能是通過CPU指令來訪問CPU,換而言之,程序員使用CPU的最小操作粒度是指令。但CPU指令在CPU內部可能還會被解析成為更小的執行單元,最終驅動CPU的單個硬件電路部件,也就是說,在CPU微結構中有更小的操作粒度,例如微操作(MicroOP,μOP)或者微指令,它們都是由CPU微結構決定的。

  或者說,CPU對于程序員而言也是一個黑盒子,程序員只要按照CPU指令集,用相應的指令編寫程序(如果是高級語言,則由編譯器或者解釋器將高級語言語句最終轉換為CPU指令),并將指令程序和相應數據加載到內存(現代通常由操作系統完成)即可執行程序,程序員只訪問到計算機體系結構這一級,至于指令在CPU內部是怎么進一步解析并最終執行的,那是CPU微結構決定的,對程序員不開放,程序員不關心,通常也不應該關心,實際也無法關心。

  2、如何提高CPU的運行速度

  CPU執行一條指令,一般來說,最少也要經過從內存中取指令,將指令譯碼解析成微操作(μOP),微操作最終驅動硬件電路部件三個步驟(簡稱取指令、譯碼和執行),如果執行一條指令,要等到這三個步驟都完成后,才能執行下一條指令,則一條指令執行時間過長(用CPU硬件術語說就是消耗多個時鐘周期),CPU運行速度就無法得到有效提高。

  如果在第一條指令譯碼時,同時取第二條指令;然后等到第一條指令執行時,第二條指令同時譯碼,同時還取第三條指令……這樣周而復始,取指令、譯碼和執行就可以重疊進行,就好比生產流水線上的工人,第一個工人對第一個產品加工好第一道工序后,將產品傳遞給第二個工人加工第二道工序,這是第一個工人可以對第二個產品加工第一道工序了……這樣可以避免工人不必要的空閑等待,生產效率就會大大提高,這一提高CPU運行速度的方法,也就稱為“流水線”,現代CPU均使用流水線技術。

  流水線有效減少了單條指令的平均執行時間,但指令仍然是一條條順序執行的,實際上,很多指令是彼此不相關的,例如訪問兩組完全不同寄存器的兩條指令,它們完全可以并行執行,執行順序的先后并不影響最終執行結果,對于這樣的不相關指令,完全可以設計多個執行部件電路,直接扔到不同執行部件中去并行執行,稱為亂序(Out-of-order)執行,可以進一步提高指令執行速度。亂序執行在現代CPU中廣泛應用,甚至對于有相關性的指令,也可以采用寄存器換名等手段將它們變成不相關指令,從而進行亂序執行。

  但流水線和亂序執行都會碰到一個問題,從原理上講它們僅適用于純順序執行的指令,一旦遇到分支,即條件跳轉指令,因為不執行到條件跳轉指令本身,是沒法知道程序轉向何處執行的,也就是條件跳轉指令的下一條指令在未執行前不確定,因此無法預先取得條件跳轉指令的后續指令,這時流水線和亂序執行都會失效,因為它們的前提是預先取得后續指令。

  為了盡量解決這個問題,現代CPU廣泛使用“分支預測”手段,也就是預測條件跳轉指令會跳向哪個分支,然后對這個分支進行預取后續指令。分支預測的常用策略是:如果某一段時間內某一條件跳轉都走向某一固定分支,則可以預測這條條件跳轉指令下一次很大可能也走向這一分支。

  典型例子:程序中的循環結構一般要循環多次才結束,那么在循環結束之前,判斷循環條件的條件跳轉指令顯然都是走向繼續循環分支的。

  分支預測配合流水線和亂序執行,能夠大大提高CPU的運行速度,因此現代CPU微結構基本都使用這種設計。

  3、分支預測帶來的問題——指令執行的“回滾”

  分支預測并不能保證100%的成功預測,一旦預測失敗,也就是最終執行到條件跳轉指令時,發現跳轉目標不是先前預測的分支方向,那么按照分支預測預取的后續指令實際上失效,這些指令已經完成的工作必須“取消”掉,否則就會造成錯誤的指令執行。

  用一個程序員容易理解的比喻:分支預測的后續指令執行,好比一個“事務”,如果分支預測是正確的,那么“事務”可以“提交”,這些后續指令就真正起作用;如果最終執行到條件跳轉指令時發現分支預測是錯誤的,則“事務”必須“回滾”,即使后續指令已經執行了,甚至是亂序執行了,已經完成的工作也都必須全部“撤銷”,后續指令要看起來沒有起任何作用,重新到正確的分支取新的指令執行。

  理論上說,不管指令執行“提交”還是“回滾”,都只與CPU微結構相關,其過程程序員應該看不到,程序員只能看到宏觀指令按照程序流程執行,CPU內部對程序員仍然應該是黑盒子。

  4、克服CPU運行速度與內存訪問速度的差異——高速緩存(Cache)

  目前CPU主頻已經達到3GHz以上,普遍采用多核并行,盡管主內存(DDR SDRAM)的主頻已經達到2GHz—3GHz甚至更高,也無法完全滿足多核CPU運行速度的需求,因為指令執行還是必須從內存中取指令,如果內存訪問速度不夠,CPU運行速度會受到內存訪問速度的限制。

  為了克服這個問題,目前采用在CPU與主內存之間插入多級高速緩存(Cache)的方法,Cache是一種訪問速度極高的存儲器,甚至可以集成在CPU內部,成為CPU微結構的一部分。Cache與主內存之間以塊為單位交換數據,塊長一般為數十字節。

  當CPU需要訪問內存,例如從內存中取指令時,第一次需要先將相應內存塊一次性讀入到空閑的Cache塊,CPU再直接訪問Cache塊,此時內存訪問速度會慢一些,因為存在主內存與Cache之間傳輸成塊數據的時間;CPU第二次訪問相同塊內存時,即可直接訪問Cache塊,而無須訪問主內存,內存訪問速度會快得多。

  主內存—Cache系統構成現代CPU的內存儲器系統,其原理與操作系統中的硬盤—內存系統構成虛擬內存的原理極其相似。

  5、指令執行的“回滾”在主內存—Cache系統留下的“痕跡”

  如上所述,如果分支預測失敗,則分支預測預取的后續指令,哪怕已經亂序執行了多條指令,也必須“回滾”,指令在CPU微結構中已經完成的工作必須全部“撤銷”。

  “撤銷”指令是容易的,指令最終完成的工作,無外乎是對寄存器或者內存的修改,可以暫且將修改“緩存”起來,如果“撤銷”,最終不真正修改寄存器或者內存即可。

  但對于內存讀寫指令(在CPU設計中通常稱為Load/Store指令或者LD/ST指令),以讀內存指令為例,如果最終“提交”,就必須讀取實際的內存地址,如果相應內存塊還沒有被讀入到Cache塊,讀取速度就會受到影響,因此在讀內存指令最終“提交”或者“回滾”之前,CPU微結構一般會事先將Cache塊準備好,也就是如果相應內存塊還沒有被讀入到Cache塊則預先讀入。

  也就是說,即使分支預測失敗,已經亂序執行的多條預取指令中只要有讀內存指令,就算最后被“回滾”,對廣義的CPU微結構還是有影響的——相應內存塊已經讀入到了Cache塊。

  而內存塊是否已經讀入到Cache塊,訪問速度是有一定差異的,這相當于“回滾”的讀內存指令在CPU微結構中留下的“痕跡”,這個“痕跡”是可以被作為“側信道”利用的。

  6、Meltdown攻擊原理的通俗簡明解釋

  操作系統的內核數據是受到CPU微結構保護的,用戶模式的應用程序無法訪問,如果訪問是要引發CPU錯誤異常的。

  構造一個分支,先檢測讀取內存的地址是否合法,合法就讀取相應地址內存字節,然后根據內存字節的值,讓內存字節的值與映射到不同Cache塊的內存塊對應起來,再故意讀取一下映射到不同Cache塊的內存塊;如果訪問內存的地址非法,例如操作系統內核數據地址,直接不讀取。

  顯然,這樣的分支,無論讀取合法地址還是非法地址都是不會出錯的。

  用大循環執行多次這個分支,前若干次,讀取內存地址都是合法的,“訓練”CPU的分支預測,讓CPU微結構認為下次也應該走向讀取內存這一分支。

  然后,突然執行一次非法的操作系統內核數據地址讀取。

  按道理說,讀取內存地址非法,應該走向不讀取這一分支,可是CPU的分支預測已經被“訓練”成了“條件反射”,CPU稀里糊涂地預取了讀取非法地址的指令,并亂序并行執行,只是暫時沒有“提交”,因為沒有“提交”,即使讀取非法地址內存,也不會引發CPU異常;而且此時根據非法地址內存字節的值,故意讀取映射到不同Cache塊內存塊的指令,相應的Cache塊也被CPU微結構準備好了(因為是并行亂序執行嘛),也就是相應內存塊已經讀入到了Cache塊。

  當然,最后CPU發現這次分支預測錯了,沒關系,預取的指令亂序并行執行“回滾”,讀取非法地址的指令根本沒執行,沒有引發CPU異常,皆大歡喜。

  可是,“痕跡”卻悄悄留下了,與非法地址內存字節值有意對應起來的內存塊已經讀入到了Cache塊。

  用程序遍歷一下所有可能對應的內存塊,看誰訪問速度最快,誰就很可能在Cache中,而非法地址對應的操作系統內核數據字節值是有意與內存塊對應的,原本在用戶模式下不能訪問的操作系統內核數據字節值就被推算出來。

  這就是所謂的“側信道泄漏”。

  7、這一攻擊實質的一句話解釋

  CPU微結構內部信息通過側信道向宏觀計算機體系結構的泄漏。

  8、一句話教訓

  設計CPU追求速度快是理所當然的,但速度和安全性之間要有平衡點,微結構無論怎樣追求高速優化,屁股要擦干凈,不要向宏觀體系結構泄漏內部信息。

  1965年intel創世人之一、時任仙童半導體公司電子工程師的戈登摩爾提出了摩爾定律,對人類的計算之路的快速進步做出了預言。過去二十年,人類在互聯網的帶動下,信息化發展一路狂奔。這種對速度的追求一定程度上,透支的是安全的掉隊。也許這正是一個重新定義平衡點的時刻。


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          久久久久青草大香线综合精品| 国产精品福利在线| 亚洲作爱视频| 亚洲国产精彩中文乱码av在线播放| 欧美午夜片在线免费观看| 国产伦精品一区| 久久天天躁夜夜躁狠狠躁2022| 欧美性猛交xxxx乱大交退制版| 国语自产精品视频在线看| 国产手机视频一区二区| 国产亚洲a∨片在线观看| 欧美激情亚洲另类| 麻豆国产精品777777在线| 国内精品免费午夜毛片| 欧美一区视频在线| 久热精品视频| 欧美大片在线观看一区| 午夜精彩国产免费不卡不顿大片| 亚洲激情在线观看视频免费| 99国内精品久久久久久久软件| 亚洲精品中文在线| 国产精品99久久不卡二区| 午夜欧美不卡精品aaaaa| 国产精品久久久久久av下载红粉| 一区二区三区欧美在线| 久久精精品视频| 久久人人爽人人爽爽久久| 国产日韩欧美视频| 一区二区三区四区五区精品视频| 欧美一区二区三区精品电影| 国产亚洲精品aa午夜观看| 久久一区二区三区国产精品| 国产在线播放一区二区三区| 欧美成人综合网站| 国产一区二区剧情av在线| 亚洲福利视频三区| 噜噜噜久久亚洲精品国产品小说| 亚洲人成亚洲人成在线观看| 国产精品制服诱惑| 久热成人在线视频| 国产精品一区免费视频| 国产精品丝袜久久久久久app| 亚洲国产成人不卡| 久久九九99视频| 国产午夜精品视频免费不卡69堂| 国产精品国产三级欧美二区| 免费日韩成人| 中文日韩在线| 久久久久久久性| 国产欧美日韩视频一区二区| 国产视频在线观看一区二区三区| 欧美一区二区三区四区在线| 久久一区二区三区国产精品| 亚洲黄一区二区| 亚洲大片在线| 亚洲欧美国产三级| 欧美精品久久一区| 国产精品美女在线观看| 国产精品av久久久久久麻豆网| 亚洲看片一区| 国产日韩欧美一区二区| 欧美香蕉大胸在线视频观看| 亚洲国产99精品国自产| 国产精品乱人伦一区二区| 久久精品国产清自在天天线| 销魂美女一区二区三区视频在线| 国产欧美一区二区精品婷婷| 欧美成人精品在线| 亚洲欧美视频在线观看| 久久中文字幕一区| 久久亚洲欧美| 日韩一级在线观看| 欧美日本一道本在线视频| 欧美一区久久| 欧美日韩国产区一| 一本久久知道综合久久| 国产精品www994| 国产亚洲欧洲一区高清在线观看| 夜夜嗨av一区二区三区四季av| 欧美伊人久久久久久午夜久久久久| 欧美日韩三级电影在线| 亚洲欧美日韩直播| 亚洲精品日韩在线观看| 亚洲影视综合| 亚洲影院污污.| 91久久久久久久久久久久久| 在线观看免费视频综合| 欧美欧美午夜aⅴ在线观看| 狠狠色丁香婷婷综合| 久久精品日产第一区二区三区| 国产精品色婷婷久久58| 久久久www成人免费毛片麻豆| 精品成人在线| 中日韩视频在线观看| 黄色小说综合网站| 欧美日本成人| 亚洲性视频网址| 欧美jizz19性欧美| 欧美日本国产视频| 国产精品久久久久毛片软件| 国产伦精品一区二区三区免费迷| 国产精品高潮在线| 欧美三级精品| 国产精品日韩精品欧美在线| 欧美日韩午夜精品| 揄拍成人国产精品视频| 久久久精品一区| 亚洲欧美综合| 久久av一区二区三区漫画| 国内外成人免费激情在线视频| 蜜臀a∨国产成人精品| 国模精品一区二区三区色天香| 欧美黄色影院| 欧美专区中文字幕| 国产伦精品一区二区三区在线观看| 美女主播精品视频一二三四| 亚洲午夜性刺激影院| 亚洲欧美成人一区二区在线电影| aa成人免费视频| 美女脱光内衣内裤视频久久网站| 欧美精品尤物在线| 久久综合伊人77777蜜臀| 欧美一区二区三区久久精品茉莉花| 国产精品视频yy9099| 裸体一区二区三区| 欧美精品久久一区二区| 在线免费精品视频| 亚洲日韩欧美视频| 国产亚洲欧洲997久久综合| 国产欧美精品一区二区三区介绍| 久久激情视频| 国产日韩欧美在线观看| 久久综合一区二区三区| 蜜臀91精品一区二区三区| 久久久久久久久伊人| 欧美专区日韩视频| 欧美日韩网站| 欧美国产第二页| 欧美在线一二三区| 亚洲国产成人高清精品| 欧美成人综合| 亚洲国产日韩欧美| 日韩视频不卡| 性xx色xx综合久久久xx| 在线日韩中文| 一区二区三区回区在观看免费视频| 欧美韩日视频| 国产在线乱码一区二区三区| 亚洲第一偷拍| 欧美日韩免费观看一区| 一区在线视频观看| 欧美亚洲视频在线看网址| 国产精品久久久久一区二区三区共| 久久久久久久一区| 久久亚洲图片| 一区二区精品国产| 欧美大片va欧美在线播放| 欧美二区乱c少妇| 国产精品视频999| 在线精品国产成人综合| 国产三级精品在线不卡| 久久久免费观看视频| 国产精品高潮久久| 亚洲天堂视频在线观看| 欧美午夜不卡在线观看免费| 久久综合九色99| 久久久久这里只有精品| 亚洲一区二区免费在线| 国内成人精品2018免费看| 亚洲高清久久| 亚洲线精品一区二区三区八戒| 黄色日韩精品| 欧美激情一区二区三区高清视频| 久久人人97超碰人人澡爱香蕉| 欧美精品免费播放| 久久国产免费看| 久久久久.com| 国产精品国产三级国产普通话三级| 欧美日韩国产va另类| 亚洲欧美乱综合| 亚洲女同性videos| 亚洲欧美一区二区三区久久| 亚洲欧洲日产国码二区| 欧美日韩一级片在线观看| 国产精品国产三级国产a| 男人的天堂成人在线| 亚洲天堂免费观看| 欧美日韩三级一区二区| 亚洲精品中文字| 亚洲精品女人| 欧美电影电视剧在线观看| 久久激情视频久久| 欧美一级欧美一级在线播放| 国产精品午夜av在线| 亚洲黄一区二区三区| 国产三级精品三级| 亚洲区一区二| 国产精品国色综合久久| 韩国一区二区三区美女美女秀| 欧美欧美天天天天操| 欧美精品97| 国产精品狼人久久影院观看方式| 久久久久久午夜| 国产色综合天天综合网| 亚洲欧美国产一区二区三区| 久久精品国内一区二区三区| 国内外成人在线| 亚洲成人在线观看视频| 国产精品专区第二| 亚洲三级电影在线观看| 亚洲淫片在线视频| 国产精品一区久久久| 亚洲在线免费观看| 欧美在线视频一区| 麻豆精品在线观看| 午夜精品在线看| 国产精品揄拍500视频| 亚洲无人区一区| 国产精品v欧美精品v日韩| 国产午夜精品全部视频在线播放| 欧美日韩免费网站| 欧美视频在线看| 国产精品久久久久久亚洲调教| 一区二区三区四区国产精品| 亚洲综合首页| 毛片基地黄久久久久久天堂| 欧美在线视频日韩| 久久国产毛片| 国产精品美女久久久免费| 久久野战av| 亚洲精品女av网站| 国产精品捆绑调教| 国产视频欧美| 欧美日本一道本在线视频| 欧美肥婆在线| 伊人影院久久| 亚洲男女自偷自拍图片另类| 亚洲一区二区日本| 欧美日韩www| 亚洲国产成人久久| 欧美一区二区成人| 免费高清在线一区| 国产视频在线观看一区二区三区| 国产日韩欧美不卡| 久久精品国产2020观看福利| 欧美视频在线一区二区三区| 国产日韩欧美中文在线播放| av成人毛片| 亚洲一二三四久久| 国产一区亚洲| 国产精品美女久久久免费| 亚洲欧洲一区二区天堂久久| 亚洲精品一区二区三区婷婷月| 欧美精品日韩www.p站| 亚洲国产婷婷香蕉久久久久久99| 欧美国产日韩一区二区三区| 久久只精品国产| 乱中年女人伦av一区二区| 久久精品免费电影| 精品动漫3d一区二区三区免费版| 欧美精品 国产精品| 欧美韩国在线| 每日更新成人在线视频| 激情六月婷婷久久| 国产乱码精品一区二区三| 国产精品九九| 久久九九全国免费精品观看| 国产精品日产欧美久久久久| 国产精品欧美日韩久久| 国产一区二区三区av电影| 午夜精品亚洲一区二区三区嫩草| 91久久精品www人人做人人爽| 欧美屁股在线| 亚洲午夜久久久久久尤物| 亚洲美女视频网| 欧美精品久久久久a| 一区二区三区国产在线| 久久久久久久综合色一本| 在线亚洲一区二区| 精品999久久久| 欧美在线视频一区二区三区| 久久久久久一区二区三区| 国产一区二区在线免费观看| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲成人在线| 狠狠色丁香久久综合频道| 国内精品久久久| 亚洲国产天堂网精品网站| 国产精品久久久久影院色老大| 欧美88av| 久久国产精品一区二区三区| 欧美在线999| 国产精品v一区二区三区| 蜜桃av一区二区| 性欧美大战久久久久久久免费观看| 国产模特精品视频久久久久| 日韩视频不卡中文| 久久国产精品久久久久久电车| 亚洲精品乱码久久久久久蜜桃麻豆| 麻豆精品在线播放| 老色鬼精品视频在线观看播放| 国产精品一区二区a| 国产精品久久久久免费a∨大胸| 麻豆九一精品爱看视频在线观看免费| 亚洲男同1069视频| 亚洲欧美卡通另类91av| 国产精品视频九色porn| 久久久青草青青国产亚洲免观| 久久久国产一区二区| 亚洲国产精品久久精品怡红院| 亚洲三级视频| 久久久成人网| 欧美制服丝袜| 国产精品看片你懂得| 欧美日韩国产一级| 亚洲午夜一区二区三区| 欧美黄色大片网站| 欧美国产精品一区| 国产精品久久久久久久久久免费看| 欧美大成色www永久网站婷| 亚洲理论在线观看| 亚洲精品九九| 宅男噜噜噜66一区二区| 欧美精品日韩| 欧美日韩亚洲视频一区| 伊人久久av导航| 国产午夜亚洲精品不卡| 久久精品国产一区二区电影|