亚洲日本免费-啊轻点灬太粗太长了三男一女-麻豆av电影在线观看-日韩一级片毛片|www.grbbt.com

騰訊馬勁松:WannaCry病毒事件的反思

 

馬勁松,騰訊安全反病毒實(shí)驗(yàn)室的負(fù)責(zé)人,實(shí)驗(yàn)室主要是做TAV殺毒引擎的研發(fā)和運(yùn)維,加入騰訊之前在瑞星工作

本文是對(duì)于WannaCry事件的一些反思。

小病毒 大影響

WannaCry病毒爆發(fā)在一夜之間產(chǎn)生了非常大的社會(huì)影響,“勒索”“比特幣”“暗網(wǎng)”等關(guān)鍵詞在一夜之間耳熟能詳。

我們先簡(jiǎn)單的回顧一下勒索軟件的歷史。最早可以追溯到1989年,真正的有一個(gè)歷史標(biāo)志性的事件實(shí)際上是在2013年,2013年的時(shí)候,真正的是勒索軟件和比特幣結(jié)合起來(lái)了。當(dāng)勒索軟件和比特幣結(jié)合之后,真的形成了一個(gè)有大力可圖的黑色產(chǎn)業(yè)。在2017年5月12日以前,勒索軟件只是個(gè)小眾的關(guān)鍵詞,而此次的WannaCry事件是勒索軟件被大眾所熟知。

其實(shí)國(guó)內(nèi)敲詐病毒也是在嘗試階段,比如這個(gè)上面提到的Windows的敲詐,這應(yīng)該是在兩年以前的一個(gè)病毒。這一頁(yè)是一個(gè)手機(jī)敲詐,其實(shí)大家如果細(xì)看的話可以看到,里面都有一個(gè)QQ號(hào),因?yàn)樗锩嬗幸粋€(gè)很大的問(wèn)題不能解決,就是支付問(wèn)題。就是你敲詐,把別人鎖定了,怎么收復(fù)贖金呢?這是一個(gè)很麻煩的事情,他們把QQ號(hào)都寫(xiě)在上面了。所以這個(gè)東西,你說(shuō)它是一個(gè)敲詐病毒也好,說(shuō)是一個(gè)惡作劇其實(shí)更確切一些。因?yàn)閷?xiě)了QQ號(hào),基本上定位你就是分分鐘的事情,我們更認(rèn)為它是一個(gè)惡作劇的東西。

具體到這次WannaCry事件,為什么影響這么大?基本上可以歸結(jié)成兩點(diǎn)。第一點(diǎn)就是這次的敲詐勒索病毒和漏洞結(jié)合起來(lái)了,這是一個(gè)質(zhì)量非常好的漏洞,微軟在3月14日已經(jīng)發(fā)了補(bǔ)丁,但是打補(bǔ)丁的時(shí)候大家知道有一個(gè)空檔期,這個(gè)被充分利用了。另外比較重要的原因就是利用方式公開(kāi)了,把整個(gè)完整的利用的辦法都公開(kāi)了,你可以任意的替換里面的組件,想做任何的事情都可以,這個(gè)一公開(kāi)之后,這些作惡者用起來(lái)就非常容易了。地區(qū)個(gè)其實(shí)也是比較重要的,就是這個(gè)漏洞是Windows的系統(tǒng)漏洞,基本上你只要用Windows,它就一定有這個(gè)漏洞,分布很廣。不像某些應(yīng)用漏洞,不裝這個(gè)應(yīng)用或者不開(kāi)啟這個(gè)應(yīng)用就可以規(guī)避這個(gè)漏洞。這個(gè)不是,只要Windows啟動(dòng)了,就一定會(huì)暴露在這個(gè)漏洞之下。第二點(diǎn)影響比較大的就是這次針對(duì)的目標(biāo)是我們PC上的數(shù)據(jù)文件,大家知道,一臺(tái)PC也好,一臺(tái)手機(jī)也好,真正有價(jià)值,有意義的可能是里面的數(shù)據(jù),硬件的成本是固定的,而且隨著摩爾定律,隨著社會(huì)的發(fā)展是越來(lái)越降低的。真正重要的是你的數(shù)據(jù),這次的發(fā)力點(diǎn),破壞的也是你的數(shù)據(jù),大家的感觸非常深,非常疼。鎖定被敲詐之后贖回之路非常漫長(zhǎng),我不知道在座的各位有沒(méi)有人做過(guò)這方面的嘗試,就是真正你點(diǎn)那個(gè)軟件,按它的提示是非常麻煩的,就是國(guó)內(nèi)因?yàn)橐恍┨厥獾木W(wǎng)絡(luò),一些管理的因素,對(duì)于訪問(wèn)暗網(wǎng)都很成問(wèn)題。就是你中招了,想贖回基本上都是沒(méi)有辦法的,很麻煩。如果我們用暴力破解,用技術(shù)手段幾乎是不可解決的,這里打了“幾乎”兩個(gè)字,那就是說(shuō),在某些特殊的情況下,可能還是有一線希望,可能還原回來(lái)的。

