0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

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

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

車聯(lián)網(wǎng)開(kāi)源組件BusyBox漏洞分析及復(fù)現(xiàn)

蛇矛實(shí)驗(yàn)室 ? 來(lái)源:蛇矛實(shí)驗(yàn)室 ? 2023-02-21 17:49 ? 次閱讀

本環(huán)境是基于"火天網(wǎng)演攻防演訓(xùn)靶場(chǎng)"進(jìn)行搭建,火天系列產(chǎn)品提供模擬器級(jí)別的網(wǎng)絡(luò)環(huán)境構(gòu)建系統(tǒng),可以靈活的對(duì)目標(biāo)網(wǎng)絡(luò)進(jìn)行設(shè)計(jì)和配置,并且可以快速進(jìn)行場(chǎng)景搭建和復(fù)現(xiàn)工作,產(chǎn)品也進(jìn)行了車聯(lián)網(wǎng)設(shè)備對(duì)接,為車聯(lián)網(wǎng)安全訓(xùn)練環(huán)境構(gòu)建提供基礎(chǔ)資源支持

背景

近日,國(guó)內(nèi)多家安全實(shí)驗(yàn)室檢測(cè)到了針對(duì)于智能網(wǎng)聯(lián)汽車中使用都開(kāi)源項(xiàng)目busybox漏洞,國(guó)外在2022年5月份報(bào)告了此漏洞,目前已經(jīng)發(fā)布的CVE信息如下,信息中指出Busybox1.35-x版本中,awk應(yīng)用由于use after free導(dǎo)致拒絕服務(wù)漏洞或可能獲取代碼執(zhí)行權(quán)限。

漏洞原理

根據(jù)CVE發(fā)布信息公告來(lái)看,該漏洞屬于堆溢出漏洞,具體漏洞類型為use after free。簡(jiǎn)單來(lái)說(shuō),use after free漏洞的形成過(guò)程如下,如果我們申請(qǐng)一塊內(nèi)存然后釋放后,此時(shí)重新申請(qǐng)一塊相同大小的內(nèi)存,操作系統(tǒng)為了內(nèi)存空間的管理方便,會(huì)將上一次釋放掉的內(nèi)存重新分配給我們。此時(shí)上一個(gè)申請(qǐng)的指針沒(méi)有被清空,而且重新給內(nèi)存賦值的話,就會(huì)影響第二次申請(qǐng)內(nèi)存中的內(nèi)容。use after free的本質(zhì)為倆個(gè)指針同時(shí)指向同一塊內(nèi)存,而當(dāng)一個(gè)chunk被free后,其中該chunk中的數(shù)據(jù)具有部分結(jié)構(gòu)的控制作用,使用另一個(gè)指針修改控制結(jié)構(gòu)的數(shù)據(jù),程序控制流就會(huì)被改變。

示例如下,在下圖源碼中,我們使用指針chunk1指向了malloc分配了0x10字節(jié)的內(nèi)存,隨后在內(nèi)存中拷貝"test1"字符串到內(nèi)存中,此時(shí)打印出來(lái)的chunk1地址為0x8c71e260,里面的內(nèi)容為test1。隨后我們釋放掉chunk1,此時(shí)使用chunk2指針指向malloc重新分配的0x10字節(jié),然后在chunk2內(nèi)存中寫入"test2"字符串,打印出來(lái)chunk2的地址也是0x8c71e260。這時(shí)如果我們向chunk1指針指向的內(nèi)存中寫入"test3"字符串,打印chunk2里面的內(nèi)容,我們就會(huì)發(fā)現(xiàn)明明沒(méi)有修改chunk2的內(nèi)容,但是打印時(shí)chunk2里面的內(nèi)容卻變了。

0210418a-b1cc-11ed-bfe3-dac502259ad0.png

