国产精品久久精品牛牛影视-国产精品久久精品视-国产精品久久九九-国产精品久久久-国产精品久久久99

芯片采購,IC采購,芯片采購平臺
芯片
每日新聞頭條
在IAR Embedded Workbench如何在開發工具中實現堆棧保護,提高代碼的安全性
(2025年5月10日更新)

隨著越來越多的嵌入式產品連接到外部網絡,嵌入式產品的信息安全(Security)人們越來越關注它。它包括直接連接到外部網絡,如通過Wi-Fi連接;還包括間接連接到外部網絡,如汽車ECU通過CAN總線與T-box相連,而T-box外部網絡可以通過移動網絡連接。特別是對于一些高功能安全性(Safety)信息安全已成為工業、汽車、醫療產品等所需產品功能安全的前提(There Is No Safety Without Security)。

芯片采購網專注于整合國內外授權IC代理商現貨資源,芯片庫存實時查詢,行業價格合理,采購方便IC芯片,國內專業芯片采購平臺

在C/C 堆棧緩存溢出(Stack Buffer Overflow)當程序緩存到堆棧時,這是一個常見的錯誤(Stack Buffer)在編寫數據時,由于堆棧緩存通常采用固定長度,如果需要編寫的數據長度超過堆棧緩存長度,則會導致堆棧緩存溢出。堆棧緩存溢出將覆蓋堆棧緩存附近的堆棧數據,包括函數返回地址,導致函數返回異常。如果堆棧緩存溢出是攻擊者故意使用代碼漏洞造成的,則稱為堆棧粉碎(Stack Smashing)。堆棧粉碎是一種常用的攻擊手段。

堆棧金絲雀(Stack Canaries), 由于它類似于在煤礦中使用金絲雀來感知氣體和其他氣體,它可以用來檢測堆棧緩存溢出,以實現堆棧保護(Stack Protection),從而提高代碼的安全性。

與許多更關注設備性能的原始開發工具相比,一些廣泛應用于行業的商業開發工具更關注性能和安全性的平衡和完整性。本文在過去幾十年中被廣泛應用于該行業IAR Embedded Workbench例如,介紹如何在工具中實現堆棧保護,從而提高代碼的安全性。

堆棧粉碎

在C/C 中,堆棧(Stack)臨時數據用于保存程序正常運行(如函數調用或中斷搶占),可包括以下數據:

● 未存儲在寄存器中的函數參數和局部變量

● 寄存器中未存儲的函數返回值和函數返回地址

● CPU和寄存器狀態

由于堆棧保存臨時數據,以確保程序的正常運行,堆棧緩存溢出將覆蓋堆棧緩存附近的堆棧數據,這些數據可能包含函數返回地址,如果發生,通常會導致程序運行異常。攻擊者經常一點來粉碎堆棧。

以下是一個簡單的例子來解釋堆棧粉碎攻擊:

void foo(char *bar)

{

char c[12];

strcpy(c, bar); // no bounds checking

}

foo()Active-Semi代理函數將函數參數輸入復制到本地堆棧變量c。如下圖B所示:當函數參數輸入小于12個字符時,foo()函數會正常工作。如下圖C所示:當函數參數輸入大于11個字符時,foo()函數將覆蓋本地堆棧的數據,并將函數返回地址覆蓋0x80C03508,當foo()函數返回時,執行地址0x80C03508對應的代碼A,代碼A可能包括攻擊者提供的shell使攻擊者獲得操作權限的代碼。

C "AAAAAAAAAAAAAAAAAAAAx08x35xC0x80"輸入函數參數

圖:堆棧粉碎示例

堆棧保護

堆棧金絲雀之所以得名,是因為它的功能類似于在煤礦中發現瓦斯的金絲雀。(Stack Canaries),在函數返回執行惡意代碼之前,可用于檢測堆棧緩存溢出。檢測原理是:調用函數時,將需要保存的臨時數據保存到堆棧中,然后放置金絲雀。當函數返回時,檢查金絲雀的值是否發生變化;如果發生變化,堆棧被篡改,否則堆棧沒有被篡改。

如何在下面介紹IAR Embedded Workbench堆棧保護行的商業工具鏈中實現堆棧保護,從而提高代碼的安全性:

