出于安全性的考慮,很多網(wǎng)絡應用可能用比較強的安全算法加密傳輸?shù)臄?shù)據(jù),從而導致抓包這一強大的網(wǎng)絡分析工具成為雞肋,SNMP v3就是這么個例子。
Wireshark自帶有配置usmUser的例子,可以自動調(diào)用netsnmp的庫來完成揭秘,但對于Unix程序而言,GUI的工具本身還是有諸多不便,沒有CLI工具來的舒服自然,另外的一個問題是,通過自己配置usmUser,似乎一直無法成功解碼。
翻看Wireshark的文檔的時候,發(fā)現(xiàn)一個強大的小工具很適合配合腳本發(fā)揮威力:tshark;想到Python,馬上實現(xiàn)了一個不錯的小工具。
tshark本身可以支持很多選項,幾乎涵蓋了wireshark大部分常用功能,個人發(fā)現(xiàn)特別適合二次分析。這里最關(guān)鍵的是 -T pdml選項,
可以生成一個完整的xml格式的分析報告。
假設實現(xiàn)用tcpdump或者snoop抓取了一個加密的包test.pcap,那么接下來,可以用其作二次分析:
snoop -d <dev> -o test.pcap <filter>
tshark -r test.pcap -V -T pdml > test.xml
接下來可借助腳本的威力來解析這個xml文件了,python的xml.sax很適合干這個了,自己寫一個ContentHandler, 將感興趣的字段抓下來,存儲在一個相關(guān)的結(jié)構(gòu)里邊。這里對于SNMP而言,只需要將對應的scopedPDU加密數(shù)據(jù)保存下來,同時保存其它必要的數(shù)據(jù),放置于索引的dict中,便于下一步分析。
利用C/C++寫一個小程序,接收加密參數(shù)、字段內(nèi)容等參數(shù)完成實際解碼工作,由于是API的簡單調(diào)用和變換,所以比較簡單;生成可執(zhí)行文件即可。
最后,將上述通過python的 Popen建立I/O管道,將各個部分串聯(lián)起來,并格式化每一步分析產(chǎn)生的輸出結(jié)果,生成結(jié)果報告。
以上的方式可以不需要寫dissector就完成自定義的報文分析,缺點是,運行效率比較低一些;優(yōu)點也很明顯,很容易定制和腳本自動化。
對于私有協(xié)議而言,上述方式也是一個不錯的選擇。