溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Vxworks加密漏洞的示例分析

發(fā)布時(shí)間:2021-12-22 11:21:41 來(lái)源:億速云 閱讀:293 作者:小新 欄目:安全技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)Vxworks加密漏洞的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

正文

對(duì)工控固件(一般為vxworks)的分析有固定的步驟,總結(jié)如下:

1.用binwalk查看固件基本信息并解壓固件;

2.確認(rèn)解壓固件的信息如CPU類型,編譯固件使用的大頭序;

3.確定固件的加載地址,一般為0x10000(原文中未對(duì)如何找加載地址進(jìn)行解讀);

4.用IDA pro反匯編程序,并修復(fù)固件中的函數(shù)名;

5.找到對(duì)應(yīng)的漏洞函數(shù)進(jìn)行分析。

由于原文中未對(duì)如何找出固件加載地址進(jìn)行說(shuō)明,也未對(duì)最后碰撞hash值的過(guò)程進(jìn)行說(shuō)明。在這樣的疑惑下,本人對(duì)這兩個(gè)問(wèn)題進(jìn)行了進(jìn)一步的解析:

一是找出了靠譜的計(jì)算固件加載地址的方法(這里要感謝"工匠安全實(shí)驗(yàn)室"的大哥給出的思路);

二是通過(guò)編寫(xiě)程序,碰撞出多個(gè)同一hash值的多個(gè)key解。

一、計(jì)算固件加載地址

固件加載地址的計(jì)算是通過(guò)vxworks固件中的函數(shù)符號(hào)表計(jì)算得出的。在固件中,與函數(shù)字符串相關(guān)的有兩個(gè)地址,一個(gè)是在固件中字符串的存儲(chǔ)地址;另一個(gè)是固件中保存的函數(shù)字符串的內(nèi)存地址。這兩個(gè)地址相減,就能得出固件的加載地址。因此,我們只需要定位到一個(gè)固定的字符串,找到它在固件中的位置以及在內(nèi)存中加載它的地址,就能算出固件的加載地址了。在winhex中搜索APP_STATION這個(gè)字符串(該字符串有它的特殊性,它是函數(shù)字符表中的最后一個(gè)字符串,見(jiàn)下圖,如果搜不到該字符串,按照這種方式找到字符表的最后一個(gè)字符串也是可以的),記下它在固件中的地址為0x26656c。

Vxworks加密漏洞的示例分析

下一步還需要找到該字符串在內(nèi)存中的加載地址,根據(jù)函數(shù)符號(hào)表的特點(diǎn),它的內(nèi)存加載地址為符號(hào)表的起始位置。在binwalk中可以查看vxworks的字符表的大致起始位置,如下圖所示,binwalk計(jì)算的符號(hào)表的起始位置為0x301E74。

Vxworks加密漏洞的示例分析

需要說(shuō)明的是,這個(gè)值不一定準(zhǔn)確,還需在winhex中進(jìn)一步確認(rèn)。在winhex中跳轉(zhuǎn)到0x301E74,如下圖所示。圖的右側(cè)出現(xiàn)了很規(guī)律的".....'e..."的列。這種規(guī)律復(fù)合函數(shù)符號(hào)表的排列方式,因此,根據(jù)排列規(guī)律,符號(hào)表的起始位置應(yīng)該為0x301E64。

Vxworks加密漏洞的示例分析

在這個(gè)地址存儲(chǔ)的是字符串的內(nèi)存地址為0x27656C,而且可以看到,字符串的地址是倒序排列,所以這個(gè)地址就是前面的最后一個(gè)字符串的內(nèi)存地址。

那么,加載地址為字符串的內(nèi)存地址減去字符串地址有:0x27656C - 0x26656C =0x10000

算出了固件的加載地址,當(dāng)我們加載固件后,需要修復(fù)函數(shù)名該怎么辦呢?可以利用函數(shù)名修復(fù)腳本完成這一操作,使用的腳本如下圖所示:

Vxworks加密漏洞的示例分析

在對(duì)具體的工控固件進(jìn)行函數(shù)名修復(fù)時(shí),腳本中有三個(gè)值需要注意下。loadaddres即是剛剛算出的加載地址,eaStart即是函數(shù)符號(hào)表的起始地址為0x301E64,eaEnd是函數(shù)符號(hào)表的結(jié)束地址,這個(gè)地址怎么找,還是只有根據(jù)符號(hào)表的規(guī)律來(lái)找。如下圖所示,符號(hào)表會(huì)規(guī)律的排列,這種規(guī)律排列在0x3293a4結(jié)束,因此,這個(gè)地址即為符號(hào)表的結(jié)束地址。

Vxworks加密漏洞的示例分析

這樣,才可以順利地加載并運(yùn)行該腳本。

二、暴力碰撞hash值

先通過(guò)固件逆向分析loginDefaultEncrypt函數(shù),在IDA Pro中可以看到loginDefaultEncrypt函數(shù)的反匯編情況,結(jié)合vxworks給出的源碼,可重寫(xiě)該函數(shù)為:

Vxworks加密漏洞的示例分析

在函數(shù)里可以看到,輸入的密碼key長(zhǎng)度有限制,長(zhǎng)度得大于8,小于40。而hash值cQwwddSRxS的長(zhǎng)度為10。經(jīng)分析發(fā)現(xiàn),長(zhǎng)度為9和10的key都可能會(huì)產(chǎn)生長(zhǎng)度為10的hash值。因此,本人先通過(guò)編寫(xiě)程序隨機(jī)生成長(zhǎng)度為10的密碼本,代碼如下,為shell腳本。

Vxworks加密漏洞的示例分析

在大for循環(huán)中,共生成了100萬(wàn)個(gè)長(zhǎng)度為10的密碼。在shell中運(yùn)行該程序:

./10pass.sh > 1.txt  #將隨機(jī)密碼輸出到1.txt文件中。

再編寫(xiě)程序循環(huán)讀入密碼本中隨機(jī)生成的密碼,采用已經(jīng)寫(xiě)好的loginDefaultEncrypt函數(shù)算出密碼對(duì)應(yīng)的hash值;最后,與題目給出的hash值進(jìn)行比較,如算出的hash與題目hash的值相等,則視為碰撞出了key值。下面是給出程序的main函數(shù),在函數(shù)中可以清楚地看到每一步的操作。

Vxworks加密漏洞的示例分析

用gcc編譯:gcc -o guesshash ./guesshash.c,運(yùn)行,碰撞出的結(jié)果如下圖所示。

Vxworks加密漏洞的示例分析

可以看到,這確實(shí)是一個(gè)很弱的加密算法,100萬(wàn)個(gè)隨機(jī)密碼就碰撞出11個(gè)hash值相同的結(jié)果。

關(guān)于“Vxworks加密漏洞的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI