讓人聞風喪膽的勒索病毒是如何運作的?

前些日子在客戶端又遇到了勒索病毒的攻擊,還好被攻擊的主機並非重要主機而且有備份資料,否則若是為了還原文件付了大筆贖金還要擔心能否真的救回資料。

 

從下圖可以看出來,C:\Windows\mssecsvc.exe 就是典型的WannaCry 勒索病毒之主要程式之一(這是從知名的MDR軟體 T5 所偵測到的結果)

 

既然勒索病毒如此可怕,在被攻擊之後,到底有沒有解救的方法呢? 我們就來從這些勒索病毒中檔案加解密的原理,來了解為什麼這些病毒這麼難纏,並給出一些“破解”的可能性。

 

勒索病毒運作原理:

這類病毒都利用了公鑰加密來加密檔案。關於公鑰加密原理和實現網路上有很多文章,可以去請教谷歌大師,這裡不再贅述。

 

有的病毒使用RSA加密(比如前文所提的WannaCry病毒),有的使用橢圓曲線加密(比如CTB Locker),以下簡稱ECC。本文主要講解使用橢圓曲線加密的方式。

 

ECC的優勢在於,相比RSA加密,達到同樣強度的金鑰要短得多,要達到128位AES的加密強度,RSA金鑰長度需要3072位,而ECC只需要256位。對於病毒來說,體積越小越隱蔽越容易傳播,公鑰自然是越短越好了。但是相應的RSA實現更加簡單,更加易用。

 

DH(Diffie–Hellman金鑰交換)

DH(Diffie–Hellman key exchange)通常用於通訊中雙方協商金鑰。利用公鑰系統的特性,雙方只需要向對方公佈自己的公鑰,即可得到同一個只有雙方知道的共享金鑰。

 

假設小A跟小B進行一次DH,實際流程是:

小A生成私鑰x和公鑰gx

小A公佈公鑰(g,gx)

小B生成私鑰y和公鑰gy

小B公佈公鑰(g,gy)

小A計算共享金鑰s=(gy)x=gxy

小B計算共享金鑰s=(gx)y=gxy

 

至此,流程結束,雙方都得到了相同的共享金鑰s。

 

需要注意上面的計算用到的並不是我們平常使用的實數域上的指數運算,如果是實數域上的指數運算,我們可以很方便地對公鑰取對數,從而得到私鑰。它們是在有限域內進行的,所以不能通過簡單地對公鑰求對數來得到私鑰,這也是所謂的公鑰系統中的離散對數難題,DH的安全性即由此保證。

 

而ECDH(Elliptic Curve Diffie–Hellman key exchange)則是基於橢圓曲線離散對數問題。

 

CTB Locker病毒中ECDH應用

首先,病毒作者自己生成一對橢圓曲線金鑰對,分別稱為主公鑰(master public)和主私鑰(master private),然後把主公鑰寫到病毒中,主私鑰儲存在作者自己的電腦上。

 

病毒執行時,搜尋硬碟中特定字尾名的檔案(比如doc、xls、pdf等),每找到一個檔案,首先採集檔案建立時間、系統環境等資訊,藉助這些資訊生成一個會話私鑰(session private),然後根據會話私鑰生成會話公鑰(session public)。

使用會話私鑰和主公鑰,進行ECDH得到共享金鑰(shared secret),對共享金鑰計算SHA-256摘要,得到AES金鑰,使用AES金鑰對檔案進行加密並寫回硬碟,同時向加密後的檔案寫入會話公鑰,最後刪掉原檔案,可以看到,硬碟上最後儲存的只有病毒自帶的主公鑰,每一個檔案的會話公鑰,以及被加密的檔案內容。想要解密,唯一的辦法就是使用檔案的會話公鑰和病毒作者的主私鑰進行ECDH,得到共享金鑰。

 

破解方法:想直接解密檔案內容基本不可能!

 

病毒使用的加密方案都是目前成熟的解決方案,只要實現沒有明顯漏洞,就不可能被破解,實際上常見的勒索病毒(CTB Locker,WannaCry等)目前都沒有被破解。

 

但是要找回檔案可以從兩個方面入手:

 

1.病毒刪除檔案後往往沒有對原檔案進行覆蓋操作,使用資料恢復軟體或者找專門的資料恢復機構有一定機率能找回原檔案。目前很多宣稱能找回WannaCry病毒加密檔案的工具都是這種方式。

2.在Windows XP SP2及以下版本的系統中,隨機數產生器存在漏洞,在產生隨機數後隨機數會被保留在記憶體中,於是可以通過讀取記憶體的方式將裡面的隨機數讀出來,從而獲得會話私鑰,解密檔案。這個方法只對使用系統隨機生產生器的病毒有效,而且對系統版本有要求,中毒後機器也不能重啟過。

 

今天舉的案例中被勒索病毒攻擊成功的主要原因是並未安裝微軟MS17-010 Patch,目前一般電腦只要有作定期的進行Windows Update,通常不會遭受WannaCry的攻擊,但是駭客日益求精,就像COVID-19一樣,已經進行了多次的變種,要想避免被勒索病毒攻擊,除了定期更新之外,也要提昇資安觀念,不開啟不明信件及點擊不明連結,才能倖免於難。