應(yīng)用程序安全漏洞已成軟件應(yīng)用大威脅
天下沒有完美的事物,軟件會(huì)有bug,就跟一般人會(huì)說錯(cuò)話、寫錯(cuò)字一樣,在所難免。然而,隨著當(dāng)前行動(dòng)應(yīng)用與大數(shù)據(jù)技術(shù)蓬勃發(fā)展,我們對(duì)于應(yīng)用程序與云端服務(wù)的依賴程度日漸提升,對(duì)于系統(tǒng)的可靠度與軟件質(zhì)量的要求也連帶水漲船高。
不論是硬件或硬件的因素,系統(tǒng)只要出一次包,就可能影響成千上萬使用者。不過,若是一般的硬設(shè)備故障或網(wǎng)絡(luò)服務(wù)停擺,我們尚且能搭配各種高可用性與備援機(jī)制,將受影響的程度降至最低,但其中執(zhí)行的程序一旦有功能性的失誤,甚至有安全漏洞,想要修正就沒那么簡單,因?yàn)榭赡芤日业絾栴}所在的程序原始碼、提出解決方法、重新發(fā)布調(diào)整過的程序或安裝修補(bǔ)程序,甚至有時(shí)必須要先讓應(yīng)用系統(tǒng)脫機(jī),才能套用修正的方式,若是牽涉到服務(wù)器端與客戶端程序或設(shè)定的重新部署,來來回回之間,往往又要耗費(fèi)許多時(shí)間和人力進(jìn)行。
對(duì)于軟件質(zhì)量的判斷,通常我們分為功能性與安全性等兩大層面,一般應(yīng)用程序或系統(tǒng)上線之前,多多少少都會(huì)檢核程序是否符合這兩種性質(zhì)的需求,但比較偏重功能性的驗(yàn)證,因?yàn)橐袛喑绦驁?zhí)行時(shí)是否能滿足需求,相對(duì)容易,至于安全性的部份,若開發(fā)時(shí)沒有考慮到功能遭到濫用的可能性,而刻意限縮特定程序執(zhí)行的條件,之后若被人發(fā)現(xiàn)有這樣的漏洞,可能會(huì)讓人乘虛而入。
軟件重大安全漏洞越演越烈
對(duì)許多it人員來說,持續(xù)關(guān)注系統(tǒng)資安弱點(diǎn)信息、定期執(zhí)行漏洞修補(bǔ),已經(jīng)成為例行公事之一。從2001到2003年之間,開始有許多惡意軟件利用windows、ie、outlook express、outlook的安全性弱點(diǎn)發(fā)動(dòng)攻擊,肆虐全球個(gè)人計(jì)算機(jī)與服務(wù)器,像是code red、nimda、blaster、sasser等蠕蟲,也是在那段時(shí)期,微軟強(qiáng)化了windows xp更新機(jī)制與系統(tǒng)防護(hù),并決定在每月第二周的周二定期發(fā)布系統(tǒng)更新。
除了微軟,在個(gè)人計(jì)算機(jī)使用率相當(dāng)高的數(shù)字內(nèi)容格式adobe pdf和flash在2009年之后,也因?yàn)槁┒炊l頻遭到攻擊,到了2012年、2013年,java成為新的苦主,2013年1月,美國國土安全部計(jì)算機(jī)緊急應(yīng)變小組甚至呼吁使用者,在甲骨文公司推出穩(wěn)定java版本前,應(yīng)繼續(xù)停用瀏覽器上的java功能,然而在2月時(shí),幾家知名的網(wǎng)站和it公司也都紛紛中招,包括推特(twitter)、臉書(facebook)、蘋果和微軟都宣布內(nèi)部計(jì)算機(jī)因此遭駭?shù)臓顩r。
到了今年4月,提供ssl/tls加密傳輸功能的開放源碼套件openssl,發(fā)布heartbleed臭蟲的重大安全通告,這套應(yīng)用上相當(dāng)普及的函式庫,在tls/dtls 傳輸安全層的heartbeat(心跳)擴(kuò)充功能之中,有程序臭蟲,若該漏洞遭黑客利用來發(fā)動(dòng)攻擊,會(huì)造成內(nèi)存存放數(shù)據(jù)外泄,有可能從服務(wù)器端外泄到客戶端,或者由客戶端外泄到服務(wù)器端。
受到該漏洞影響的openssl版本,包含1.0.1到1.0.1f,以及1.0.2-beta,而目前有許多l(xiāng)inux和freebsd操作系統(tǒng)都內(nèi)建openssl,這些版本的openssl已整合其中,因此debian、ubuntu、centos、fedora、openbsd、freebsd及netbsd當(dāng)中一些版本,也都遭到波及。此外,因?yàn)樵S多系統(tǒng)與軟硬件產(chǎn)品也采用openssl,或是內(nèi)建整合openssl的軟件平臺(tái),例如開源的網(wǎng)站服務(wù)器平臺(tái)apache和nginx,所以牽涉到的范圍更廣泛。
例如,就連google、amazon的網(wǎng)站服務(wù),以及cisco、juniper的網(wǎng)絡(luò)設(shè)備都深陷安全漏洞的風(fēng)暴,還有vmware的虛擬化平臺(tái)與管理軟件、mysql、mariadb和postgresql等數(shù)據(jù)庫系統(tǒng),以及symantec、mcafee、kaspersky、f-secure、sophos旗下一些資安軟件的特定版本,也受到影響。
由上面的例子來看,應(yīng)用程序的安全漏洞所引發(fā)的效應(yīng)越來越大,而且日益復(fù)雜,要在短時(shí)間內(nèi)修復(fù),都需要時(shí)間,所牽涉到的軟件性質(zhì)也日益多元化──從一開始針對(duì)個(gè)人端計(jì)算機(jī)的微軟windows操作系統(tǒng)、ie瀏覽器與office應(yīng)用程序,以及pdf、flash及java,現(xiàn)在許多網(wǎng)站服務(wù)器、云端服務(wù)運(yùn)作時(shí)所仰賴的重要組件,也被踢爆有軟件安全漏洞的問題,除了事后要有完善的機(jī)制,盡速亡羊補(bǔ)牢,更重要的是記取教訓(xùn),做到事前預(yù)防,才能夠降低漏洞出現(xiàn)的機(jī)率,連帶地,后續(xù)黑客如果想要用漏洞來發(fā)動(dòng)攻擊,也會(huì)越來越困難。但若要達(dá)到這樣的目標(biāo),從軟件還沒有釋出、正式上線之前的開發(fā)過程中,就要采取對(duì)應(yīng)的作法,目前像是微軟、adobe、cisco等公司,都已經(jīng)發(fā)展或?qū)肓怂^的軟件安全開發(fā)生命周期(security development lifecycle,sdlc),由于安全性也是軟件質(zhì)量的一部分,因此,通常都會(huì)透過測(cè)試的方式,在軟件正式發(fā)布前,執(zhí)行相關(guān)的功能與安全性檢驗(yàn)。
行動(dòng)裝置成為市場寵兒,也成為惡意軟件橫行的新戰(zhàn)場
除了個(gè)人計(jì)算機(jī)和服務(wù)器端會(huì)有應(yīng)用程序安全漏洞,行動(dòng)裝置的操作系統(tǒng)平臺(tái)和app也都是由開發(fā)人員所寫出來的軟件,同樣不可能做到100%無漏洞,而兩個(gè)主要平臺(tái)android和ios,當(dāng)然也是有心人士鎖定的目標(biāo)。
以市占比例最大的android裝置數(shù)量來說,市調(diào)分析機(jī)構(gòu)gartner和idc均預(yù)測(cè)今年底將突破10億個(gè),因?yàn)樘^普及,所以,在這個(gè)平臺(tái)所發(fā)展的惡意、高風(fēng)險(xiǎn)或擾人app也是最多。根據(jù)趨勢(shì)科技全球技術(shù)支持與研發(fā)中心所發(fā)布的《2013年trendlabs信息安全總評(píng)》來看,2013年底已累積140萬個(gè),單就2013這一年就出現(xiàn)了1百萬個(gè)新的app威脅,2014年底預(yù)估將突破300萬個(gè),不過在趨勢(shì)科技最新公布的《2014年第一季trendlabs信息安全總評(píng)》當(dāng)中,他們發(fā)現(xiàn)相關(guān)的app威脅現(xiàn)在就已經(jīng)突破2百萬個(gè)。
除了app威脅,過去我們所熟悉的網(wǎng)絡(luò)釣魚網(wǎng)站、垃圾郵件詐騙威脅,行動(dòng)裝置同樣會(huì)面臨,值得注意的是,針對(duì)行動(dòng)裝置平臺(tái)的漏洞攻擊也開始增多,例如去年android平臺(tái)爆出masterkey漏洞(cve-2013-4787),已經(jīng)安裝的正常app可能在不知情的狀況下被偷換成惡意軟件;另一個(gè)攻擊是叫做backdoor.androidos.obad的惡意軟件,運(yùn)用類似后門程序與rootkits的手法,透過操作系統(tǒng)漏洞──root與裝置管理者的權(quán)限,取得整臺(tái)android裝置的權(quán)限;而蘋果的行動(dòng)裝置平臺(tái)ios6也傳出安全漏洞,若iphone或ipad接上黑客所改造、特制的充電座,這個(gè)弱點(diǎn)將會(huì)授與對(duì)方完整存取這個(gè)設(shè)備的權(quán)限。
有些漏洞則可以影響任何行動(dòng)裝置操作系統(tǒng)平臺(tái),因?yàn)閱栴}出在跟所連接的周邊裝置有關(guān),例如行動(dòng)裝置搭配的sim卡,當(dāng)中所采用的舊型加密系統(tǒng)有程序臭蟲,黑客只需傳送sms簡訊到這臺(tái)裝置,即可觸發(fā)裝置錯(cuò)誤,進(jìn)而釋出56位長度的安全密鑰,而這把密鑰可以觸發(fā)下載惡意的java applet,以便散播簡訊和位置監(jiān)控等惡意行為。
到了今年3月,趨勢(shì)科技發(fā)現(xiàn)了一個(gè)針對(duì)android 4.0以上版本的系統(tǒng)漏洞,它要是遭到有心人士濫用,可能會(huì)造成系統(tǒng)不斷重新啟動(dòng)的狀態(tài),如此等于讓行動(dòng)裝置應(yīng)提供的各種功能處于失效狀態(tài),無法操作、通話。同月,又出現(xiàn)了另一個(gè)自定權(quán)限漏洞,它讓app能夠讀取其他app所保護(hù)的數(shù)據(jù),而這可能會(huì)導(dǎo)致機(jī)密外泄。
ios和mac os x今年初也出現(xiàn)安全漏洞cve-2014-1266,這是跟ssl/tls加密聯(lián)機(jī)有關(guān)的弱點(diǎn),攻擊者可能擷取或修改聯(lián)機(jī)過程中所傳輸?shù)臄?shù)據(jù),問題在于傳輸時(shí)并未驗(yàn)證聯(lián)機(jī)的真實(shí)性。若未修補(bǔ)這項(xiàng)漏洞,蘋果的行動(dòng)裝置在連上因特網(wǎng)時(shí),有可能因此受到監(jiān)聽及聯(lián)機(jī)挾持。
該漏洞影響的操作系統(tǒng)版本算是不少,包括ios 6到6.1.4、ios 7到7.0.5、mac os x 10.9和10.9.1,以及apple tv 6.0和6.0.1。后來,蘋果為此陸續(xù)發(fā)出ios 7.0.6、mac os x 10.9.2和apple tv6.0.2的安全更新檔。
程序代碼少了括號(hào),系統(tǒng)安全性竟然就破功?
從上述來看,應(yīng)用程序的安全漏洞太多了,從個(gè)人計(jì)算機(jī)、服務(wù)器,現(xiàn)在連云端服務(wù)、行動(dòng)裝置也都遭殃,簡直是野火燒不盡,春風(fēng)吹又生,然而真的每一個(gè)問題都無法事先預(yù)防嗎?不能在軟件開發(fā)的過程中,就及早發(fā)現(xiàn)問題并解決掉嗎?
其實(shí)這是可以做到的,有的程序臭蟲之所以產(chǎn)生,甚至只是因?yàn)橐恍┬∈韬鏊斐桑懊嫣岬降膇os和mac os x漏洞cve-2014-1266,就是典型的例子,一些專家追本溯源后發(fā)現(xiàn),原本的程序代碼只是少了一個(gè)括號(hào),若加上去,程序運(yùn)作就安全了。
這個(gè)操作系統(tǒng)的安全性弱點(diǎn)很特別,很多人都叫它「goto fail」漏洞,因?yàn)椋P(guān)鍵在這兩種操作系統(tǒng)數(shù)據(jù)安全組件securetransport安全傳輸功能的sslkeyexchange.c程序代碼當(dāng)中,一支sslverifysignedserverkeyexchange函式寫錯(cuò)了,里面有兩行的goto fail敘述緊接著執(zhí)行,第一個(gè)goto fail是正確的,它對(duì)應(yīng)到if敘述,但第二個(gè)goto fail就不是條件式,不論前面的if條件式是否成立,程序代碼總是會(huì)執(zhí)行到第二個(gè)goto fail,也就是回傳err,而且也不會(huì)執(zhí)行sslrawverify函式。
接下來會(huì)發(fā)生什么事?google資深軟件工程師adam langley在他的部落格《imperialviolet》上,透過〈apple's ssl/tls bug〉這篇文章,提出了進(jìn)一步解釋。他認(rèn)為,這里的err將會(huì)包含1個(gè)值,因?yàn)閟ha1更新作業(yè)會(huì)順利完成,所以,驗(yàn)證簽署的作業(yè)永遠(yuǎn)不會(huì)失敗。
此外,這個(gè)驗(yàn)證簽署的作業(yè)會(huì)檢查serverkey exchange傳輸訊息的簽名,這會(huì)用在dhe和ecdhe的ciphersuites加密演算集,讓聯(lián)機(jī)能與臨時(shí)密鑰(ephemeral key)溝通,服務(wù)器可以藉由自身憑證的暫時(shí)密鑰和簽署,讓客戶端知道聯(lián)機(jī)是從這邊而來的。然而,如果臨時(shí)密鑰和憑證煉(certificate chain)之間的連結(jié)斷了,一切的驗(yàn)證和信任關(guān)系將會(huì)面臨崩壞。因?yàn)椋谶@樣的環(huán)境下,服務(wù)器端有可能送出一個(gè)正確的憑證煉給客戶端,卻是以錯(cuò)誤的私鑰來簽署交握,或者根本就不用簽署就可驗(yàn)證聯(lián)機(jī),服務(wù)器無法證明它的憑證里面擁有與公鑰匹配的私鑰。
基本上,這個(gè)安全漏洞會(huì)影響任何使用securetransport的系統(tǒng),但不包括chrome和firefox,因?yàn)樗鼈兌际褂胣ss for ssl/tls,然而,這意義不大,因?yàn)楦讓拥牟僮飨到y(tǒng)軟件更新機(jī)制仍然是用securetransport來進(jìn)行。同時(shí),這個(gè)程序臭蟲,也會(huì)影響任何使用dhe或ecdhe的cipher suites加密算法的站臺(tái)。
該漏洞倒是不會(huì)影響tls 1.2,因?yàn)樵诋?dāng)中負(fù)責(zé)驗(yàn)證serverkeyexchange訊息的函式是不同的,然而,為了讓客戶端能接受該訊息,攻擊者還是可以自行挑選任何的tls版本。一旦客戶端只啟用tls 1.2,就會(huì)解決這個(gè)問題,同樣地,如果客戶端只選擇完全以簡單的rsa演算集,也就等于沒有進(jìn)行serverkeyexchange的作業(yè),此時(shí),也可以解決該漏洞。
這類的臭蟲一旦出現(xiàn),要如何偵測(cè)出來呢?adam langley說,若在蘋果的軟件開發(fā)工具平臺(tái)xcode編譯這段程序代碼時(shí),可以加上-wall的參數(shù)來啟用所有警示,可以隱約看見出問題的程序代碼段落(即便不是使用2013年發(fā)布的gcc 4.8.2或clang 3.3)。因此,他認(rèn)為若有更明顯的警示,將有助于及時(shí)發(fā)現(xiàn)這個(gè)問題,但這么一來,對(duì)于整體程序代碼也會(huì)產(chǎn)生誤報(bào)率太高的狀況。
相較于每隔一陣子就撲天蓋地而來的各種應(yīng)用程序安全漏洞信息,蘋果爆出這個(gè)嚴(yán)重危害ssl安全傳輸功能的操作系統(tǒng)漏洞,雖然只是滄海一粟,乍看之下,它似乎是個(gè)離譜的微小錯(cuò)誤,卻能讓網(wǎng)絡(luò)傳輸不再安全,同時(shí),這個(gè)紕漏可能有許多開發(fā)人員就算用人工方式逐行檢查,未必能一眼識(shí)出,而且,就算透過整合式開發(fā)工具,或是程序代碼安全檢測(cè)工具,也不一定能偵測(cè)出來。
此外,也幸好有蘋果愿意開放部分版本的系統(tǒng)程序代碼,還有發(fā)掘出該問題的資安專家,外界才有機(jī)會(huì)更全面地了解這樣的問題何以發(fā)生,并進(jìn)行充分的討論,從而學(xué)到教訓(xùn),不再重蹈覆轍。雖然類似這樣的漏洞、甚至更難以發(fā)現(xiàn)的漏洞,未來可能還是會(huì)出現(xiàn),但認(rèn)真研究過這種問題的開發(fā)人員,想必將更有機(jī)會(huì)消弭掉這類漏洞。
除此之外,我們也必須意識(shí)到應(yīng)用程序漏洞遭到濫用的方式,也在轉(zhuǎn)變。
例如,讓許多網(wǎng)站管理者都相當(dāng)頭痛的目標(biāo)式攻擊,黑客通常會(huì)設(shè)法尋找、利用網(wǎng)站的漏洞,以便取得系統(tǒng)控制權(quán),并在站內(nèi)植入惡意軟件,以便感染瀏覽網(wǎng)站的用戶計(jì)算機(jī)。
而根據(jù)賽門鐵克4月發(fā)布的最近一期全球網(wǎng)絡(luò)安全威脅研究報(bào)告(internet security threat report,istr),就2013這一整年而言,最常被有心人士利用的網(wǎng)站弱點(diǎn)是ssl與tls網(wǎng)絡(luò)安全傳輸協(xié)議的會(huì)談重建程序漏洞(ssl and tls protocol renogotiation),這幾年以來,有不少攻擊事件都跟這有關(guān),例如diginotar的數(shù)字證書外泄、beast攻擊(browser exploit against ssl/tls attack)、ssl會(huì)談重建程序攻擊(ssl renegotiation attack)、crime攻擊,以及l(fā)ucky 13攻擊。
這跟今年爆出的ios、mac os x的ssl漏洞,以及openssl的heartbleed漏洞陸續(xù)被揭露,似乎都有一些關(guān)聯(lián)性,這樣的發(fā)展趨勢(shì),軟件開發(fā)人員和資安人員需多加留意。