REvil Ransomvér použitý počas kyberútoku na Kaseya

  • štvrtok, júl 15, 2021
Singel-post cover image

Počas nedávneho veľkého ransomvérového útoku útočníci kompromitovali do 1500 spoločností. Tento útok bol jeden z najväčších zaznamenaných kybernetických útokov. Obete boli infikované ransomvérom známym ako REvil, ktorý je podobný rasnomvéru DarkSide použitému pri útoku na Colonial Pipeline. No na rozdiel od prípadov zaznamenaných na začiatku roka 2021, tentokrát bola použitá vzorka REvil ransomvéru oveľa viac obfuskovaná. V tomto článku sa venujeme obfuskačným technikám, ktoré sme videli počas analýzy vzorky REvil ransomvéru použitej pri útoku na spoločnosť Kaseya a jej klientov.

Najskôr útočníci žiadali po útoku výkupné vo výške 70 miliónov dolárov, za ktoré by poskytli univerzálny dešifrovací nástroj pre všetky obete tohto útoku. Neskôr znížili požadované výkupne “len” na 50 miliónov dolárov. Taktiež FBI vydala vyhlásenie o ransomvérovom útoku na Kaseya a spustili vlastné vyšetrovanie tohto incidentu.

Obr. 1: Útočníci žiadajú 50 miliónov USD za univerzálny dešifrovací nástroj. Zdroj: Twitter

Obr. 1: Útočníci žiadajú 50 miliónov USD za univerzálny dešifrovací nástroj. Zdroj: Twitter

Dropper

Útočníci použili falošnú aktualizáciu softvéru Kaseya VSA, súčasťou ktorej bol aj program nazvaný agent.exe (VirusTotal, Any.Run). Tento program po spustení vytvorí dva súbory v adresári %TEMP%; MsMpEng.exe a mpsvc.exe. Následne agent.exe spustí program MsMpEng.exe, ktorý je legitímnym programom Microsoft Malware Protection Antimalware Service, resp. Windows Defender. Toto je však staršia verzia, hoci stále funkčná a navyše je aj digitálne podpísaná Microsoftom.

Obr. 2: Legitímny program MsMpEng.exe podpísaný Microsoftom

Obr. 2: Legitímny program MsMpEng.exe podpísaný Microsoftom

Daný program MsMpEng.exe je zraniteľný na tzv. DLL hijacking. Znamená to, že útočníci môžu spustiť ich škodlivý kód prostredníctvom techniky zvanej DLL side-loading. Program MsMpEng.exe načíta namiesto legitímneho DLL škodlivé z rovnakého adresára, z ktorého je spustený - v tomto prípade %TEMP%. Toto správanie môžeme vidieť v analýze v sandboxe Any.Run spomínanej vyššie.

Obr. 3: DLL Side-Loading: škodlivý mpsvc.dll je načítaný programom MsMpEng.exe

Obr. 3: DLL Side-Loading: škodlivý mpsvc.dll je načítaný programom MsMpEng.exe

Pri bližšom pohľade je však program agent.exe veľmi jednoduchý. Obsahuje v sebe dva zdroje (resources) nazvané MODLIS and SOFTIS. Tieto obsahujú dáta, ktoré sú po spustení agent.exe uložené na disk ako súbory mpsvc.dll a MsMpEng.exe. Po ich uložení agent.exe spustí MsMpEng.exe a ten načíta škodlivý DLL súbor.

Obr. 4: Zdroje (resources) programu agent.exe: MODLIS (mpsvc.dll) a SOFTIS (MsMpEng.exe)

Obr. 4: Zdroje (resources) programu agent.exe: MODLIS (mpsvc.dll) a SOFTIS (MsMpEng.exe)

Obr. 5: agent.exe zapíše MODLIS a SOFTIS do súborov a spustí MsMpEng.exe

Obr. 5: agent.exe zapíše MODLIS a SOFTIS do súborov a spustí MsMpEng.exe

Poznámka: vytvorený súbor mpsvc.dll je trocha väčší (808328 B) ako jeho zdroj MODLIS (807816 B). Program agent.exe zapisuje viac dát do súbora mpsvc.dll. Hoci sú tieto navyše zapísané dáta iba nulové byty, tak ovplyvňujú výsledný hash DLL súbora. Z tohto dôvodu sa vyskytujú v analýzach dva rôzne hashe pre súbor mpsvc.dll

