普羅米修斯解密工具:運作原理與如何操作解密

Prometheus 解密器操作方式

今年奧義參與了數起與普羅米修斯勒索軟體 (Prometheus Ransomware) 有關的事件調查,內部研究團隊亦針對此勒索軟體進行逆向工程,以便更深入地瞭解該攻擊的行動。研究過程中,我們發現了能夠復原部分被加密檔案的方法,並開發出本篇文章所分享的工具。

於此同時,我們也將內部開發的 Prometheus Decryptor 分享出來,希望能在一定程度上協助更多受害者的檔案恢復,相關的使用方式等內容完整記載於本文中,也歡迎各位分享轉載!

看奧義 GitHub
立刻下載


簡易使用說明

我們為 Windows 作業系統的使用者提供了圖像化使用介面 (Graphical User Interface, GUI),並且 GUI 可支援此解密器的所有功能。若您對使用命令列指令較不熟練,可以直接依照下列步驟來操作 GUI,並將被普羅米修斯所加密的檔案解密還原:

  1. 選擇您想要解密的檔案或資料夾
  2. 選擇輸出檔案的名稱或目的資料夾
  3. 點選「Use thread」(使用執行緒),PC 建議填入 2 至 4,使用執行緒一般而言可加速解密過程,但實際情況仍因 CPU 核心數而有所不同
  4. 點選「Decrypt」(解密)
  5. 介面中有一個計數器,會顯示目前正在嘗試的系統執行時間 (Tickcount)
  6. 解密的結果將會顯示在介面最下方的文字區塊中,由於可能有多個不同的密鑰 (Key),因此解密流程會持續尋找更多可能的密鑰,您可以點選「Next One」來跳過目前執行中的檔案


關於 Prometheus 勒索組織

近期崛起的勒索組織 Prometheus(普羅米修斯)在今年六月時因 Unit42 的研究報告而備受關注,在 Unit42 針對組織超過 4 個月的持續觀察中,發現到逾 30 個相關受害者,範圍遍及美國、英國,以及位於亞洲、歐洲、中東與北美等區域的數十個國家。而曾被 Prometheus 組織攻擊的企業,則包含政府、金融、製造、物流、農業、醫療、保險、能源、顧問、法律等許多不同產業。

Prometheus 宣稱自己是隸屬於被認為曾攻擊過台灣電腦公司 Acer 的駭客組織 REvil,然而,從 Prometheus 的攻擊行為與程式碼內容來看,事實上他們與 Thanos 有著更高的相似性。REvil 在今年七月對美國託管軟體公司 Kaseya 發動大規模供應鏈攻擊,使上千家公司遭遇勒索,並要求共逾 7,000 萬美元(約台幣 19 億 7,120 萬元)比特幣贖金。


關於可能為 Prometheus 前身的 Thanos

Thanos 最早在 2020 年時被發現,並因其高達 43 種不同的設定選項,且是首個使用以 RIPlace 為名的規避技術 (Evasion techinique) 的勒索軟體,而使其惡名廣為人知。

RIPlace 在 2019 年時被資安廠商揭露,能夠繞過包含防毒軟體與特定 EDR 解決方案在內,一部分針對勒索軟體的防禦機制,而該新型技術被揭露後,很快地在幾個月內便於野外出現蹤影,並被實際運用在攻擊中。

與許多在勒索軟體即服務 (Ransomware-as-a-Service, RaaS) 的市場中活動的勒索軟體一樣,Thanos 的程式碼也確實擁有和其他勒索軟體重疊的部分,尤其是和 Hakbit 有較高的重複性。然而,Thanos 也具備了客製化的內容,並似乎依然在積極開發中。


使用 Prometheus Decryptor
運作模式

普羅米修斯勒索軟體是利用 Tickcount 作為隨機種子 (Random seed) 來生成密鑰的 Salsa20 加密,隨機密鑰的長度為 32 Bytes,且所有的字元都是可顯示的字元。由於利用了系統的 Tickcount 來生成密鑰,我們可以透過暴力破解的方式來猜出密鑰。

Build
make win32    # windows 32 bits
make win64    # windows 64 bits
make linux    # linux
make win32GUI # windows 32 bits GUI (built on windows)
make win64GUI # windows 64 bits GUI (build on windows)
Command Arguments
Usage of ./bin/prometheus_decrypt:
	-b string
		Custom search with byte value. (i.e. \xde\xad\xbe\xef -> deadbeef)
        Please use ?? to match any byte (i.e. de??beef)
    -c    Use current tickcount. (only support in Windows)
    -e string
    	Search file extension.
    -f int
    	Found candidate. (default 1)
    -i string
    	Input encrypted file.
    -k string
    	Decrypt with this key.  
    -m int
        Move backward m minutes from the current decrypted seed when guessing the next sample. (default 30)
    -o string
    	Output decrypted file.
    -p int
        Use n thread. (default 1)
    -r    Reversed tickcount.
    -s string        
        Custom search with regular expression.
    -t int
        Start tickcount.
