安全研究人員和加密專家最近幾天都忙于找出剛公布的 Juniper NetScreen 防火墻 VPN 流量解密后門的具體細(xì)節(jié)?,F(xiàn)在,他們確信自己已經(jīng)找到了答案,惡意第三方修改+Juniper自身的加密失敗。
據(jù)專家稱, Juniper 采用已知有缺陷的隨機(jī)數(shù)字生成器 Dual_EC_DRBG (雙橢圓曲線確定性隨機(jī)比特生成器)作為 NetScreen 防火墻 ScreenOS 加密操作的基礎(chǔ),認(rèn)為由于其采取了額外預(yù)防措施而不會產(chǎn)生不安全的后果。但事實是,這些安全保護(hù)措施并沒有起到效果。
VPN 解密問題是 Juniper 在上周四公布的,同時公布的還有另一個可使攻擊者利用硬編碼的主密碼獲得 NetScreen 設(shè)備管理員權(quán)限的漏洞。該公司稱,兩個問題都是由最近的內(nèi)部代碼審計中發(fā)現(xiàn)的 ScreenOS 未授權(quán)代碼造成的。
Juniper 發(fā)布了受影響固件的補(bǔ)丁版本,但并未公布該流氓代碼的具體細(xì)節(jié),其位置和可能的添加者都還屬于內(nèi)部機(jī)密。FBI 正在調(diào)查該事件,網(wǎng)上最新付出的消息顯示,始作俑者有可能是 NSA 。
安全社區(qū)擔(dān)負(fù)起了逆向老版固件和 Juniper 新補(bǔ)丁的責(zé)任,希望能挖掘出更多信息。他們很快找到了那段偽裝得非常聰明的硬編碼主密碼,并發(fā)現(xiàn)其影響范圍不像一開始認(rèn)為的那么廣。
加密專家深入研究對他們而言更具吸引力的 VPN 流量解密問題,畢竟,暗中窺視加密流量的能力任何時候都不能等閑視之。
沒過多久,就有人注意到 Juniper 最新的補(bǔ)丁將一個參數(shù)恢復(fù)到了受 VPN 解密問題影響的 ScreenOS 6.3.0分支最初版本 6.3.0r12 之前的數(shù)值。
德國安全顧問公司 Comsecuris 創(chuàng)始人兼首席執(zhí)行官拉爾夫-菲利普·威曼(Ralf-Philipp Weinmann)在進(jìn)一步分析之后稱,該參數(shù)是雙橢圓曲線(Dual_EC)隨機(jī)數(shù)字生成器(RNG)使用的兩個常數(shù)P和Q當(dāng)中的Q。
Dual_EC 是美國國家標(biāo)準(zhǔn)技術(shù)研究所(NIST)于2007年在美國國家安全局(NSA)的支持下被標(biāo)準(zhǔn)化的,NSA 在其發(fā)展過程中扮演了重要的角色。此后不久,微軟的兩名研究員丹·舒茂(Dan Shumow)和尼爾斯·弗格森(Neils Ferguson)就揭示了該標(biāo)準(zhǔn)中一個可被用作后門的重大漏洞。
“數(shù)學(xué)分析部分略去不談,簡單地說就是,Dual_EC 依賴于一個特殊的32字節(jié)的常數(shù) Q,該常數(shù)如果由惡意攻擊者產(chǎn)生,他可以僅憑30個字節(jié)的原始輸出就能預(yù)測 Dual_EC 隨機(jī)數(shù)生成器的未來輸出。”約翰·霍普金斯大學(xué)副教授密碼破譯專家馬修·格林(Matthew Green)在周二發(fā)布的一篇博文中寫道。
NIST 規(guī)范中Q的默認(rèn)值是由 NSA 產(chǎn)生的,不能保證它真的就是按隨機(jī)方式產(chǎn)生。事實上,2013年9月,基于NSA前雇員斯諾登揭秘的文件,《紐約時報》報道稱 NSA 故意設(shè)計了這個漏洞。
該報道促使 NIST 將 Dual_EC_DRBG 從其推薦列表中除名,建議用戶轉(zhuǎn)向其他的隨機(jī)數(shù)生成器。在 NIST 的建議之后,Juniper 承認(rèn) ScreenOS 采用了 Dual_EC_DRBG,但宣稱“是以一種不會造成已被曝光的可能問題的方式利用的。”
ScreenOS 沒有采用 NIST 建議的 PQ 常數(shù)值作為橢圓曲線的基準(zhǔn)點,而是用了“自生成的基準(zhǔn)點。”此外,Dual_EC 的輸出結(jié)果又作為另一個隨機(jī)數(shù)生成器 FIPS/ANSI X.9.31 的輸入來產(chǎn)生新的隨機(jī)數(shù)以供 ScreenOS 加密操作取用。
Juniper 為什么要用一個 RNG 的輸出作為另一個 RNG 的輸入而不直接采用后者那個更安全的 RNG 我們不得而知。但是,如果該實現(xiàn)是切實精準(zhǔn)的,控制常數(shù)Q應(yīng)該對攻擊者沒什么大用處。那么,為什么攻擊者要費勁去改那個參數(shù)呢?
這個問題的答案被獨立研究員威廉·賓格爾斯(Willem Pinckaers)揭曉了。他閱讀了威曼的分析,注意到 Juniper 用來將 Dual_EC 的輸出傳遞到 ANSI 生成器的代碼中存在有一個錯誤,會導(dǎo)致該步驟失敗。
威廉·賓格爾斯指出:重設(shè)種子系統(tǒng)偽隨機(jī)數(shù)生成器函數(shù) reseed_system_prng 將全局變量——系統(tǒng)偽隨機(jī)數(shù)生成器內(nèi)存指針 system_prng_bufpos 置為32。這意味著在該函數(shù)第一次調(diào)用以后,緊跟在系統(tǒng)偽隨機(jī)數(shù)產(chǎn)生塊 system_prng_gen_block 的重設(shè)種子函數(shù)調(diào)用后面的for循環(huán)根本不會得到執(zhí)行。而且,ANSI X9.31 偽隨機(jī)數(shù)生成器代碼完全沒用。
該錯誤似乎早于未知攻擊者對Q點的未授權(quán)改變,其本身也可被視為一個后門。實際上,威曼將整件事描述為“被后門的后門”。
“總而言之,某黑客或黑客團(tuán)伙發(fā)現(xiàn)了 Juniper 軟件中現(xiàn)有的一個后門,可能是故意設(shè)置的也可能是無意造成的——你自己判斷!”格林說,“然后他們在此之上又建了一個他們自己的后門——因為所有的苦勞都已經(jīng)替他們做了嘛。最終結(jié)果就是有那么一段時期,某些人——或許是外國政府,能夠解密美國和全世界的 Juniper 流量。而這一切全都因為 Juniper 自己已經(jīng)為他們鋪好了路。”
Juniper 沒有立即回應(yīng)對此做出評論的請求。
格林稱,即使 Juniper 沒有故意引入該漏洞,如果美國政府當(dāng)局強(qiáng)迫廠商在加密實現(xiàn)中設(shè)置后門以便合法竊聽通信,那么此事無疑就是其后果的絕佳案例。
“加密后門的問題不在于它們是攻擊者闖入我們加密系統(tǒng)的唯一途徑,而在于那是最佳途徑。這些后門辛苦假設(shè)好管道和電線,讓攻擊者可以大搖大擺地走進(jìn)來改換門庭。”
“該漏洞告訴我們的是,此類擔(dān)憂不再是理論上的。”格林說,“如果加密后門確實存在于我們的未來里,那我們所有的工作就更難做了。”