0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

利用GCC插件實現(xiàn)代碼分析和安全審計

zz愛尚科技 ? 來源:zz愛尚科技 ? 作者:zz愛尚科技 ? 2022-10-13 14:00 ? 次閱讀

利用GCC插件實現(xiàn)代碼分析和安全審計

GCC 4.5.0開始引入的一項插件功能,允許用戶通過插件來干預(yù)GCC的編譯過程,獲取到GCC編譯過程中的各種數(shù)據(jù),甚至可以修改編譯過程中生成的中間數(shù)據(jù),從而達(dá)到修改最終生成的二進(jìn)制文件行為的目的(注:特別需要注意的是GCC-Plugin的API是會隨版本變化的)。此特性從程序員的角度來看,就相當(dāng)于把原來GCC的黑盒編譯過程一下子打開了,GCC編譯的過程數(shù)據(jù)可以“大白于天下”,可以清清楚楚的看個夠。

下圖為GCC編譯架構(gòu)****

image.png

GCC編譯過程與插件的交互流程

image.png

注:圖引自DragonEgg 在"Reimplementing llvm-gcc as a gcc plugin"

開源GCC插件列表**** (來自https://gcc.gnu.org/wiki/plugins):

image.png

基于GCC此插件特性,從安全測試的角度來看,可以用它來干什么呢?

A.可以把GCC編譯過程的內(nèi)部數(shù)據(jù)結(jié)構(gòu)圖形化,方便分析應(yīng)用程序。****

圖形化對象可以是控制流圖、函數(shù)調(diào)用圖、支配圖、Tree結(jié)構(gòu)、Gimple結(jié)構(gòu)、RTX結(jié)構(gòu)、Pass列表等等。

下圖是Gimple層次圖**** :

image.png

B、 利用可以修改中間數(shù)據(jù)的能力,可以不用修改源代碼就能添加新功能的功能,從而實現(xiàn)動態(tài)安全分析、安全加固的能力。

在安全測試中為了監(jiān)控程序執(zhí)行路徑情況,需要通過動態(tài)插裝來實現(xiàn),常見的插裝工具有Pin、Dynamo,但這些動態(tài)插裝會對程序的運(yùn)行性能產(chǎn)生影響,降低程序運(yùn)行效率,嚴(yán)重的會導(dǎo)致程序不能正常運(yùn)行。但如果能預(yù)先在目標(biāo)程序中把插裝代碼編譯進(jìn)去,這樣既兼顧到性能,有兼顧到實現(xiàn)插裝的目的,一般要實現(xiàn)這個目的都是在源代碼層面由開發(fā)人員增加插裝代碼,但增加的代碼只是為了測試的目的,在實際發(fā)布版本中是不需要的,因此直接在源代碼層面增加插裝代碼就給代碼維護(hù)帶來的不便,但如果我們應(yīng)用GCC編譯器的插件能力,在編譯構(gòu)建過程中自動添加插裝代碼到最終生成的二進(jìn)制文件中,這樣只需根據(jù)需要重新編譯就能得到不同目的的應(yīng)用程序而不需要修改任何一行源代碼,既增加插裝代碼的動作對上層是透明的。

基于上述在編譯過程中自動增加插裝代碼,可以實現(xiàn)對測試活動的度量和提升測試效率,比如測試時代碼覆蓋率的統(tǒng)計與度量,基于執(zhí)行路徑來優(yōu)化測試用例提升fuzz效率等等功能。

總結(jié):

利用GCC的插件功能,可以利用編譯過程中的內(nèi)部數(shù)據(jù)來幫助安全分析人員對程序進(jìn)行安全分析和安全加固等事情,提升程序分析效率和分析精準(zhǔn)度。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • GCC
    GCC
    +關(guān)注

    關(guān)注

    0

    文章

    110

    瀏覽量

    25276
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4891

    瀏覽量

    70352
  • 插件
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    22979
收藏 0人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用 QWQ:32B 模型搭配 VSCode 的 Cline 插件實現(xiàn)自動化代碼編程!

    。結(jié)合 Visual Studio Code(VSCode)的 Cline 插件,開發(fā)者可以實現(xiàn)高效的自動化代碼編程。本文將詳細(xì)介紹如何配置和使用 QWQ:32B 模型與 Cline 插件
    的頭像 發(fā)表于 03-21 18:12 ?513次閱讀
    使用 QWQ:32B 模型搭配 VSCode 的 Cline <b class='flag-5'>插件</b><b class='flag-5'>實現(xiàn)</b>自動化<b class='flag-5'>代碼</b>編程!

    函數(shù)HAL_I2C_Slave_Seq_Transmit_IT和HAL_I2C_Slave_Seq_Receive_IT實現(xiàn)代碼里有處理DMA請求,這是出于什么考慮?

    函數(shù)HAL_I2C_Slave_Seq_Transmit_IT和HAL_I2C_Slave_Seq_Receive_IT實現(xiàn)代碼里有處理DMA請求,這是出于什么考慮?求解答!
    發(fā)表于 03-14 09:01

    請問基于GCC編譯器的initcall在STM32如何實現(xiàn)?

    請問各位基于GCC編譯器的initcall在STM32如何實現(xiàn)?有哪位實現(xiàn)了嗎?
    發(fā)表于 03-13 06:24

    如何一眼定位SQL的代碼來源:一款SQL染色標(biāo)記的簡易MyBatis插件

    作者:京東物流 郭忠強(qiáng) 導(dǎo)語 本文分析了后端研發(fā)和運(yùn)維在日常工作中所面臨的線上SQL定位排查痛點(diǎn),基于姓名貼的靈感,設(shè)計和開發(fā)了一款SQL染色標(biāo)記的MyBatis插件。該插件輕量高效,對業(yè)務(wù)
    的頭像 發(fā)表于 03-05 11:36 ?373次閱讀
    如何一眼定位SQL的<b class='flag-5'>代碼</b>來源:一款SQL染色標(biāo)記的簡易MyBatis<b class='flag-5'>插件</b>

    分析C語言代碼結(jié)構(gòu)的設(shè)計問題

    分析一個C語言代碼結(jié)構(gòu)的設(shè)計問題。 這段代碼,使用了兩次malloc,分別給 p1 和 p2 申請了內(nèi)存。用完后,內(nèi)存釋放,防止內(nèi)存泄漏。 大家覺得,這樣的代碼設(shè)計有沒有問題。
    的頭像 發(fā)表于 02-11 09:31 ?333次閱讀

    MariaDB配置日志審計

    確認(rèn)插件路徑下是否有日志審計插件server_audit.so。
    的頭像 發(fā)表于 02-05 13:34 ?358次閱讀

    徹底移除Calico網(wǎng)絡(luò)插件

    0.前言 參考文檔:https://github.com/containernetworking/cni Pod網(wǎng)絡(luò)插件,為了實現(xiàn)Pod網(wǎng)絡(luò)而需要的插件、組件。由于Kubernetes通過開放
    的頭像 發(fā)表于 01-23 17:26 ?960次閱讀
    徹底移除Calico網(wǎng)絡(luò)<b class='flag-5'>插件</b>

    如何提高嵌入式代碼質(zhì)量?

    技術(shù) 現(xiàn)代的嵌入式開發(fā)工具和測試技術(shù)可以極大地提升代碼質(zhì)量和開發(fā)效率: 1. 靜態(tài)分析工具:如Coverity、Lint等,能夠幫助發(fā)現(xiàn)潛在的代碼缺陷和
    發(fā)表于 01-15 10:48

    Kubernetes的CNI網(wǎng)絡(luò)插件之flannel

    Kubernetes設(shè)計了網(wǎng)絡(luò)模型,但卻將它的實現(xiàn)講給了網(wǎng)絡(luò)插件,CNI網(wǎng)絡(luò)插件最重要的功能就是實現(xiàn)Pod資源能夠跨主機(jī)通信。
    的頭像 發(fā)表于 01-02 09:43 ?757次閱讀

    分享關(guān)于編譯器的科普

    代碼分析工具和IDE集成。GCC被構(gòu)建成一個單一的靜態(tài)編譯器,這使得它非常難以被作為API并集成到其他工具中。 GCC比Clang支
    的頭像 發(fā)表于 12-09 09:49 ?504次閱讀

    VSCode批量遷移插件

    代碼的路 打開之前電腦,找到原電腦VS Code的插件安裝目錄: 如: C:\\\\Users\\\\用戶名\\\\.vscode\\\\extensions 將extensions文件夾拷貝到
    的頭像 發(fā)表于 11-06 16:04 ?685次閱讀
    VSCode批量遷移<b class='flag-5'>插件</b>

    什么是協(xié)議分析儀和訓(xùn)練器

    網(wǎng)絡(luò)性能和穩(wěn)定性。 安全審計與監(jiān)控:檢測惡意攻擊、入侵行為,監(jiān)控潛在的安全威脅,加強(qiáng)網(wǎng)絡(luò)安全防護(hù)和審計。 分類: 硬件型協(xié)議
    發(fā)表于 10-29 14:33

    數(shù)據(jù)庫安全審計系統(tǒng):筑牢數(shù)據(jù)安全防線 提高數(shù)據(jù)資產(chǎn)安全

    隨著萬物互聯(lián)的技術(shù)演進(jìn),以及數(shù)字化轉(zhuǎn)型的快速發(fā)展,數(shù)據(jù)庫成為最具有戰(zhàn)略性的數(shù)字資產(chǎn)載體,保障數(shù)據(jù)庫安全也就保障了存儲其中的數(shù)據(jù)安全,數(shù)據(jù)庫安全審計是對數(shù)據(jù)庫“增、刪、改、查”具體操作的
    的頭像 發(fā)表于 07-17 13:38 ?1719次閱讀

    數(shù)據(jù)庫安全審計系統(tǒng):滿足數(shù)據(jù)安全治理合規(guī)要求

    伴隨著數(shù)據(jù)庫信息價值以及可訪問性提升,使得數(shù)據(jù)庫面對來自內(nèi)部和外部的安全風(fēng)險大大增加,如違規(guī)越權(quán)操作、惡意入侵導(dǎo)致機(jī)密信息竊取泄漏,但事后卻無法有效追溯和審計。 國內(nèi)專注于保密與非密領(lǐng)域的分級保護(hù)
    的頭像 發(fā)表于 07-04 13:04 ?523次閱讀

    安全服務(wù)加密存儲代碼怎么查

    安全服務(wù)加密存儲代碼的查詢與實現(xiàn)是一個復(fù)雜的過程,涉及到多個方面,包括數(shù)據(jù)加密、密鑰管理、訪問控制等。 1. 引言 隨著云計算的快速發(fā)展,越來越多的企業(yè)和個人將數(shù)據(jù)存儲在云端。然而,數(shù)據(jù)安全
    的頭像 發(fā)表于 07-02 09:28 ?689次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品