《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 業界動態 > 在IAR Embedded Workbench開發工具中如何實現堆棧保護來提高代碼的安全性

在IAR Embedded Workbench開發工具中如何實現堆棧保護來提高代碼的安全性

2022-05-29
來源:IAR Systems

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

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

  

1.jpg

  圖:堆棧粉碎示例

  堆棧保護

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

  下面介紹如何在IAR Embedded Workbench這種廣受歡迎的商用工具鏈中實現堆棧保護,從而提高代碼的安全性:

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

  IAR Embedded Workbench安裝目錄下面\src\lib\runtime包含stack_protection.c,里面包含了__stack_chk_guard變量和__stack_chk_fail函數,可以作為模板使用:其中__stack_chk_guard變量就是堆棧金絲雀的值,在函數返回時,如果檢測到堆棧金絲雀的值被篡改,就會調用__stack_chk_fail函數。

  1.將IAR Embedded Workbench安裝目錄下面\src\lib\runtime文件夾的stack_protection.c拷貝并添加到工程。

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

  2.png

  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)入口,暫停后發現編譯器在函數入口處入棧操作之后額外將堆棧金絲雀保存:

  

3.png

4.png

  在函數出口處打斷點,然后運行程序,在函數返回時,會先檢測堆棧金絲雀的值是否還是__stack_chk_guard,如果不是,說明堆棧被篡改,會調用__stack_chk_fail函數。

  

5.png

  改變堆棧金絲雀的值使之與__stack_chk_guard不一致,然后運行程序,函數返回時將會調用__stack_chk_fail函數:

 

6.png

  總結

  本文主要介紹了堆棧粉碎攻擊如何利用堆棧緩存溢出來影響代碼的安全性。通過在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)





