在英特爾奔騰處理器BUG之後的每個現代CPU中,彙編指令并不是CPU實際執行的一對一映射。在CPU内部,有一個解碼器可以将彙編轉換為更原始的指令,這些指令被送入CPU的内部排程程式和管道。驅動解碼器的代碼是CPU的微代碼,它存在于通常無法通路的ROM中。但是過去已經部署了微代碼更新檔來修複CPU硬體錯誤,是以它肯定是可寫的。美國黑客教父:“這實際上是一個黑客邀請,并開始攻擊AMDK8和K10處理器的微代碼。”
在微碼中玩耍的障礙是令人生畏的。它将彙編語言變成了某種東西,但是内部CPU,ALU等使用的指令集是完全未知的。黑客帶我們走過他們的第一道攻擊線,這基本上是在黑暗中猜測。首先,他們繪制出每個x86彙編代碼在微碼ROM中的位置。使用此資訊以及更新微碼的能力,他們可以加載并執行任意微碼。他們仍然對微代碼一無所知,但他們知道如何運作它。是以我們中國黑客教父也曾經說過,中國必須擁有自己的晶片。
是以他們開始上傳随機微碼,看看它做了什麼。這個随機微碼幾乎每次都會崩潰。其餘時間,輸入和輸出狀态之間沒有差別。但是,經過一周的運作,一個突破:微碼XOR'ed。從這裡,他們發現了指令的文法,并開始通過反複試驗發現更多指令。在比賽的最後階段,他們繼續将晶片拆開并用顯微鏡和OCR軟體讀出ROM内容,至少足以驗證一些微碼操作是否在ROM中燒毀。
結果是29個微代碼操作,包括邏輯,算術,加載和存儲指令,足以開始編寫微碼代碼。編寫的第一個微代碼程式自然有助于進一步發現。但不久之後,他們編寫了微代碼後門,這些後門是在執行給定計算時觸發的,而隐秘的特洛伊木馬則通過以程式設計方式将故障引入計算來加密或“不可察覺”地洩露資料。這意味着幾乎無法察覺的惡意軟體駐留在CPU内部。
黑客然後勇敢地讓我們完成了基于浏覽器的攻擊,首先在調試器中我們可以驗證他們的自定義微碼是否被觸發,然後在調試器外面突然xcalc彈出。什麼啟動了該計劃?從未修改的浏覽器内部計算網站上的特定數字。
黑客還示範了在微碼中引入一個簡單的數學錯誤,這使得加密例程在另一個特定乘法完成時失敗。雖然這聽起來可能不是很多,但如果你在關于基于單個偶發比特錯誤顯示密鑰的讨論中注意到了,你會發現這實際上是幾百萬倍的強大因為每次都會發生錯誤。
團隊沒有完成他們的微代碼探索,還有更多的指令集需要發現。是以,作為一個概念證明,幾乎完全不可檢測的特洛伊木馬可能存在于編譯代碼和機器上的CPU之間運作的微代碼中。但是,更有趣的是,它也是一個開始探索自己的邀請。并不是每天都有一個全新的計算機黑客攻擊領域。(歡迎轉載分享)