{"id":21101,"date":"2023-10-09T16:59:50","date_gmt":"2023-10-09T15:59:50","guid":{"rendered":"https:\/\/www.riskinsight-wavestone.com\/?p=21101"},"modified":"2023-10-09T17:00:17","modified_gmt":"2023-10-09T16:00:17","slug":"a-universal-edr-bypass-built-in-windows-10","status":"publish","type":"post","link":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/","title":{"rendered":"A universal EDR bypass built in Windows 10"},"content":{"rendered":"\n<p>While studying internals of a mechanism used by all EDR software to get information about processes activities on Windows, we came across a way for malicious processes to <strong>disable the generation of some security events<\/strong> related to process interactions. This technique could be used to <strong>evade EDR software<\/strong> while performing malicious operations such as process memory dumping, code injection or process hollowing.<\/p>\n<h2>A primer on EDR&#8217;s monitoring capacities<\/h2>\n<h3>Usermode vs. kernelmode methods<\/h3>\n<p>On Windows, EDR software mainly use two categories of techniques to monitor the actions performed by the processes: <strong><em>user-space <\/em><\/strong>methods, like <em><strong>function hooking<\/strong><\/em>, which are targeting each individual process, and <strong><em>kernel-space <\/em><\/strong>features, which are relying on <strong>OS-provided functions<\/strong> to collect system-wide telemetry about processes activity.<\/p>\n<p>T<span style=\"font-size: revert; color: initial;\">he<strong> first category<\/strong> can often technically be <strong>evaded by a malicious process<\/strong>, as long as it knows the exact techniques used by the EDR. Indeed, the monitoring code and the monitored code often <strong>run in the same &#8220;space&#8221;, the process&#8217; memory,<\/strong> so it boils down to a game of cat-and-mouse between the malware and the EDR, given that each can interact or alter the code of the &#8220;opposing party&#8221;.<\/span><\/p>\n<p>For the <strong>second category<\/strong>, the monitoring code <strong>runs in the Windows kernel space<\/strong>, <strong>not directly accessible from any process<\/strong>, regardless of its privilege level. However, these monitoring capacities are <strong>provided by Windows itself<\/strong> to the installed security products, and all EDR software are forced to use them nearly identically to get telemetry about processes activity (how to detect malicious activity from said telemetry is obviously up to each EDR software).<\/p>\n<p>For more in-depth information about the subject, both types of mechanisms were notably described <strong>in our article in the 116<sup>th<\/sup> edition<\/strong> of MISC magazine ( <a href=\"https:\/\/connect.ed-diamond.com\/misc\/misc-116\/tour-d-horizon-des-mecanismes-de-supervision-des-edr\" target=\"_blank\" rel=\"noopener\">FR (original)<\/a> or <a href=\"https:\/\/connect-ed--diamond-com.translate.goog\/misc\/misc-116\/tour-d-horizon-des-mecanismes-de-supervision-des-edr?_x_tr_sl=auto&amp;_x_tr_tl=en&amp;_x_tr_hl=en-US&amp;_x_tr_pto=wapp\" target=\"_blank\" rel=\"noopener\">EN (translated)<\/a> ). Also, to better understand the stakes of what follows in the present article, we recommend the readers to look at <strong>our article about EDR monitoring bypasses<\/strong> in the 118<sup>th<\/sup> edition of MISC magazine ( <a href=\"https:\/\/connect.ed-diamond.com\/misc\/misc-118\/techniques-de-contournement-de-la-supervision-des-edr\" target=\"_blank\" rel=\"noopener\">FR (original)<\/a> or <a href=\"https:\/\/connect-ed--diamond-com.translate.goog\/misc\/misc-118\/techniques-de-contournement-de-la-supervision-des-edr?_x_tr_sl=auto&amp;_x_tr_tl=en&amp;_x_tr_hl=en-US&amp;_x_tr_pto=wapp\" target=\"_blank\" rel=\"noopener\">EN (translated)<\/a> ), as well as the README of our tool, <strong><a href=\"https:\/\/github.com\/wavestone-cdt\/EDRSandblast\" target=\"_blank\" rel=\"noopener\">EDRSandblast<\/a><\/strong>.&nbsp;<\/p>\n<h3>Event Tracing for Windows &#8211; Threat Intelligence<\/h3>\n<p>Among the aforementioned mechanisms, <em>Event Tracing for Windows &#8211; Threat Intelligence<\/em> (ETW-Ti for short in this article) allows the <strong>generation of events<\/strong> upon <strong>security-critical kernel operations<\/strong>, such as process creation, memory read\/write between processes, executable memory creation, etc. (see our article in MISC 116 for more details).<\/p>\n<p>The event feed produced by the mechanism is normally only &#8220;consumable&#8221; by security products, which need to be protected processes (<strong><em>PROTECTED_ANTIMALWARE_LIGHT<\/em><\/strong>), cryptographically signed as such by Microsoft.<\/p>\n<p>These security events&#8217; creation is handled by the Windows kernel, and is implemented by simple calls to dedicated <strong><em>EtwTi<\/em>*<\/strong> functions, embedded inside each kernel function of interest. The following image shows the call to <em><strong>EtwTiLogReadWriteVm<\/strong> <\/em>inside the <em><strong>MiReadWriteVirtualMemory<\/strong> <\/em>function, the latter being responsible for memory reads and writes between processes.<\/p>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_21135\" aria-describedby=\"caption-attachment-21135\" style=\"width: 347px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-21135 \" 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=\"347\" height=\"516\" 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=\"auto, (max-width: 347px) 100vw, 347px\" \/><figcaption id=\"caption-attachment-21135\" class=\"wp-caption-text\"><em><strong>EtwTiLogReadWriteVm<\/strong> <\/em>call inside <em><strong>MiReadWriteVirtualMemory<\/strong><\/em><\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<h2>Our findings<\/h2>\n<h3>A convenient exception<\/h3>\n<p>Looking at the whole control flow graph of the function above, we see that the call to the ETW-Ti logging function is always performed in a successful call to <em><strong>MiReadWriteVirtualMemory<\/strong><\/em>, unless <strong><em>PsIsProcessLoggingEnabled<\/em> returns <em>FALSE<\/em><\/strong>.&nbsp;<\/p>\n<p>This latter function, mentioned nowhere we could find in the Windows reverse-engineering literature, does the following (comments, variable names and types were reverse-engineered and\/or inferred from <a href=\"https:\/\/www.vergiliusproject.com\/kernels\/x64\/Windows%2010%20%7C%202016\/2110%2021H2%20(November%202021%20Update)\/_EPROCESS\" target=\"_blank\" rel=\"noopener\">public debugging symbols<\/a>):<\/p>\n<figure id=\"attachment_21138\" aria-describedby=\"caption-attachment-21138\" style=\"width: 1299px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-21138\" 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=\"auto, (max-width: 1299px) 100vw, 1299px\" \/><figcaption id=\"caption-attachment-21138\" class=\"wp-caption-text\">Reverse-engineered source code of <em><strong>PsIsProcessLoggingEnabled<\/strong><\/em><\/figcaption><\/figure>\n<p>As we can see, the function checks the state of a flag among <em><strong>EnableReadVmLogging<\/strong><\/em>, <em><strong>EnableWriteVmLogging<\/strong><\/em>, <em><strong>EnableThreadSuspendResumeLogging<\/strong> <\/em>and <em><strong>EnableProcessSuspendResumeLogging<\/strong><\/em>, indicating whether the currently performed action (among an inter-process memory read, memory write, thread suspension\/resuming or a process suspension\/resuming, respectively) should be effectively logged by ETW-Ti. These flags are located in various fields of the <em><strong>_EPROCESS<\/strong> <\/em>structure of the targeted process.<\/p>\n<h3>Accessing logging flags<\/h3>\n<p>By cross-referencing the use of the aforementioned flags in the kernel, we found that <em><strong>NtQueryInformationProcess<\/strong> <\/em>and <em><strong>NtSetInformationProcess<\/strong> <\/em>were used to get or set the specific bits corresponding to these logging flags.<\/p>\n<p>While mostly undocumented, these functions have been scrutinized by Windows Internals reverse engineers (and malware developers) for a long time, since they handle the eponym <strong>system calls<\/strong> r<strong>eachable from user space<\/strong>. The <a href=\"https:\/\/github.com\/winsiderss\/systeminformer\/tree\/master\/phnt\" target=\"_blank\" rel=\"noopener\">System Informer project<\/a> (formerly known as Process Hacker) harbors an impressive database of function prototypes, structures and enums related to Windows Internals, gathered through the years thanks to &#8220;<em>a lot of reverse engineering and guessing&#8221;<\/em>.&nbsp;<\/p>\n<p>The prototype of the <em><strong>NtSetInformationProcess <\/strong><\/em>function is the following:<\/p>\n<figure id=\"attachment_21141\" aria-describedby=\"caption-attachment-21141\" style=\"width: 626px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-21141 \" src=\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/09\/EDRbypass-NtSetInformationProcess.png\" alt=\"Prototype of NtSetInformationProcess\" width=\"626\" height=\"231\" 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=\"auto, (max-width: 626px) 100vw, 626px\" \/><figcaption id=\"caption-attachment-21141\" class=\"wp-caption-text\">Prototype of <em><strong>NtSetInformationProcess<\/strong><\/em><\/figcaption><\/figure>\n<p>The function can be used for more than a hundred use cases, depending on the value of <strong><em>ProcessInformationClass<\/em>.<\/strong> The function is implemented using a huge <strong>switch-case<\/strong> statement, and the specific code touching the logging flags is located under the <em><strong>ProcessEnableReadWriteVmLogging<\/strong> <\/em>and <em><strong>ProcessEnableLogging<\/strong> <\/em>cases (undocumented constants named by System Informer&#8217;s developers).<\/p>\n<figure id=\"attachment_21144\" aria-describedby=\"caption-attachment-21144\" style=\"width: 1767px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-21144\" 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\" \/><figcaption id=\"caption-attachment-21144\" class=\"wp-caption-text\">Reverse-engineered source code of <em><strong>NtSetInformationProcess<\/strong><\/em><\/figcaption><\/figure>\n<p>The behavior of the code above can be reduced to the following points:<\/p>\n<ul>\n<li>The <em><strong>ProcessInformationLength<\/strong> <\/em>argument&#8217;s consistency is checked against the expected <em><strong>ProcessInformation<\/strong> <\/em>structure (i.e. flags are stored in a <em><strong>BYTE<\/strong> <\/em>or in a <em><strong>DWORD<\/strong><\/em>, see the expected structures for both <a href=\"https:\/\/github.com\/winsiderss\/systeminformer\/blob\/03f9a38939e461dca05fc7f7025c47999595abaa\/phnt\/include\/ntpsapi.h#L948-L957\" target=\"_blank\" rel=\"noopener\"><em>ProcessEnableReadWriteVmLogging<\/em> <\/a>and <em><a href=\"https:\/\/github.com\/winsiderss\/systeminformer\/blob\/03f9a38939e461dca05fc7f7025c47999595abaa\/phnt\/include\/ntpsapi.h#L948-L957\" target=\"_blank\" rel=\"noopener\">ProcessEnableLogging<\/a><\/em>);<\/li>\n<li>Process privileges are checked: the call is only accepted if at least one of <em><strong>SeDebugPrivilege<\/strong> <\/em>or <em><strong>SeTcbPrivilege<\/strong> <\/em>is held by the calling process;<\/li>\n<li>The kernel object (<em><strong>_EPROCESS<\/strong><\/em>) of the target process is recovered, while checking its handle does have the <em><strong>PROCESS_SET_LIMITED_INFORMATION<\/strong> <\/em>access right;<\/li>\n<li>Different flags (from the <em><strong>Flags2<\/strong><\/em> and <em><strong>Flags3<\/strong> <\/em>unions fields of the <em>_<strong>EPROCESS<\/strong> <\/em>structure) are updated, based on provided <em><strong>ProcessInformation<\/strong> <\/em>structure.<\/li>\n<\/ul>\n<p>Flags that can be updated through this method are the following:<\/p>\n<ul>\n<li><em><strong>EnableProcessSuspendResumeLogging<\/strong> <\/em>(resp. <em><strong>EnableThreadSuspendResumeLogging<\/strong><\/em>): controls if a ETW-Ti event is raised upon <strong>process<\/strong> (resp. <strong>thread<\/strong>) <strong>suspension<\/strong> or <strong>resuming<\/strong>. These operations are used in <strong><a href=\"https:\/\/attack.mitre.org\/techniques\/T1055\/012\/\" target=\"_blank\" rel=\"noopener\">process hollowing<\/a> techniques<\/strong>, for instance;<\/li>\n<li><em><strong>EnableReadVmLogging<\/strong><\/em>: controls if an ETW-Ti event is generated upon <strong>memory reads<\/strong> across different processes. These operations are typically used in <a href=\"https:\/\/attack.mitre.org\/techniques\/T1003\/001\/\" target=\"_blank\" rel=\"noopener\"><strong>LSASS dumping<\/strong><\/a>;<\/li>\n<li><em><strong>EnableWriteVmLogging<\/strong><\/em>: idem, for memory writes across processes. These operations are used in most <strong><a href=\"https:\/\/attack.mitre.org\/techniques\/T1055\/\" target=\"_blank\" rel=\"noopener\" data-wplink-edit=\"true\">process injection techniques.<\/a><\/strong><\/li>\n<\/ul>\n<h3>From the attacker&#8217;s perspective<\/h3>\n<p>To sum it up, while the ETW-Ti mechanism cannot be disabled globally on the system from user-space (i.e., by a process), <strong>some of its features can be turned off<\/strong> by a process having the <em><strong>SeDebugPrivilege<\/strong> <\/em>or <em><strong>SeTcbPrivilege<\/strong> <\/em>privilege, which can be achieved by any elevated process.<\/p>\n<p>As previously stated, t<span style=\"font-size: revert; color: initial;\">he ETW-Ti event feed is normally only accessible to security products like EDR. However, in the above function, we see that any unprotected process can disable some logging features of another process <strong>without proving to the system it is a legitimate consumer of the ETW-Ti feed (e.g., an EDR)<\/strong>.<\/span><\/p>\n<p>It is important to note that EDR often <strong>correlate multiple events<\/strong> to construct alerts, in order not to generate <strong>false positive<\/strong> results. For instance, a LSASS dumping is often divided in multiple steps:<\/p>\n<ul>\n<li>The opening of a handle to the <em><strong>lsass.exe<\/strong> <\/em>process having <em><strong>PROCESS_VM_READ<\/strong><\/em> access;<\/li>\n<li>The actual reads of all relevant memory ranges;<\/li>\n<li>The creation of a minidump file.<\/li>\n<\/ul>\n<p>If only the <em>handle<\/em> creation event exists, but the read events are <strong>not logged by ETW-Ti<\/strong> and the minidump file is encrypted or never written on disk, the EDR <strong>might not raise alerts<\/strong> regarding a LSASS process dumping, lacking evidence to do so.<\/p>\n<h2>Affected versions of Windows<\/h2>\n<h3>Differences between Windows 10 and 11<\/h3>\n<p>The same analysis was performed on the <em><strong>NtSetInformationProcess<\/strong> <\/em>code of Windows 11&#8217;s kernel.<\/p>\n<figure id=\"attachment_21163\" aria-describedby=\"caption-attachment-21163\" style=\"width: 1779px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-21163\" src=\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/09\/EDRbypass-NtSetInformationProcessImplemWin11Rectangle.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-NtSetInformationProcessImplemWin11Rectangle.png 1779w, https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/09\/EDRbypass-NtSetInformationProcessImplemWin11Rectangle-268x191.png 268w, https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/09\/EDRbypass-NtSetInformationProcessImplemWin11Rectangle-55x39.png 55w, https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/09\/EDRbypass-NtSetInformationProcessImplemWin11Rectangle-768x547.png 768w, https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/09\/EDRbypass-NtSetInformationProcessImplemWin11Rectangle-1536x1095.png 1536w\" sizes=\"auto, (max-width: 1779px) 100vw, 1779px\" \/><figcaption id=\"caption-attachment-21163\" class=\"wp-caption-text\">Reverse-engineered source code of <em><strong>NtSetInformationProcess<\/strong> <\/em>on Windows 11<\/figcaption><\/figure>\n<p>The code shows two main differences. The first, and most important: the protection level of the process calling <em><strong>NtSetInformationProcess<\/strong> <\/em>is checked to \u201cdominate\u201d the <em><strong>ANTIMALWARE_LIGHT<\/strong> <\/em>level, using the call to <strong><em>EtwCheckSecurityLoggerAccess<\/em><\/strong>. A protection level is said to dominate another, if both following statements are true:<\/p>\n<ul>\n<li>The protection type (<em><strong>Protected<\/strong><\/em>, <em><strong>Protected Light<\/strong><\/em>, or <em><strong>Unprotected<\/strong><\/em>) is identical or stronger than the other protection level (<em><strong>Protected<\/strong> <\/em>is \u201cstronger\u201d than <strong><em>Protected Light<\/em><\/strong>, which is stronger than <strong><em>Unprotected<\/em><\/strong>, of course)<\/li>\n<li>The <strong><em>Signer<\/em> <\/strong>dominates that of the other protection level, according to rules that are hardcoded in the Windows Kernel (reversed from the <em><strong>RtlProtectedAccess<\/strong><\/em> structure). The following graph describes these rules :<\/li>\n<\/ul>\n<figure id=\"attachment_21148\" aria-describedby=\"caption-attachment-21148\" style=\"width: 703px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-21148\" 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=\"703\" height=\"355\" 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: 703px) 100vw, 703px\" \/><figcaption id=\"caption-attachment-21148\" class=\"wp-caption-text\">Protected processes &#8220;domination&#8221; between different signers<\/figcaption><\/figure>\n<p>This means that only a <em><strong>Protected<\/strong> <\/em>or a <strong><em>Protected Light<\/em><\/strong> process with a signer being <em><strong>WinSystem<\/strong><\/em>, <em><strong>WinTcb<\/strong><\/em>, <strong><em>Windows<\/em> <\/strong>or <strong><em>Antimalware<\/em><\/strong> (i.e. a system component or a security product <strong>cryptographically signed by Microsoft as such<\/strong>) is authorized to use the <em><strong>NtSetInformationProcess<\/strong> <\/em>API to disable ETW-Ti logging features on Windows 11. This is an important improvement, as it sets a <strong>consistent boundary<\/strong> between <strong>security products and features<\/strong> on one side, and <strong>other processes<\/strong> on the other.&nbsp;<\/p>\n<p>The second difference between Windows 11 and Windows 10\u2019s implementation of <em><strong>NtSetInformationProcess<\/strong> <\/em>is that <em><strong>n<\/strong><strong><em>ew <\/em>logging feature bits<\/strong><\/em> seem to be writable with the API: <em><strong>EnableProcessLocalExecProtectVmLogging<\/strong> <\/em>and <em><strong>EnableProcessRemoteExecProtectVmLogging<\/strong><\/em>, seemingly used to enable\/disable the monitoring of operations <strong>making memory executable<\/strong>.<\/p>\n<p>As a side note, this feature seems either bugged or not completely implemented yet, since in the code above, the bits are not reset by the bitwise AND operation (<em><strong>InterlockedAnd<\/strong><\/em>), the corresponding features thus cannot be turned off using this API.<\/p>\n<h3>Exact scope of affected versions<\/h3>\n<p>Analysis of various kernel builds across different Windows versions showed that <strong>the first available build of Windows 11<\/strong> (21H2, version 10.0.22000.194) <strong>already implements the security check<\/strong> performed by <strong><em>EtwCheckSecurityLoggerAccess <\/em><\/strong>previously described<strong><em>.<\/em><\/strong><\/p>\n<p>On the other side, in the <strong>last available version of Windows 10<\/strong> at the time of writing (22H2, version 10.0.19041.3393), the <strong>security check is still absent<\/strong>, while this build being 2 years more recent. This very likely indicates that Microsoft is well aware of the problem and does not patch the weakness voluntarily, likely for retro-compatibility reasons.<\/p>\n<p>The different feature bits and their related handling by <em><strong>NtSetInformationProcess<\/strong><\/em> appeared progressively during Windows 10&#8217;s product life. The following table sums up the affected versions:<\/p>\n<table style=\"height: 372px; width: 100%; border-collapse: collapse; border-style: solid;\"><caption>&#x26a0; : ETWTi logging function does not exist yet<br>&#x274c; : ETWTi logging can be disabled<br>&#x2705; : ETWTi logging cannot be disabled<\/caption>\n<tbody>\n<tr style=\"height: 118px;\">\n<td style=\"width: 20%; height: 118px; text-align: center;\">&nbsp;<\/td>\n<td style=\"width: 14.4048%; height: 118px; text-align: center;\">\n<p><strong>Win10<\/strong><\/p>\n<p><strong>1507 -&gt; 1703<\/strong><\/p>\n<\/td>\n<td style=\"width: 14.9999%; height: 118px; text-align: center;\">\n<p><strong>Win10<\/strong><\/p>\n<p><strong>1709 -&gt; 1803<\/strong><\/p>\n<\/td>\n<td style=\"width: 15.2381%; height: 118px; text-align: center;\">\n<p><strong>Win10<\/strong><\/p>\n<p><strong>1809 -&gt; 22H2<\/strong><\/p>\n<\/td>\n<td style=\"width: 15.3571%; height: 118px; text-align: center;\">\n<p><strong>Win11<\/strong><\/p>\n<p><strong> 21H2 -&gt; 22H2<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 68px;\">\n<td style=\"width: 20%; height: 68px; text-align: center;\"><strong>Read virtual memory operation<\/strong><\/td>\n<td style=\"width: 14.4048%; height: 68px; text-align: center;\">&#x26a0;<\/td>\n<td style=\"width: 14.9999%; height: 68px; text-align: center;\">&#x274c;<\/td>\n<td style=\"width: 15.2381%; height: 68px; text-align: center;\">&#x274c;<\/td>\n<td style=\"width: 15.3571%; height: 68px; text-align: center;\">\n<p>&#x2705;<\/p>\n<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"width: 20%; height: 46px; text-align: center;\"><strong>Write virtual memory operation<\/strong><\/td>\n<td style=\"width: 14.4048%; height: 46px; text-align: center;\">&#x26a0;<\/td>\n<td style=\"width: 14.9999%; height: 46px; text-align: center;\">&#x274c;<\/td>\n<td style=\"width: 15.2381%; height: 46px; text-align: center;\">&#x274c;<\/td>\n<td style=\"width: 15.3571%; height: 46px; text-align: center;\">&#x2705;<\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"width: 20%; height: 70px; text-align: center;\"><strong>Process suspension \/ resuming operations<\/strong><\/td>\n<td style=\"width: 14.4048%; height: 70px; text-align: center;\">&#x26a0;<\/td>\n<td style=\"width: 14.9999%; height: 70px; text-align: center;\">&#x26a0;<\/td>\n<td style=\"width: 15.2381%; height: 70px; text-align: center;\">&#x274c;<\/td>\n<td style=\"width: 15.3571%; height: 70px; text-align: center;\">&#x2705;<\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"width: 20%; height: 70px; text-align: center;\"><strong>Thread suspension \/ resuming operations<\/strong><\/td>\n<td style=\"width: 14.4048%; height: 70px; text-align: center;\">&#x26a0;<\/td>\n<td style=\"width: 14.9999%; height: 70px; text-align: center;\">&#x26a0;<\/td>\n<td style=\"width: 15.2381%; height: 70px; text-align: center;\">&#x274c;<\/td>\n<td style=\"width: 15.3571%; height: 70px; text-align: center;\">&#x2705;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2>Final words<\/h2>\n<p>In conclusion, the mechanism described in this article actually allows an <strong>elevated malicious program<\/strong> wishing to <strong>perform nefarious actions<\/strong> (process injection, LSASS dumping, process hollowing, etc.), to <strong>carefully disable related telemetry<\/strong> before doing it, removing critical evidence from EDR monitoring, thus greatly improving its chances of <strong>not being detected<\/strong>.<\/p>\n<p>Multiple pieces of evidence show that<strong> Microsoft is aware of the weakness<\/strong>, but is <strong>not changing the API behavior retroactively<\/strong> on Windows 10, likely due to retro-compatibility issues.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>While studying internals of a mechanism used by all EDR software to get information about processes activities on Windows, we came across a way for malicious processes to disable the generation of some security events related to process interactions. This&#8230;<\/p>\n","protected":false},"author":1416,"featured_media":21637,"comment_status":"open","ping_status":"closed","sticky":true,"template":"page-templates\/tmpl-one.php","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[36,3273],"tags":[4300,3124,4301],"coauthors":[3896],"class_list":["post-21101","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cybersecurity-digital-trust","category-ethical-hacking-indicent-response-en","tag-bypass-2","tag-edr-en","tag-windows-10-2"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>A universal EDR bypass built in Windows 10 - RiskInsight<\/title>\n<meta name=\"description\" content=\"A security design failure in Windows 10 allows a malware to disable some telemetry used by EDR, thus to perform actions without raising alerts\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A universal EDR bypass built in Windows 10 - RiskInsight\" \/>\n<meta property=\"og:description\" content=\"A security design failure in Windows 10 allows a malware to disable some telemetry used by EDR, thus to perform actions without raising alerts\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/\" \/>\n<meta property=\"og:site_name\" content=\"RiskInsight\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-09T15:59:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-09T16:00:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/10\/computer-1591018_1280.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"837\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Maxime Meignan\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Maxime Meignan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/\"},\"author\":{\"name\":\"Maxime Meignan\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/person\/7cb6f70eb43bca0ed40d795d10f42c9a\"},\"headline\":\"A universal EDR bypass built in Windows 10\",\"datePublished\":\"2023-10-09T15:59:50+00:00\",\"dateModified\":\"2023-10-09T16:00:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/\"},\"wordCount\":1796,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/10\/computer-1591018_1280.jpg\",\"keywords\":[\"bypass\",\"EDR\",\"Windows 10\"],\"articleSection\":[\"Cybersecurity &amp; Digital Trust\",\"Ethical Hacking &amp; Incident Response\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/\",\"name\":\"A universal EDR bypass built in Windows 10 - RiskInsight\",\"isPartOf\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/10\/computer-1591018_1280.jpg\",\"datePublished\":\"2023-10-09T15:59:50+00:00\",\"dateModified\":\"2023-10-09T16:00:17+00:00\",\"description\":\"A security design failure in Windows 10 allows a malware to disable some telemetry used by EDR, thus to perform actions without raising alerts\",\"breadcrumb\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#primaryimage\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/10\/computer-1591018_1280.jpg\",\"contentUrl\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/10\/computer-1591018_1280.jpg\",\"width\":1280,\"height\":837},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.riskinsight-wavestone.com\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A universal EDR bypass built in Windows 10\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#website\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/en\/\",\"name\":\"RiskInsight\",\"description\":\"The cybersecurity &amp; digital trust blog by Wavestone&#039;s consultants\",\"publisher\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.riskinsight-wavestone.com\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#organization\",\"name\":\"Wavestone\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/08\/Monogramme\u2013W\u2013NEGA-RGB-50x50-1.png\",\"contentUrl\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/08\/Monogramme\u2013W\u2013NEGA-RGB-50x50-1.png\",\"width\":50,\"height\":50,\"caption\":\"Wavestone\"},\"image\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/person\/7cb6f70eb43bca0ed40d795d10f42c9a\",\"name\":\"Maxime Meignan\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/en\/author\/maxime-meignan\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A universal EDR bypass built in Windows 10 - RiskInsight","description":"A security design failure in Windows 10 allows a malware to disable some telemetry used by EDR, thus to perform actions without raising alerts","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/","og_locale":"en_US","og_type":"article","og_title":"A universal EDR bypass built in Windows 10 - RiskInsight","og_description":"A security design failure in Windows 10 allows a malware to disable some telemetry used by EDR, thus to perform actions without raising alerts","og_url":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/","og_site_name":"RiskInsight","article_published_time":"2023-10-09T15:59:50+00:00","article_modified_time":"2023-10-09T16:00:17+00:00","og_image":[{"width":1280,"height":837,"url":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/10\/computer-1591018_1280.jpg","type":"image\/jpeg"}],"author":"Maxime Meignan","twitter_misc":{"Written by":"Maxime Meignan","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#article","isPartOf":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/"},"author":{"name":"Maxime Meignan","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/person\/7cb6f70eb43bca0ed40d795d10f42c9a"},"headline":"A universal EDR bypass built in Windows 10","datePublished":"2023-10-09T15:59:50+00:00","dateModified":"2023-10-09T16:00:17+00:00","mainEntityOfPage":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/"},"wordCount":1796,"commentCount":0,"publisher":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#organization"},"image":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#primaryimage"},"thumbnailUrl":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/10\/computer-1591018_1280.jpg","keywords":["bypass","EDR","Windows 10"],"articleSection":["Cybersecurity &amp; Digital Trust","Ethical Hacking &amp; Incident Response"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/","url":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/","name":"A universal EDR bypass built in Windows 10 - RiskInsight","isPartOf":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#primaryimage"},"image":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#primaryimage"},"thumbnailUrl":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/10\/computer-1591018_1280.jpg","datePublished":"2023-10-09T15:59:50+00:00","dateModified":"2023-10-09T16:00:17+00:00","description":"A security design failure in Windows 10 allows a malware to disable some telemetry used by EDR, thus to perform actions without raising alerts","breadcrumb":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#primaryimage","url":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/10\/computer-1591018_1280.jpg","contentUrl":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2023\/10\/computer-1591018_1280.jpg","width":1280,"height":837},{"@type":"BreadcrumbList","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2023\/10\/a-universal-edr-bypass-built-in-windows-10\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.riskinsight-wavestone.com\/en\/"},{"@type":"ListItem","position":2,"name":"A universal EDR bypass built in Windows 10"}]},{"@type":"WebSite","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#website","url":"https:\/\/www.riskinsight-wavestone.com\/en\/","name":"RiskInsight","description":"The cybersecurity &amp; digital trust blog by Wavestone&#039;s consultants","publisher":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.riskinsight-wavestone.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#organization","name":"Wavestone","url":"https:\/\/www.riskinsight-wavestone.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/08\/Monogramme\u2013W\u2013NEGA-RGB-50x50-1.png","contentUrl":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/08\/Monogramme\u2013W\u2013NEGA-RGB-50x50-1.png","width":50,"height":50,"caption":"Wavestone"},"image":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/person\/7cb6f70eb43bca0ed40d795d10f42c9a","name":"Maxime Meignan","url":"https:\/\/www.riskinsight-wavestone.com\/en\/author\/maxime-meignan\/"}]}},"_links":{"self":[{"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/posts\/21101","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/users\/1416"}],"replies":[{"embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/comments?post=21101"}],"version-history":[{"count":41,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/posts\/21101\/revisions"}],"predecessor-version":[{"id":21641,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/posts\/21101\/revisions\/21641"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/media\/21637"}],"wp:attachment":[{"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/media?parent=21101"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/categories?post=21101"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/tags?post=21101"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/coauthors?post=21101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}