Brute force the random seed

以下範例為針對一個 png 檔案,從 tickcount 0 開始嘗試找出生成密鑰的隨機種子。

./prometheus_decrypt -i ./sample/CyCraft.png.PROM\[prometheushelp@mail.ch\] -o ./output/CyCraft.png -e png -p 16

在這個指令中,有四個引數:

  • i: 輸入被加密的檔案
  • o: 輸出檔案
  • e: 搜尋檔案格式
  • p: thread count
Reversed Tickcount

以下範例為針對一個 png 檔案,從 tickcount 100000 開始往回嘗試找出生成密鑰的隨機種子。

./prometheus_decrypt -i ./sample/CyCraft.png.PROM\
[prometheushelp@mail.ch\] -o ./output/CyCraft.png -e png -p 16 -t 100000 -r

相較前一種有兩個額外的引數:

  • t: 從 100000 開始
  • r: 代表從 100000 向 0 往回數
Brute force the random seed from current tickcount (only for Windows)

以下範例為針對一個 png 檔案,從當前的 Tickcount 開始嘗試找出生成密鑰的隨機種子,這個功能通常在使用時會是往回數。

./prometheus_decrypt -i ./sample/CyCraft.png.PROM\
[prometheushelp@mail.ch\] -o ./output/CyCraft.png -e png -p 16 -c -r

這邊也有一個額外的引數:

  • c: 代表從目前的 Tickcount 開始
Decrypt (Encrypt) with a key

提供一個密鑰來進行加密或解密。

./prometheus_decrypt -i ./sample/CyCraft.png.PROM\
[prometheushelp@mail.ch\] -o ./output/CyCraft.png -k "+@[%T-mZSh+E[^^i{W:dpwnhdL4<b8D4}]]"

此處也有一個額外的引數:

  • k: 提供加密或解密的密鑰
Brute force the random seed with custom format

以下範例為針對一個已知字串 “we had another great” 嘗試找出生成密鑰的隨機種子。

./prometheus_decrypt -i ./sample/test.txt.enc -o ./output/test.txt -p 16 -s "we had another great"

新的引數項目:

  • s: 對應到解密檔案的已知字串
Brute force the random seed with custom format (bytes pattern)

針對一個 png 檔案,用十六進位標頭來嘗試找出生成密鑰的隨機種子。

./prometheus_decrypt -i ./sample/test.txt.enc -o ./output/test.txt -p 16 -b '89??4e??0d??1a0a??00'

新引數的相關說明:

  • b: png 檔案的十六進位標頭
  • 十六進位標頭為 8950 4e47 0d0a 1a0a 0000
  • 可以利用 ?? 來對應任何標頭

由於有許多檔案的內容難以用可視字元來呈現,因此,相較於前一項使用已知字串來對應解密是否成功,利用檔案標頭來進行解密流程會更加方便且有效。

Brute force the random seed for a directory

針對一個 png 檔案,用十六進位標頭來嘗試找出生成密鑰的隨機種子。

./prometheus_decrypt -i ./sample -o ./output -p 16 -m 1 -f 2

此處有兩項新的引數:

  • m: 破解下一個樣本時,從現在使用的解密 Random seed 往回調 m 分鐘,預設值為 30
    seed-m*60*1000 做為下一輪暴力破解時的起始 Tickcount
  • f: 候選數量,預設值為 1
    對應每個檔案可能會有幾個不同的 Random seed 可能性的候選,透過這項引數可以限制最大的候選數量,來加速流程的進行

考慮到有大量的檔案需要進行解密,使用者可以按 Ctrl-c 來跳過目前正在破解中的檔案。


輸出結果

解密時我們會檢查檔案標頭的 Magic number,不過就算是使用錯誤的密鑰,也可能會算出正常的 Magic number,因此,我們的做法是會繼續試下一組密鑰並繼續執行解密流程。然而,當使用者確定已解密的檔案正確無誤後,可以隨時終止這個流程。