具體到這個(gè)漏洞,Shadow Brokers公布這個(gè)漏洞方式是4月中旬,公布之后我們也緊急的利用它的一些信息做了一款漏洞的檢測(cè)工具,可以直接輸入IP或者輸入一個(gè)IP列表進(jìn)行檢測(cè)。這個(gè)工具其實(shí)是有參考代碼,還是很簡(jiǎn)單的。我想說(shuō)的是,這個(gè)工具我們?cè)?月12日之后,5月13日這個(gè)病毒真正爆發(fā)了,應(yīng)該是在上班以后,周一或者是周二的樣子,我們把這個(gè)工具給到了一個(gè)合作單位,不方便說(shuō)這個(gè)單位的名稱。讓他們?nèi)z測(cè)一下內(nèi)網(wǎng)的情況,大家可以看到,這是一個(gè)枚舉,從.1開(kāi)始一直到255,命中率其實(shí)還是很高的,隨便就找到了一個(gè)沒(méi)打補(bǔ)丁的。下面這一張我不知道后面的同事能不能看清,是他們單位里面把知道的IP寫(xiě)到一個(gè)配置文件里面,用這個(gè)工具去掃,基本上是把把中,大家可以看到。回到這一頁(yè)大家也能看到,漏洞的利用方式是公開(kāi)的,分布是很廣的,這就是讓敲打、勒索的這種危害的病毒,實(shí)際上是搭載了一個(gè)非常高效,非常好用的一個(gè)傳播工具,可以快速的進(jìn)行傳播。

剛才分析了病毒為什么影響這么大,因?yàn)樗穆┒捶植己軓V。下面我們來(lái)討論一下關(guān)于破解的一些事情,被勒索以后真的就不能破解嗎?其實(shí)也不完全是這樣。這里面舉了兩個(gè)簡(jiǎn)單的Case,這是我們實(shí)驗(yàn)室曾經(jīng)處理過(guò)的兩個(gè)敲詐的病毒。第一個(gè)是作者實(shí)現(xiàn)的時(shí)候,算法沒(méi)有問(wèn)題,算法在理論層面上是不可逆的。但是在它的具體實(shí)現(xiàn)上,有了一個(gè)小小的瑕疵,找到了一個(gè)破解的辦法,就是把它的破解強(qiáng)度一下子降低了很多。Tesla這個(gè)東西,因?yàn)橐恍┰颍髡甙袺ey放出去了。舉這兩個(gè)例子是說(shuō)明什么呢?就是我們看起來(lái)一些不可解、不可破的危害或者是樣本,只要追下去,可能就會(huì)有一絲的希望。

具體到這一次的敲詐,有沒(méi)有可能找到曙光?我們也對(duì)整個(gè)加密流程做了一個(gè)詳細(xì)的分析,簡(jiǎn)單的在這里進(jìn)行了一下整理。這是一個(gè)加密流程,作者會(huì)把一個(gè)公鑰放出來(lái),在本機(jī)里面,在每一臺(tái)中招的機(jī)器上面會(huì)生成一個(gè)RSA的公密鑰,還有一個(gè)使AES,會(huì)把AES隨機(jī)的密鑰用生成的RSA的私鑰加密起來(lái)。對(duì)應(yīng)生成的這個(gè)RSA的公鑰,用病毒做的公鑰加密起來(lái),這樣形成的加密鏈導(dǎo)致是不可破解的。這張圖如果大家熟悉SSL通訊的,可能也能看到,跟這個(gè)也是比較像的,你在建立一個(gè)SSL通訊的時(shí)候,基本上也是先通過(guò)證書(shū)拿到一個(gè)確認(rèn)的公鑰,然后進(jìn)行后面的流程。

