IoT上的緩衝區溢出漏洞

2021-02-15 喔家ArchiSelf

在過去N年裡,緩衝區溢出一直是網絡攻擊中最常被利用的漏洞。 看一下緩衝區是如何創建的,就能知道原因所在。

下面是C語言的一個例子:

第一步,程式設計師使用 malloc 函數並定義緩衝區內存的數量(例如32位)

第二步,返回指針,指示內存中緩衝區的開始位置

第三步,當程式設計師需要讀取或寫入該緩衝區時,程式設計師都會使用該指針

有了指針,程式設計師很容易忘記分配給指定緩衝區的實際內存量。編譯器在程序中使用元數據來分配適當的緩衝區大小,但是這個元數據通常在構建時被丟棄了。

如果在程序內或程序之間傳輸的數據隨後超出原定義的緩衝區大小,則數據信息將覆蓋相鄰的內存。這會導致內存訪問錯誤或崩潰,以及安全漏洞。

緩衝區溢出和漏洞利用

黑客可以使用堆棧緩衝區溢出替換帶有惡意代碼的可執行文件,這樣他們就可以利用系統資源,比如堆內存或者調用堆棧的本身。例如,控制流劫持利用堆棧緩衝區溢出,將代碼執行重定向到正常操作中以外的位置。

圖1 控制流劫持

一旦掌握了控制流程,一個控制流程的劫持者可以修改指針和重用現有代碼,同時還可能替換代碼。控制流的命令還允許攻擊者修改用於間接調用、跳轉和函數返回的指針,這些指針會留下一個有效圖來隱藏它們的行為。

在發生代碼執行之前,動態位址空間配置的隨機載入(ASLR)機制和用於檢測並防止緩衝區溢出的堆棧金絲雀,這些仍然是一個挑戰。

安全: 軟體還是晶片負責?

ASLR和堆棧金絲雀是基於軟體的緩衝區溢出保護機制,這些機制確實使攻擊者更難利用緩衝區溢出。例如,ASLR,動態地重新定位內存區域,以便黑客有效地猜測目標組件的地址空間,如基礎可執行文件、庫、堆棧內存。不幸的是,最近像 Spectre 和 Meltdown 這樣的漏洞洩露了CPU分支預測器的信息,這些明顯的原因限制了ASLR的有效性。

另一方面,堆棧金絲雀在內存中的返回指針之前插入小整數。檢查這些整數以確保它們沒有改變,一個進程就可以使用相應的返回指針。儘管如此,如果黑客們確信包含了正確的金絲雀值,那麼黑客們還是有可能讀懂這些金絲雀,然後簡單地重寫它以及隨後的緩衝區。此外,雖然金絲雀保護控制數據不被更改,但它們不能保護指針或任何其他的數據。

當然,基於軟體的安全解決方案的另一個挑戰是,它們極易受到漏洞的影響。據不完全統計,每1000行代碼中就有15-50個漏洞,這意味著解決方案中存在的軟體越多,漏洞的數量就越大。

當處理這種問題而不僅僅是緩衝區溢出的症狀時,一個更加健壯的方法是在晶片中實現安全性,而堆棧緩衝區溢出開發是為了操縱軟體程序。了解這類攻擊的根本原因,首先要認識到處理器無法確定某個程序是否正確執行。

除了減輕軟體缺陷的影響之外,晶片不可能被遠程改變。但是一個處理器或者一塊晶片必須在運行時識別試圖寫入內存或外圍設備的指令是合法執行還是非法操作。

運行時的晶片安全性

Dover Microsystems 開發了一種叫做 CoreGuard 的技術,這是一個可以與RISC 處理器架構集成在一起的IP core,用於在運行時識別無效的指令。作為RTL交付,解決方案可以針對各種功率和區域需求進行優化,或者修改並支持自定義的處理器擴展。

圖2 CoreGuard的體系結構

如圖2所示,CoreGuard 體系結構包括一個硬體關聯鎖,控制主機處理器和系統其他部分之間的所有通信。硬體連接將這些通信匯集到一個政策執行者。

