<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>APC Injection on CyberVeille</title>
    <link>https://cyberveille.ch/tags/apc-injection/</link>
    <description>Recent content in APC Injection on CyberVeille</description>
    <generator>Hugo -- 0.146.0</generator>
    <language>fr-fr</language>
    <copyright>Cyberveille CC BY-NC-SA 4.0</copyright>
    <lastBuildDate>Tue, 23 Jun 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://cyberveille.ch/tags/apc-injection/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Vidar Stealer : contournement de l&#39;ABE via scan mémoire et injections APC</title>
      <link>https://cyberveille.ch/posts/2026-06-23-vidar-stealer-contournement-de-l-abe-via-scan-memoire-et-injections-apc/</link>
      <pubDate>Tue, 23 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://cyberveille.ch/posts/2026-06-23-vidar-stealer-contournement-de-l-abe-via-scan-memoire-et-injections-apc/</guid>
      <description>&lt;h2 id=&#34;-contexte&#34;&gt;🔍 Contexte&lt;/h2&gt;
&lt;p&gt;Publié le 18 juin 2026 par Vojtěch Krejsa, chercheur chez Gen Digital, cet article constitue une &lt;strong&gt;analyse technique approfondie&lt;/strong&gt; du mécanisme de contournement de l&amp;rsquo;&lt;strong&gt;Application-Bound Encryption (ABE)&lt;/strong&gt; implémenté dans le stealer &lt;strong&gt;Vidar&lt;/strong&gt;, version 2.1.&lt;/p&gt;
&lt;h2 id=&#34;-technique-de-bypass-abe&#34;&gt;🧩 Technique de bypass ABE&lt;/h2&gt;
&lt;p&gt;Vidar adopte une approche similaire à Remus/Lumma en extrayant la &lt;strong&gt;&lt;code&gt;v20_master_key&lt;/code&gt;&lt;/strong&gt; directement depuis la mémoire du navigateur, mais avec une méthode distincte en deux phases :&lt;/p&gt;
&lt;h3 id=&#34;phase-1--localisation-de-la-clé-en-mémoire&#34;&gt;Phase 1 – Localisation de la clé en mémoire&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Si le navigateur est déjà en cours d&amp;rsquo;exécution, Vidar crée un &lt;strong&gt;fork du processus&lt;/strong&gt; via &lt;code&gt;NtCreateProcessEx&lt;/code&gt; avec &lt;code&gt;SectionHandle = NULL&lt;/code&gt;, produisant un snapshot mémoire statique (copy-on-write, sans threads).&lt;/li&gt;
&lt;li&gt;Si aucun navigateur n&amp;rsquo;est actif, Vidar crée un &lt;strong&gt;bureau isolé&lt;/strong&gt; (&lt;code&gt;CreateDesktopA&lt;/code&gt;) nommé &lt;code&gt;v20_%d&lt;/code&gt; et lance le navigateur avec &lt;code&gt;--no-first-run --disable-gpu about:blank&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Jusqu&amp;rsquo;à &lt;strong&gt;64 processus navigateur&lt;/strong&gt; sont énumérés et traités indépendamment.&lt;/li&gt;
&lt;li&gt;La mémoire est scannée via &lt;code&gt;NtQueryVirtualMemory&lt;/code&gt; et &lt;code&gt;NtReadVirtualMemory&lt;/code&gt;, ciblant les régions &lt;code&gt;MEM_COMMIT&lt;/code&gt;, &lt;code&gt;MEM_PRIVATE&lt;/code&gt;, &lt;code&gt;PAGE_READONLY&lt;/code&gt; ou &lt;code&gt;PAGE_READWRITE&lt;/code&gt; (jusqu&amp;rsquo;à 4096 régions).&lt;/li&gt;
&lt;li&gt;Le scan parallèle (64 threads) recherche un &lt;strong&gt;pattern de 32 octets&lt;/strong&gt; : &lt;code&gt;76 32 30 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 03 00 00 00 00 01 ?? ??&lt;/code&gt; correspondant à un nœud de &lt;code&gt;Chromium::Encryptor::KeyRing&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;système de vote majoritaire&lt;/strong&gt; filtre les candidats.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;phase-2--déchiffrement-via-injection-apc&#34;&gt;Phase 2 – Déchiffrement via injection APC&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;La clé est protégée par &lt;code&gt;CryptProtectMemory&lt;/code&gt; avec le flag &lt;code&gt;CRYPTPROTECTMEMORY_SAME_PROCESS&lt;/code&gt;, nécessitant une exécution depuis le processus navigateur.&lt;/li&gt;
&lt;li&gt;Vidar sélectionne l&amp;rsquo;une de deux méthodes d&amp;rsquo;injection APC selon la présence d&amp;rsquo;&lt;strong&gt;ESET ou Bitdefender&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Méthode « classic »&lt;/strong&gt; (si ESET/Bitdefender détecté) : création d&amp;rsquo;un thread suspendu via &lt;code&gt;CreateRemoteThread&lt;/code&gt; (start address &lt;code&gt;NtTestAlert&lt;/code&gt;), queue APC via &lt;code&gt;NtQueueApcThread&lt;/code&gt;, reprise du thread.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Méthode « special »&lt;/strong&gt; (sinon) : énumération des threads existants via &lt;code&gt;CreateToolhelp32Snapshot&lt;/code&gt;/&lt;code&gt;Thread32First&lt;/code&gt;/&lt;code&gt;Thread32Next&lt;/code&gt;, ouverture via &lt;code&gt;NtOpenThread&lt;/code&gt;, injection via &lt;code&gt;NtQueueApcThreadEx2&lt;/code&gt; avec &lt;code&gt;QUEUE_USER_APC_FLAGS_SPECIAL_USER_APC&lt;/code&gt; (exécution immédiate, sans état alertable requis).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;La routine APC injectée est &lt;strong&gt;&lt;code&gt;CryptUnprotectMemory&lt;/code&gt;&lt;/strong&gt; appelée avec l&amp;rsquo;adresse candidate, taille 32 octets, et &lt;code&gt;CRYPTPROTECTMEMORY_SAME_PROCESS&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Vidar crée un &lt;strong&gt;second fork&lt;/strong&gt; pour lire la clé déchiffrée et vérifie via déchiffrement &lt;strong&gt;AES-256-GCM&lt;/strong&gt; (&lt;code&gt;BCryptDecrypt&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Après lecture, Vidar &lt;strong&gt;réinjecte &lt;code&gt;CryptProtectMemory&lt;/code&gt;&lt;/strong&gt; pour restaurer l&amp;rsquo;état du navigateur.&lt;/li&gt;
&lt;li&gt;En cas d&amp;rsquo;échec total, Vidar &lt;strong&gt;termine tous les processus navigateur&lt;/strong&gt;, les redémarre et répète le cycle.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-ioc&#34;&gt;📌 IoC&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SHA1 Vidar 2.1&lt;/strong&gt; : &lt;code&gt;459daa809751e73f60fbbe4384a7d1653c36bb06945e4eb363527092424110a&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-nature-de-larticle&#34;&gt;📄 Nature de l&amp;rsquo;article&lt;/h2&gt;
&lt;p&gt;Il s&amp;rsquo;agit d&amp;rsquo;une &lt;strong&gt;publication de recherche technique&lt;/strong&gt; à visée CTI, documentant précisément les mécanismes internes d&amp;rsquo;un stealer actif pour permettre la détection et la compréhension de ses techniques d&amp;rsquo;évasion.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
