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

23 juin 2026 Â· 3 min
Derniùre mise à jour le: 24 juin 2026 📝