另外,CoreGuard 使用稱為micropolicy 的可更新安全規則,這些規則是在高級別專有語言中創建的簡單管理策略。 這些規則安裝在一個安全的、無法訪問的內存區域,與其他作業系統或應用程式代碼隔離開來。此外,CoreGuard 還為編譯器通常丟棄的應用程式元數據保留一個小的內存分配,用於為系統中的所有數據和指令生成唯一的標識符。這些組件在系統啟動時加載。

當一個指令試圖在運行時執行的時候,CoreGuard策略執行核心或主機處理器在特權模式下運行時,將指令的元數據與定義的micropolicy交叉引用。 硬體交互只能確保處理器輸出有效的內存或外設指令,從而防止無效代碼的執行。應用程式會被告知類似於一個零除錯誤的策略違規,並通知用戶。

與主機處理器集成,支持指令跟蹤輸出、失速輸入、非可屏蔽中斷(NMI)輸入和中斷輸出所需的所有功能。對於非晶片設計者來說,其CoreGuard技術正被某些 NXP 處理器所設計採用。

消除各種攻擊

在緩衝區溢出的情況下,像 CoreGuard 這樣的技術的好處是顯而易見的。作為經常丟棄的編譯器元數據的一部分而捕獲的緩衝區大小可以被合併,以限制攻擊者在網絡上作業系統上訪問堆棧的能力。進一步說,同樣的原理可以應用於一般的控制流劫持,因為來自內存中不同點的返回值可以在發生之前受到限制。

實際上,這種實時意識也為安全行業創造了一個新的競爭環境。通過在損壞發生之前識別錯誤或者攻擊,用戶可以選擇動態地重新分配內存,在繼續運行相同程序的同時切換到單獨的、更安全的程序或日誌事件。如何執行代碼完全取決於應用程式或業務案例的需要。

何時才能看到zero-day 漏洞的終結呢?!

