欧美综合自拍亚洲综合,欧美高清在线不卡免费观看,亚洲欧美国产精品第1页,亚洲高清视频一区,亚洲a∨精品一区二区三区下载,国产情侣91

芯片采購,IC采購,芯片采購平臺
芯片
每日新聞頭條
在IAR Embedded Workbench如何在開發工具中實現堆棧保護,提高代碼的安全性
(2025年1月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芯片,是國內專業的芯片采購平臺
主站蜘蛛池模板: 噜噜噜 综合 亚洲| 亚洲免费黄色网址| 精品久久久久中文字幕日本| 欧美高清第一页| 97毛片| 亚洲女人国产香蕉久久精品| 精品在线视频一区| 伊人久久网国产伊人| 色黄在线观看| 国产成人18黄网站免费| 一道本在线观看视频| 激情婷婷成人亚洲综合| 影视精品网站入口| 国产麻豆免费| 亚洲免费高清视频| 日本欧美一区二区三区视频 | 韩国三级hd中文字幕一男多女 | 三级黄色高清视频| 日穴影院| 精品视频久久久久| 99国产精品久久久久久久成人热| 亚洲国产精品ⅴa在线观看| 咪咪色在线视频| 成人看片在线观看| 国产成人精视频在线观看免费 | 在线播放国产一区| 青青青久久久| 精品国产综合成人亚洲区| 99热这里只有精品4| 最新偷拍视频| 亚洲高清中文字幕精品不卡| 欧美成人在线免费| 国产在线播放网站| ipz在线| 亚洲不卡视频在线| 亚洲三级电影网| 日韩欧美视频免费观看| 久久大胆视频| 国产精品国产国产aⅴ| 97人人在线| 综合伊人|