Škodlivé DLL

Škodlivý DLL súbor mpsvc.dll obsahuje obfuskovanú podobu REvil ransomvéru. Najskôr, exportovaná funkcia ServiceCrtMain vytvorí nové vlákno v ktorom spustí tzv. “loader” funkciu.

Obr. 6: Funkcia ServiceCrtMain v škodlivom DLL vytvára nové vlákno.

Obr. 6: Funkcia ServiceCrtMain v škodlivom DLL vytvára nové vlákno.

Loader funkcia dešifruje blok dát (payload), ktoré sú šifrované šifrou RC2 v CFB móde. Na kryptografické operácie je použitá knižnica OpenSSL, ktorá je staticky zlinkovaná v DLL súbore mpsvc.dll.

Zašifrované dáta spolu s obfuskovaným kľúčom na ich dešifrovanie sú uložené v sekcii .data. Pred samotným dešifrovaním loader deobfuskuje dešifrovací kľúč. Použitá metóda obfuskácie je jednoduchá, i-ty znak kľúča je xorovaný číslom i a číslom odvodeným z obfuskovanej podoby kľúča.

Obr. 7: Šifrované dáta a dešifrovací kľúč v dátovej sekcii mpsvc.dll

Obr. 7: Šifrované dáta a dešifrovací kľúč v dátovej sekcii mpsvc.dll

Obr. 8: Deobfuskácia dešifrovacieho kľúča xorovaním jednotlivých znakov

Obr. 8: Deobfuskácia dešifrovacieho kľúča xorovaním jednotlivých znakov

Obr. 9: Loader používa šifru RC2 z OpenSSL na dešifrovanie

Obr. 9: Loader používa šifru RC2 z OpenSSL na dešifrovanie

Po dešifrovaní tohto bloku dát (130048 bytov) ich loader namapuje do pamäte (CreateFileMapping) s prístupovými právami PAGE_EXECUTE_READWRITE, takže ich môže čítať, modifikovať aj vykonávať ako kód. Tieto dešifrované dáta obsahujú validný (shell)kód, ktorý je následne vykonaný. Ešte predtým však loader posunie shellkódu v parametroch ukazovatele na Win32 API volaniaLoadLibrary a GetProcAddress.

Obr. 10: Loader spustí dešifrované dáta

Obr. 10: Loader spustí dešifrované dáta

Dešifrovaný blok dát (payload)

Dešifrovaný blok dát predstavuje dalšiu vrstvu obfuskácie. Obsahuje zabalenú (packovanú) verziu REvil ransomvéru. Stojí za povšimnutie, že napriek svojej škodlivej povahe, tento dešifrovaný blok dát nie je detegovaný žiadnym antivírom v službe VirusTotal. Dokonca aj po uplynutí niekoľkých dní od útoku na klientov spoločnosti Kaseya, obfuskovaný artefakt obsahujúci REvil ransomvér použitý pri útoku je stále nedetegovaný ako škodlivý.

Obr. 11: Dešifrovaný payload s obfuskovaným REvil ransomvérom nie je detegovaný antivírmi

Obr. 11: Dešifrovaný payload s obfuskovaným REvil ransomvérom nie je detegovaný antivírmi

Rozbaľovacia rutina, ktorej úlohou je rozbaliť a spustiť v pamäti danú zabalenú verziu ransomvéru (unpacker stub), alokuje ďalšiu pamäť a nastaví jej ochranu na možnosť čítania, zápisu aj vykonávania kódu (ERW atribúty na Obr. 13). To znamená, že v tejto fáze sú v pamäti prítomné dve pamätové oblasti s ochranou ERW - v prvej je prítomná aktuálny stupeň so shellkódom a rozbaľovacou rutinou, druhá je určená pre rozbalený obsah s REvil ransomvérom.

Obr. 12: Začiatok rozbaľovacej rutiny v dešifrovanom bloku dát

Obr. 12: Začiatok rozbaľovacej rutiny v dešifrovanom bloku dát

Obr. 13: Pamäťové oblasti s právami na spúšťanie, čitanie a zápis obsahujú shellkód a rozbalený REvil

Obr. 13: Pamäťové oblasti s právami na spúšťanie, čitanie a zápis obsahujú shellkód a rozbalený REvil

Následne po rozbalení sa v pamäti spustí už samotný REvil ransomvér.

