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
その結果を図に示します。
、でNOE77101.binをbinwalk使用してファイルを解凍binwalk -e NOE77101.bin
217と217.zlib 2つのファイルを与えます。217 binwalk用いた解析binwalk 217
の解析結果に示すように、この使用VxWorksのカーネルファームウェア、ファームウェアbinwalkはまた、シンボル・テーブルで識別されたことが分かります。
ファームウェアの分析
今IDAのプロの逆アセンブルを使用するために、CPUアーキテクチャ、エンドフォーマットサイズおよびファームウェアのロードアドレスのファームウェアを決定する必要があります。
使用binwalk -A
パラメータ分析文書217、binwalk -A 217
ファームウェアを理解し、図に示すように、結果は、PowerPCアーキテクチャ、ビッグエンディアン形式を使用します。
その後、ファームウェアのロードアドレスを決定する必要があり、共通のVxWorksのファームウェアのロードアドレスは0x10000番地ですが、それはテストするのが最善です。strings 217
文字列検索のファームウェア、最後の文字列があるべき文字列テーブルを決定しますAPP_STASTON_MODBUS
。
検索文字列内の010エディタで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)
,这两个内存地址在固件中的实际地址应是再减去固件的加载地址。
0x21DB7C(0x22DB7C-0x10000番地)に位置するファームウェア010エディタは、ここで文字列が一層以上の動作は、バックドアアカウントの複数を追加することであることを確認し、複数回「ユーザ」という言葉を見つけました。