震網(wǎng)蠕蟲(chóng)中的一個(gè)Bug差點(diǎn)令其“出師未捷身先死”
由于內(nèi)部代碼中存在一個(gè)Bug,使其可以感染古老的Windows系統(tǒng)。超級(jí)蠕蟲(chóng)病毒震網(wǎng)(Stuxnet)差一點(diǎn)暴露,從而無(wú)法完成破壞。
業(yè)內(nèi)眾所周知,該病毒可以隱秘地破壞控制離心機(jī)的計(jì)算機(jī)系統(tǒng)。它由美國(guó)和以色列的神秘黑客所設(shè)計(jì),被用于破壞位于伊朗那達(dá)茲郡的鈾濃縮設(shè)施。該病毒導(dǎo)致伊朗的濃縮鈾項(xiàng)目推遲了兩年之久,但由于其自身的代碼缺陷,震網(wǎng)差點(diǎn)未能發(fā)揮作用。
為了完成行動(dòng)目標(biāo),Stuxnet必須保證自己無(wú)法被伊朗人檢測(cè)到。不幸的是,一個(gè)編程錯(cuò)誤可能會(huì)讓它傳播到較老版本的Windows上。由于病毒并不支持老版本的Windows,這可能會(huì)引發(fā)系統(tǒng)崩潰,大量的出現(xiàn)的系統(tǒng)藍(lán)屏可能會(huì)引起那達(dá)茲核試驗(yàn)室工作人員們的注意。
and與or的故事
在上周結(jié)束的RSA安全大會(huì)上,BlueCoat的技術(shù)分析人員表示,當(dāng)震網(wǎng)開(kāi)始引發(fā)Windows 95和Windows 98系統(tǒng)崩潰時(shí),它的任務(wù)可能還沒(méi)開(kāi)始就即將結(jié)束。
“震網(wǎng)編程團(tuán)隊(duì)里的某個(gè)人可能度過(guò)了糟糕的一天,并將代碼中的and錯(cuò)誤地寫(xiě)成了or。結(jié)果是,震網(wǎng)在執(zhí)行安裝策略時(shí)會(huì)進(jìn)行or檢查,這導(dǎo)致它會(huì)自動(dòng)注入所有版本的Windows,甚至是Win 95和Win 98這些它并不支持的操作系統(tǒng)。”
“類(lèi)似一種在某個(gè)項(xiàng)目上花費(fèi)了很多年時(shí)間,但由于造成了遠(yuǎn)程系統(tǒng)崩潰,突然前功盡棄的意思。”
不過(guò)從實(shí)際情況來(lái)看,震網(wǎng)還是在2010年被發(fā)現(xiàn)之前成功地干擾了離心機(jī)。這可能是因?yàn)榕銮烧鹁W(wǎng)在那時(shí)沒(méi)有碰到任何運(yùn)行老版本W(wǎng)indows的機(jī)器,也有可能是伊朗科學(xué)家對(duì)Win 95和Win 98的藍(lán)屏錯(cuò)誤早就習(xí)以為常。
同病相憐的Conficker
安全研究人員還發(fā)現(xiàn),震網(wǎng)并不是唯一一個(gè)存在Bug的著名惡意軟件。Conficker蠕蟲(chóng)自身存在的Bug也削弱了其自身的潛在破壞力。
Conficker 蠕蟲(chóng)攻擊網(wǎng)絡(luò)上的Windows設(shè)備,從理論上講,它幾乎可以感染任何人。但由于負(fù)責(zé)生成隨機(jī)地址的代碼中存在一個(gè)Bug,它只能掃描到IPv4總地址數(shù)量的四分之一:它的隨機(jī)數(shù)生成函數(shù)會(huì)產(chǎn)生15位的整數(shù),從0到0x7fff(0~RAND_MAX),它調(diào)用這個(gè)函數(shù)兩次,本意是生成一個(gè)32位的 IPv4地址。不過(guò),事實(shí)上它生成的只是30位整數(shù),比32位的整數(shù)還差了兩位。
“如果你連續(xù)攻擊受害者,會(huì)很容易被檢測(cè)到,因此黑客在這方面采取了聰明的辦法,每次攻擊一個(gè)隨機(jī)地址。”
“有趣的事情在于,RAND_MAX變量只有15位,這意味著當(dāng)Conficker通過(guò)調(diào)用兩次該函數(shù)來(lái)生成IP地址時(shí),得到的只是一個(gè)30位隨機(jī)數(shù),這導(dǎo)致病毒并沒(méi)有掃描整個(gè)地址空間,而只是掃描了其中的四分之一。”
如果企業(yè)的客戶(hù)由于這個(gè)原因并沒(méi)有感染該蠕蟲(chóng),他們可能要感謝自己的好運(yùn)了。
與Bug有緣的惡意軟件
還有更多的例子。2007年被披露的風(fēng)暴(Storm)蠕蟲(chóng)由于更新版本時(shí)的一個(gè)錯(cuò)誤而變成了和風(fēng)細(xì)雨。黑客在更新病毒版本、編寫(xiě)代碼中關(guān)于選取入侵系統(tǒng)類(lèi)型的部分時(shí),將Windows錯(cuò)拼成了Windoss。(有點(diǎn)敬業(yè)精神好不好?)
2014 年被披露的活力狗熊(Energetic Bear),又名蜻蜓(DragonFly),是一個(gè)用于滲透和破壞系統(tǒng)的惡意軟件。該軟件在安全研究人員的手里變成了小玩具,因?yàn)檠芯咳藛T找到了它從緩存中計(jì)算公鑰和私鑰的方式,獲得受害者自由訪(fǎng)問(wèn)列表的方式,甚至是它未來(lái)版本的架構(gòu)細(xì)節(jié)。
通過(guò)同樣的方法,利用SimpleLocker被加密的安卓文件也可以被恢復(fù)。在總結(jié)銀行木馬Yaludle的漏洞時(shí),安全人員表示,“SQL注入很漂亮,但不講衛(wèi)生”。
以彼之道,還施彼身
惡意軟件分析并不只是逆向工程師的工作,只要做足準(zhǔn)備,研究人員利用系統(tǒng)漏洞甚至可以控制攻擊者發(fā)動(dòng)攻擊的服務(wù)器。
舉例而言,安全研究人員可以輕而易舉地將Conficker無(wú)害化。一旦該病毒注入了一臺(tái)電腦,就會(huì)從MaxMind上下載IP-地理地址數(shù)據(jù)庫(kù),以找到自己在真實(shí)世界所處的位置。由于Conficker并不攻擊烏克蘭的電腦,如果這個(gè)數(shù)據(jù)庫(kù)中的所有IP都映射到烏克蘭,那么會(huì)引發(fā)蠕蟲(chóng)自殺,停止傳播。通過(guò)向Conficker推送改動(dòng)后的MaxMind數(shù)據(jù)庫(kù),安全人員完全可以擊敗Conficker的攻擊。
我們鼓勵(lì)每一個(gè)人都來(lái)做這些事。”
(回復(fù)“malwarebug”,可獲得演講資料地址)
提醒:
研究人員在RSA大會(huì)上展示的PPT和他們的演講內(nèi)容有所不一樣。PPT上顯示的代碼實(shí)際上表明,Stuxnet并不會(huì)向Win 95和Win98系統(tǒng)上傳播,這可能是因?yàn)檠芯咳藛T所展示的是Stuxnet的修復(fù)版。他們所闡釋的通過(guò)逆向工程發(fā)現(xiàn)的Bug只是老版本的內(nèi)容,因此他們有可能只是將Stuxnet代碼中正確的一部分拿了出來(lái),而在會(huì)議上介紹了那些有缺陷的部分。
以下C語(yǔ)言部分展示了Stuxnet進(jìn)行x86安裝檢測(cè)的源代碼:
if ( GetVersionExW(&OsVersion)
&& OsVersion.dwPlatformId == VER_PLATFORM_WIN32_NT
&& (OsVersion.dwMajorVersion >=5 || OsVersion.dwMajorVersion <= 6))
Install();
安全人員表示,以下這行代碼
(OsVersion.dwMajorVersion >=5 || OsVersion.dwMajorVersion <= 6))
對(duì)于Windows 9x、XP、200x、Vista和7而言都會(huì)返回True,這是沒(méi)錯(cuò)的。但是這段代碼
OsVersion.dwPlatformId == VER_PLATFORM_WIN32_NT
對(duì)Windows 9x系統(tǒng)會(huì)返回False,因?yàn)閃indows 95和Windows 98的dwPlatformId值都是1,VER_PLATFORM_WIN32_NT是2。因此,如果按照以上代碼來(lái)運(yùn)行,Install()永遠(yuǎn)不會(huì)在Windows 9x版本上被調(diào)用。















 
 
 




 
 
 
 