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

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

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

芯片采購網(wǎng)專注于整合國內(nèi)外授權(quán)IC代理商現(xiàn)貨資源,芯片庫存實時查詢,行業(yè)價格合理,采購方便IC芯片,國內(nèi)專業(yè)芯片采購平臺

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

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

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

堆棧粉碎

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

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

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

● CPU和寄存器狀態(tài)

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

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

void foo(char *bar)

{

char c[12];

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

}

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

C "AAAAAAAAAAAAAAAAAAAAx08x35xC0x80"輸入函數(shù)參數(shù)

圖:堆棧粉碎示例

堆棧保護

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

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

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

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

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

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

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

extern uint32_t __stack_chk_guard;

__interwork __nounwind __noreturn void __stack_chk_fail(void);

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

調(diào)試

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

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

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

總結(jié)

本文主要介紹了如何利用堆棧緩存來影響代碼的安全性。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)

芯片采購網(wǎng)|IC采購|IC代理商 - 國內(nèi)專業(yè)的芯片采購平臺
芯片采購網(wǎng)專注整合國內(nèi)外授權(quán)IC代理商的現(xiàn)貨資源,輕松采購IC芯片,是國內(nèi)專業(yè)的芯片采購平臺
主站蜘蛛池模板: 情侣网站 在线播放 | 日韩大片免费观看视频播放 | 欧美黑人巨大肥婆性视频 | 91精品国产91久久久久福利 | 免费国产综合视频在线看 | 日韩欧美中文字幕出 | semm亚洲欧美在线高清 | 在线免费一区 | 鲁大师在线观看在线播放 | 精品国产三级a∨在线观看 精品国产三级在线观看 | 免费看成人国产一区二区三区 | 免费看日日麻批免费视频播放 | 国产精品久久久久久久午夜片 | 五月天婷婷网亚洲综合在线 | 亚洲三级黄色片 | 国产精品久久久久久吹潮 | 亚州毛色毛片免费观看 | 成人综合网址 | 国产毛片在线视频 | 国产精品高清视亚洲精品 | 免费大黄网站在线观看 | 日本黄色小说网站 | 一区二区三区在线视频观看 | 中文字幕一区2区 | 免费黄色网址大全 | 国产一级特黄一级毛片 | 国产伦精品一区二区免费 | 麻豆精品久久精品色综合 | 尤物在线视频观看 | 国产高清a毛片在线看 | 日韩黄毛片 | 大陆国语自产精品视频在 | 永久免费看黄在线播放 | 欧美精品久久久久久久免费观看 | 国产短视频精品一区二区三区 | 清纯唯美亚洲综合一区 | 啪啪国产视频 | 丁香婷婷亚洲 | 91视频视频| 亚洲激情视频 | 曰批免费视频播放在线看片二 |