背景:
分析某路由器產(chǎn)品的時(shí)候慢洋,發(fā)現(xiàn)部分通過aes加密的信息塘雳,可以通過一些技術(shù)手段獲取明文陆盘。從分析接口和路由器功能來(lái)看,這部分加密信息可能還是核心業(yè)務(wù)邏輯中的重要數(shù)據(jù)败明。
具體步驟
1隘马,先嘗試獲取固件下載地址,直接對(duì)路由器進(jìn)行抓包妻顶,固件默認(rèn)信任了第三方證書酸员,抓包可以查看到https內(nèi)容
請(qǐng)求的返回文件中包含了固件的下載地址,md5校驗(yàn)等參數(shù)讳嘱,可以直接通過url下載到固件幔嗦。
2,下載固件后使用binwalk進(jìn)行解包沥潭,固件沒有做加密或者特殊處理邀泉,可以用binwalk直接成功解包。解壓后目錄如下:
3钝鸽,到固件的app目錄下汇恤,app目錄下每個(gè)文件夾對(duì)應(yīng)一個(gè)程序模塊,這次的目標(biāo)模塊目錄如下拔恰,bin目錄下為二進(jìn)制文件
4因谎,bin目錄下的id_manager文件,先查找有沒有字符串信息颜懊,簡(jiǎn)單點(diǎn)财岔,直接用notepad++打開id_manager
進(jìn)入app\id_manager\bin目錄下,直接打開id_manager饭冬,可以看到部分字符串內(nèi)容使鹅。有一段wget請(qǐng)求,這里比較明顯的應(yīng)該是代碼里的輔助日志輸出昌抠,沒有做處理。
wget ?-t 3 -T 10 -c "http://%s/rule/check?ckey=%s&data=%s" -O %s url?/tmp/ib_server_response_enc.file ? ?%s: line = %d cmdline:%s
實(shí)際的Url應(yīng)該是http://url/rule/check?ckey=XXX&data=XXX
5鲁僚,為了驗(yàn)證這條請(qǐng)求是否真實(shí)存在炊苫,對(duì)路由器進(jìn)行抓包,看到一條實(shí)際請(qǐng)求為
從樣式上看冰沙,推測(cè)ckey是加密后的秘鑰侨艾,data是用秘鑰加密過的實(shí)際內(nèi)容。在id_manager中查看有postdata相關(guān)內(nèi)容如下
model=%s&mac=%s&firm_ver=v%s&plugin_ver=v%s&app_id=%s&rules_md5_id=%s ? %s: line = %d post_data:%s
查看id_manger中上下文拓挥,有字符串%s: line = %d aes_key:%s 唠梨,推測(cè)這部分參數(shù)應(yīng)該是使用aes加密,ckey的內(nèi)容是ras加密后的秘鑰侥啤。
再在id_manager中搜索“public”,找到代碼中的public key 如下
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYnS2SjPOIsIUCUdWNzCD19J1G
8fO0Phm9g97kxL5PthYTCkuaKmToBSgrLW4eT6L3cxq2tlaJ+RviNcEgYTwHAOG3
qiooVGoxu2m0kqg1eQrjoCtjTzvutbPO3qp0r/Xzet3jUE+5KuXpEGhQFAud7+Gc
An/27zJZFsY0+JbnDQIDAQAB当叭。
6茬故,嘗試使用指定的aes key偽造一條請(qǐng)求,看看服務(wù)端是否可以正常返回蚁鳖。
偽造的核心思路是磺芭,在分析出來(lái)URL的具體參數(shù)后,同時(shí)又獲取了偏移量醉箕,那么我們可以隨意指定一個(gè)AES秘鑰钾腺,把URL內(nèi)容進(jìn)行AES加密。在獲取服務(wù)端的響應(yīng)內(nèi)容后讥裤,就可以利用我們指定的AES秘鑰解密服務(wù)端返回的內(nèi)容放棒,獲取明文信息。
偽造邏輯是指定一個(gè)asekey己英,按照上文中的格式把原文使用aeskey加密哨查,作為data的參數(shù)值。再使用publickey對(duì)ase key加密后作為ckey參數(shù)值傳遞剧辐。
data部分按照格式設(shè)置為
“model=v1&mac=xx-xx-xx-xx-xx-xx&firm_ver=x.x&plugin_ver=3.0.0&app_id=&rules_md5_id=”
指定一個(gè)aes秘鑰為abcdabcdabcdabcd寒亥,偏移量也可以直接在id_manger文件中看到明文的,為J1Ldv7shzA75WSa7
獲得參數(shù)data=x0y9QUPganyXrn9uOZMTOKN+OuBOsaZnrcBcO//eyErApG0ZkqAb+Cg1C+KfEgAvI5u0pB4a4P0Qo7yEleCdnnqjF8TSruLjRRI+yUb7n6adYgM83UdMYycZ6lRjcneX
ckey=E9EBs6eZL+eDwiRG3lVb+5Cxlsl8vxJYpq2qYj3cQAU2uHx4OjJiLoz/Z5SPQI1upj4+X9OUvSXXmzxe5Dmb7ykmnQcjK7J3RIb3c8cqB0zHIspnvmoLsxWFKhDu3ELSfacRr90++K5iT88VVDZpJOGuDD3FgZGmBiM+pDVDR5M=
構(gòu)造請(qǐng)求
服務(wù)器有正常返回荧关,返回了幾次錯(cuò)誤碼溉奕,包括固件版本號(hào)缺失,插件版本號(hào)缺失忍啤,根據(jù)錯(cuò)誤提示補(bǔ)全data內(nèi)容后加勤,構(gòu)造出一條可用的請(qǐng)求
最終的data=x0y9QUPganyXrn9uOZMTOERH7xeaOEW2i7wlOzUpxOpQm5WqHC/vs0cCDpcihKrf0N7C2pFWr+qIkXC60qbJaDOQ1ABJivUBQI8Qj+Ow7kZ0INHzeAOgI0p9LasstmLS
服務(wù)器有正常響應(yīng)。
7同波,拿到服務(wù)端返回結(jié)果鳄梅,使用指定的aes秘鑰wtBEabcdmm2wg5a5解密。如下圖 未檩,獲取了加密后的內(nèi)容
?問題分析
這次發(fā)現(xiàn)的信息泄露漏洞戴尸,本身加密機(jī)制是沒什么問題的,使用了RSA+AES的加密方式冤狡。但是加密方式?jīng)]問題孙蒙,不代表業(yè)務(wù)邏輯上就沒有漏洞,由于URL參數(shù)和部分加密信息可以在二進(jìn)制文件中扒拉出來(lái)悲雳,導(dǎo)致可以模擬一個(gè)自定義密鑰挎峦,從服務(wù)端獲取加密信息,再解密獲取銘文信息合瓢。路由器固件存在的問題主要如下:
1坦胶,固件的升級(jí)請(qǐng)求雖然是https,但是沒有做證書校驗(yàn),Https的內(nèi)容也沒有做二次加密顿苇,導(dǎo)致可以被抓包
2峭咒,固件也沒有做加密處理,可以直接被binwalk解壓
3岖圈,代碼中存在大量調(diào)試用的日志文件讹语,加密邏輯可以通過字符串被摸索出來(lái)