<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>bypass - RiskInsight</title>
	<atom:link href="https://www.riskinsight-wavestone.com/tag/bypass/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.riskinsight-wavestone.com/tag/bypass/</link>
	<description>Le blog cybersécurité des consultants Wavestone</description>
	<lastBuildDate>Mon, 09 Oct 2023 16:00:47 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.riskinsight-wavestone.com/wp-content/uploads/2024/02/Blogs-2024_RI-39x39.png</url>
	<title>bypass - RiskInsight</title>
	<link>https://www.riskinsight-wavestone.com/tag/bypass/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Un bypass EDR universel découvert dans Windows 10 </title>
		<link>https://www.riskinsight-wavestone.com/2023/10/un-bypass-edr-universel-decouvert-dans-windows-10/</link>
					<comments>https://www.riskinsight-wavestone.com/2023/10/un-bypass-edr-universel-decouvert-dans-windows-10/#respond</comments>
		
		<dc:creator><![CDATA[Maxime Meignan]]></dc:creator>
		<pubDate>Mon, 09 Oct 2023 16:00:44 +0000</pubDate>
				<category><![CDATA[Cybersecurity & Digital Trust]]></category>
		<category><![CDATA[Ethical Hacking & Incident Response]]></category>
		<category><![CDATA[bypass]]></category>
		<category><![CDATA[EDR]]></category>
		<category><![CDATA[Windows 10]]></category>
		<guid isPermaLink="false">https://www.riskinsight-wavestone.com/?p=21172</guid>

					<description><![CDATA[<p>En étudiant les mécanismes internes d’un système utilisé par tous les EDR pour obtenir de l’information sur les activités des processus sous Windows, nous avons découvert un moyen pour un processus malveillant de désactiver la génération de certains événements de...</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/2023/10/un-bypass-edr-universel-decouvert-dans-windows-10/">Un bypass EDR universel découvert dans Windows 10 </a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com">RiskInsight</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p style="text-align: justify;">En étudiant les mécanismes internes d’un système utilisé par tous les EDR pour obtenir de l’information sur les activités des processus sous Windows, nous avons découvert un moyen pour un processus malveillant de <strong>désactiver la génération de certains événements de sécurité</strong> liés aux interactions entre processus. Cette technique pourrait être utilisée pour <strong>contourner la surveillance effectuée par un EDR</strong> et ainsi réaliser des opérations malveillantes telles que <em>dump</em> mémoire d’un processus, l’injection de code, ou le <em>process hollowing</em>.</p>
<p style="text-align: justify;"> </p>
<h2 style="text-align: justify;">Rappel sur les capacités de surveillance des EDR</h2>
<h3 style="text-align: justify;">Méthodes basées sur l’espace utilisateur vs. l’espace noyau</h3>
<p style="text-align: justify;">Sous Windows, les logiciels EDR utilisent principalement deux catégories de techniques pour surveiller les actions effectuées par les processus : les mécanismes <strong>côté espace utilisateur</strong> (« <em>userland</em> », ou « <em>userspace</em> »), tel que le <strong><em>hooking</em></strong> de fonctions, qui ciblent chaque processus individuellement, et ceux <strong>côté noyau</strong> (« <em>kernel land</em> », « <em>kernel space</em> »), qui s&rsquo;appuient sur les <strong>fonctions fournies par le système d&rsquo;exploitation</strong> pour collecter des données de télémétrie sur l&rsquo;activité des processus à l&rsquo;échelle du système.</p>
<p style="text-align: justify;">Les techniques de la <strong>première catégorie</strong> peuvent souvent être techniquement <strong>contournées par un processus malveillant</strong>, à condition qu&rsquo;il connaisse les moyens exacts employés par l&rsquo;EDR. En effet, le code de surveillance et le code surveillé <strong>s&rsquo;exécutent souvent dans le même « espace »,</strong> la <strong>mémoire du processus</strong>, ce qui revient à un jeu du chat et de la souris entre le logiciel malveillant et l&rsquo;EDR, étant donné que chacun peut interagir ou modifier le code de la « partie adverse ».</p>
<p style="text-align: justify;">Pour la <strong>deuxième catégorie</strong>, le code de surveillance s&rsquo;exécute <strong>dans l&rsquo;espace du noyau Windows</strong>, qui n&rsquo;est <strong>directement accessible par aucun processus</strong>, quel que soit son niveau de privilège. Cependant, ces capacités de surveillance sont <strong>fournies par Windows lui-même</strong> aux produits de sécurité installés, et tous les logiciels EDR sont obligés de les utiliser de manière presque identique pour obtenir une télémétrie des activités des processus (la manière de détecter une activité malveillante à partir de ces informations dépend évidemment de chaque logiciel EDR).</p>
<p style="text-align: justify;">Pour approfondir le sujet, ces deux types de mécanismes ont notamment été décrits dans <a href="https://connect-ed--diamond-com.translate.goog/misc/misc-116/tour-d-horizon-des-mecanismes-de-supervision-des-edr"><strong>notre article</strong></a> de la 116<sup>ème</sup> édition du magazine MISC. Aussi, pour mieux comprendre les enjeux de ce qui suit dans le présent article, nous recommandons aux lecteurs de consulter <a href="https://connect.ed-diamond.com/misc/misc-118/techniques-de-contournement-de-la-supervision-des-edr"><strong>notre autre article sur les contournements de surveillance EDR</strong></a> dans la 118<sup>ème</sup> édition du magazine MISC, ainsi que le README de notre outil, <a href="https://github.com/wavestone-cdt/EDRSandblast"><strong>EDRSandblast</strong></a>.</p>
<p style="text-align: justify;"> </p>
<h3 style="text-align: justify;">Event Tracing for Windows &#8211; Threat Intelligence</h3>
<p style="text-align: justify;">Parmi les mécanismes susmentionnés, <em>Event Tracing for Windows &#8211; Threat Intelligence</em> (abrégé en ETW-Ti dans cet article) permet de <strong>générer des événements</strong> lors d&rsquo;opérations du noyau <strong>critiques pour la sécurité</strong>, telles que la création de processus, la lecture/écriture de mémoire entre processus, la création de mémoire exécutable, etc. (voir notre article dans MISC 116 pour plus de détails).</p>
<p style="text-align: justify;">Le flux d&rsquo;événements produit par le mécanisme n&rsquo;est normalement « consommable » que par les produits de sécurité, qui doivent être des processus protégés (<strong><em>PROTECTED_ANTIMALWARE_LIGHT</em></strong>), signés cryptographiquement comme tels par Microsoft.</p>
<p style="text-align: justify;">La création de ces événements de sécurité est gérée par le noyau Windows et est mise en œuvre par de simples appels à des fonctions <strong><em>EtwTi*</em></strong> dédiées, intégrées à chaque fonction du noyau présentant un intérêt. L&rsquo;image suivante montre l&rsquo;appel à <strong><em>EtwTiLogReadWriteVm</em></strong> à l&rsquo;intérieur de la fonction <strong><em>MiReadWriteVirtualMemory</em></strong>, cette dernière étant responsable des lectures et écritures de mémoire entre les processus.</p>
<figure id="attachment_21135" aria-describedby="caption-attachment-21135" style="width: 405px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" class="wp-image-21135 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-callToEtwTI.png" alt="A call to EtwTiLogReadWriteVm highlighted in a control-flow graph" width="405" height="602" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-callToEtwTI.png 405w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-callToEtwTI-128x191.png 128w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-callToEtwTI-26x39.png 26w" sizes="(max-width: 405px) 100vw, 405px" /><figcaption id="caption-attachment-21135" class="wp-caption-text"><span style="font-size: revert; color: initial;"> Figure 1: Appel à </span><strong style="font-size: revert; color: initial;"><em>EtwTiLogReadWriteVm</em></strong><span style="font-size: revert; color: initial;"> au sein de </span><strong style="font-size: revert; color: initial;"><em>MiReadWriteVirtualMemory</em></strong></figcaption></figure>
<p style="text-align: justify;"> </p>
<h2 style="text-align: justify;">Nos constats</h2>
<h3 style="text-align: justify;">Une exception bien commode</h3>
<p style="text-align: justify;">En examinant le graphique du flot de contrôle de la fonction ci-dessus, nous constatons que l&rsquo;appel à la fonction de journalisation de l&rsquo;ETW-Ti est toujours effectué lors d&rsquo;un appel réussi à <strong><em>MiReadWriteVirtualMemory</em></strong>, à moins que <strong><em>PsIsProcessLoggingEnabled</em></strong> ne renvoie la valeur <strong><em>FALSE</em></strong>.</p>
<p style="text-align: justify;">Cette dernière fonction, qui n&rsquo;est mentionnée nulle part dans la littérature consacrée au reverse engineering de Windows, permet d&rsquo;effectuer les opérations suivantes (note : les commentaires, les noms et les types de variables ont été obtenus par reverse engineering et/ou déduits des <a href="https://www.vergiliusproject.com/kernels/x64/Windows%2010%20%7C%202016/2110%2021H2%20(November%202021%20Update)/_EPROCESS">symboles de débogage publics</a>) :</p>
<p style="text-align: justify;"><img decoding="async" class="aligncenter wp-image-21138 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-PsIsProcessLoggingEnabled.png" alt="decompiled source code of PsIsProcessLoggingEnabled" width="1299" height="787" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-PsIsProcessLoggingEnabled.png 1299w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-PsIsProcessLoggingEnabled-315x191.png 315w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-PsIsProcessLoggingEnabled-64x39.png 64w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-PsIsProcessLoggingEnabled-768x465.png 768w" sizes="(max-width: 1299px) 100vw, 1299px" /></p>
<p style="text-align: center;">Figure 2: Code source de <strong><em>PsIsProcessLoggingEnabled</em></strong> obtenu par reverse-engineering</p>
<p style="text-align: justify;">Comme nous pouvons le voir, la fonction vérifie l&rsquo;état d&rsquo;un flag parmi <strong><em>EnableReadVmLogging</em></strong>, <strong><em>EnableWriteVmLogging</em></strong>, <strong><em>EnableThreadSuspendResumeLogging</em></strong> et <strong><em>EnableProcessSuspendResumeLogging</em></strong>, indiquant si l&rsquo;action en cours (parmi une lecture de mémoire interprocessus, une écriture de mémoire, une suspension/reprise de thread ou une suspension/reprise de processus, respectivement) doit être effectivement enregistrée par ETW-Ti. Ces flags se trouvent dans différents <em>bitfields</em> de la structure <strong><em>_EPROCESS</em></strong> du processus ciblé.</p>
<p style="text-align: justify;"> </p>
<h3 style="text-align: justify;">Accès aux flags de journalisation</h3>
<p style="text-align: justify;">En recoupant l&rsquo;utilisation des flags susmentionnés dans le noyau, nous avons constaté que les fonctions <strong><em>NtQueryInformationProcess</em></strong> et <strong><em>NtSetInformationProcess</em></strong> étaient utilisés pour obtenir ou définir les bits spécifiques correspondant à ces flags de journalisation (<em>logging</em>).</p>
<p style="text-align: justify;">Bien que la plupart du temps non documentées, ces fonctions ont été examinées de près par les <em>reverse-engineers</em> s’intéressant aux mécanismes internes de Windows (et par les développeurs de logiciels malveillants) depuis longtemps, car elles gèrent les <strong>appels système </strong>éponymes <strong>accessibles à partir de l&rsquo;espace utilisateur</strong>. Le projet <a href="https://www.vergiliusproject.com/kernels/x64/Windows%2010%20%7C%202016/2110%2021H2%20(November%202021%20Update)/_EPROCESS">System Informer</a> (anciennement connu sous le nom de Process Hacker) abrite une base de données impressionnante de prototypes de fonctions, de structures et d&rsquo;<em>enums</em> liés aux mécanismes internes de Windows.</p>
<p style="text-align: justify;">Le prototype de la fonction <strong><em>NtSetInformationProcess</em></strong> est le suivant :</p>
<p style="text-align: justify;"><img decoding="async" class="aligncenter wp-image-21141 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcess.png" alt="Reversed source code of NtSetInformationProcess" width="729" height="269" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcess.png 729w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcess-437x161.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcess-71x26.png 71w" sizes="(max-width: 729px) 100vw, 729px" /></p>
<p style="text-align: center;">Figure 3: Prototype de la fonction <strong><em>NtSetInformationProcess</em></strong></p>
<p style="text-align: justify;">Cette fonction gère une centaine de cas d&rsquo;utilisation, selon la valeur du paramètre <strong><em>ProcessInformationClass</em></strong>. La fonction est implémentée à l&rsquo;aide d&rsquo;une énorme instruction <em>switch</em>, et le code spécifique concernant les flags de journalisation est situé dans les <em>cases</em> <strong><em>ProcessEnableReadWriteVmLogging</em></strong> et <strong><em>ProcessEnableLogging</em></strong> (constantes non documentées, nommées ainsi par les développeurs de System Informer).</p>
<p style="text-align: justify;"><img loading="lazy" decoding="async" class="aligncenter wp-image-21144 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcessImplem.png" alt="Reverse-engineered source code of NtSetInformationProcess" width="1767" height="922" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcessImplem.png 1767w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcessImplem-366x191.png 366w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcessImplem-71x37.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcessImplem-768x401.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcessImplem-1536x801.png 1536w" sizes="auto, (max-width: 1767px) 100vw, 1767px" /></p>
<p style="text-align: center;">Figure 4: Code source de <strong><em>NtSetInformationProcess</em></strong> obtenu par reverse-engineering</p>
<p style="text-align: justify;">Le comportement du code ci-dessus peut être réduit aux points suivants :</p>
<ul style="text-align: justify;">
<li>La cohérence de l&rsquo;argument <strong><em>ProcessInformationLength</em></strong> est vérifiée par rapport à la structure <strong><em>ProcessInformation</em></strong> attendue (c&rsquo;est-à-dire que les flags sont stockés dans un <strong><em>BYTE</em></strong> ou dans un <strong><em>DWORD</em></strong>, voir les structures attendues pour <a href="https://www.vergiliusproject.com/kernels/x64/Windows%2010%20%7C%202016/2110%2021H2%20(November%202021%20Update)/_EPROCESS"><strong><em>ProcessEnableReadWriteVmLogging</em></strong></a> et <a href="https://www.vergiliusproject.com/kernels/x64/Windows%2010%20%7C%202016/2110%2021H2%20(November%202021%20Update)/_EPROCESS"><strong><em>ProcessEnableLogging</em></strong></a>) ;</li>
<li>Les privilèges du processus sont vérifiés : l&rsquo;appel n&rsquo;est accepté que si au moins l&rsquo;un des privilèges <strong><em>SeDebugPrivilege</em></strong> ou <strong><em>SeTcbPrivilege</em></strong> est détenu par le processus appelant ;</li>
<li>L&rsquo;objet noyau (<strong><em>_EPROCESS</em></strong>) du processus cible est récupéré, tout en vérifiant que son <em>handle</em> possède bien le droit d&rsquo;accès <strong><em>PROCESS_SET_LIMITED_INFORMATION</em></strong> ;</li>
<li>Différents flags (provenant des champs <strong><em>Flags2</em></strong> et <strong><em>Flags3</em></strong> de la structure <strong><em>_EPROCESS</em></strong>) sont mis à jour, sur la base de la structure <strong><em>ProcessInformation</em></strong></li>
</ul>
<p style="text-align: justify;">Les flags qui peuvent être mis à jour par cette méthode sont les suivants :</p>
<ul style="text-align: justify;">
<li><strong><em>EnableProcessSuspendResumeLogging</em></strong> (ou <strong><em>EnableThreadSuspendResumeLogging</em></strong>) : détermine si un événement ETW-Ti est généré lors de la <strong>suspension</strong> ou de la <strong>reprise</strong> d&rsquo;un <strong>processus</strong> (ou d&rsquo;un <strong>thread</strong>). Ces opérations sont utilisées dans les techniques de <a href="https://attack.mitre.org/techniques/T1055/012/"><em>process hollowing</em></a>, par exemple ;</li>
<li><strong><em>EnableReadVmLogging</em></strong> : détermine si un événement ETW-Ti est généré lors de la lecture de la mémoire d&rsquo;un processus par un autre. Ces opérations sont généralement utilisées dans les techniques de dump de processus (<a href="https://attack.mitre.org/techniques/T1003/001/">LSASS</a>, notamment) ;</li>
<li><strong><em>EnableWriteVmLogging</em></strong> : idem, pour les écritures en mémoire entre processus. Ces opérations sont utilisées dans la plupart des techniques <a href="https://attack.mitre.org/techniques/T1055/012/">d&rsquo;injection de processus</a>.</li>
</ul>
<h3 style="text-align: justify;">Du point de vue offensif</h3>
<p style="text-align: justify;">En résumé, si le mécanisme ETW-Ti ne peut pas être désactivé globalement sur le système depuis l&rsquo;espace utilisateur (c&rsquo;est-à-dire par un processus), <strong>certaines de ses fonctionnalités peuvent être désactivées</strong> par un processus disposant du privilège <strong><em>SeDebugPrivilege</em></strong> ou <strong><em>SeTcbPrivilege</em></strong>, ce qui peut être le cas de n&rsquo;importe quel processus élevé.</p>
<p style="text-align: justify;">Comme indiqué précédemment, le flux d&rsquo;événements de l&rsquo;ETW-Ti n&rsquo;est normalement accessible qu&rsquo;aux produits de sécurité tels que les EDR. Cependant, dans la fonction ci-dessus, nous voyons que n&rsquo;importe quel processus non protégé peut désactiver certaines fonctions de journalisation d&rsquo;un autre processus <strong>sans prouver au système qu&rsquo;il est un consommateur légitime du flux ETW-Ti (ex. un EDR)</strong>.</p>
<p style="text-align: justify;">Il est important de noter que les EDR mettent souvent en <strong>corrélation plusieurs événements</strong> pour créer des alertes, afin de ne pas générer de résultats <strong>faussement positifs</strong>. Par exemple, un dump du processus LSASS est souvent divisé en plusieurs étapes :</p>
<ul style="text-align: justify;">
<li>L&rsquo;ouverture d&rsquo;un handle au processus <strong><em>exe</em></strong> ayant un accès <strong><em>PROCESS_VM_READ</em></strong> ;</li>
<li>La lecture effective de toutes les plages de mémoire concernées ;</li>
<li>La création d&rsquo;un fichier minidump.</li>
</ul>
<p style="text-align: justify;">Si seul l&rsquo;événement de création d&rsquo;un <em>handle</em> existe, mais que les événements de lecture <strong>ne sont pas enregistrés par ETW-Ti</strong> et que le fichier minidump est chiffré ou n&rsquo;a jamais été écrit sur le disque, l&rsquo;EDR <strong>peut ne pas émettre d&rsquo;alertes</strong> concernant le dump du processus LSASS, faute de preuves.</p>
<h2 style="text-align: justify;">Versions de Windows affectées</h2>
<h3 style="text-align: justify;">Différences entre Windows 10 et Windows 11</h3>
<p style="text-align: justify;">La même analyse a été effectuée sur le code <strong><em>NtSetInformationProcess</em></strong> du noyau de Windows 11.</p>
<p><img loading="lazy" decoding="async" class="wp-image-21146 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcessImplemWin11.png" alt="Reverse-engineered source code of NtSetInformationProcess on Windows 11" width="1779" height="1268" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcessImplemWin11.png 1779w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcessImplemWin11-268x191.png 268w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcessImplemWin11-55x39.png 55w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcessImplemWin11-768x547.png 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-NtSetInformationProcessImplemWin11-1536x1095.png 1536w" sizes="auto, (max-width: 1779px) 100vw, 1779px" /></p>
<p style="text-align: center;">Figure 5: Code source de <strong><em>NtSetInformationProcess</em></strong> obtenu par reverse-engineering sous Windows 11</p>
<p style="text-align: justify;">Le code présente deux différences principales. La première, et la plus importante : le niveau de protection du processus appelant <strong><em>NtSetInformationProcess</em></strong> est vérifié comme étant « dominant » par rapport au niveau <strong><em>ANTIMALWARE_LIGHT</em></strong>, à l&rsquo;aide de l&rsquo;appel à <strong><em>EtwCheckSecurityLoggerAccess</em></strong>. Pour information, on dit qu&rsquo;un niveau de protection en domine un autre si les deux affirmations suivantes sont vraies :</p>
<ul style="text-align: justify;">
<li>Le type de protection (<strong><em>Protected</em></strong>, <strong><em>Protected light </em></strong>ou <strong><em>non protégé</em></strong>) est identique ou plus fort que l&rsquo;autre niveau de protection (<strong><em>Protected</em></strong> est « plus fort » que <strong><em>Protected light</em></strong>, qui est évidemment plus fort que <strong><em>non protégé</em></strong>).</li>
<li>Le signataire (<em>signer</em>) domine celui de l&rsquo;autre niveau de protection, selon des règles codées en dur dans le noyau Windows (analysées de la structure <strong><em>RtlProtectedAccess</em></strong>). Le graphique suivant décrit ces règles :</li>
</ul>
<p><img loading="lazy" decoding="async" class="wp-image-21148 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-ProtectedDomination.png" alt="Protected processes &quot;domination&quot; between different protection levels" width="878" height="443" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-ProtectedDomination.png 878w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-ProtectedDomination-379x191.png 379w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-ProtectedDomination-71x36.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2023/09/EDRbypass-ProtectedDomination-768x387.png 768w" sizes="auto, (max-width: 878px) 100vw, 878px" /></p>
<p style="text-align: center;">Figure 6: « Domination » des processus protégés entre les différents signataires</p>
<p style="text-align: justify;">Cela signifie que seul un processus <strong><em>protected</em></strong> ou <strong><em>protected</em></strong><em> <strong>light</strong></em> dont le signataire est <strong><em>WinSystem</em></strong>, <strong><em>WinTcb</em></strong>, <strong><em>Windows</em></strong> ou <strong><em>Antimalware</em></strong> (c&rsquo;est-à-dire un composant système ou un produit de sécurité <strong>signé cryptographiquement par Microsoft</strong> en tant que tel) est autorisé à utiliser l&rsquo;API <strong><em>NtSetInformationProcess</em></strong> pour désactiver les fonctions de journalisation ETW-Ti sous Windows 11. Il s&rsquo;agit d&rsquo;une amélioration importante, car elle établit une <strong>frontière cohérente</strong> entre les <strong>produits et fonctions de sécurité </strong>d&rsquo;une part, et les <strong>autres processus</strong> d&rsquo;autre part.</p>
<p style="text-align: justify;">La deuxième différence entre les implémentations de <strong><em>NtSetInformationProcess</em></strong> sous Windows 10 et Windows 11 est que de nouveaux flags de journalisation ETW-Ti semblent être modifiables avec l&rsquo;API : <strong><em>EnableProcessLocalExecProtectVmLogging</em></strong> et <strong><em>EnableProcessRemoteExecProtectVmLogging</em></strong>, apparemment utilisés pour activer/désactiver la surveillance des opérations <strong>rendant la mémoire exécutable</strong>.</p>
<p style="text-align: justify;">À titre d&rsquo;information, cette fonctionnalité semble toutefois être boguée ou n&rsquo;est pas encore complètement implémentée, puisque dans le code présenté plus haut, les bits correspondant ne sont pas mis à zéro par l&rsquo;opération AND bit-à-bit (<strong><em>InterlockedAnd</em></strong>), les fonctionnalités correspondantes ne peuvent donc pas être désactivées à l&rsquo;aide de cette API.</p>
<p style="text-align: justify;"> </p>
<h3 style="text-align: justify;">Périmètre exact des versions affectées</h3>
<p style="text-align: justify;">L&rsquo;analyse de diverses versions du noyau dans différentes versions de Windows a montré <strong>que la première version disponible de Windows 11</strong> (21H2, version 10.0.22000.194) <strong>met déjà en œuvre</strong> le contrôle de sécurité effectué par <strong><em>EtwCheckSecurityLoggerAccess</em></strong> décrit plus haut.</p>
<p style="text-align: justify;">En revanche, dans la <strong>dernière version disponible de Windows 10</strong> au moment de la rédaction (22H2, version 10.0.19041.3393), la <strong>vérification de sécurité est toujours absente</strong>, alors que cette version est plus récente de 2 ans. Cela indique selon toute vraisemblance que Microsoft est bien conscient du problème et ne corrige pas la faiblesse volontairement, probablement pour des raisons de rétrocompatibilité.</p>
<p style="text-align: justify;">Les différents flags de journalisation et leur traitement associé par <strong><em>NtSetInformationProcess</em></strong> sont apparus progressivement au cours de la vie du produit Windows 10. Le tableau suivant résume les versions concernées :</p>
<table>
<tbody>
<tr>
<td width="130">
<p> </p>
</td>
<td width="130">
<p>Win10</p>
<p>1507 -&gt; 1703</p>
</td>
<td width="130">
<p>Win10</p>
<p>1709 -&gt; 1803</p>
</td>
<td width="130">
<p>Win10</p>
<p>1809 -&gt; 22H2</p>
</td>
<td width="130">
<p>Win11</p>
<p>21H2 -&gt; 22H2</p>
</td>
</tr>
<tr>
<td width="130">
<p>Opération de lecture mémoire</p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
</tr>
<tr>
<td width="130">
<p>Opération d’écriture mémoire</p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
</tr>
<tr>
<td width="130">
<p>Opérations d’arrêt/reprise d’un processus</p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
</tr>
<tr>
<td width="130">
<p>Opérations d’arrêt/reprise d’un thread</p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
<td width="130">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> : La fonction de journalisation ETWTi n’existe pas encore <br /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> : La journalisation ETWTi peut être désactivée<br /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> : La journalisation ETWTi ne peut pas être désactivée</p>
<h2 style="text-align: justify;">Le mot de la fin</h2>
<p style="text-align: justify;">En conclusion, le mécanisme décrit dans cet article permet de fait à un <strong>programme</strong> <strong>malveillant</strong> s’exécutant avec des <strong>privilèges élevés</strong> et souhaitant effectuer des <strong>actions néfastes</strong> (injection de processus, dump LSASS, <em>process hollowing</em>, etc.) de <strong>désactiver soigneusement la télémétrie</strong> associée avant de le faire, supprimant ainsi des preuves critiques de la surveillance EDR, ce qui améliore grandement ses chances de <strong>ne pas être détecté</strong>.</p>
<p style="text-align: justify;">De nombreux éléments montrent que <strong>Microsoft est conscient de la faiblesse</strong>, mais <strong>ne modifie pas le comportement de l&rsquo;API rétroactivement</strong> sur Windows 10, probablement en raison de problèmes de rétro-compatibilité.</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/2023/10/un-bypass-edr-universel-decouvert-dans-windows-10/">Un bypass EDR universel découvert dans Windows 10 </a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com">RiskInsight</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.riskinsight-wavestone.com/2023/10/un-bypass-edr-universel-decouvert-dans-windows-10/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