Obr. 14: Koniec rozbaľovacej rutiny - volanie rozbaleného REvil ransomvéru

Obr. 14: Koniec rozbaľovacej rutiny - volanie rozbaleného REvil ransomvéru

Rozbalený REvil ransomvér

Rozbalený REvil ransomvér je vo formáte PE (portable executable), avšak s čiastočne odstránenou DOS aj NT hlavičkou. Klasické MZ aj PE signatúry sú odstránené rovnako ako názvy sekcií. Na druhej strane, väčšina polí a hodnôt DOS aj NT hlavičiek je stále prítomna, napríklad minimálna požadovaná verzia operačného systému - Major a Minor OS Version, v tomto prípade NT 5.1, čo predstavuje Windows XP. Taktiež je prítomná aj adresa začiatku vykonávania programu (entry point, 0x4883), čo je aj miesto, ktoré je zavolané na konci rozbaľovacej rutiny.

Obr. 15: Čiastočne odstránené DOS a NT hlavičky REvil ransomvéru - MZ a PE signatúry chýbajú

Obr. 15: Čiastočne odstránené DOS a NT hlavičky REvil ransomvéru - MZ a PE signatúry chýbajú

Opäť je zaujímavé, že aj táto rozbalená verzia REvil ransomvéru extrahovaná z pamäte bežiaceho procesu má minimálnu detekciu antivírmi - iba 2 z 59 antivírov zo služby VirusTotal ju označujú ako škodlivú. Dokonca aj jeden týždeň po útoku.

Obr. 16: Extrahovaný a deobfuskovaný REvil ransomvér má veľmi malé detekčné skóre 2/59

Obr. 16: Extrahovaný a deobfuskovaný REvil ransomvér má veľmi malé detekčné skóre 2/59

Pri rýchlom pohľade na rozbalený REvil ransomvér vidíme, že je to vlastne štandardná vzorka, akú sme mali možnosť často vidieť pred niekoľkými mesiacmi. Jednoduchý štart s dvoma volaniami, dešifrovanie konfigurácie, kontrola, či nebeží ešte nejaká ďalšia inštancia, atď.

Obr. 17: Začiatok REvil ransomvéru

Obr. 17: Začiatok REvil ransomvéru

Obr. 18: Kontrola, či ransomvér už nebeží

Obr. 18: Kontrola, či ransomvér už nebeží

Konfigurácia REvil ransomvéru

Konfigurácia REvil ransomvéru je zašifrovaná šifrou RC4 a jej zašifrovaná podoba je uložená v špecifickej sekcii PE súboru (často je pomenovaná ako .cfg). V tejto sekcii je taktiež uložený aj kľúč na dešifrovanie konfigurácie,

Obr. 19: Dešifrovací kľúč a zašifrovaná konfigurácia REvil ransomvéru

Obr. 19: Dešifrovací kľúč a zašifrovaná konfigurácia REvil ransomvéru

Po dešifrovaní je táto konfigurácia vo formáte JSON a obsahuje rôzne nastavenia a parametre danej vzorky REvil ransomvéru. Podrobnejšie sme sa venovali konfigurácii REvil ransomvéru a jej podobnostiam s ransomvérom DarkSide v našej predchádzajúcej analýze.

Obr. 20: Dešifrovaná JSON konfigurácia REvil ransomvéru

Obr. 20: Dešifrovaná JSON konfigurácia REvil ransomvéru

Konfigurácia obsahuje okrem iného aj šablónu pre odkaz obetiam (tzv. ransom note). Táto šablóna je zakódovaná pomocou kódovania Base64 a používa značky, ktoré sú následne nahradené hodnotami a textom relevantným pre danú obeť.

Obr. 21: Šablóna REvil ransomnote

Obr. 21: Šablóna REvil ransomnote

Zaujímavosti z analýzy REvil ransomvéru

REvil používa kombináciu symetrického a asymetrického šifrovania s niekoľkými verejnými a súkromnými kľúčmi. Použitie viacerých kľúčov vyplýva z podstaty obchodného modelu REvilu, do ktorého sú zapojení okrem samotnej REvil skupiny aj rôzni partneri. Takže jednotlivé kľúče sú pre operátorov, partnerov aj pre samotné infikované systémy. Pre viac informácii o tejto téme odporúčame pozrieť zaujímavú sériu twítov od Fabiana Wosara. V tejto sérii je aj príklad dát, ktoré sú zakódované v texte, ktorý obete posielajú na stránky útočníkov, keď chcú dešifrovať ich systémy - v šablóne na Obr. 21 označené ako {KEY}.

