回覆列表
  • 1 # 社會前沿觀察哨兵站

    ROP攻擊{Return-Oriented Programming}是現在比較常見的一種對軟體程式進行破壞,從而成功黑入整個軟體系統的一個手段。隨著全球數字化的迅猛發展,我們生活方方面面都越來越智慧,方便。但是同時軟體程式設計的安全性也越來越重要。透過對標準庫檔案加入花指令有一定的防護作用,但是不能完全防禦ROP返回程式設計攻擊,充其量只是提高了一點難度。建議加上地址隨機化,棧保護等方式加強防護。以下做相關內容的詳細介紹。

    一,ROP攻擊介紹:

    我們在編寫程式時,都會編寫很多可重入的函式,那麼CPU呼叫到函式時,除了傳入引數外,還會儲存返回地址,以便出函式時能夠沿著原來的邏輯繼續往下執行。那麼這裡就需要把呼叫函式的地址資訊儲存起來。ROP攻擊就是利用了儲存這個返回地址的功能!惡意程式碼將返回地址篡改後,CPU在出函式時,拿到的返回地址將會是錯誤,從而使CPU執行到惡意程式碼區域,也就黑入了軟體系統!

    下面我用編寫的小程式來演示下相關過程。

    圖中紅色圈出的都是對函式的呼叫,整個程式流程是從上而下一個指令一個指令執行,遇到函式呼叫時,透過跳轉指令跳到相應的函式執行,執行完函式後就返回原地址繼續往下執行。

    這裡以調到函式scpu_mailbox_config執行為例。執行了寄出去賦值語句後,將會透過“jr ra”跳轉回呼叫函式的地方繼續執行。這裡的ra就儲存著返回地址。如果在跳轉的時候,ra裡面的返回地址被黑掉了,改成了其他值,那麼CPU就會返回到一個錯誤的地址繼續執行。這個錯誤的地址被灌入了惡意程式碼,那麼這個軟體就被黑掉了。ROP攻擊基本就是這個原理。

    那麼對方ROP攻擊有哪些手段呢?下面做一些介紹。

    二,ROP的防護

    透過上面的ROP攻擊介紹,我們可以看出,如果軟體或者硬體能讓返回地址不被修改就能比較好的杜絕此類攻擊。那麼以此為出發點,主要有以下幾個手段。

    1,硬體CPU對返回地址的保護:這種方式在現在許多CPU都有做了,但是由於考慮到CPU執行效能問題,只是做了加強,並不能完全杜絕。

    2,軟體上在編譯程式開啟棧保護功能:譯程式時,加入相應的編譯選項(—stack—protected—strong)就可以了。其實就是在棧裡面埋入一個魔術數,每次出棧時都檢查一下這個數是不是被改變了。

    3,對程式進行地址隨機化地佈局(ASLR:Address Space Layout Randomization):程式每次被載入執行的地址都是隨機的,這樣就增加了構造攻擊鏈的難度。

    4,kBouncer:透過檢查返回地址是否是返回到一個立即呼叫call指令的位置的方式來確認是否有有受到惡意攻擊。但是這種方式的效能會比較差。

  • 中秋節和大豐收的關聯?
  • 到澳門必買的十樣東西是哪些?