圖片.jpg


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          日韩一级大片| 欧美在线视频在线播放完整版免费观看| 欧美午夜影院| 黄色成人在线网址| 亚洲精品一区在线| 欧美一区视频在线| 亚洲人成亚洲人成在线观看图片| 亚洲欧美精品中文字幕在线| 中文av字幕一区| 日韩视频在线一区二区三区| 在线一区观看| 久久天天躁狠狠躁夜夜爽蜜月| 你懂的国产精品永久在线| 欧美视频一区在线| 中文在线一区| 亚洲精品女av网站| 欧美顶级大胆免费视频| 91久久国产综合久久91精品网站| 欧美精品1区| 牛牛影视久久网| 午夜视频在线观看一区| 国产精品美女xx| 亚洲色图在线视频| 亚洲欧美高清| 欧美成人精品影院| 欧美人成网站| 亚洲另类黄色| 美日韩丰满少妇在线观看| 欧美一级大片在线免费观看| 午夜在线a亚洲v天堂网2018| 美女精品视频一区| 国模精品一区二区三区| 久久亚洲综合色一区二区三区| 亚洲九九爱视频| 久久久久久久一区二区三区| 国产精品jizz在线观看美国| 欧美日韩国产免费| 亚洲欧美日韩在线综合| 日韩视频一区二区三区在线播放免费观看| 亚洲麻豆视频| 欧美sm重口味系列视频在线观看| 亚洲欧美国产日韩中文字幕| 久久亚洲美女| 国产视频久久久久| 一本色道久久精品| 激情久久综合| 亚洲精品一区二区三区蜜桃久| 国产精品视频网站| 性欧美暴力猛交69hd| 国产在线精品一区二区中文| 亚洲精品欧美极品| 亚洲欧洲日本一区二区三区| 国产亚洲一本大道中文在线| 欧美成va人片在线观看| 欧美日韩免费高清一区色橹橹| 亚洲国产婷婷综合在线精品| 黄色亚洲大片免费在线观看| 99re8这里有精品热视频免费| 久久久综合免费视频| 亚洲欧美精品伊人久久| 狠久久av成人天堂| 亚洲国产精品成人久久综合一区| 亚洲淫片在线视频| 久久精品国产精品| 欧美国产大片| 国产有码一区二区| 日韩一级片网址| 国产三级精品在线不卡| 欧美在线一区二区三区| 欧美四级电影网站| 欧美性jizz18性欧美| 欧美在线视频一区二区三区| 欧美日韩第一页| 狠狠色综合一区二区| 午夜精品福利一区二区三区av| 狠色狠色综合久久| 久久久久综合网| 国产精品亚洲精品| 国产精品性做久久久久久| 9色精品在线| 国产精品剧情在线亚洲| 久久天堂精品| 午夜宅男欧美| 亚洲综合成人在线| 欧美激情免费在线| 在线观看亚洲视频| 欧美日韩卡一卡二| 精品成人a区在线观看| 亚洲激情av在线| 国产精品高潮视频| 亚洲一区二区三区三| 国产精品成人午夜| 美女啪啪无遮挡免费久久网站| 亚洲一区激情| 91久久国产综合久久91精品网站| 欧美日韩亚洲一区二区三区在线观看| 亚洲精品日韩综合观看成人91| 伊人激情综合| 国产午夜精品一区二区三区视频| 欧美一区永久视频免费观看| 亚洲视频一区在线观看| 国产日韩欧美在线播放| 国产精品久久久久久模特| 亚洲欧美第一页| 欧美日韩国产精品| 欧美在线影院| 国产精品美女xx| 久久动漫亚洲| 久久久久久久国产| 国内精品免费午夜毛片| 欧美精品福利在线| 亚洲美女性视频| 最新日韩在线| 国产精品高清一区二区三区| 欧美色视频在线| 久久成人羞羞网站| 亚洲人成亚洲人成在线观看图片| 亚洲精品免费一区二区三区| 亚洲欧美久久久久一区二区三区| 久久免费国产| 国产精品永久免费在线| 久久精品最新地址| 亚洲免费一级电影| 欧美精品播放| 久久精品国产亚洲a| 国产精品久久久久久福利一牛影视| 亚洲国产日韩欧美在线图片| 午夜精品久久久久久99热软件| 国产精品网站视频| 亚洲国产美女精品久久久久∴| 欧美jizzhd精品欧美巨大免费| 亚洲欧美日韩在线观看a三区| 国产欧美视频一区二区三区| 欧美日韩一区二区三区高清| 久久久www免费人成黑人精品| 亚洲黄色在线看| 激情综合色综合久久| 在线日韩日本国产亚洲| 久久久精品日韩欧美| 亚洲综合首页| 美女精品国产| 欧美高清视频一区二区三区在线观看| 一区二区三区精品久久久| 午夜视频在线观看一区二区三区| 久久久久国产精品人| 久久亚洲国产精品日日av夜夜| 午夜久久久久久久久久一区二区| 韩国精品一区二区三区| 欧美午夜精品久久久久久超碰| 欧美一区二区三区免费大片| 国产欧美激情| 国内精品久久久久影院薰衣草| 国产日韩在线亚洲字幕中文| 1024精品一区二区三区| 亚洲免费精彩视频| 一区二区三区不卡视频在线观看| 亚洲久久一区二区| 欧美亚一区二区| 极品av少妇一区二区| 欧美日韩在线观看一区二区三区| 亚洲电影激情视频网站| 亚洲青色在线| 开元免费观看欧美电视剧网站| 欧美专区在线| 欧美成人午夜| 亚洲欧美www| 欧美视频在线观看免费网址| 国产一区二区三区久久精品| 亚洲欧美激情精品一区二区| 亚洲精品欧美日韩专区| 欧美连裤袜在线视频| 亚洲精品专区| 欧美国产1区2区| 欧美成在线观看| 麻豆成人在线播放| 日韩午夜一区| 香蕉尹人综合在线观看| 国产精品久久毛片a| 久久久人成影片一区二区三区观看| 亚洲成人原创| 久久精品二区亚洲w码| 欧美二区在线播放| 国产精品高潮呻吟久久av黑人| av成人免费在线| 欧美乱妇高清无乱码| 欧美国产精品中文字幕| 欧美日韩一区二区三区四区五区| 欧美精品aa| 国内精品嫩模av私拍在线观看| 欧美一级淫片aaaaaaa视频| 午夜精品偷拍| 欧美中文字幕在线| 欧美一区午夜精品| 久久精品中文字幕免费mv| 亚洲欧洲精品一区二区| 日韩亚洲综合在线| 国产欧美精品久久| 亚洲一区成人| 日韩视频一区| 亚洲欧美日韩在线综合| 国产精品久久久久久久久果冻传媒| 国产精品国产三级国产aⅴ浪潮| 欧美日韩亚洲视频| 久久午夜国产精品| 国产精品一区二区久久精品| 欧美三级乱码| 国产欧美视频一区二区三区| 国产午夜精品视频| 久久裸体视频| 国产精品欧美久久久久无广告| 欧美日韩亚洲一区二| 免费观看日韩| 欧美精品电影在线| 亚洲女人小视频在线观看| 亚洲国产精品视频| 136国产福利精品导航网址应用| 欧美视频三区在线播放| 久久理论片午夜琪琪电影网| 日韩午夜电影av| 91久久在线| 亚洲电影下载| 国产精品扒开腿做爽爽爽软件| 欧美美女日韩| 在线观看亚洲a| 欧美成人精品激情在线观看| 亚洲精品中文字幕有码专区| 国产精品久久久久久久久久久久久久| 日韩午夜电影在线观看| 老司机免费视频一区二区| 久久久久久综合| 国产亚洲综合在线| 亚洲国产综合在线| 亚洲视频在线观看视频| 欧美精品一区视频| 国产在线不卡精品| 国产精品久久97| 国产综合网站| 欧美网站在线观看| 久久综合电影一区| 欧美视频一区二区三区四区| 久久久久久久成人| 久久精品一本久久99精品| 久久久91精品国产| 亚洲综合色噜噜狠狠| 久久亚洲色图| 久久在线免费观看| 国内久久精品| 欧美日韩一区在线观看| 欧美紧缚bdsm在线视频| 亚洲国产精品尤物yw在线观看| 影音先锋日韩有码| 欧美成人一区二区三区| 精品电影一区| 美女啪啪无遮挡免费久久网站| 亚洲欧洲精品一区二区| 妖精成人www高清在线观看| 欧美电影打屁股sp| 欧美日韩在线观看一区二区三区| 久久网站热最新地址| 免费精品99久久国产综合精品| 亚洲日本一区二区| 美女精品网站| 欧美激情中文不卡| 欧美日韩国产成人在线免费| 欧美大香线蕉线伊人久久国产精品| 欧美国产日韩亚洲一区| 99亚洲伊人久久精品影院红桃| 欧美激情免费在线| 精品福利电影| 亚洲视频在线观看免费| 蜜臀99久久精品久久久久久软件| 一区二区三区欧美激情| 国产亚洲在线| 精品69视频一区二区三区| 欧美一区二区三区日韩| 国产精品久久久久久久久久ktv| 性欧美暴力猛交另类hd| 亚洲欧美偷拍卡通变态| 9人人澡人人爽人人精品| 久久精品亚洲一区二区三区浴池| 在线观看欧美日韩| 夜夜嗨av色一区二区不卡| 亚洲——在线| 久久裸体艺术| 亚洲国产日日夜夜| 亚洲天堂av综合网| 欧美色欧美亚洲高清在线视频| 9色精品在线| 欧美99在线视频观看| 亚洲人午夜精品| 欧美成人免费在线视频| 精品51国产黑色丝袜高跟鞋| 国产精品久久久久永久免费观看| 牛牛影视久久网| 久久精品91久久久久久再现| 欧美午夜宅男影院在线观看| 久久不射2019中文字幕| 国产亚洲福利一区| 国产精品卡一卡二卡三| 国产伦精品一区二区三区免费迷| 欧美aⅴ一区二区三区视频| 国产精品永久免费视频| 在线电影国产精品| 欧美在线视频一区二区三区| 亚洲午夜精品国产| 亚洲作爱视频| 欧美在线免费观看| 欧美日韩亚洲一区二| 久久久久国产精品人| 国产一区二区三区在线播放免费观看| 午夜精品美女久久久久av福利| 亚洲高清免费在线| 久久久久久久久蜜桃| 国产欧美亚洲视频| 午夜在线视频一区二区区别| 亚洲高清在线播放| 国产精品初高中精品久久| 中文在线一区| 午夜精品福利电影| 性欧美video另类hd性玩具| 亚洲一区二区成人在线观看| 欧美精品一区二区三区一线天视频| 女主播福利一区| 国产欧美视频在线观看| 欧美精品日日鲁夜夜添| 狠狠色狠狠色综合| 国产资源精品在线观看| 韩国成人理伦片免费播放|