知道了漏洞的大概類型后,我們便可以進(jìn)行簡(jiǎn)單分析。首先在busybox官網(wǎng)(https://busybox.net/downloads/)中,下載1.35.0版本和最新的1.36.0版本。根據(jù)CVE發(fā)布信息我們得知是awk應(yīng)用程序存在漏洞,所以我們直接使用vimdiff比較倆個(gè)版本的awk.c文件。在vimdiff的比較中,我們發(fā)現(xiàn)在evaluate函數(shù)中的case XC(OC_MOVE)中進(jìn)行了補(bǔ)丁更改。

0248b42a-b1cc-11ed-bfe3-dac502259ad0.png

打開(kāi)1.35.0版本awk.c文件中未經(jīng)patch處的對(duì)應(yīng)代碼塊,該代碼塊位于evaluate函數(shù)中,在該case分支下,出現(xiàn)了CVE公告中提到的漏洞函數(shù)copyvar。由于此時(shí)我們對(duì)整個(gè)程序的架構(gòu)和執(zhí)行流程還不太清楚。我們先簡(jiǎn)單跟一下可能具有漏洞的具體情況,堆溢出的漏洞一般都發(fā)生在*alloc或free函數(shù)附近。use after free漏洞一般在free函數(shù)居多,我們接下來(lái)跟流程重點(diǎn)關(guān)注一下free函數(shù)。

026aed2e-b1cc-11ed-bfe3-dac502259ad0.png

進(jìn)入查看發(fā)現(xiàn)clrvar對(duì)第一個(gè)參數(shù)進(jìn)行操作,隨后使用handle_special函數(shù)對(duì)dest進(jìn)行處理。進(jìn)入查看發(fā)現(xiàn)clrvar函數(shù)調(diào)用free函數(shù)對(duì)內(nèi)存進(jìn)行了釋放。

02917818-b1cc-11ed-bfe3-dac502259ad0.png

上面的倆個(gè)函數(shù)都用到了var結(jié)構(gòu)體,結(jié)構(gòu)體定義如下:

02b291b0-b1cc-11ed-bfe3-dac502259ad0.png

接下來(lái)返回awk_main函數(shù)簡(jiǎn)單觀察一下執(zhí)行流程。發(fā)現(xiàn)程序首先進(jìn)行一系列設(shè)置,指定了標(biāo)準(zhǔn)輸入輸出,隨后使用awk_getline獲取用戶輸入,并循環(huán)使用evaluate函數(shù)進(jìn)行處理。

02dabd0c-b1cc-11ed-bfe3-dac502259ad0.png

在evaluate函數(shù)中,首先調(diào)用nvalloc分配了2個(gè)var大小的堆內(nèi)存。然后將該指針命名為了TMPVAR0。隨后根據(jù)傳入的op結(jié)構(gòu)體信息循環(huán)處理。在循環(huán)處理中又使用switch case分支處理,在XC(OC_MOVE)中調(diào)用了我們分析的copyvar函數(shù)。

02ee7bee-b1cc-11ed-bfe3-dac502259ad0.png

根據(jù)前面的流程分析和patch后的代碼判斷,如果我們輸入數(shù)據(jù)可以控制L.v的指針指向tmpvars(TMPVAR0),那么這時(shí)用戶修改的指針和系統(tǒng)自動(dòng)分配的tmpvars都指向同一塊內(nèi)存,而在case XC(OC_MOVE)中,如果當(dāng)其中一個(gè)指針指向的chunk被釋放,而另一個(gè)指針指向chunk的內(nèi)存繼續(xù)使用時(shí)。修改被釋放chunk的內(nèi)存數(shù)據(jù)時(shí),就會(huì)破壞free chunk list,從而導(dǎo)致堆溢出漏洞的產(chǎn)生。

漏洞分析

由于busybox多平臺(tái)原因,為了方便調(diào)試,這里我選用靶場(chǎng)linux操作機(jī)進(jìn)行操作。動(dòng)態(tài)調(diào)試過(guò)程如下,在gdb調(diào)試后下斷,并attach進(jìn)程,斷點(diǎn)信息如下。

03145e2c-b1cc-11ed-bfe3-dac502259ad0.png

直接按c運(yùn)行,程序要求我們輸入字符串,這里隨意輸入

03318cb8-b1cc-11ed-bfe3-dac502259ad0.png

程序直接斷在了call free處,觀察到RDI為空,我們不用管它。查看堆?;厮莅l(fā)現(xiàn)程序是由awk_getline函數(shù)調(diào)用進(jìn)行的,這里就是前面分析中awk_getline函數(shù)獲取用戶輸入。

0367f08c-b1cc-11ed-bfe3-dac502259ad0.png

堆空間堆塊排布信息如下,可以看到我們輸入的"foo"字符串,堆內(nèi)存結(jié)構(gòu)此時(shí)還沒(méi)有被破壞,我們繼續(xù)往下調(diào)試。

03a4028e-b1cc-11ed-bfe3-dac502259ad0.png

調(diào)試過(guò)程中,釋放的堆塊信息比較復(fù)雜,我們使用bins命令查看當(dāng)前free chunk list。

03da37e6-b1cc-11ed-bfe3-dac502259ad0.png

運(yùn)行到了evaluate函數(shù)處,這里便是源碼中使用nvalloc(xzalloc)函數(shù)分配tmpvars的堆內(nèi)存。

03f87de6-b1cc-11ed-bfe3-dac502259ad0.png

這里直接斷在了case XC(OC_MOVE)里面的copyvar函數(shù),copyvar的第一個(gè)參數(shù)為L(zhǎng).v,第二個(gè)參數(shù)是R.v。這里L(fēng).v已經(jīng)被修改成了tmpvars的指針,這樣倆個(gè)指針同時(shí)指向了tmpvars的內(nèi)存,后續(xù)會(huì)調(diào)用free函數(shù)進(jìn)行釋放。

04136994-b1cc-11ed-bfe3-dac502259ad0.png

si進(jìn)入copyvar函數(shù),運(yùn)行到call clrvar處,這里的rdi即傳入第一個(gè)參數(shù)的L.v的地址。clrvar會(huì)調(diào)用free函數(shù)進(jìn)行釋放。

04438b6a-b1cc-11ed-bfe3-dac502259ad0.png

運(yùn)行后進(jìn)入handle_special函數(shù),后續(xù)流程較為復(fù)雜,直接在漏洞觸發(fā)點(diǎn)getvar_i處下斷點(diǎn)。運(yùn)行后,斷點(diǎn)停在了call getvar_i函數(shù),我們跟入分析。

04736ede-b1cc-11ed-bfe3-dac502259ad0.png

在getvar_i函數(shù)中,對(duì)0x55555585caa0指針指向chunk進(jìn)行了修改(v->type)。

04944cda-b1cc-11ed-bfe3-dac502259ad0.png

此時(shí)getvar_i函數(shù)中處理的v->type即為tmpvars free chunk的控制結(jié)構(gòu),函數(shù)這里直接對(duì)其進(jìn)行了處理,導(dǎo)致堆結(jié)構(gòu)的改變。

04bc9b5e-b1cc-11ed-bfe3-dac502259ad0.png

此時(shí)0x55555585caa0中數(shù)據(jù)0x55555585caf0被修改,原來(lái)的free chunk list已經(jīng)被破環(huán),修改后0x55555585caa0指向的下一個(gè)free chunk被修改為0x55555585c9f0。

04d5b09e-b1cc-11ed-bfe3-dac502259ad0.png

當(dāng)我們進(jìn)行第二次輸入字符串時(shí),會(huì)繼續(xù)對(duì)堆空間進(jìn)行申請(qǐng)和釋放。當(dāng)申請(qǐng)到0x55555585c9f0地址處的chunk時(shí),會(huì)對(duì)堆空間進(jìn)行數(shù)據(jù)更改,導(dǎo)致程序崩潰。

055c8272-b1cc-11ed-bfe3-dac502259ad0.png

0x55555585c9f0地址處已經(jīng)被申請(qǐng),此時(shí)chunk結(jié)構(gòu)被破壞,gdb插件已經(jīng)無(wú)法識(shí)別剩余內(nèi)容空間的堆結(jié)構(gòu)。

058474da-b1cc-11ed-bfe3-dac502259ad0.png

堆塊標(biāo)識(shí)被清空,所以無(wú)法找到對(duì)應(yīng)堆塊的起始位置,所以插件識(shí)別不了。

05c20c00-b1cc-11ed-bfe3-dac502259ad0.png

當(dāng)繼續(xù)往下調(diào)試時(shí),程序崩潰。

05f575f4-b1cc-11ed-bfe3-dac502259ad0.png

下圖為另一個(gè)poc測(cè)試出現(xiàn)的情況,這里面的topchunk標(biāo)識(shí)被修改為0,當(dāng)堆繼續(xù)申請(qǐng)和釋放時(shí),程序同樣會(huì)崩潰。

062654da-b1cc-11ed-bfe3-dac502259ad0.png

漏洞復(fù)現(xiàn)

下載好busybox后直接使用源碼進(jìn)行編譯安裝

make menuconfig
make
make install

0642dd62-b1cc-11ed-bfe3-dac502259ad0.png

使用已公開(kāi)的poc進(jìn)行測(cè)試,發(fā)現(xiàn)觸發(fā)了漏洞。

06adacbe-b1cc-11ed-bfe3-dac502259ad0.png

由于busybox在不同系統(tǒng)中的編譯使用,且不同系統(tǒng)編譯后程序開(kāi)啟的保護(hù)也不同,那么這里獲取執(zhí)行權(quán)限的方式也不同。

總結(jié)

整體分析下來(lái),該漏洞利用性不大,且獲取執(zhí)行權(quán)限的利用方式較為復(fù)雜,但因?yàn)槠淇赡芫哂蝎@取執(zhí)行權(quán)限的情況,請(qǐng)使用busybox漏洞版本的各位用戶盡快升級(jí)到最新版本。