我們重點(diǎn)關(guān)注的是在這里,生成本地的RSA私鑰的時(shí)候。大家看AES,這是一個(gè)對(duì)稱加密的,這個(gè)密鑰是一串隨機(jī)的數(shù),生成之后,這個(gè)數(shù)拿到下面去用了,再去碰這個(gè)數(shù)的機(jī)會(huì)實(shí)際上在算法里面是不多的,會(huì)把它拆解來(lái)使用,從產(chǎn)生到使用流程非常簡(jiǎn)短,所以在AES這個(gè)部分,找到漏洞的可能性是非常小的。但是在RSA這邊不是,RSA要能夠產(chǎn)生出來(lái)一個(gè)可用的公司鑰,其實(shí)還是會(huì)經(jīng)過(guò)幾步的過(guò)程,我后面會(huì)提到。在這幾步的過(guò)程當(dāng)中,某一步如果在具體實(shí)現(xiàn)的時(shí)候有瑕疵和漏洞,還是會(huì)可能被利用到。

這里可能要簡(jiǎn)單的回顧一下RSA的算法。這個(gè)我就不詳細(xì)的去讀這個(gè)東西了,總之有幾個(gè)關(guān)鍵點(diǎn),就是首先要有兩個(gè)大的素?cái)?shù)P和Q做下面的運(yùn)算。最關(guān)鍵的大家看這句話,當(dāng)你產(chǎn)生了一對(duì)公鑰和一對(duì)私鑰之后,一定要把P和Q銷毀掉,這是很關(guān)鍵的。如果有一個(gè)沒(méi)有銷毀,用N除以那個(gè)數(shù),這兩個(gè)質(zhì)數(shù)就拿到了。拿到了兩個(gè)質(zhì)數(shù),整個(gè)RSA的加密體系就能夠破解掉。下面這張表格是我在網(wǎng)上找到的,我覺(jué)得這個(gè)可能是目前為止我看到的解釋最清楚的一個(gè)RSA的加解密的算法。所以我們也是在想,在整個(gè)RSA使用的過(guò)程中,有沒(méi)有可能有漏洞或者有缺陷能被我們利用呢?那幾天我們的同事一直在做這一方面的逆向,這種研究工作,終于看到了轉(zhuǎn)機(jī)。

我特別打了一個(gè)標(biāo)題,向Adrien這個(gè)人表示敬意,他把他研究的成果及時(shí)的公開(kāi)了,讓我們很多人的工作速度和進(jìn)程加快了很多。在他公開(kāi)的文檔里面,其實(shí)比較重要的是下面我打橫線的這兩句。簡(jiǎn)單來(lái)說(shuō),就是說(shuō)Windows Crypt的API在具體實(shí)現(xiàn)的時(shí)候,在XP這個(gè)版本上沒(méi)有把質(zhì)數(shù)清除,在內(nèi)存里面還是存在的,有一定的可能性,就是只要這個(gè)進(jìn)程不做其他的事情了,通過(guò)枚舉可能還是有辦法的,這是很關(guān)鍵的一點(diǎn)。這里有一個(gè)很大的條件,就是在XP系統(tǒng)上,我們后來(lái)在Win7、Win10上都做了反復(fù)的驗(yàn)證,發(fā)現(xiàn)這個(gè)Key其實(shí)是被很好的清除掉了。這里其實(shí)也有一個(gè)比較有意思的事情,就是我們的同事在逆向WannaCry的時(shí)候,發(fā)現(xiàn)這個(gè)是非常高明的,很多人也有逆向的愛(ài)好和能力,非常建議大家能夠去逆向一下這個(gè)Windows Crypt的API,那個(gè)實(shí)現(xiàn)還是非常嚴(yán)謹(jǐn)?shù)摹?/p>

