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

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

隨著越來越多的嵌入式產品連接到外部網絡,嵌入式產品的信息安全(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网站 | 久久er国产精品免费观看2 | 日韩女性性生生活视频 | 日韩欧美一区二区三区不卡视频 | 九九热国产精品视频 | 亚洲狠狠97婷婷综合久久久久 | 91精品久久久久久久久中文字幕 | 日韩一区二区三区在线播放 | 521香蕉在线观看视频 | 免费观看a级毛片 | 欧美三级视频在线观看 | 搞黄视频在线观看 | 中文字幕一区视频一线 | 亚洲黄色免费在线观看 | 日韩中文字幕精品久久 | 黄色免费在线观看网站 | 免费国产高清精品一区在线 | 狠狠色成人综合网图片区 | 亚洲三页 | 一本大道一卡二卡入口2021 | 国产亚洲欧美在线人成aaaa | 日韩中文字幕视频在线 | 欧美一级一一特黄 | 国产成人亚洲精品久久 | 毛片毛片毛片毛片毛片毛片毛片 | 日韩欧美一区二区不卡看片 | 91久久国产成人免费观看资源 | 成人春色在线观看免费网站 | 成年视频xxxxx在线网站 | 91精品啪在线观看国产色 | 特黄大片aaaaa毛片 | 国产精品成人免费视频不卡 | 国产日本一区二区三区 | 久操视频免费看 | 亚洲国产情侣 | 国产呦精品一区二区三区网站 | 黑人与欧洲性大战 | 中文视频在线 | 国产72av国片精品jk制服 | 成人国内精品久久久久影 |