在IAR Embedded Workbench啟發模式將用于中間(Heuristic)決定函數是否需要堆棧保護: 如果函數的局部變量包含數組類型或結構成員包含數組類型,或在函數外使用局部變量地址,則需要堆棧保護。

IAR Embedded Workbench以下是安裝目錄srclibruntime包含stack_protection.c,里面包含了__stack_chk_guard變量和__stack_chk_fail函數,可作為模板使用:__stack_chk_guard變量是金絲雀堆棧的價值,當函數返回時,如果檢測到堆棧金絲雀的值被篡改,它將被調用__stack_chk_fail函數。

1.將IAR Embedded Workbench以下是安裝目錄srclibruntime文件夾的stack_protection.c復制并添加到工程中。

2.在IAR Embedded Workbench堆棧保護在中啟用。

3.在代碼中聲明堆棧保護__stack_chk_guard變量和__stack_chk_fail函數。

extern uint32_t __stack_chk_guard;

__interwork __nounwind __noreturn void __stack_chk_fail(void);

4.編譯工程。編譯器將以下操作添加到需要堆棧保護的函數中:先進入函數入口的堆棧(Push),然后將金絲雀保存在堆棧中。具體值用戶可以stack_protection.c中更改__stack_chk_guard;在函數出口,會檢測堆棧金絲雀的值是否還是__stack_chk_guard,如果沒有,說明堆棧被篡改了,會調用__stack_chk_fail函數。

調試

反匯編斷點到需要堆棧保護的函數(Disassembly)入口暫停后,發現編譯器在函數入口處進入堆棧后,保存了堆棧金絲雀:

在函數出口處打斷點,然后操作程序。當函數返回時,將首先檢測堆疊金絲雀的值是否__stack_chk_guard,如果沒有,說明堆棧被篡改了,會調用__stack_chk_fail函數。

改變堆棧金絲雀的值使之和__stack_chk_guard操作程序不一致,函數返回時會調用__stack_chk_fail函數:

總結

本文主要介紹了如何利用堆棧緩存來影響代碼的安全性。IAR Embedded Workbench堆棧保護可以檢測堆棧的完整性,從而提高代碼的安全性。

參考文獻:

1.https://en.wikipedia.org/wiki/Stack_buffer_overflow

2.https://cwe.mitre.org/data/definitions/121.html

3.https://en.wikipedia.org/wiki/Buffer_overflow_protection

4.https://www.iar.com/knowledge/learn/programming/stack-protection-in-iar-embedded-workbench/

5.IAR C/C Development Guide (Stack protection)

芯片采購網|IC采購|IC代理商 - 國內專業的芯片采購平臺
芯片采購網專注整合國內外授權IC代理商的現貨資源,輕松采購IC芯片,是國內專業的芯片采購平臺
主站蜘蛛池模板: 免费永久在线观看黄网 | 久久久精品久久久久久久久久久 | 日韩亚洲制服丝袜中文字幕 | 七色永久性tv网站免费看 | jizzxxxx中国 | 国产精品福利片 | 亚洲人成一区二区三区 | 狼人香蕉国产在线视频 | 午夜精品在线 | 日本一级特黄大一片免 | 小明成人永久在线看 | 亚洲一级爽片 | 日本a毛片在线播放 | 成人做爰免费视频免费看 | 黄色小视频免费网站 | 成人在线视频网 | 亚洲福利视频在线 | 亚洲黄a| 国产一区二区三区播放 | 最新亚洲人成网站在线影院 | 亚洲日韩精品欧美一区二区 | 亚洲酒色1314狠狠做 | 久久久久夜色精品波多野结衣 | 免费观看一级特黄三大片视频 | 亚洲毛片在线看 | 国产欧美一区二区三区免费 | 香蕉tv亚洲专区在线观看 | a男人的天堂久久a毛片 | 亚洲成人免费在线视频 | 夜色成人免费观看 | 青青成人福利国产在线视频 | 99re最新| 欧美成人三级伦在线观看 | 精品国产成人 | 黄色一级片美国 | 免费网站看黄 | 黄毛片| 1024视频色版在线网站 | 国产成人深夜福利在线观看 | 薰衣草视频高清在线观看免费 | 91在线精品你懂的免费 |