破解流程。

會(huì)在整個(gè)加密進(jìn)程的空間里面搜索所有的內(nèi)存,每次讀取128個(gè)字節(jié),大家可以算一下,乘以8正好是1024。他每次會(huì)讀128個(gè)字節(jié),先假定它就是那個(gè)質(zhì)數(shù)。最精彩的是在這里,怎么判斷這128個(gè)字節(jié)是一個(gè)質(zhì)數(shù)呢?他算了一下熵值,這是非常高明的。因?yàn)榇蠹抑溃阋欢?分的熵值這個(gè)速度是非常快的,如果熵值大于0.8,也就是說(shuō)這一段內(nèi)存是比較混亂的,他認(rèn)為就是質(zhì)數(shù)了。如果它是質(zhì)數(shù)了怎么辦?后面就去看,再確認(rèn)一下是不是真的是素?cái)?shù),然后對(duì)PE×Q那個(gè)大N做一下除法。我的同事后來(lái)發(fā)現(xiàn),在新的版本里面已經(jīng)把這個(gè)去掉了,Block是不是質(zhì)數(shù)這個(gè)判斷已經(jīng)去掉了,因?yàn)榍懊婵快刂颠@個(gè)辦法已經(jīng)能夠比較快的判定一個(gè)大數(shù)是不是質(zhì)數(shù)了。如果能正除,那就找到了這個(gè)質(zhì)數(shù)。剛才提到了,放到外面的公鑰是E和N,私鑰是D跟N,E是P×Q,都找到了,整個(gè)加密的東西就已經(jīng)全部解開(kāi)了。這是截屏的過(guò)程,非常精彩,大概試了3次,就找到了這個(gè)P。找到之后,后面的整個(gè)流程就非常的規(guī)范了。

在整個(gè)Adrien公開(kāi)的代碼過(guò)程當(dāng)中,有兩點(diǎn)是值得注意的,如果不認(rèn)真的讀代碼,對(duì)于加解密這一塊沒(méi)有比較深厚的積累,可能也不太容易發(fā)現(xiàn)問(wèn)題。在公開(kāi)的代碼里面,第一版把OpenSSL里面,有一套加密的算法庫(kù),大家可能都知道,剛才公開(kāi)的代碼第一版的時(shí)候,找到了那個(gè)素?cái)?shù),后面使用的過(guò)程當(dāng)中,是按照OpenSSL規(guī)范使用的,而不是按照Windows Crypt使用的,就導(dǎo)致后面質(zhì)數(shù)的使用過(guò)程當(dāng)中不對(duì),病毒清除的時(shí)候質(zhì)數(shù)沒(méi)法用。這是怎么回事?可能作者一邊調(diào)試一邊做,他發(fā)現(xiàn)找到這個(gè)質(zhì)數(shù)了,可能就沒(méi)有做進(jìn)一步的事情了,代碼就提交了,這是一個(gè)值得注意的點(diǎn)。

代碼里面大量的使用Auto類型,這個(gè)其實(shí)也是新版本,或者C++這種新的規(guī)范,是比較推薦的。就會(huì)導(dǎo)致你的版本如果和他的版本不Match的話,就有可能導(dǎo)致不匹配。他定義的Auto的變量其實(shí)都是一個(gè)大整數(shù)。如果你的邊系和作者的邊系不匹配的時(shí)候,就會(huì)導(dǎo)致大整數(shù)被截?cái)啵竺嫠械木捅黄ヅ涞袅恕_@樣小的瑕疵是無(wú)傷大雅的,并不能夠掩蓋作者的貢獻(xiàn)和超凡的能力,還是要向作者表示敬意。

因?yàn)橛辛俗髡叩呢暙I(xiàn),所以我們的小伙伴在很短的時(shí)間之內(nèi)找到了一個(gè)實(shí)現(xiàn)的方法,這個(gè)也是我們這個(gè)團(tuán)隊(duì)在那一天的時(shí)候,應(yīng)該是5月19日那一天,在全網(wǎng)是首發(fā)了XP版的破解工具。那個(gè)時(shí)候還發(fā)生了一件非常精彩的事情,我們發(fā)了這一條微博之后,別的廠商也快速跟進(jìn),導(dǎo)致微博的操作都出現(xiàn)了一點(diǎn)遲鈍,那天是非常精彩的一個(gè)場(chǎng)景。這是關(guān)于破解這一塊。

