NOE77101ファームウェアバックドアの脆弱性分析

NOE77101ファームウェアバックドアの脆弱性分析

ファームウェアを取得します

VxWorksのファームウェアを学習の最近の分析、学習よりも、MSFとして古典MS08-067を実施する場合のように、古典的なバックドアnoe77101ファームウェアの脆弱性分析をしてみてください。noe77101ファームウェアのダウンロードアドレスここに。

、ファームウェアの後に取得しunzip noe77101_OS.bin_.zip、次のようにファームウェアを解凍し、commandList.lst FLASH0のフォルダやファイルを取得し、FLASH0ファイルのディレクトリ:木

flash0/wwwroot/conf/exec/、それは私たちが目標を分析しなければならないことであるべきたNOE77101.binファイルディレクトリ、。

分析のためbinwalkの.binファイルを使用すると、binwalk NOE77101.binその結果を図に示します。binwalk77101

、でNOE77101.binをbinwalk使用してファイルを解凍binwalk -e NOE77101.bin217と217.zlib 2つのファイルを与えます。217 binwalk用いた解析binwalk 217の解析結果に示すように、この使用VxWorksのカーネルファームウェア、ファームウェアbinwalkはまた、シンボル・テーブルで識別されたことが分かります。binwalk217

ファームウェアの分析

今IDAのプロの逆アセンブルを使用するために、CPUアーキテクチャ、エンドフォーマットサイズおよびファームウェアのロードアドレスのファームウェアを決定する必要があります。

使用binwalk -Aパラメータ分析文書217、binwalk -A 217ファームウェアを理解し、図に示すように、結果は、PowerPCアーキテクチャ、ビッグエンディアン形式を使用します。binwalka217

その後、ファームウェアのロードアドレスを決定する必要があり、共通のVxWorksのファームウェアのロードアドレスは0x10000番地ですが、それはテストするのが最善です。strings 217文字列検索のファームウェア、最後の文字列があるべき文字列テーブルを決定しますAPP_STASTON_MODBUSstrings217

検索文字列内の010エディタで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个函数,可以进行进一步的分析了。修理

后门漏洞分析

查找后门漏洞的一个入手点就是寻找与用户相关的函数的调用情况,注意到函数loginUserAddloginuseradd

查看此函数的交叉引用情况,发现有三个函数对它进行了调用,分别是usrSecurityFTP_USER_ADDusrAppInituserxref1userxref2

分别查看以上三个函数,在usrAppInit中发现疑似添加登录用户的操作。在PowerPC中,lis(立即数载入并左移)和addi(立即数加法)的组合是最常见的赋值操作,ida pro的注释中给出了经过赋值之后的结果。以第一次调用为例,实际上是执行了loginUserAdd(0x22DB7C,0x22DB84),这两个内存地址在固件中的实际地址应是再减去固件的加载地址。userappinit

0x21DB7C(0x22DB7C-0x10000番地)に位置するファームウェア010エディタは、ここで文字列が一層以上の動作は、バックドアアカウントの複数を追加することであることを確認し、複数回「ユーザ」という言葉を見つけました。確かめます

おすすめ

転載: www.cnblogs.com/yangmzh3/p/11231423.html