Vidar Stealer : contournement de l'ABE via scan mémoire et injections APC
đ Contexte PubliĂ© le 18 juin 2026 par VojtÄch Krejsa, chercheur chez Gen Digital, cet article constitue une analyse technique approfondie du mĂ©canisme de contournement de lâApplication-Bound Encryption (ABE) implĂ©mentĂ© dans le stealer Vidar, version 2.1. đ§© Technique de bypass ABE Vidar adopte une approche similaire Ă Remus/Lumma en extrayant la v20_master_key directement depuis la mĂ©moire du navigateur, mais avec une mĂ©thode distincte en deux phases : Phase 1 â Localisation de la clĂ© en mĂ©moire Si le navigateur est dĂ©jĂ en cours dâexĂ©cution, Vidar crĂ©e un fork du processus via NtCreateProcessEx avec SectionHandle = NULL, produisant un snapshot mĂ©moire statique (copy-on-write, sans threads). Si aucun navigateur nâest actif, Vidar crĂ©e un bureau isolĂ© (CreateDesktopA) nommĂ© v20_%d et lance le navigateur avec --no-first-run --disable-gpu about:blank. JusquâĂ 64 processus navigateur sont Ă©numĂ©rĂ©s et traitĂ©s indĂ©pendamment. La mĂ©moire est scannĂ©e via NtQueryVirtualMemory et NtReadVirtualMemory, ciblant les rĂ©gions MEM_COMMIT, MEM_PRIVATE, PAGE_READONLY ou PAGE_READWRITE (jusquâĂ 4096 rĂ©gions). Le scan parallĂšle (64 threads) recherche un pattern de 32 octets : 76 32 30 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 03 00 00 00 00 01 ?? ?? correspondant Ă un nĆud de Chromium::Encryptor::KeyRing. Un systĂšme de vote majoritaire filtre les candidats. Phase 2 â DĂ©chiffrement via injection APC La clĂ© est protĂ©gĂ©e par CryptProtectMemory avec le flag CRYPTPROTECTMEMORY_SAME_PROCESS, nĂ©cessitant une exĂ©cution depuis le processus navigateur. Vidar sĂ©lectionne lâune de deux mĂ©thodes dâinjection APC selon la prĂ©sence dâESET ou Bitdefender : MĂ©thode « classic » (si ESET/Bitdefender dĂ©tectĂ©) : crĂ©ation dâun thread suspendu via CreateRemoteThread (start address NtTestAlert), queue APC via NtQueueApcThread, reprise du thread. MĂ©thode « special » (sinon) : Ă©numĂ©ration des threads existants via CreateToolhelp32Snapshot/Thread32First/Thread32Next, ouverture via NtOpenThread, injection via NtQueueApcThreadEx2 avec QUEUE_USER_APC_FLAGS_SPECIAL_USER_APC (exĂ©cution immĂ©diate, sans Ă©tat alertable requis). La routine APC injectĂ©e est CryptUnprotectMemory appelĂ©e avec lâadresse candidate, taille 32 octets, et CRYPTPROTECTMEMORY_SAME_PROCESS. Vidar crĂ©e un second fork pour lire la clĂ© dĂ©chiffrĂ©e et vĂ©rifie via dĂ©chiffrement AES-256-GCM (BCryptDecrypt). AprĂšs lecture, Vidar rĂ©injecte CryptProtectMemory pour restaurer lâĂ©tat du navigateur. En cas dâĂ©chec total, Vidar termine tous les processus navigateur, les redĂ©marre et rĂ©pĂšte le cycle. đ IoC SHA1 Vidar 2.1 : 459daa809751e73f60fbbe4384a7d1653c36bb06945e4eb363527092424110a đ Nature de lâarticle Il sâagit dâune publication de recherche technique Ă visĂ©e CTI, documentant prĂ©cisĂ©ment les mĂ©canismes internes dâun stealer actif pour permettre la dĂ©tection et la comprĂ©hension de ses techniques dâĂ©vasion. ...