如何減少安全的漏洞。這里有三點(diǎn):

一是優(yōu)化關(guān)鍵漏洞檢查機(jī)制,剛才給大家看了,那個(gè)單位里面像篩子一樣的整個(gè)漏洞情況。這里面有一個(gè)很大的問(wèn)題,就是這種安全檢查都是單向的,沒(méi)有交叉檢驗(yàn),只是一個(gè)口徑,比如某個(gè)軟件上報(bào),這是不好的。我們建議后面比如可以搞這種檢測(cè)和模擬攻擊結(jié)合,檢測(cè)發(fā)現(xiàn)打或者是沒(méi)打補(bǔ)丁,這個(gè)沖擊力是非常有限的,但是如果用模擬攻擊這種打進(jìn)去了,或者說(shuō)探測(cè)出來(lái)了,這個(gè)沖擊力是非常強(qiáng)的。所以我們建議,后面能夠有一些更優(yōu)化的檢測(cè)和攻擊手段的結(jié)合。減小攻擊面,其實(shí)大家也能看到,凡是中招的用戶里面,一定是打開(kāi)了445這個(gè)端口,而且在大多數(shù)情況下,其實(shí)445是不用的,大多數(shù)情況下是這樣,當(dāng)然某些局域網(wǎng)的情況下某些文件分享可能會(huì)用到,整體而言使用率是不高的,應(yīng)該把不用的端口關(guān)閉掉,特別是高危的端口,減少攻擊面。

二是作為開(kāi)發(fā)者,就是老老實(shí)實(shí)的啃代碼,認(rèn)認(rèn)真真的看文檔。隨著作者把代碼公開(kāi)出來(lái)了,如果不能一行行的閱讀,理解里面的邏輯就不能發(fā)現(xiàn)問(wèn)題,就是所謂的黑盒測(cè)試一樣去驗(yàn)證,達(dá)不到一個(gè)很好的效果。包括在座的各位也是,很多年輕人,現(xiàn)在這種技術(shù)開(kāi)發(fā)的成本實(shí)際上是非常低的,可能你用到的幾乎所有的算法或者核心功能的代碼在網(wǎng)絡(luò)上都能找到。但是找到之后是不是一行行的去閱讀?這個(gè)其實(shí)是一個(gè)很大的問(wèn)題。通過(guò)認(rèn)真嚴(yán)謹(jǐn)?shù)拈喿x,會(huì)發(fā)現(xiàn)很多變量、實(shí)現(xiàn)細(xì)節(jié)這些邏輯。認(rèn)認(rèn)真真的看文檔也是,剛才我截的那個(gè)截圖,其實(shí)里面的很多信息是MSDN里面已經(jīng)標(biāo)清楚的,已經(jīng)標(biāo)明的。但是很多人閱讀的時(shí)候,可能沒(méi)有這么認(rèn)真,或者是注意到這些細(xì)節(jié),這可能也是技術(shù)從業(yè)人員應(yīng)該具備的一個(gè)基本素質(zhì),就是讀代碼、寫(xiě)代碼的能力和嚴(yán)謹(jǐn)?shù)摹⒑A课臋n的閱讀能力。

三是一些方法論的東西,就是永不放棄。只要有一分希望,那就是百倍努力,你長(zhǎng)期關(guān)注它,長(zhǎng)期去研究它。當(dāng)有一些別人或者同行有一點(diǎn)點(diǎn)進(jìn)展的時(shí)候,你能第一時(shí)間感知到,你能第一時(shí)間把他們的成果和你的積累結(jié)合起來(lái),這樣也會(huì)讓我們的工作能夠取得更大的成效。

上一篇:ADLAB朱錢(qián)杭(大菠蘿):其實(shí)它們近在咫尺

下一篇:騰訊徐少培:瀏覽器地址欄之困