NOE77101固件后門漏洞分析


NOE77101固件后門漏洞分析

固件獲取

最近學習vxworks固件的分析,嘗試對noe77101固件的經典后門漏洞進行分析,就好比學習msf時練習經典的ms08-067一樣。noe77101固件的下載地址在此。

拿到固件之后,unzip noe77101_OS.bin_.zip解壓固件,得到FLASH0文件夾和一個commandList.lst文件,FLASH0的文件目錄如下:tree

flash0/wwwroot/conf/exec/目錄下找到了NOE77101.bin文件,這應該就是我們要分析的目標了。

使用binwalk對.bin文件進行分析,binwalk NOE77101.bin,結果如圖所示binwalk77101

使用binwalk提取NOE77101.bin中的文件,binwalk -e NOE77101.bin,得到217和217.zlib兩個文件。使用binwalk分析217,binwalk 217,分析結果如圖,可以看到此固件使用vxworks內核,binwalk還在固件中識別出了符號表。binwalk217

固件分析

現在需要確定固件的cpu架構、大小端格式和固件加載地址,才能使用ida pro進行反匯編。

使用binwalk的-A參數分析217文件,binwalk -A 217,結果如圖所示,可知固件使用PowerPC架構,大端格式。(7.24更新:使用binwalk -Y更加方便)binwalka217

接下來還要確定固件的加載地址,vxworks固件的常見加載地址是0x10000,但最好還是驗證一下。strings 217搜索固件中的字符串,確定字符串表中的最后一個字符串應該是APP_STASTON_MODBUSstrings217

在010 Editor中搜索字符串APP_STASTON_MODBUS,可知字符串表中的最后一個字符串的地址為0x298BD8。010zifuchuanbiao

又因為字符串表中的最后一個字符串在符號表中第一個被引用,因此需要定位符號表的第一行,找到該字符串在內存中的地址。前文中已經使用binwalk發現符號表的位置,為0x31EED4。但是這個值不一定是准確的,還需要進一步驗證。在010 Editor中定位0x31EED4位置附近,發現符號表真正的起始位置是0x31EEC4。fuhaobiaoneicundizhi

確定了APP_STASTON_MODBUS字符串在固件中的位置和在內存中的位置,就可以計算得到固件的加載地址了,確實是0x10000。pythonjisuanjiazaidizhi

函數名修復

現在可以使用ida pro加載217文件了,處理器選擇PowerPC big endian(PPC),固件加載地址填寫0x10000。ppc217loadaddress217

此時的ida pro並沒有識別到函數。(mac版ida此時需要按c轉為函數,windows的ida可以識別到少量函數)beforerepair

需要編寫腳本修復函數名,但是目前只知道符號表的起始地址,並不知道結束地址。在010 Editor中按照符號表規律往下尋找結束地址,確定是0x348114。fuhaobiaojieshuweizhi

修復腳本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個函數,可以進行進一步的分析了。repaired

后門漏洞分析

查找后門漏洞的一個入手點就是尋找與用戶相關的函數的調用情況,注意到函數loginUserAddloginuseradd

查看此函數的交叉引用情況,發現有三個函數對它進行了調用,分別是usrSecurityFTP_USER_ADDusrAppInituserxref1userxref2

分別查看以上三個函數,在usrAppInit中發現疑似添加登錄用戶的操作。在PowerPC中,lis(立即數載入並左移)和addi(立即數加法)的組合是最常見的賦值操作,ida pro的注釋中給出了經過賦值之后的結果。以第一次調用為例,實際上是執行了loginUserAdd(0x22DB7C,0x22DB84),這兩個內存地址在固件中的實際地址應是再減去固件的加載地址。userappinit

在010 Editor中定位固件的0x21DB7C(0x22DB7C-0x10000),發現此處的字符串出多次出現“user”字樣,由此更加驗證了前面的操作是添加多個后門賬號。confirm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM