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

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

隨著越來越多的嵌入式產品連接到外部網絡,嵌入式產品的信息安全(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芯片,是國內專業的芯片采購平臺
主站蜘蛛池模板: 一级做a爱过程免费视频时看 | 久久国产亚洲高清观看5388 | 古代级a毛片可以免费看 | 美国一级做a爰片性色毛片 美国人与性xxxxxxx | 久久久久久88色愉愉 | 一级久久 | 国产欧美性综合视频性刺激 | 精品国产一区二区三区久久影院 | 久久久男女野外野战 | 国产特黄特色一级特色大片 | 日韩精品你懂的在线播放 | 92精品国产自产在线观看48页 | 美女任你躁免费视频 | 九九热精品在线视频 | 亚洲美女在线观看亚洲美女 | 国产精品亚洲欧美一区麻豆 | 青青伊人91久久福利精品 | 关婷哪一级毛片高清免费看 | 九九九色视频在线观看免费 | 香蕉乱码成人久久天堂爱免费 | 欧美日韩国产综合视频一区二区三区 | 成人福利免费在线观看 | 日韩一区二区三区四区 | 国产日韩欧美在线一二三四 | 国产原创一区 | 亚洲欧洲视频在线观看 | 久久成人18 | 番茄视频二三区 | 国产精品久久永久免费 | 嫩草精品| 日本特级黄毛片毛片视频 | 国产成人免费网站在线观看 | 香蕉午夜 | 久久久久青草线蕉亚洲麻豆 | 久久久精品久久视频只有精品 | 亚洲呦呦系列视频 | 野外三级国产在线观看 | 丁香婷婷综合五月六月 | 噜噜噜噜精品视频在线观看 | 妞干网免费视频 | 久久性生活片 |