NOE77101固件后門漏洞分析
固件獲取
最近學習vxworks固件的分析,嘗試對noe77101固件的經典后門漏洞進行分析,就好比學習msf時練習經典的ms08-067一樣。noe77101固件的下載地址在此。
拿到固件之后,unzip noe77101_OS.bin_.zip
解壓固件,得到FLASH0文件夾和一個commandList.lst文件,FLASH0的文件目錄如下:
在flash0/wwwroot/conf/exec/
目錄下找到了NOE77101.bin文件,這應該就是我們要分析的目標了。
使用binwalk對.bin文件進行分析,binwalk NOE77101.bin
,結果如圖所示
使用binwalk提取NOE77101.bin中的文件,binwalk -e NOE77101.bin
,得到217和217.zlib兩個文件。使用binwalk分析217,binwalk 217
,分析結果如圖,可以看到此固件使用vxworks內核,binwalk還在固件中識別出了符號表。
固件分析
現在需要確定固件的cpu架構、大小端格式和固件加載地址,才能使用ida pro進行反匯編。
使用binwalk的-A
參數分析217文件,binwalk -A 217
,結果如圖所示,可知固件使用PowerPC架構,大端格式。(7.24更新:使用binwalk -Y更加方便)
接下來還要確定固件的加載地址,vxworks固件的常見加載地址是0x10000,但最好還是驗證一下。strings 217
搜索固件中的字符串,確定字符串表中的最后一個字符串應該是APP_STASTON_MODBUS
。
在010 Editor中搜索字符串APP_STASTON_MODBUS
,可知字符串表中的最后一個字符串的地址為0x298BD8。
又因為字符串表中的最后一個字符串在符號表中第一個被引用,因此需要定位符號表的第一行,找到該字符串在內存中的地址。前文中已經使用binwalk發現符號表的位置,為0x31EED4。但是這個值不一定是准確的,還需要進一步驗證。在010 Editor中定位0x31EED4位置附近,發現符號表真正的起始位置是0x31EEC4。
確定了APP_STASTON_MODBUS
字符串在固件中的位置和在內存中的位置,就可以計算得到固件的加載地址了,確實是0x10000。
函數名修復
現在可以使用ida pro加載217文件了,處理器選擇PowerPC big endian(PPC),固件加載地址填寫0x10000。
此時的ida pro並沒有識別到函數。(mac版ida此時需要按c轉為函數,windows的ida可以識別到少量函數)
需要編寫腳本修復函數名,但是目前只知道符號表的起始地址,並不知道結束地址。在010 Editor中按照符號表規律往下尋找結束地址,確定是0x348114。
修復腳本repair.py如下:
from idaapi import *
from idc import *
loadaddress = 0x10000
eaStart = 0x31eec4 + loadaddress
eaEnd = 0x348114 + loadaddress
ea = eaStart
eaEnd = eaEnd
while ea < eaEnd:
create_strlit(Dword(ea), BADADDR)
sName = get_strlit_contents(Dword(ea))
print sName
if sName:
eaFunc = Dword(ea + 4)
MakeName(eaFunc, sName)
MakeCode(eaFunc)
MakeFunction(eaFunc, BADADDR)
ea = ea + 16
修復完成之后可以看到,ida pro成功識別到了8873個函數,可以進行進一步的分析了。
后門漏洞分析
查找后門漏洞的一個入手點就是尋找與用戶相關的函數的調用情況,注意到函數loginUserAdd
。
查看此函數的交叉引用情況,發現有三個函數對它進行了調用,分別是usrSecurity
、FTP_USER_ADD
和usrAppInit
。
分別查看以上三個函數,在usrAppInit
中發現疑似添加登錄用戶的操作。在PowerPC中,lis(立即數載入並左移)和addi(立即數加法)的組合是最常見的賦值操作,ida pro的注釋中給出了經過賦值之后的結果。以第一次調用為例,實際上是執行了loginUserAdd(0x22DB7C,0x22DB84)
,這兩個內存地址在固件中的實際地址應是再減去固件的加載地址。
在010 Editor中定位固件的0x21DB7C(0x22DB7C-0x10000),發現此處的字符串出多次出現“user”字樣,由此更加驗證了前面的操作是添加多個后門賬號。