(本文編譯自 http://www.embedded-computing.com/iot/eliminating-buffer-overflow-vulnerabilities-on-the-iot)

相關焦點

  • 簡單的緩衝區溢出分析
    本文將詳細說明如何去找到一個簡單的緩衝區溢出漏洞以及最終如何攻擊服務獲得一個反彈shell。OllyDbg 安裝在Windows XP上PCMan’s FTP Server 2.0.7除了上訴工具和環境外,你還需要對x86 彙編語言有個基本的了解對Python程式語言有個基本的了解深入的去介紹緩衝區溢出不符合本篇文章,這裡我只是介紹一下基礎知識。當一個開發商不去檢查用戶輸入的邊界數據時就會發生緩衝區溢出。
  • 小議緩衝區溢出
    什麼是緩衝區溢出        通常就是內存的覆蓋,由於緩衝區分為 棧 和 堆,因此緩衝區溢出分為 棧溢出 和 堆溢出。因為 C/C++ 很多函數早期都不檢查內存邊界,所有的內存邊界檢查都由程式設計師自己去完成。這樣就有可能因為疏忽造成緩衝區的溢出。
  • C語言:防止緩衝區溢出
    他們也許在危險函數的自變量上使用自己總結編寫的檢查,或者錯誤地推論出使用潛在危險的函數在某些特殊情況下是安全的。第一位公共敵人是 gets()。永遠不要使用 gets()。該函數從標準輸入讀入用戶輸入的一行文本,它在遇到 EOF字符或換行字符之前,不會停止讀入文本。也就是:gets() 根本不執行邊界檢查。因此,使用 gets()總是有可能使任何緩衝區溢出。
  • 緩衝區溢出攻擊初學者手冊(更新版)
    由於本人的疏忽和大意導致您不能很好的讀完這篇文章,同時也對原文內容進行了破壞,也對IDF和FreeBuf造成了一定的不良影響。我在這裡對大家進行道歉!對翻譯文章進行了即時的修改,同時感謝大家的評語!我會吸取此次教訓,保證以後不會在出現類似的事情!請大家原諒!謝謝!
  • 防止緩衝區溢出 | C語言精華帖
    如果程式設計師沒有預料到需要多大的輸出緩衝區來處理輸入緩衝區(不發生緩衝區溢出),則streadd() 和 strecpy()函數可能有問題。如果輸入緩衝區包含單一字符 ― 假設是 ASCII 001(control-A)―則它將列印成四個字符\001。這是字符串增長的最壞情況。如果沒有分配足夠的空間,以至於輸出緩衝區的大小總是輸入緩衝區大小的四倍,則可能發生緩衝區溢出。
  • Pwn2Own Tokyo :Netgear R6700路由器堆溢出漏洞分析
    首先,我將簡要討論路由器上HTTP請求處理的設計。關於設計,Web服務不會直接在埠80上偵聽。但是,還有另一個進程充當代理並在埠80上偵聽。此過程是NGINX代理,我還沒有深入研究它,所以我不確定它是否是常用的NGINX Web伺服器的版本,我將在下面解釋有關其函數的更多詳細信息。接下來,當HTTP請求到達httpd服務時,主要處理函數為sub_159E8()。
  • Windows 10上的堆溢出漏洞利用
    我了解漏洞的一種方法是弄清楚如何創建它和攻破它。這就是我們今天要做的。由於堆內存損壞是一個非常有破壞力的問題,所以讓我們從Windows 10上的堆溢出開始吧。堆溢出的案例這是一個堆溢出的基本示例。很明顯,它試圖將64位元組大小的數據傳遞給一個只有32位元組的堆緩衝區。
  • 棧溢出漏洞原理詳解與利用
    0x01 前言和我一樣,有一些計算機專業的同學可能一直都在不停地碼代碼,卻很少關注程序是怎麼執行的,也不會考慮到自己寫的代碼是否會存在棧溢出漏洞,藉此機會我們一起走進棧溢出。CPU該執行哪條指令就是通過EIP來指示的0x03 棧溢出分析完這一過程,相信大家對函數是怎麼執行的應該明朗了,那麼我們言歸正傳,繼續聊一下棧溢出。首先我們先看一下什麼是棧?
  • 緩衝區溢出之Strcpy和Memcpy
    想到之前老師用strcpy()溢出實現過三個函數的調用,折回去看了一下之前的思路,然後按照題意進行分析。方法一:strcpy()函數:易發生\x00截斷strcpy()的文章請查看:Strcpy()函數之緩衝區溢出1、strcpy溢出原理簡述以下為strcpy()函數溢出的示意圖:即如果將長度較大的值 b 賦值給 較短的值 a(b>a),那麼strcpy之後,b多出來將一部分將會覆蓋原來的內存單元。
  • Office系列漏洞經典案例分析與利用
    四維漏洞播報1、漏洞簡介CVE-2017-11882屬於緩衝區溢出類型漏洞,產生漏洞原因於EQNEDT32.EXE(微軟office自帶公式編輯器)進程在讀入包含MathType的ole數據時,在拷貝公式字體名稱(Font
  • 黑客揪出蘋果iOS重大漏洞
    )開發並公布了這個漏洞。Project Zero是谷歌公司在2014年公開的一個信息安全團隊,專門負責找出各種軟體的安全漏洞,特別是零日漏洞(Zero-day),即還沒有補丁的安全漏洞。該團隊在發現安全漏洞後,會立即通知軟體開發者,在漏洞被修復前,不會對外公布。但是90天後,不論漏洞是否已被修復,都會自動公開。
  • 軟體漏洞分析入門(四)初級棧溢出C_修改程序流程
    緩衝區溢出的概念我若干年前已經瞭然於胸,不就是淹個返回地址把 CPU 指到緩衝區的 shellcode 去麼。然而當我開始動手實踐的時候,才發現實際中的情況遠遠比原理複雜。國內近年來對網絡安全的重視程度正在逐漸增加,許多高校相繼成立了「信息安全學院」或者設立「網絡安全專業」。
  • 提權篇:溢出漏洞 EXP提權 教程
    密碼 /add添加管理組:net localgroup administrators 用戶名 /add刪除用戶:net user 用戶名 /del查看某用戶的屬性:net user 用戶名4、EXP溢出漏洞利用工具
  • SweynTooth爆出最新低功耗藍牙漏洞,多家知名藍牙晶片榜上有名
    1.漏洞類型崩潰:此類漏洞可以通過故意觸發硬故障中斷使設備軟體崩潰。這是由於SDK框架中某些不正確的代碼行為或存儲器溢出而造成,比如BLE接收緩衝區發生緩衝區溢出。崩潰發生時,軟體通常會進行重新啟動。通過測試,它們容易受到鏈路層溢出和LLID死鎖的影響,為了驗證利用這兩個問題時可穿戴設備會發生什麼,我們已通過BLE主設備將惡意數據包發送到Fitbit Inspire智能手錶,惡意數據包發送到設備後,有可能觸發設備內存中的緩衝區溢出或使藍牙堆棧死鎖。
  • 無需接觸即可竊取iPhone照片,英國黑客揪出蘋果致命漏洞
    攻擊者可以通過該漏洞直接獲取設備上的照片、郵件、密碼,甚至可以通過麥克風和攝像頭直接監視監聽用戶。來自谷歌信息安全團隊Project Zero的研究人員伊恩·比爾(Ian Beer)開發並公布了這個漏洞。
  • 研究人員詳解蘋果致命漏洞如何產生
    據了解,這個漏洞讓攻擊者可通過Wi-Fi遠程控制被入侵設備,還能通過被入侵手機的AirDrop功能任意發送本地文件和照片,與其他iOS設備共享屏幕,甚至可以通過麥克風和攝像頭直接監聽和監視用戶。可以說,這是蘋果有史以來最令人震驚的漏洞之一。谷歌信息安全團隊此前已經向蘋果方面提交了報告,該漏洞已於今年5月被修復。
  • 危及ERC20智能合約、讓代幣價值歸零的溢出漏洞到底是什麼?
    團隊對代碼進行分析,發現其中存在的整數溢出漏洞已被人惡意利用,導致AMR大量增發。今年4月份,攻擊者也曾利用該漏洞攻擊美圖合作的美鏈BEC,導致市場上頓時出現海量BEC,貨幣價值幾乎歸零。 那麼,整數溢出漏洞是什麼?可以從我們熟悉的登陸密碼說起。 程序怎麼判斷用戶輸入密碼的正誤呢?
  • 雲安全日報201119:谷歌Chrome瀏覽器86版本發現多個重要漏洞,需要...
    以下是漏洞詳情:漏洞詳情1.CVE-2020-16019 嚴重程度: 高由於「文件系統」中的不正確實現而導致的安全漏洞,可能允許任意代碼執行2.CVE-2020-16020 嚴重程度: 高由於「cryptohome」實施不當而導致的安全漏洞,可能允許任意代碼執行3.CVE-2020-16021 嚴重程度: 高由於「ImageBurner」組件中的競爭狀況而導致的安全漏洞4.CVE-2020-16022 嚴重程度: 高
  • ERC20智能合約又現大量整數溢出漏洞
    今日塊訊(Chinaz.com) 6 月 13 日消息    近期,智能合約漏洞頻頻發生,繼EDU、BAI智能合約存漏洞可轉走任意帳戶Token 、EOS高危漏洞可完全控制虛擬貨幣交易等事件後,今天ERC20 智能合約又被爆出現大量整數溢出漏洞。
  • Adobe為Bridge、Illustrator和Magento解決難題 漏洞被修復
    E安全5月2日訊,據外媒報導,Adobe近日發布了針對其廣泛使用的三種產品的緊急更新,這些產品修補了數十個新發現的嚴重漏洞。據悉,受影響的軟體列表包括Adobe Illustrator,Adobe Bridge和Magento電子商務平臺,總共包含35個漏洞,最嚴重的漏洞可能導致執行任意代碼和信息洩露等問題。據Adobe發布的安全公告,Illustrator包含5個關鍵代碼執行漏洞,這些漏洞都是由於Windows版本軟體中的內存損壞錯誤而存在的。