審核編輯:劉清

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

    關(guān)注

    76

    文章

    2579

    瀏覽量

    91580
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    316

    瀏覽量

    21651
  • GDB調(diào)試
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    1447

原文標(biāo)題:車聯(lián)網(wǎng)開(kāi)源組件BusyBox漏洞分析及復(fù)現(xiàn)(CVE-2022-30065)

文章出處:【微信號(hào):蛇矛實(shí)驗(yàn)室,微信公眾號(hào):蛇矛實(shí)驗(yàn)室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Busybox源碼簡(jiǎn)介

    在嵌入式系統(tǒng)構(gòu)建中,Busybox可用于構(gòu)建輕量級(jí)的根文件系統(tǒng),本文從源碼結(jié)構(gòu)和源碼入口角度分析busybox,了解其背后的運(yùn)作機(jī)制。
    發(fā)表于 10-12 09:07 ?2086次閱讀

    某安全瀏覽器竟然也被查出高危漏洞?開(kāi)源安全問(wèn)題不容忽視

    , pkg等多種二進(jìn)制文件進(jìn)行掃描,不僅能定位開(kāi)源漏洞并提供CVE編號(hào)和修補(bǔ)方案,還能分析出所使用的開(kāi)源組件清單,據(jù)說(shuō)使用的是國(guó)際上律師事務(wù)
    發(fā)表于 08-31 16:06

    某安全瀏覽器竟然也被查出高危漏洞?開(kāi)源安全問(wèn)題不容忽視

    , apk, ipk, iso, bin, dll,dmg, pkg等多種二進(jìn)制文件進(jìn)行掃描,不僅能定位開(kāi)源漏洞并提供CVE編號(hào)和修補(bǔ)方案,還能分析出所使用的開(kāi)源
    發(fā)表于 09-05 14:26

    聯(lián)網(wǎng)的架構(gòu)分析實(shí)現(xiàn)聯(lián)網(wǎng)的價(jià)值

    2018年的風(fēng)口是什么?人工智能?區(qū)塊鏈?還是物聯(lián)網(wǎng)?物聯(lián)網(wǎng)是國(guó)家戰(zhàn)略性新興產(chǎn)業(yè)的重要組成部分,是繼互聯(lián)網(wǎng)之后的新一輪信息技術(shù)革命。物聯(lián)網(wǎng)應(yīng)用的行業(yè)有很多,
    發(fā)表于 02-11 10:13

    聯(lián)網(wǎng)終端應(yīng)用

    隨著物聯(lián)網(wǎng)興起,造成汽車產(chǎn)業(yè)革新,改變了以往汽車工業(yè)生態(tài),形成新的「聯(lián)網(wǎng)」產(chǎn)業(yè)鏈及應(yīng)用創(chuàng)新趨勢(shì)。根據(jù)中國(guó)產(chǎn)業(yè)發(fā)展研究網(wǎng)報(bào)告,2018年全球聯(lián)網(wǎng)
    發(fā)表于 07-17 07:33

    淺析Linux系統(tǒng)開(kāi)源漏洞檢測(cè)工具

    jSQL是一款輕量級(jí)安全測(cè)試工具,可以檢測(cè)SQL注入漏洞。它跨平臺(tái)(Windows, Linux, Mac OS X, Solaris)、開(kāi)源且免費(fèi)。
    發(fā)表于 07-23 07:21

    什么是聯(lián)網(wǎng)?

    什么是聯(lián)網(wǎng)?聯(lián)網(wǎng)即 V2X(Vehicle to Everything),意思是和萬(wàn)物互聯(lián)。
    發(fā)表于 09-16 10:36

    開(kāi)源鴻蒙 OpenHarmony 獲得 CVE 通用漏洞披露編號(hào)頒發(fā)資質(zhì)

    8月15日晚間,開(kāi)源鴻蒙 OpenAtom OpenHarmony 官方宣布于 8 月 3 日獲得通過(guò) CNA(通用漏洞披露編號(hào)授權(quán)機(jī)構(gòu))加入程序,成為 CVE(通用漏洞披露組織)的編號(hào)授權(quán)機(jī)構(gòu)
    發(fā)表于 08-17 11:34

    busybox詳解

    BusyBox 的誕生 BusyBox 最初是由 Bruce Perens 在 1996 年為 Debian GNU/Linux 安裝盤編寫的。其目標(biāo)是在一張軟盤上創(chuàng)建一個(gè)可引導(dǎo)的 GNU
    發(fā)表于 11-01 15:54 ?3次下載

    PCB設(shè)計(jì)中的電子組件漏洞評(píng)估

    電子元件也有漏洞。如果你不了解這些內(nèi)容,最終可能會(huì)為 PCB 的設(shè)計(jì)選擇錯(cuò)誤的組件。這些組件可能會(huì)過(guò)早失效,或者會(huì)給您間歇性出現(xiàn)問(wèn)題,從而導(dǎo)致調(diào)試和更正耗時(shí)且成本高昂的工作。重要的是要事先做出正確
    的頭像 發(fā)表于 09-12 19:06 ?2073次閱讀

    全球聯(lián)網(wǎng)現(xiàn)狀及我國(guó)聯(lián)網(wǎng)產(chǎn)業(yè)分析

    責(zé)任編輯:xj 原文標(biāo)題:【行業(yè)資訊】全球聯(lián)網(wǎng)現(xiàn)狀及我國(guó)聯(lián)網(wǎng)產(chǎn)業(yè)分析 文章出處:【微信公眾號(hào):深圳市汽車電子行業(yè)協(xié)會(huì)】歡迎添加關(guān)注!文章
    的頭像 發(fā)表于 11-10 11:10 ?2904次閱讀

    2022 OpenHarmony組件大賽,共建開(kāi)源組件

    原標(biāo)題:共建開(kāi)源組件生態(tài) 2022 OpenHarmony組件大賽等你來(lái) 2022年4月15日,2022 OpenHarmony組件大賽(下稱“大賽”)報(bào)名通道正式開(kāi)啟,開(kāi)發(fā)者登錄
    的頭像 發(fā)表于 04-26 17:31 ?1561次閱讀
    2022 OpenHarmony<b class='flag-5'>組件</b>大賽,共建<b class='flag-5'>開(kāi)源</b><b class='flag-5'>組件</b>

    聯(lián)網(wǎng)遙控開(kāi)源分享

    電子發(fā)燒友網(wǎng)站提供《物聯(lián)網(wǎng)遙控開(kāi)源分享.zip》資料免費(fèi)下載
    發(fā)表于 07-11 11:09 ?4次下載
    物<b class='flag-5'>聯(lián)網(wǎng)</b>遙控<b class='flag-5'>車</b><b class='flag-5'>開(kāi)源</b>分享

    Busybox編譯安裝過(guò)程 Busybox的使用方法

    Busybox是一個(gè)開(kāi)源的、輕量級(jí)的軟件工具集合,旨在提供一個(gè)精簡(jiǎn)的Unix工具集,適用于嵌入式系統(tǒng)和資源受限的環(huán)境。它將許多常用的Unix工具(如ls、cp、cat、mv、grep、find、telnet等)合并為一個(gè)可執(zhí)行文件,從而減少了系統(tǒng)的存儲(chǔ)空間和資源占用。
    發(fā)表于 09-11 12:33 ?2366次閱讀

    聯(lián)網(wǎng)系統(tǒng)的安全漏洞分析

    隨著物聯(lián)網(wǎng)技術(shù)的快速發(fā)展,越來(lái)越多的設(shè)備被連接到互聯(lián)網(wǎng)上,從智能家居、智能城市到工業(yè)自動(dòng)化,物聯(lián)網(wǎng)的應(yīng)用范圍不斷擴(kuò)大。然而,隨著物聯(lián)網(wǎng)設(shè)備的增多,安全問(wèn)題也日益凸顯。 一、物
    的頭像 發(fā)表于 10-29 13:37 ?375次閱讀