Po spustení REvil mení heslo používateľa, resp. zariadenia a nastaví automatické prihlásenie. V analyzovanej vzorke je toto heslo “DTrump4ever”, ako možno vidieť na Obr. 22.

Obr. 22: REvil nastaví nové heslo na prihlásenie sa do zariadenia

Obr. 22: REvil nastaví nové heslo na prihlásenie sa do zariadenia

V analyzovanej vzorke však táto zmena nemá veľmi efekt, pretože REvil zašifruje aj zavádzač systému a súbory potrebné pre boot. Po reštartovaní zariadenia sa teda zobrazí iba chybová hláška a zariadenie nie je schopné naštartovať.

Obr. 23: REvil poškodí aj zavádzač systému

Obr. 23: REvil poškodí aj zavádzač systému

Záver

Zanalyzovali sme vzorku ransomvéru REvil, ktorá bola použitá pri nedávnych útokoch v súvislosti so spoločnosťou Kaseya, počas ktorých boli zašifrované stovky obetí. Analyzovaná vzorka ransomvéru je chránená viacerými vrstvami obfuskácie a šifrovania. Dokonca aj týždeň po útoku sú niektoré z použitých techník obfuskácie a vyhýbaniu sa detekcie bezpečnostnými produktmi natoľko úspešné, že posledný stupeň ransomvéru rozbalený a spustený v pamäti, ako aj jeho zabalená verzia, sú takmer nedetegované antivírmi.

Úspešne sme prekonali jednotlivé ochranné vrstvy REvil ransomvéru a extrahovali sme jeho konfiguráciu a šablónu pre ransomnote. Tieto artefaktu sú dostupné na našom GitHube.

Obr. 24: Spustenie a rozbalenie REvil ransomvéru

Obr. 24: Spustenie a rozbalenie REvil ransomvéru

Referencie

Vzorky a IOC

  • agent.exe dropper
    • Any.Run analýza
    • veľkosť: 912264 bytov
    • MD5: 561cffbaba71a6e8cc1cdceda990ead4
    • SHA256: d55f983c994caa160ec63a59f6b4250fe67fb3e8c43a388aec60a4a6978e9f1e
  • MsMpEng.exe
    • legitímny program Microsoft Malware Protection Antimalware Service (Windows Defender)
    • podpísaný Microsoftom
    • vytvorený súbor na disku programom agent.exe:
    • pozor na planý poplach, nasledovné hashe patria staršiemu legitímnemu programu, ktorý bol zneužitý na škodlivé účely
      • veľkosť: 22224 bytov
      • MD5: 8cc83221870dd07144e63df594c391d9
      • SHA256: 33bc14d231a4afaa18f06513766d5f69d8b88f1e697cd127d24fb4b72ad44c7a
  • mpsvc.dll
    • škodlivý payload s obfuskovaným REvil ransomvérom vytvorený programom agent.exe
    • vytvorený súbor na disku:
      • veľkosť: 808328 bytov
      • MD5: a47cf00aedf769d60d58bfe00c0b5421
      • SHA256: 8dd620d9aeb35960bb766458c8890ede987c33d239cf730f93fe49d90ae759dd
    • extrahovaný súbor z dát programu agent.exe:
      • veľkosť: 807816 bytov
      • MD5: 7ea501911850a077cf0f9fe6a7518859
      • SHA256: e2a24ab94f865caeacdf2c3ad015f31f23008ac6db8312c2cbfb32e4a5466ea2
  • dešifrovaný payload z mpsvc.dll (shellkód)
    • obsahuje zabalený REvil ransomvér
    • veľkosť: 131072 bytov
    • MD5: 3ad14947002e57887b82643d729c21ae
    • SHA256: c8768d4a4979d4b5ab4e841fc29523d8d80c52d6e89f345a0a44e75973f3d3af
  • rozbalený REvil ransomvér
    • veľkosť: 139264 bytov
    • MD5: f356f999ccc35d972453ffc15cb18440
    • SHA256: 67bd95b17fa052ce6bb6f0e4536a083d83a095059cd728e4fedc7cda9c502dc8