% ./prometheus_decrypt -i ./sample/test.txt.enc -o ./output/test.txt -p 16 -s "we had another great" 
Decrypt file with seed 615750, key: +@[%T-mZSh+E[^^i{W:dpwnhdL4<b8D4, path: ./output/615750_test.txt 2795306...

可支援的檔案類型

我們利用工具來檢查各種檔案類型的標頭的 Magic number,以下是解密器可支援的檔案類型:

圖像
  • jpg — image/jpeg
  • png — image/png
  • gif — image/gif
  • webp — image/webp
  • cr2 — image/x-canon-cr2
  • tif — image/tiff
  • bmp — image/bmp
  • heif — image/heif
  • jxr — image/vnd.ms-photo
  • psd — image/vnd.adobe.photoshop
  • ico — image/vnd.microsoft.icon
  • dwg — image/vnd.dwg

影片
  • mp4 — video/mp4
  • m4v — video/x-m4v
  • mkv — video/x-matroska
  • webm — video/webm
  • mov — video/quicktime
  • avi — video/x-msvideo
  • wmv — video/x-ms-wmv
  • mpg — video/mpeg
  • flv — video/x-flv
  • 3gp — video/3gpp

音訊
  • mid — audio/midi
  • mp3 — audio/mpeg
  • m4a — audio/m4a
  • ogg — audio/ogg
  • flac — audio/x-flac
  • wav — audio/x-wav
  • amr — audio/amr
  • aac — audio/aac

檔案
  • epub — application/epub+zip
  • zip — application/zip
  • tar — application/x-tar
  • rar — application/vnd.rar
  • gz — application/gzip
  • bz2 — application/x-bzip2
  • 7z — application/x-7z-compressed
  • xz — application/x-xz
  • zstd — application/zstd
  • pdf — application/pdf
  • exe — application/vnd.microsoft.portable-executable
  • swf — application/x-shockwave-flash
  • rtf — application/rtf
  • iso — application/x-iso9660-image
  • eot — application/octet-stream
  • ps — application/postscript
  • sqlite — application/vnd.sqlite3
  • nes — application/x-nintendo-nes-rom
  • crx — application/x-google-chrome-extension
  • cab — application/vnd.ms-cab-compressed
  • deb — application/vnd.debian.binary-package
  • ar — application/x-unix-archive
  • Z — application/x-compress
  • lz — application/x-lzip
  • rpm — application/x-rpm
  • elf — application/x-executable
  • dcm — application/dicom
文件
  • doc — application/msword
  • docx — application/vnd.openxmlformats-officedocument.wordprocessingml.document
  • xls — application/vnd.ms-excel
  • xlsx — application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  • ppt — application/vnd.ms-powerpoint
  • pptx — application/vnd.openxmlformats-officedocument.presentationml.presentation

字體
  • woff — application/font-woff
  • woff2 — application/font-woff
  • ttf — application/font-sfnt
  • otf — application/font-sfnt

應用程式
  • wasm — application/wasm
  • dex — application/vnd.android.dex
  • dey — application/vnd.android.dey

後續行動

本文的原文版本於 2021 年 7 月中旬發布,我們所開發的解密工具 Prometheus Decryptor 首度對外開源分享,並且於當時受到國內外各方的關注。其中,在一篇由 Catalin Cimpanu 所撰寫的報導中,進一步地指出在 7 月 13 日奧義文章發表的當天,恰巧也是普羅米修斯組織在暗網上有所活動的最後一天,在那之後的半個多月內,該組織沒有新的行動、看似已暫停了其攻擊行為。

由此可推測,奧義開發的 Prometheus Decryptor 或許對普羅米修斯組織造成了一定的影響。

而後,奧義智慧也向國際知名的 No More Ransom 計畫提出加入申請,並正在申請 Associate 合作夥伴的資格。未來,我們將持續關注並針對更多勒索軟體進行深入研究,免於讓更多的企業受勒索攻擊所苦,積極協助客戶提升資安防禦韌性。


看奧義 GitHub
立刻下載

Writer: CyCraft

關於 CyCraft

奧義智慧科技(CyCraft Technology)是一家專注於 AI 自動化技術的資安科技公司,成立於2017年。總部設於台灣,在日本和新加坡均設有子公司。為亞太地區的政府機關、警政國防、銀行和高科技製造產業提供專業資安服務。獲得華威國際集團(The CID Group)和淡馬錫控股旗下蘭亭投資(Pavilion Capital)的強力支持,並獲得國際頂尖研究機構 Gartner、IDC、Frost & Sullivan 的多項認可,以及海內外大獎的多次肯定。同時也是多個跨國資安組織和台灣資安社群的成員和合作夥伴,長年致力於資安產業的發展。

訂閱奧義智慧電子報

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
點擊此按鈕,即表示您同意奧義智慧的隱私權政策,並同意奧義智慧使用您所提供的資訊並寄送資訊給您。您隨時可以取消訂閱。