Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: https://securelist.com/feed/

  1. <?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
  2. xmlns:content="http://purl.org/rss/1.0/modules/content/"
  3. xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  4. xmlns:dc="http://purl.org/dc/elements/1.1/"
  5. xmlns:atom="http://www.w3.org/2005/Atom"
  6. xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  7. xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  8. >
  9.  
  10. <channel>
  11. <title>Securelist</title>
  12. <atom:link href="https://securelist.com/feed/" rel="self" type="application/rss+xml" />
  13. <link>https://securelist.com</link>
  14. <description></description>
  15. <lastBuildDate>Fri, 17 Oct 2025 10:01:45 +0000</lastBuildDate>
  16. <language>en-US</language>
  17. <sy:updatePeriod>
  18. hourly </sy:updatePeriod>
  19. <sy:updateFrequency>
  20. 1 </sy:updateFrequency>
  21. <generator>https://wordpress.org/?v=6.8.3</generator>
  22.  
  23. <image>
  24. <url>https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2018/11/06125514/cropped-sl_favicon-32x32.png</url>
  25. <title>Securelist</title>
  26. <link>https://securelist.com</link>
  27. <width>32</width>
  28. <height>32</height>
  29. </image>
  30. <item>
  31. <title>Post-exploitation framework now also delivered via npm</title>
  32. <link>https://securelist.com/adaptixc2-agent-found-in-an-npm-package/117784/</link>
  33. <comments>https://securelist.com/adaptixc2-agent-found-in-an-npm-package/117784/#respond</comments>
  34. <dc:creator><![CDATA[Vladimir Gursky, Artem Ushkov]]></dc:creator>
  35. <pubDate>Fri, 17 Oct 2025 10:00:33 +0000</pubDate>
  36. <category><![CDATA[Incidents]]></category>
  37. <category><![CDATA[Malware descriptions]]></category>
  38. <category><![CDATA[Malware Technologies]]></category>
  39. <category><![CDATA[Linux]]></category>
  40. <category><![CDATA[Microsoft Windows]]></category>
  41. <category><![CDATA[Apple MacOS]]></category>
  42. <category><![CDATA[x64]]></category>
  43. <category><![CDATA[Malware Descriptions]]></category>
  44. <category><![CDATA[ARM]]></category>
  45. <category><![CDATA[Malware]]></category>
  46. <category><![CDATA[Supply-chain attack]]></category>
  47. <category><![CDATA[Open source]]></category>
  48. <category><![CDATA[Windows malware]]></category>
  49. <category><![CDATA[Unix and macOS malware]]></category>
  50. <category><![CDATA[Web threats]]></category>
  51. <guid isPermaLink="false">https://kasperskycontenthub.com/securelist/?p=117784</guid>
  52.  
  53. <description><![CDATA[The npm registry contains a malicious package that downloads the AdaptixC2 agent onto victims' devices, Kaspersky experts have found. The threat targets Windows, Linux, and macOS.]]></description>
  54. <content:encoded><![CDATA[<p><img width="990" height="400" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/17081221/adaptix-featured-image-990x400.jpg" class="attachment-securelist-huge-promo size-securelist-huge-promo wp-post-image" alt="" decoding="async" loading="lazy" /></p><h2 id="incident-description">Incident description</h2>
  55. <p>The first version of the AdaptixC2 post-exploitation framework, which can be considered an alternative to the well-known Cobalt Strike, was made publicly available in early 2025. In spring of 2025, the framework was <a href="https://x.com/Unit42_Intel/status/1925206262184026156" target="_blank" rel="noopener">first observed</a> being used for malicious means.</p>
  56. <p>In October 2025, Kaspersky experts found that the npm ecosystem contained a malicious package with a fairly convincing name: <code>https-proxy-utils</code>. It was posing as a utility for using proxies within projects. At the time of this post, the package had already been taken down.</p>
  57. <p>The name of the package closely resembles popular legitimate packages: <code>http-proxy-agent</code>, which has approximately 70 million weekly downloads, and <code>https-proxy-agent</code> with 90 million downloads respectively. Furthermore, the advertised proxy-related functionality was cloned from another popular legitimate package <code>proxy-from-env</code>, which boasts 50 million weekly downloads. However, the threat actor injected a post-install script into <code>https-proxy-utils</code>, which downloads and executes a payload containing the AdaptixC2 agent.</p>
  58. <div id="attachment_117785" style="width: 1486px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155133/adaptixc2-agent-found1.png" class="magnificImage"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-117785" class="size-full wp-image-117785" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155133/adaptixc2-agent-found1.png" alt="Metadata for the malicious (left) and legitimate (right) packages" width="1476" height="518" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155133/adaptixc2-agent-found1.png 1476w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155133/adaptixc2-agent-found1-300x105.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155133/adaptixc2-agent-found1-1024x359.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155133/adaptixc2-agent-found1-768x270.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155133/adaptixc2-agent-found1-997x350.png 997w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155133/adaptixc2-agent-found1-740x260.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155133/adaptixc2-agent-found1-798x280.png 798w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155133/adaptixc2-agent-found1-800x281.png 800w" sizes="(max-width: 1476px) 100vw, 1476px" /></a><p id="caption-attachment-117785" class="wp-caption-text">Metadata for the malicious (left) and legitimate (right) packages</p></div>
  59. <h2 id="os-specific-adaptation">OS-specific adaptation</h2>
  60. <p>The script includes various payload delivery methods for different operating systems. The package includes loading mechanisms for Windows, Linux, and macOS. In each OS, it uses specific techniques involving system or user directories to load and launch the implant.</p>
  61. <p>In Windows, the AdaptixC2 agent is dropped as a DLL file into the system directory <code>C:\Windows\Tasks</code>. It is then executed via <a href="https://attack.mitre.org/techniques/T1574/001/" target="_blank" rel="noopener">DLL sideloading</a>. The JS script copies the legitimate <code>msdtc.exe</code> file to the same directory and executes it, thus loading the malicious DLL.</p>
  62. <div id="attachment_117786" style="width: 688px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155221/adaptixc2-agent-found2.png" class="magnificImage"><img decoding="async" aria-describedby="caption-attachment-117786" class="size-full wp-image-117786" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155221/adaptixc2-agent-found2.png" alt="Deobfuscated Windows-specific code for loading AdaptixC2" width="678" height="569" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155221/adaptixc2-agent-found2.png 678w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155221/adaptixc2-agent-found2-300x252.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155221/adaptixc2-agent-found2-417x350.png 417w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155221/adaptixc2-agent-found2-334x280.png 334w" sizes="(max-width: 678px) 100vw, 678px" /></a><p id="caption-attachment-117786" class="wp-caption-text">Deobfuscated Windows-specific code for loading AdaptixC2</p></div>
  63. <p>In macOS, the script downloads the payload as an executable file into the user&#8217;s autorun directory: <code>Library/LaunchAgents</code>. The <code>postinstall.js</code> script also drops a plist autorun configuration file into this directory. Before downloading AdaptixC2, the script checks the target architecture (x64 or ARM) and fetches the appropriate payload variant.</p>
  64. <div id="attachment_117787" style="width: 633px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155305/adaptixc2-agent-found3.png" class="magnificImage"><img decoding="async" aria-describedby="caption-attachment-117787" class="size-full wp-image-117787" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155305/adaptixc2-agent-found3.png" alt="Deobfuscated macOS-specific code for loading AdaptixC2" width="623" height="726" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155305/adaptixc2-agent-found3.png 623w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155305/adaptixc2-agent-found3-257x300.png 257w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155305/adaptixc2-agent-found3-300x350.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155305/adaptixc2-agent-found3-240x280.png 240w" sizes="(max-width: 623px) 100vw, 623px" /></a><p id="caption-attachment-117787" class="wp-caption-text">Deobfuscated macOS-specific code for loading AdaptixC2</p></div>
  65. <p>In Linux, the framework&#8217;s agent is downloaded into the temporary directory <code>/tmp/.fonts-unix</code>. The script delivers a binary file tailored to the specific architecture (x64 or ARM) and then assigns it execute permissions.</p>
  66. <div id="attachment_117788" style="width: 889px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155351/adaptixc2-agent-found4.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117788" class="size-full wp-image-117788" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155351/adaptixc2-agent-found4.png" alt="Deobfuscated Linux-specific code for loading AdaptixC2" width="879" height="549" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155351/adaptixc2-agent-found4.png 879w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155351/adaptixc2-agent-found4-300x187.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155351/adaptixc2-agent-found4-768x480.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155351/adaptixc2-agent-found4-560x350.png 560w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155351/adaptixc2-agent-found4-740x462.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155351/adaptixc2-agent-found4-448x280.png 448w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16155351/adaptixc2-agent-found4-800x500.png 800w" sizes="auto, (max-width: 879px) 100vw, 879px" /></a><p id="caption-attachment-117788" class="wp-caption-text">Deobfuscated Linux-specific code for loading AdaptixC2</p></div>
  67. <p>Once the AdaptixC2 framework agent is deployed on the victim&#8217;s device, the attacker gains capabilities for remote access, command execution, file and process management, and various methods for achieving persistence. This both allows the attacker to maintain consistent access and enables them to conduct network reconnaissance and deploy subsequent stages of the attack.</p>
  68. <h2 id="conclusion">Conclusion</h2>
  69. <p>This is not the first attack targeting the npm registry in recent memory. A month ago, similar infection methods utilizing a post-install script were employed in the <a href="https://securelist.com/shai-hulud-worm-infects-500-npm-packages-in-a-supply-chain-attack/117547/" target="_blank" rel="noopener">high-profile incident</a> involving the Shai-Hulud worm, which infected more than 500 packages<strong>. </strong>The AdaptixC2 incident clearly demonstrates the growing trend of abusing open-source software ecosystems, like npm, as an attack vector. Threat actors are <a href="https://securelist.com/tag/supply-chain-attack/" target="_blank" rel="noopener">increasingly exploiting the trusted open-source supply chain</a> to distribute post-exploitation framework agents and other forms of malware. Users and organizations involved in development or using open-source software from ecosystems like npm in their products are susceptible to this threat type.</p>
  70. <p>To stay safe, be vigilant when installing open-source modules: verify the exact name of the package you are downloading, and more thoroughly vet unpopular and new repositories. When using popular modules, it is critical to monitor <a href="https://www.kaspersky.com/open-source-feed?icid=gl_sl_post-link-open-source-feed_sm-team_cc8b77692a32ebbc" target="_blank" rel="noopener">frequently updated feeds on compromised packages and libraries</a>.</p>
  71. <h2 id="indicators-of-compromise">Indicators of compromise</h2>
  72. <p><strong>Package name</strong><br />
  73. https-proxy-utils</p>
  74. <p><strong>Hashes</strong><br />
  75. <a href="https://opentip.kaspersky.com/dfbc0606e16a89d980c9b674385b448e/results?icid=gl_sl_post-link-opentip_sm-team_9a4fb45257066833&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">DFBC0606E16A89D980C9B674385B448E</a> – package hash<br />
  76. <a href="https://opentip.kaspersky.com/b8e27a88730b124868c1390f3bc42709/results?icid=gl_sl_post-link-opentip_sm-team_c62dd3c8ffe2ed1b&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">B8E27A88730B124868C1390F3BC42709</a><br />
  77. <a href="https://opentip.kaspersky.com/669bdbef9e92c3526302ca37dc48d21f/results?icid=gl_sl_post-link-opentip_sm-team_972755ad1f67ef7f&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">669BDBEF9E92C3526302CA37DC48D21F</a><br />
  78. <a href="https://opentip.kaspersky.com/edac632c9b9ff2a2da0eacaab63627f4/results?icid=gl_sl_post-link-opentip_sm-team_cf39ec80bf7cdde8&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">EDAC632C9B9FF2A2DA0EACAAB63627F4</a><br />
  79. <a href="https://opentip.kaspersky.com/764c9e6b6f38df11dc752cb071ae26f9/results?icid=gl_sl_post-link-opentip_sm-team_375c37e00fb6f5e7&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">764C9E6B6F38DF11DC752CB071AE26F9</a><br />
  80. <a href="https://opentip.kaspersky.com/04931b7dfd123e6026b460d87d842897/results?icid=gl_sl_post-link-opentip_sm-team_76f48f8715dd6b3c&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">04931B7DFD123E6026B460D87D842897</a></p>
  81. <p><strong>Network indicators</strong><br />
  82. <a href="https://opentip.kaspersky.com/cloudcenter.top%2fsys%2fupdate/?icid=gl_sl_post-link-opentip_sm-team_67aaee30ceb5fe92&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">cloudcenter[.]top/sys/update</a><br />
  83. <a href="https://opentip.kaspersky.com/cloudcenter.top%2fmacos_update_arm/?icid=gl_sl_post-link-opentip_sm-team_87ea43b039efcf34&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">cloudcenter[.]top/macos_update_arm</a><br />
  84. <a href="https://opentip.kaspersky.com/cloudcenter.top%2fmacos_update_x64/?icid=gl_sl_post-link-opentip_sm-team_0bdec936559c877d&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">cloudcenter[.]top/macos_update_x64</a><br />
  85. <a href="https://opentip.kaspersky.com/cloudcenter.top%2fmacosupdate%5b.%5dplist/?icid=gl_sl_post-link-opentip_sm-team_423c8ff0ce467cbf&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">cloudcenter[.]top/macosUpdate[.]plist</a><br />
  86. <a href="https://opentip.kaspersky.com/cloudcenter.top%2flinux_update_x64/?icid=gl_sl_post-link-opentip_sm-team_9b4e0d2a0cdfec13&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">cloudcenter[.]top/linux_update_x64</a><br />
  87. <a href="https://opentip.kaspersky.com/cloudcenter.top%2flinux_update_arm/?icid=gl_sl_post-link-opentip_sm-team_16b93246956b263a&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">cloudcenter[.]top/linux_update_arm</a></p>
  88. ]]></content:encoded>
  89. <wfw:commentRss>https://securelist.com/adaptixc2-agent-found-in-an-npm-package/117784/feed/</wfw:commentRss>
  90. <slash:comments>0</slash:comments>
  91. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/17081221/adaptix-featured-image.jpg" width="2000" height="1000"><media:keywords>full</media:keywords></media:content>
  92. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/17081221/adaptix-featured-image-1024x512.jpg" width="1024" height="512"><media:keywords>large</media:keywords></media:content>
  93. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/17081221/adaptix-featured-image-300x150.jpg" width="300" height="150"><media:keywords>medium</media:keywords></media:content>
  94. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/17081221/adaptix-featured-image-150x150.jpg" width="150" height="150"><media:keywords>thumbnail</media:keywords></media:content>
  95. </item>
  96. <item>
  97. <title>SEO spam and hidden links: how to protect your website and your reputation</title>
  98. <link>https://securelist.com/seo-spam-hidden-links/117782/</link>
  99. <comments>https://securelist.com/seo-spam-hidden-links/117782/#respond</comments>
  100. <dc:creator><![CDATA[Anna Larkina]]></dc:creator>
  101. <pubDate>Fri, 17 Oct 2025 07:00:55 +0000</pubDate>
  102. <category><![CDATA[Publications]]></category>
  103. <category><![CDATA[Website Hacks]]></category>
  104. <category><![CDATA[Content Filtering]]></category>
  105. <category><![CDATA[XSS]]></category>
  106. <category><![CDATA[Vulnerabilities]]></category>
  107. <category><![CDATA[SQL injection]]></category>
  108. <category><![CDATA[SEO]]></category>
  109. <category><![CDATA[Black Hat SEO]]></category>
  110. <category><![CDATA[Web threats]]></category>
  111. <guid isPermaLink="false">https://kasperskycontenthub.com/securelist/?p=117782</guid>
  112.  
  113. <description><![CDATA[Are you seeing your website traffic drop, and security systems blocking it for pornographic content that is not there? Hidden links, a type of SEO spam, could be the cause.]]></description>
  114. <content:encoded><![CDATA[<p><img width="990" height="400" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16210132/SL-seo-spam-featured-990x400.jpg" class="attachment-securelist-huge-promo size-securelist-huge-promo wp-post-image" alt="" decoding="async" loading="lazy" /></p><p>When analyzing the content of websites in an attempt to determine what category it belongs to, we sometimes get an utterly unexpected result. It could be the official page of a metal structures manufacturer or online flower shop, or, say, a law firm website, with completely neutral content, but our solutions would place it squarely in the &#8220;Adult content&#8221; category. On the surface, it is completely unclear how our systems arrived at that verdict, but one look at the content categorization engine&#8217;s page analysis log clears it up.</p>
  115. <h2 id="invisible-html-block-or-seo-spam">Invisible HTML block, or SEO spam</h2>
  116. <p>The website falls into the questionable category because it contains an HTML block with links to third-party sites, invisible to regular users. These sites typically host content of a certain kind – which, in our experience, is most often pornographic or gambling materials – and in the hidden block, you will find relevant keywords along with the links. These practices are a type of Black Hat SEO, or SEO spam: the manipulation of website search rankings in violation of ethical search engine optimization (SEO) principles. Although there are many techniques that attackers use to raise or lower websites in search engine rankings, we have encountered hidden blocks more frequently lately, so this is what this post focuses on.</p>
  117. <p>Website owners rarely suspect a problem until they face obvious negative consequences, such as a sharp drop in traffic, warnings from search engines, or complaints from visitors. Those who use Kaspersky solutions may see their sites blocked due to being categorized as prohibited, a sign that something is wrong with them. Our engine detects both links and their descriptions that are present in a block like that.</p>
  118. <h2 id="how-hidden-links-work">How hidden links work</h2>
  119. <p>Hyperlinks that are invisible to regular users but still can be scanned by various analytical systems, such as search engines or our web categorization engine, are known as &#8220;hidden links&#8221;. They are often used for scams, inflating website rankings (positions in search results), or pushing down the ranking of a victim website.</p>
  120. <p>To understand how this works, let us look at how today&#8217;s SEO functions in the first place. A series of algorithms is responsible for ranking websites in search results, such as those served by Google. The oldest and most relevant one to this article is known as <a href="https://en.wikipedia.org/wiki/PageRank" target="_blank" rel="noopener">PageRank</a>. The PageRank metric, or weight in the context of this algorithm, is a numerical value that determines the importance of a specific page. The higher the number of links from other websites pointing to a page, and the greater those websites&#8217; own weights, the higher the page&#8217;s PageRank.</p>
  121. <p>So, to boost their own website&#8217;s ranking in search results, the malicious actor places hidden links to it on the victim website. The higher the victim website&#8217;s PageRank, the more attractive it is to the attacker. High-traffic platforms like blogs or forums are of particular interest to them.</p>
  122. <p>However, PageRank is no longer the only method search engines use to measure a website&#8217;s value. Google, for example, also applies other algorithms, such as the artificial intelligence-based <a href="https://en.wikipedia.org/wiki/RankBrain" target="_blank" rel="noopener">RankBrain</a> or the <a href="https://en.wikipedia.org/wiki/BERT_(language_model)" target="_blank" rel="noopener">BERT language model</a>. These algorithms use more sophisticated metrics, such as <a href="https://en.wikipedia.org/wiki/Domain_authority" target="_blank" rel="noopener">Domain Authority</a> (that is, how much authority the website has on the subject the user is asking about), link quality, and context. Placing links on a website with a high PageRank can still be beneficial, but this tactic has a severely limited effect due to advanced algorithms and filters aimed at demoting sites that break the search engine&#8217;s rules. Examples of these filters are as follows:</p>
  123. <ul>
  124. <li><a href="https://en.wikipedia.org/wiki/Google_Penguin" target="_blank" rel="noopener">Google Penguin</a>, which identifies and penalizes websites that use poor-quality or manipulative links, including hidden ones, to boost their own rankings. When links like these are detected, their weight can be zeroed out, and the ranking may be lowered for both sites: the victim and the spam website.</li>
  125. <li><a href="https://en.wikipedia.org/wiki/Google_Panda" target="_blank" rel="noopener">Google Panda</a>, which evaluates content quality. If the website has a high PageRank, but the content is of low quality, duplicated, auto-generated, or otherwise substandard, the site may be demoted.</li>
  126. <li><a href="https://spambrain.com/" target="_blank" rel="noopener">Google SpamBrain</a>, which uses machine learning to analyze HTML markup, page layouts, and so forth to identify manipulative patterns. This algorithm is integrated into Google Penguin.</li>
  127. </ul>
  128. <h2 id="what-a-black-hat-seo-block-looks-like-in-a-pages-html-markup">What a Black Hat SEO block looks like in a page&#8217;s HTML markup</h2>
  129. <p>Let us look at some real examples of hidden blocks we have seen on legitimate websites and determine the attributes by which these blocks can be identified.</p>
  130. <h3 id="example-1">Example 1</h3>
  131. <pre class="urvanov-syntax-highlighter-plain-tag">&lt;div style="display: none;"&gt;
  132. افلام سكس اعتصاب &lt;a href="https://www.azcorts.com/" rel="dofollow" target="_self"&gt;azcorts.com&lt;/a&gt; قنوات جنسية
  133. free indian porn com &lt;a href="https://porngun.mobi" target="_self"&gt;porngun.mobi&lt;/a&gt; xharmaster
  134. 石原莉紅 &lt;a href="https://javclips.mobi/" target="_blank" title="javclips.mobi"&gt;javclips.mobi&lt;/a&gt; ちっぱい
  135. bank porn &lt;a href="https://pimpmpegs.net" target="_self" title="pimpmpegs.net free video porn"&gt;pimpmpegs.net&lt;/a&gt; wwwporm
  136. salamat lyrics tagalog &lt;a href="https://www.teleseryeone.com/" target="_blank" title="teleseryeone.com sandro marcos alexa miro"&gt;teleseryeone.com&lt;/a&gt; play desi
  137. &lt;/div&gt;
  138. &lt;div style="display: none;"&gt;
  139. كسى بيوجعنى &lt;a href="https://www.sexdejt.org/" rel="dofollow"&gt;sexdejt.org&lt;/a&gt; سكس سانى
  140. indian sex video bp &lt;a href="https://directorio-porno.com/" rel="dofollow" target="_self" title="directorio-porno.com"&gt;directorio-porno.com&lt;/a&gt; xvideos indian pussy
  141. swara bhaskar porn &lt;a href="https://greenporn.mobi" title="greenporn.mobi lesbian porn hq"&gt;greenporn.mobi&lt;/a&gt; kannada sexy video
  142. bp sex full &lt;a href="https://tubepornmix.info" target="_blank" title="tubepornmix.info aloha tube porn video"&gt;tubepornmix.info&lt;/a&gt; lily sex
  143. pinayflix pamasahe &lt;a href="https://www.gmateleserye.com/" rel="dofollow" target="_blank"&gt;gmateleserye.com&lt;/a&gt; family feud november 17
  144. &lt;/div&gt;
  145. &lt;div style="display: none;"&gt;
  146. sunny leone ki bp download &lt;a href="https://eroebony.info" target="_self" title="eroebony.info"&gt;eroebony.info&lt;/a&gt; hansika xvideos
  147. موقع سكس ايطالى &lt;a href="https://bibshe.com/" target="_self" title="bibshe.com سكس العادة السرية"&gt;bibshe.com&lt;/a&gt; صور احلى كس
  148. raja rani coupon result &lt;a href="https://booketube.mobi" rel="dofollow"&gt;booketube.mobi&lt;/a&gt; exercise sex videos
  149. indianbadwap &lt;a href="https://likeporn.mobi" rel="dofollow" target="_blank" title="likeporn.mobi free hd porn"&gt;likeporn.mobi&lt;/a&gt; rabi pirzada nude video
  150. marathi porn vidio &lt;a href="https://rajwap.biz" rel="dofollow" target="_blank" title="rajwap.biz"&gt;rajwap.biz&lt;/a&gt; www.livesex.com
  151. &lt;/div&gt;</pre>
  152. This example utilizes a simple CSS style,
  153. <span id="urvanov-syntax-highlighter-68f254acc263a365369805" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-o">&lt;</span><span class="crayon-e">div </span><span class="crayon-v">style</span><span class="crayon-o">=</span><span class="crayon-s">"display: none;"</span><span class="crayon-o">&gt;</span></span></span>. This is one of the most basic and widely known methods for concealing content; the parameter
  154. <span id="urvanov-syntax-highlighter-68f254acc263c130312974" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">display</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">none</span></span></span>; stands for &#8220;do not display&#8221;. We also see that each invisible
  155. <span id="urvanov-syntax-highlighter-68f254acc263d555824858" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-o">&lt;</span><span class="crayon-v">div</span><span class="crayon-o">&gt;</span></span></span> section contains a set of links to low-quality pornographic websites along with their keyword-stuffed descriptions. This clearly indicates spam, as the website where we found this block has no relation whatsoever to the type of content being linked to.</p>
  156. <p>Another sign of Black Hat SEO in the example is the attribute
  157. <span id="urvanov-syntax-highlighter-68f254acc263e586918587" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">rel</span><span class="crayon-o">=</span><span class="crayon-s">"dofollow"</span></span></span>. This instructs search engines that the link carries link juice, meaning it passes weight. Spammers intentionally set this attribute to transfer authority from the victim website to the ones they are promoting. In standard practice, webmasters may, conversely, use
  158. <span id="urvanov-syntax-highlighter-68f254acc2640909198748" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">rel</span><span class="crayon-o">=</span><span class="crayon-s">"nofollow"</span></span></span>, which signifies that the presence of the link on the site should not influence the ranking of the website where it leads.</p>
  159. <p>Thus, the combination of a hidden block (
  160. <span id="urvanov-syntax-highlighter-68f254acc2641719304235" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">display</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">none</span><span class="crayon-sy">;</span></span></span>) and a set of external pornographic (in this instance) links with the
  161. <span id="urvanov-syntax-highlighter-68f254acc2642585875620" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">rel</span><span class="crayon-o">=</span><span class="crayon-s">"dofollow"</span></span></span> attribute unequivocally point to a SEO spam injection.</p>
  162. <p>Note that all
  163. <span id="urvanov-syntax-highlighter-68f254acc2643806833762" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-o">&lt;</span><span class="crayon-v">div</span><span class="crayon-o">&gt;</span></span></span> sections are concentrated in one spot, at the end of the page, rather than scattered throughout the page code. This block demonstrates a classic Black Hat SEO approach.</p>
  164. <h3 id="example-2">Example 2</h3>
  165. <pre class="urvanov-syntax-highlighter-plain-tag">&lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;سكس انجليز &lt;a href="https://wfporn.com/" target="_self" title="wfporn.com افلام سحاق مترجم"&gt;wfporn.com&lt;/a&gt; سكس كلاسيك مترجم&lt;/div&gt;
  166. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;فيلم سكس &lt;a href="https://www.keep-porn.com/" rel="dofollow" target="_blank"&gt;keep-porn.com&lt;/a&gt; سكس هندى اغتصاب&lt;/div&gt;
  167. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;desi nude tumbler &lt;a href="https://www.desixxxv.net" title="desixxxv.net free hd porn video"&gt;desixxxv.net&lt;/a&gt; kanpur sexy video&lt;/div&gt;
  168. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;www wap sex video com &lt;a href="https://pornorado.mobi" target="_self"&gt;pornorado.mobi&lt;/a&gt; sexy film video mp4&lt;/div&gt;
  169. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;mom yes porn please &lt;a href="https://www.movsmo.net/" rel="dofollow" title="movsmo.net"&gt;movsmo.net&lt;/a&gt; yes porn please brazzers&lt;/div&gt;
  170. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;xxx download hd &lt;a href="https://fuxee.mobi" title="fuxee.mobi"&gt;fuxee.mobi&lt;/a&gt; fat woman sex&lt;/div&gt;
  171. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;bangalore xxx &lt;a href="https://bigassporntrends.com" rel="dofollow" target="_self" title="bigassporntrends.com"&gt;bigassporntrends.com&lt;/a&gt; sexy video kashmir&lt;/div&gt;
  172. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;xnxx sister sex &lt;a href="https://wetwap.info" rel="dofollow" target="_self" title="wetwap.info hd porn streaming"&gt;wetwap.info&lt;/a&gt; blue film a video&lt;/div&gt;
  173. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;tamilschoolsexvideo &lt;a href="https://tubetria.mobi" rel="dofollow" title="tubetria.mobi"&gt;tubetria.mobi&lt;/a&gt; sex free videos&lt;/div&gt;
  174. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;سكس من اجل المال مترجم &lt;a href="https://www.yesexyporn.com/" title="yesexyporn.com فوائد لحس الكس"&gt;yesexyporn.com&lt;/a&gt; نسوان شرميط&lt;/div&gt;
  175. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;kamapishi &lt;a href="https://desisexy.org/" target="_blank" title="desisexy.org free porn gay hd online"&gt;desisexy.org&lt;/a&gt; savita bhabhi xvideo&lt;/div&gt;
  176. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;aflamk2 &lt;a href="https://www.pornvideoswatch.net/" target="_self" title="pornvideoswatch.net"&gt;pornvideoswatch.net&lt;/a&gt; نيك ثمينات&lt;/div&gt;
  177. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;hentaifox futanari &lt;a href="https://www.hentaitale.net/" target="_blank" title="hentaitale.net pisuhame"&gt;hentaitale.net&lt;/a&gt; hen hentai&lt;/div&gt;
  178. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;video sexy wallpaper &lt;a href="https://povporntrends.com" target="_blank"&gt;povporntrends.com&lt;/a&gt; bengolibf&lt;/div&gt;
  179. &lt;div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"&gt;persona 5 hentai manga &lt;a href="https://www.younghentai.net/" rel="dofollow" target="_self" title="younghentai.net oni hentai"&gt;younghentai.net&lt;/a&gt; toys hentai&lt;/div&gt;</pre>
  180. This example demonstrates a slightly more sophisticated approach to hiding the block containing Black Hat SEO content. It suggests an attempt to bypass the automated search engine filters that easily detect the
  181. <span id="urvanov-syntax-highlighter-68f254acc2646705335060" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">display</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">none</span><span class="crayon-sy">;</span></span></span> parameter.</p>
  182. <p>Let us analyze the set of CSS styles:
  183. <span id="urvanov-syntax-highlighter-68f254acc2647754305574" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-o">&lt;</span><span class="crayon-e">div </span><span class="crayon-v">style</span><span class="crayon-o">=</span><span class="crayon-s">"overflow: auto; position: absolute; height: 0pt; width: 0pt;"</span><span class="crayon-o">&gt;</span></span></span>. The properties position:
  184. <span id="urvanov-syntax-highlighter-68f254acc2648758738924" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">absolute</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-v">height</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">0pt</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-v">width</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">0pt</span><span class="crayon-sy">;</span></span></span> remove the block from the visible area of the page, while overflow: auto prevents the content from being displayed even if it exceeds zero dimensions. This makes the links inaccessible to humans, but it does not prevent them from being preserved in the <a href="https://en.wikipedia.org/wiki/Document_Object_Model" target="_blank" rel="noopener">DOM (document object model)</a>. That&#8217;s why HTML code scanning systems, such as search engines, are able to see it.</p>
  185. <p>In addition to the zero dimensions of the block, in this example, just as in the previous one, we see the attribute
  186. <span id="urvanov-syntax-highlighter-68f254acc264a594808728" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">rel</span><span class="crayon-o">=</span><span class="crayon-s">"dofollow"</span></span></span>, as well as many links to pornographic websites with relevant keywords.</p>
  187. <p>The combination of styles that sets the block dimensions to zero is less obvious than
  188. <span id="urvanov-syntax-highlighter-68f254acc264b328840541" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">display</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">none</span><span class="crayon-sy">;</span></span></span> because the element is technically present in the rendering, although it is not visible to the user. Nevertheless, it is worth noting that modern search engine security algorithms, such as Google Penguin, detect this technique too. To counter this, malicious actors may employ more complex techniques for evading detection. Here is another example:</p><pre class="urvanov-syntax-highlighter-plain-tag">&lt;script src="files/layout/js/slider3d.js?v=0d6651e2"&gt;&lt;/script&gt;&lt;script src="files/layout/js/layout.js?v=51a52ad1"&gt;&lt;/script&gt;
  189. &lt;style type="text/css"&gt;.ads-gold {height: 280px;overflow: auto;color: transparent;}.ads-gold::-webkit-scrollbar {  display: none;}.ads-gold a {color: transparent;}.ads-gold {font-size: 10px;}.ads-gold {height: 0px;overflow: hidden;}&lt;/style&gt;
  190. &lt;div class="ads-gold"&gt;
  191. Ganhe Rápido nos Jogos Populares do Cassino Online &lt;a href="https://580-bet.com" target="_blank"&gt;580bet&lt;/a&gt;
  192. Cassino &lt;a href="https://bet-7k.com" target="_blank"&gt;bet 7k&lt;/a&gt;: Diversão e Grandes Vitórias Esperam por Você
  193. Aposte e Vença no Cassino &lt;a href="https://leao-88.com" target="_blank"&gt;leao&lt;/a&gt; – Jogos Fáceis e Populares
  194. Jogos Populares e Grandes Prêmios no Cassino Online &lt;a href="https://luck-2.com" target="_blank"&gt;luck 2&lt;/a&gt;
  195. Descubra os Jogos Mais Populares no Cassino &lt;a href="https://john-bet.com" target="_blank"&gt;john bet&lt;/a&gt; e Ganhe
  196. &lt;a href="https://7755-bet.com" target="_blank"&gt;7755 bet&lt;/a&gt;: Apostas Fáceis, Grandes Oportunidades de Vitória
  197. Jogue no Cassino Online &lt;a href="https://cbet-88.com" target="_blank"&gt;cbet&lt;/a&gt; e Aumente suas Chances de Ganhar
  198. Ganhe Prêmios Incríveis com Jogos Populares no Cassino &lt;a href="https://bet7-88.com" target="_blank"&gt;bet7&lt;/a&gt;
  199. Cassino &lt;a href="https://pk55-88.com" target="_blank"&gt;pk55&lt;/a&gt;: Onde a Sorte Está ao Seu Lado
  200. Experimente o Cassino &lt;a href="https://8800-bet.com" target="_blank"&gt;8800 bet&lt;/a&gt; e Ganhe com Jogos Populares
  201. Ganhe Facilmente no Cassino Online &lt;a href="https://doce-88.com" target="_blank"&gt;doce&lt;/a&gt;
  202. Aposte e Vença no Cassino &lt;a href="https://bet-4-br.com" target="_blank"&gt;bet 4&lt;/a&gt;
  203. Jogos Populares e Grandes Premiações na &lt;a href="https://f12--bet.com" target="_blank"&gt;f12bet&lt;/a&gt;
  204. Descubra a Diversão e Vitória no Cassino &lt;a href="https://bet-7-br.com" target="_blank"&gt;bet7&lt;/a&gt;
  205. Aposte nos Jogos Mais Populares do Cassino &lt;a href="https://ggbet-88.com" target="_blank"&gt;ggbet&lt;/a&gt;
  206. Ganhe Prêmios Rápidos no Cassino Online &lt;a href="https://bet77-88.com" target="_blank"&gt;bet77&lt;/a&gt;
  207. Jogos Fáceis e Rápidos no Cassino &lt;a href="https://mrbet-88.com" target="_blank"&gt;mrbet&lt;/a&gt;
  208. Jogue e Ganhe com Facilidade no Cassino &lt;a href="https://bet61-88.com" target="_blank"&gt;bet61&lt;/a&gt;
  209. Cassino &lt;a href="https://tvbet-88.com" target="_blank"&gt;tvbet&lt;/a&gt;: Onde a Sorte Está Ao Seu Lado
  210. Aposte nos Melhores Jogos do Cassino Online &lt;a href="https://pgwin-88.com" target="_blank"&gt;pgwin&lt;/a&gt;
  211. Ganhe Grande no Cassino &lt;a href="https://today-88.com" target="_blank"&gt;today&lt;/a&gt; com Jogos Populares
  212. Cassino &lt;a href="https://fuwin-88.com" target="_blank"&gt;fuwin&lt;/a&gt;: Grandes Vitórias Esperam por Você
  213. Experimente os Melhores Jogos no Cassino &lt;a href="https://brwin-88.com" target="_blank"&gt;brwin&lt;/a&gt;
  214. &lt;/div&gt;&lt;/body&gt;</pre><p>
  215. Aside from the parameters we are already familiar with, which are responsible for concealing a block (
  216. <span id="urvanov-syntax-highlighter-68f254acc264d089610953" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">height</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">0px</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">color</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">transparent</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">overflow</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">hidden</span></span></span>), and the name that hints at its contents (
  217. <span id="urvanov-syntax-highlighter-68f254acc264f657409125" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-sy">\</span><span class="crayon-o">&lt;</span><span class="crayon-e">style </span><span class="crayon-v">type</span><span class="crayon-o">=</span><span class="crayon-s">"text/css"</span><span class="crayon-sy">\</span><span class="crayon-o">&gt;</span><span class="crayon-sy">.</span><span class="crayon-v">ads</span><span class="crayon-o">-</span><span class="crayon-v">gold</span></span></span>), strings with scripts in this example can be found at the very beginning:
  218. <span id="urvanov-syntax-highlighter-68f254acc2650588207053" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-ta">&lt;script </span><span class="crayon-e ">src</span><span class="crayon-o">=</span><span class="crayon-s">"files/layout/js/slider3d.js?v=0d6651e2"</span><span class="crayon-o">&gt;</span><span class="crayon-ta">&lt;/script&gt;</span></span></span> and
  219. <span id="urvanov-syntax-highlighter-68f254acc2651392159977" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-ta">&lt;script </span><span class="crayon-e ">src</span><span class="crayon-o">=</span><span class="crayon-s">"files/layout/js/layout.js?v=51a52ad1"</span><span class="crayon-o">&gt;</span><span class="crayon-ta">&lt;/script&gt;</span></span></span>. These indicate that external JavaScript can dynamically control the page content, for example, by adding or changing hidden links, that is, modifying this block in real time.</p>
  220. <p>This is a more advanced approach than the ones in the previous examples. Yet it is also detected by filters responsible for identifying suspicious manipulations.</p>
  221. <p>Other parameters and attributes exist that attackers use to conceal a link block. These, however, can also be detected:</p>
  222. <ul>
  223. <li>the parameter
  224. <span id="urvanov-syntax-highlighter-68f254acc2653397563196" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">visibility</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">hidden</span><span class="crayon-sy">;</span></span></span> can sometimes be seen instead of
  225. <span id="urvanov-syntax-highlighter-68f254acc2654921412155" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">display</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">none</span><span class="crayon-sy">;</span></span></span>.</li>
  226. <li>Within
  227. <span id="urvanov-syntax-highlighter-68f254acc2655758106867" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">position</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">absolute</span><span class="crayon-sy">;</span></span></span>, the block with hidden links may not have a zero size, but rather be located far beyond the visible area of the page. This can be set, for example, via the property
  228. <span id="urvanov-syntax-highlighter-68f254acc2656635163430" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">left</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-cn">9232px</span><span class="crayon-sy">;</span></span></span>, as in the example below.</li>
  229. </ul>
  230. <pre class="urvanov-syntax-highlighter-plain-tag">&lt;div style="position: absolute; left: -9232px"&gt;
  231. &lt;a href="https://romabet.cam/"&gt;روما بت&lt;/a&gt;&lt;br&gt;
  232. &lt;a href="https://mahbet.cam/"&gt;ماه بت&lt;/a&gt;&lt;br&gt;
  233. &lt;a href="https://pinbahis.com.co/"&gt;پین باهیس&lt;/a&gt;&lt;br&gt;
  234. &lt;a href="https://bettingmagazine.org/"&gt;بهترین سایت شرط بندی&lt;/a&gt;&lt;br&gt;
  235. &lt;a href="https://1betcart.com/"&gt;بت کارت&lt;/a&gt;&lt;br&gt;
  236. &lt;a href="https:// yasbet.com.co/"&gt;یاس بت&lt;/a&gt;&lt;br&gt;
  237. &lt;a href="https://yekbet.cam/"&gt;یک بت&lt;/a&gt;&lt;br&gt;
  238. &lt;a href="https://megapari.cam/"&gt;مگاپاری &lt;/a&gt;&lt;br&gt;
  239. &lt;a href="https://onjabet.net/"&gt;اونجا بت&lt;/a&gt;&lt;br&gt;
  240. &lt;a href="https://alvinbet.org/"&gt;alvinbet.org&lt;/a&gt;&lt;br&gt;
  241. &lt;a href="https://2betboro.com/"&gt;بت برو&lt;/a&gt;&lt;br&gt;
  242. &lt;a href="https://betfa.cam/"&gt;بت فا&lt;/a&gt;&lt;br&gt;
  243. &lt;a href="https://betforward.help/"&gt;بت فوروارد&lt;/a&gt;&lt;br&gt;
  244. &lt;a href="https://1xbete.org/"&gt;وان ایکس بت&lt;/a&gt;&lt;br&gt;
  245. &lt;a href="https://1win-giris.com.co/"&gt;1win giriş&lt;/a&gt;&lt;br&gt;
  246. &lt;a href="https://betwiner.org/"&gt;بت وینر&lt;/a&gt;&lt;br&gt;
  247. &lt;a href="https://4shart.com/"&gt;بهترین سایت شرط بندی ایرانی&lt;/a&gt;&lt;br&gt;
  248. &lt;a href="https://1xbetgiris.cam"&gt;1xbet giriş&lt;/a&gt;&lt;br&gt;
  249. &lt;a href="https://1kickbet1.com/"&gt;وان کیک بت&lt;/a&gt;&lt;br&gt;
  250. &lt;a href="https://winbet-bet.com/"&gt;وین بت&lt;/a&gt;&lt;br&gt;
  251. &lt;a href="https://ritzobet.org/"&gt;ریتزو بت&lt;/a&gt;&lt;br&gt;</pre>
  252. <h2 id="how-attackers-place-hidden-links-on-other-peoples-websites">How attackers place hidden links on other people&#8217;s websites</h2>
  253. <p>To place hidden links, attackers typically exploit website configuration errors and vulnerabilities. This may be a weak or compromised password for an administrator account, plugins or an engine that have not been updated in a long time, poor filtering of user inputs, or security issues on the hosting provider&#8217;s side. Furthermore, attackers may attempt to exploit the human factor, for example, by setting up targeted or mass phishing attacks in the hope of obtaining the website administrator&#8217;s credentials.</p>
  254. <p>Let us examine in detail the various mechanisms through which an attacker gains access to editing a page&#8217;s HTML code.</p>
  255. <ul>
  256. <li><strong>Compromise of the administrator password</strong>. An attacker may guess the password, use phishing to trick the victim into giving it away, or steal it with the help of malware. Furthermore, the password may be found in a database of leaked credentials. Site administrators frequently use simple passwords for control panel protection or, even worse, leave the default password, thereby simplifying the task for the attacker.<br />
  257. After gaining access to the admin panel, the attacker can directly edit the page&#8217;s HTML code or install their own plugins with hidden SEO blocks.</li>
  258. <li><strong>Exploitation of CMS (WordPress, Joomla, Drupal) vulnerabilities</strong>. If the engine or plugins are out of date, attackers use known vulnerabilities (SQL Injection, RCE, or XSS) to gain access to the site&#8217;s code. After that, depending on the level of access gained by exploiting the vulnerability, they can modify template files (header.php, footer.php, index.php, etc.), insert invisible blocks into arbitrary site pages, and so on.<br />
  259. In SQL injection attacks, the hacker injects their malicious SQL code into a database query. Many websites, from news portals to online stores, store their content (text, product descriptions, and news) in a database. If an SQL query, such as
  260. <span id="urvanov-syntax-highlighter-68f254acc2659970557860" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-e ">SELECT *</span><span class="crayon-h"> </span><span class="crayon-e">FROM </span><span class="crayon-e">posts </span><span class="crayon-e">WHERE </span><span class="crayon-v">id</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'$id'</span></span></span> allows passing arbitrary data, the attacker can use the
  261. <span id="urvanov-syntax-highlighter-68f254acc265a304808340" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-sy">$</span><span class="crayon-v">id</span></span></span> field to inject their code. This allows the attacker to change the content of records, for example, by inserting HTML with hidden blocks.<br />
  262. In RCE (remote code execution) attacks, the attacker gains the ability to run their own commands on the server where the website runs. Unlike SQL injections, which are limited to the database, RCE provides almost complete control over the system. For example, it allows the attacker to create or modify site files, upload malicious scripts, and, of course, inject invisible blocks.<br />
  263. In an XSS (cross-site scripting) attack, the attacker injects their JavaScript code directly into the web page by using vulnerable input fields, such as those for comments or search queries. When another user visits this page, the malicious script automatically executes in their browser. Such a script enables the attacker to perform various malicious actions, including stealthily adding a hidden
  264. <span id="urvanov-syntax-highlighter-68f254acc265b122062589" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-o">&lt;</span><span class="crayon-v">div</span><span class="crayon-o">&gt;</span></span></span> block with invisible links to the page. For XSS, the attacker does not need direct access to the server or database, as in the case with SQL injection or RCE; they only need to find a single vulnerability on the website.</li>
  265. <li><strong>An attack via the hosting provider</strong>. In addition to directly hacking the target website, an attacker may attempt to gain access to the website through the hosting environment. If the hosting provider&#8217;s server is poorly secured, there is a risk of it being compromised. Furthermore, if multiple websites or web applications run on the same server, a vulnerability in one of them can jeopardize all other projects. The attacker&#8217;s capabilities depend on the level of access to the server. These capabilities may include: injecting hidden blocks into page templates, substituting files, modifying databases, connecting external scripts to multiple websites simultaneously, and so forth. Meanwhile, the website administrator may not notice the problem because the vulnerability is being exploited within the server environment rather than the website code.</li>
  266. </ul>
  267. <p>Note that hidden links appearing on a website is not always a sign of a cyberattack. The issue often arises during the development phase, for example, if an illegal copy of a template is downloaded to save money or if the project is executed by an unscrupulous web developer.</p>
  268. <h2 id="why-attackers-place-hidden-blocks-on-websites">Why attackers place hidden blocks on websites</h2>
  269. <p>One of the most obvious goals for injecting hidden blocks into other people&#8217;s websites is to steal the PageRank from the victim. The more popular and authoritative the website is, the more interesting it is to attackers. However, this does not mean that moderate- or low-traffic websites are safe. As a rule, administrators of popular websites and large platforms do their best to adhere to security rules, so it is not so easy to get close to them. Therefore, attackers may target less popular – and less protected – websites.</p>
  270. <p>As previously mentioned, this approach to promoting websites is easily detected and blocked by search engines. In the short term, though, attackers still benefit from this: they manage to drive traffic to the websites that interest them until search engine algorithms detect the violation.</p>
  271. <p>Even though the user does not see the hidden block and cannot click the links, attackers can use scripts to boost traffic to their websites. One possible scenario involves JavaScript creating an iframe in the background or sending an HTTP request to the website from the hidden block, which then receives information about the visit.</p>
  272. <p>Hidden links can lead not just to pornographic or other questionable websites but also to websites with low-quality content whose sole purpose is to be promoted and subsequently sold, or to phishing and malicious websites. In more sophisticated schemes, the script that provides &#8220;visits&#8221; to such websites may load malicious code into the victim&#8217;s browser.</p>
  273. <p>Finally, hidden links allow attackers to lower the reputation of the targeted website and harm its standing with search engines. This threat is especially relevant in light of the fact that algorithms such as Google Penguin penalize websites hosting questionable links. Attackers may use these techniques as a tool for unfair competition, hacktivism, or any other activity that involves discrediting certain organizations or individuals.</p>
  274. <p>Interestingly, in 2025, we have more frequently encountered hidden blocks with links to pornographic websites and online casinos on various legitimate websites. With low confidence, we can suggest that this is partly due to the development of neural networks, which make it easy to automate such attacks, and partly due to the regular <a href="https://developers.google.com/search/docs/appearance/spam-updates" target="_blank" rel="noopener">updates to Google&#8217;s anti-spam systems</a>, the latest of which was completed at the end of September 2025: attackers may have rushed to maximize their gains before the search engine made it a little harder for them.</p>
  275. <h2 id="consequences-for-the-victim-website">Consequences for the victim website</h2>
  276. <p>The consequences for the victim website can vary in severity. At a minimum, the presence of hidden links placed by unauthorized parties hurts search engine reputation, which may lead to lower search rankings or even complete exclusion from search results. However, even without any penalties, the links disrupt the internal linking structure because they lead to external websites and pass on a portion of the victim&#8217;s weight to them. This negatively impacts the rankings of key pages.</p>
  277. <p>Although unseen by visitors, hidden links can be discovered by external auditors, content analysis systems, or researchers who report such findings in public reports. This is something that can undermine trust in the website. For example, sites where our categorization engine detects links to pornography pages will be classified as &#8220;Adult content&#8221;. Consequently, all of our clients who use web filters to block this category will be unable to visit the website. Furthermore, information about a website&#8217;s category is published on our <a href="https://opentip.kaspersky.com/" target="_blank" rel="noopener">Kaspersky Threat Intelligence Portal</a> and available to anyone wishing to look up its reputation.</p>
  278. <p>If the website is being used to distribute illegal or fraudulent content, the issue enters the legal realm, with the owner potentially facing lawsuits from copyright holders or regulators. For example, if the links lead to websites that distribute pirated content, the site may be considered an intermediary in copyright infringement. If the hidden block contains malicious scripts or automatic redirects to questionable websites, such as phishing pages, the owner can be charged with fraud or some other cybercrime.</p>
  279. <h2 id="how-to-detect-a-hidden-link-block-on-your-website">How to detect a hidden link block on your website</h2>
  280. <p>The simplest and most accessible method for any user to check a website for a hidden block is to view its source code in the browser. This is very easy to do. Navigate to the website, press Control+U, and the website&#8217;s code will open in the next tab. Search (Control+F) the code for the following keywords:
  281. <span id="urvanov-syntax-highlighter-68f254acc265d572507992" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">display</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">none</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">visibility</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">hidden</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">opacity</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">height</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">width</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">position</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">absolute</span></span></span>. In addition, you can check for keywords that are characteristic of the hidden content itself. When it comes to links that point to adult or gambling sites, you should look for
  282. <span id="urvanov-syntax-highlighter-68f254acc2661050478198" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">porn</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">sex</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">casino</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">card</span></span></span>, and the like.</p>
  283. <p>A slightly more complex method is using web developer tools to investigate the DOM for invisible blocks. After the page fully loads, open DevTools (F12) in the browser and go to the Elements tab. Search (Control+F) for keywords such as
  284. <span id="urvanov-syntax-highlighter-68f254acc2662393249267" class="urvanov-syntax-highlighter-syntax urvanov-syntax-highlighter-syntax-inline  crayon-theme-classic crayon-theme-classic-inline urvanov-syntax-highlighter-font-monaco" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important;"><span class="crayon-pre urvanov-syntax-highlighter-code" style="font-size: 12px !important; line-height: 15px !important;font-size: 12px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-o">&lt;</span><span class="crayon-v">a</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">iframe</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">display</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">none</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">hidden</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">opacity</span></span></span>. Hover your cursor over suspicious elements in the code so the browser highlights their location on the page. If the block occupies zero area or is located outside the visible area, that is an indicator of a hidden element. Check the Computed tab for the selected element; there, you can see the applied CSS styles and confirm that it is hidden from the user&#8217;s view.</p>
  285. <p>You can also utilize specialized SEO tools. These are typically third-party solutions that scan website SEO data and generate reports. They can provide a report about suspicious links as well. Few of them are free, but when selecting a tool, you should be guided primarily by the vendor&#8217;s reputation rather than price. It is better to use tried-and-true, well-known services that are known to be free of malicious or questionable payloads. Examples of these trusted services include Google Search Console, Bing Webmaster Tools, OpenLinkProfiler, and SEO Minion.</p>
  286. <p>Another way to discover hidden SEO spam on a website is to check the CMS itself and its files. First, you should scan the database tables for suspicious HTML tags with third-party links that may have been inserted by attackers, and also carefully examine the website&#8217;s template files (header.php, footer.php, and index.php) and included modules for unfamiliar or suspicious code. Pay particular attention to encrypted insertions, unclear scripts, or links that should not originally be present in the website&#8217;s structure.</p>
  287. <p>Additionally, you can look up your website&#8217;s reputation on the <a href="https://opentip.kaspersky.com/" target="_blank" rel="noopener">Kaspersky Threat Intelligence Portal</a>. If you find it in an uncharacteristic category – typically &#8220;Adult content&#8221;, &#8220;Sexually explicit&#8221;, or &#8220;Gambling&#8221; – there is a high probability that there is a hidden SEO spam block embedded in your website.</p>
  288. <h2 id="how-to-protect-your-website">How to protect your website</h2>
  289. <p>To prevent hidden links from appearing on your website, avoid unlicensed templates, themes, and other pre-packaged solutions. The entire site infrastructure must be built only on licensed and official solutions. The same principle applies to webmasters and companies you hire to build your website: we recommend checking their work for hidden links, but also for vulnerabilities in general. Never cut corners when it comes to security.</p>
  290. <p>Keep your CMS, themes, and plugins up to date, as new versions often patch known vulnerabilities that attackers can exploit. Delete any unused plugins and themes, if any. The less unnecessary components are installed, the lower the risk of an exploit in one of the extensions, plugins, and themes. It is worth noting that this risk never disappears completely – it is still there even if you have a minimal set of components as long as they are outdated or poorly secured.</p>
  291. <p>To protect files and the server, it is important to properly configure access permissions. On servers running Linux and other Unix-like systems, use <strong>644</strong> for files and <strong>755</strong> for folders. This means that the owner can open folders, and read and modify folders and files, while the group and other users can only read files and open folders. If write access is not necessary, for example in template folders, forbid it altogether to lower the risk of malicious actors making unauthorized changes. Furthermore, you must set up regular, automatic website backups so that data can be quickly restored if there is an issue.</p>
  292. <p>Additionally, it is worth using web application firewalls (WAFs), which help block malicious requests and protect the site from external attacks. This solution is available in <a href="https://www.kaspersky.com/small-to-medium-business-security/ddos-protection?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team___kddosp____debce7fd29f69a6d" target="_blank" rel="noopener">Kaspersky DDoS Protection</a>.</p>
  293. <p>To protect the administrator panel, use only strong passwords and 2FA (Two-Factor Authentication) at all times. You would be well-advised to restrict access to the admin panel by IP address if you can. Only a limited group of individuals should be granted admin privileges.</p>
  294. ]]></content:encoded>
  295. <wfw:commentRss>https://securelist.com/seo-spam-hidden-links/117782/feed/</wfw:commentRss>
  296. <slash:comments>0</slash:comments>
  297. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16210132/SL-seo-spam-featured.jpg" width="2000" height="1000"><media:keywords>full</media:keywords></media:content>
  298. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16210132/SL-seo-spam-featured-1024x512.jpg" width="1024" height="512"><media:keywords>large</media:keywords></media:content>
  299. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16210132/SL-seo-spam-featured-300x150.jpg" width="300" height="150"><media:keywords>medium</media:keywords></media:content>
  300. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/16210132/SL-seo-spam-featured-150x150.jpg" width="150" height="150"><media:keywords>thumbnail</media:keywords></media:content>
  301. </item>
  302. <item>
  303. <title>Maverick: a new banking Trojan abusing WhatsApp in a mass-scale distribution</title>
  304. <link>https://securelist.com/maverick-banker-distributing-via-whatsapp/117715/</link>
  305. <comments>https://securelist.com/maverick-banker-distributing-via-whatsapp/117715/#respond</comments>
  306. <dc:creator><![CDATA[GReAT]]></dc:creator>
  307. <pubDate>Wed, 15 Oct 2025 13:00:43 +0000</pubDate>
  308. <category><![CDATA[Malware descriptions]]></category>
  309. <category><![CDATA[Malware Technologies]]></category>
  310. <category><![CDATA[Microsoft Internet Explorer]]></category>
  311. <category><![CDATA[Firefox]]></category>
  312. <category><![CDATA[Google Chrome]]></category>
  313. <category><![CDATA[Malware Descriptions]]></category>
  314. <category><![CDATA[Malware]]></category>
  315. <category><![CDATA[Trojan Banker]]></category>
  316. <category><![CDATA[Trojan]]></category>
  317. <category><![CDATA[Brazil]]></category>
  318. <category><![CDATA[Microsoft Edge]]></category>
  319. <category><![CDATA[Coyote]]></category>
  320. <category><![CDATA[Maverick]]></category>
  321. <category><![CDATA[Financial threats]]></category>
  322. <category><![CDATA[Windows malware]]></category>
  323. <guid isPermaLink="false">https://kasperskycontenthub.com/securelist/?p=117715</guid>
  324.  
  325. <description><![CDATA[A malware campaign was recently detected in Brazil, distributing a malicious LNK file using WhatsApp. It delivered a new Maverick banker, which features code overlaps with Coyote malware.]]></description>
  326. <content:encoded><![CDATA[<p><img width="990" height="400" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15073641/SL-Maverick-Brazilian-banker-featured-990x400.jpg" class="attachment-securelist-huge-promo size-securelist-huge-promo wp-post-image" alt="" decoding="async" loading="lazy" /></p><p>A malware campaign was recently detected in Brazil, distributing a malicious LNK file using WhatsApp. It targets mainly Brazilians and uses Portuguese-named URLs. To evade detection, the command-and-control (C2) server verifies each download to ensure it originates from the malware itself.<br />
  327. The whole infection chain is complex and fully fileless, and by the end, it will deliver a new banking Trojan named Maverick, which contains many code overlaps with <a href="https://securelist.com/coyote-multi-stage-banking-trojan/111846/" target="_blank" rel="noopener">Coyote</a>. In this blog post, we detail the entire infection chain, encryption algorithm, and its targets, as well as discuss the similarities with known threats.</p>
  328. <h2 id="key-findings">Key findings:</h2>
  329. <ul>
  330. <li>A massive campaign disseminated through WhatsApp distributed the new Brazilian banking Trojan named &#8220;Maverick&#8221; through ZIP files containing a malicious LNK file, which is not blocked on the messaging platform.</li>
  331. <li>Once installed, the Trojan uses the open-source project WPPConnect to automate the sending of messages in hijacked accounts via WhatsApp Web, taking advantage of the access to send the malicious message to contacts.</li>
  332. <li>The new Trojan features code similarities with another Brazilian banking Trojan called <a href="https://securelist.com/coyote-multi-stage-banking-trojan/111846/" target="_blank" rel="noopener">Coyote</a>; however, we consider Maverick to be a new threat.</li>
  333. <li>The Maverick Trojan checks the time zone, language, region, and date and time format on infected machines to ensure the victim is in Brazil; otherwise, the malware will not be installed.</li>
  334. <li>The banking Trojan can fully control the infected computer, taking screenshots, monitoring open browsers and websites, installing a keylogger, controlling the mouse, blocking the screen when accessing a banking website, terminating processes, and opening phishing pages in an overlay. It aims to capture banking credentials.</li>
  335. <li>Once active, the new Trojan will monitor the victims&#8217; access to 26 Brazilian bank websites, 6 cryptocurrency exchange websites, and 1 payment platform.</li>
  336. <li>All infections are modular and performed in memory, with minimal disk activity, using PowerShell, .NET, and shellcode encrypted using Donut.</li>
  337. <li>The new Trojan uses AI in the code-writing process, especially in certificate decryption and general code development.</li>
  338. <li>Our solutions have blocked 62 thousand infection attempts using the malicious LNK file in the first 10 days of October, only in Brazil.</li>
  339. </ul>
  340. <h2 id="initial-infection-vector">Initial infection vector</h2>
  341. <p>The infection chain works according to the diagram below:</p>
  342. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061851/maverick-banker-01.png" class="magnificImage"><img loading="lazy" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061851/maverick-banker-01.png" alt="" width="2093" height="731" class="aligncenter size-full wp-image-117756" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061851/maverick-banker-01.png 2093w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061851/maverick-banker-01-300x105.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061851/maverick-banker-01-1024x358.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061851/maverick-banker-01-768x268.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061851/maverick-banker-01-1536x536.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061851/maverick-banker-01-2048x715.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061851/maverick-banker-01-1002x350.png 1002w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061851/maverick-banker-01-740x258.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061851/maverick-banker-01-802x280.png 802w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061851/maverick-banker-01-800x279.png 800w" sizes="auto, (max-width: 2093px) 100vw, 2093px" /></a></p>
  343. <p>The infection begins when the victim receives a malicious .LNK file inside a ZIP archive via a WhatsApp message. The filename can be generic, or it can pretend to be from a bank:</p>
  344. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061954/maverick-banker-02-upd.jpg" class="magnificImage"><img loading="lazy" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061954/maverick-banker-02-upd.jpg" alt="" width="1009" height="546" class="aligncenter size-full wp-image-117757" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061954/maverick-banker-02-upd.jpg 1009w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061954/maverick-banker-02-upd-300x162.jpg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061954/maverick-banker-02-upd-768x416.jpg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061954/maverick-banker-02-upd-647x350.jpg 647w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061954/maverick-banker-02-upd-740x400.jpg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061954/maverick-banker-02-upd-517x280.jpg 517w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15061954/maverick-banker-02-upd-800x433.jpg 800w" sizes="auto, (max-width: 1009px) 100vw, 1009px" /></a></p>
  345. <p>The message said, <em>&#8220;Visualization allowed only in computers. In case you&#8217;re using the Chrome browser, choose &#8220;keep file&#8221; because it&#8217;s a zipped file&#8221;.</em></p>
  346. <p>The LNK is encoded to execute cmd.exe with the following arguments:</p>
  347. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212230/maverick-banker-distributing5.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117718" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212230/maverick-banker-distributing5.png" alt="" width="2048" height="111" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212230/maverick-banker-distributing5.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212230/maverick-banker-distributing5-300x16.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212230/maverick-banker-distributing5-1024x56.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212230/maverick-banker-distributing5-768x42.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212230/maverick-banker-distributing5-1536x83.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212230/maverick-banker-distributing5-740x40.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212230/maverick-banker-distributing5-1600x87.png 1600w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212230/maverick-banker-distributing5-800x43.png 800w" sizes="auto, (max-width: 2048px) 100vw, 2048px" /></a></p>
  348. <p>The decoded commands point to the execution of a PowerShell script:</p>
  349. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212353/maverick-banker-distributing1-1.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117720" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212353/maverick-banker-distributing1-1.png" alt="" width="1633" height="39" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212353/maverick-banker-distributing1-1.png 1633w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212353/maverick-banker-distributing1-1-300x7.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212353/maverick-banker-distributing1-1-1024x24.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212353/maverick-banker-distributing1-1-768x18.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212353/maverick-banker-distributing1-1-1536x37.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212353/maverick-banker-distributing1-1-740x18.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212353/maverick-banker-distributing1-1-1600x38.png 1600w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212353/maverick-banker-distributing1-1-800x19.png 800w" sizes="auto, (max-width: 1633px) 100vw, 1633px" /></a></p>
  350. <p>The command will contact the C2 to download another PowerShell script. It is important to note that the C2 also validates the &#8220;User-Agent&#8221; of the HTTP request to ensure that it is coming from the PowerShell command. This is why, without the correct &#8220;User-Agent&#8221;, the C2 returns an HTTP 401 code.</p>
  351. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062044/maverick-banker-distributing7-upd.png" class="magnificImage"><img loading="lazy" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062044/maverick-banker-distributing7-upd.png" alt="" width="1615" height="883" class="aligncenter size-full wp-image-117758" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062044/maverick-banker-distributing7-upd.png 1615w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062044/maverick-banker-distributing7-upd-300x164.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062044/maverick-banker-distributing7-upd-1024x560.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062044/maverick-banker-distributing7-upd-768x420.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062044/maverick-banker-distributing7-upd-1536x840.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062044/maverick-banker-distributing7-upd-640x350.png 640w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062044/maverick-banker-distributing7-upd-740x405.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062044/maverick-banker-distributing7-upd-512x280.png 512w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062044/maverick-banker-distributing7-upd-800x437.png 800w" sizes="auto, (max-width: 1615px) 100vw, 1615px" /></a></p>
  352. <p>The entry script is used to decode an embedded .NET file, and all of this occurs only in memory. The .NET file is decoded by dividing each byte by a specific value; in the script above, the value is &#8220;174&#8221;. The PE file is decoded and is then loaded as a .NET assembly within the PowerShell process, making the entire infection fileless, that is, without files on disk.<br />
  353. <a name="loader"></a></p>
  354. <h3 id="initial-net-loader">Initial .NET loader</h3>
  355. <p>The initial .NET loader is heavily obfuscated using Control Flow Flattening and indirect function calls, storing them in a large vector of functions and calling them from there. In addition to obfuscation, it also uses random method and variable names to hinder analysis. Nevertheless, after our analysis, we were able to reconstruct (to a certain extent) its main flow, which consists of downloading and decrypting two payloads.</p>
  356. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212544/maverick-banker-distributing16.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117722" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212544/maverick-banker-distributing16.png" alt="" width="2048" height="840" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212544/maverick-banker-distributing16.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212544/maverick-banker-distributing16-300x123.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212544/maverick-banker-distributing16-1024x420.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212544/maverick-banker-distributing16-768x315.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212544/maverick-banker-distributing16-1536x630.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212544/maverick-banker-distributing16-853x350.png 853w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212544/maverick-banker-distributing16-740x304.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212544/maverick-banker-distributing16-683x280.png 683w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212544/maverick-banker-distributing16-800x328.png 800w" sizes="auto, (max-width: 2048px) 100vw, 2048px" /></a></p>
  357. <p>The obfuscation does not hide the method&#8217;s variable names, which means it is possible to reconstruct the function easily if the same function is reused elsewhere. Most of the functions used in this initial stage are the same ones used in the final stage of the banking Trojan, which is not obfuscated. The sole purpose of this stage is to download two encrypted shellcodes from the C2. To request them, an API exposed by the C2 on the &#8220;/api/v1/&#8221; routes will be used. The requested URL is as follows:</p>
  358. <ul>
  359. <li>hxxps://sorvetenopote.com/api/v1/3d045ada0df942c983635e</li>
  360. </ul>
  361. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212635/maverick-banker-distributing4.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117723" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212635/maverick-banker-distributing4.png" alt="" width="1788" height="315" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212635/maverick-banker-distributing4.png 1788w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212635/maverick-banker-distributing4-300x53.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212635/maverick-banker-distributing4-1024x180.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212635/maverick-banker-distributing4-768x135.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212635/maverick-banker-distributing4-1536x271.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212635/maverick-banker-distributing4-740x130.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212635/maverick-banker-distributing4-1589x280.png 1589w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212635/maverick-banker-distributing4-800x141.png 800w" sizes="auto, (max-width: 1788px) 100vw, 1788px" /></a></p>
  362. <p>To communicate with its API, it sends the API key in the &#8220;X-Request-Headers&#8221; field of the HTTP request header. The API key used is calculated locally using the following algorithm:</p>
  363. <ul>
  364. <li>&#8220;Base64(HMAC256(Key))&#8221;</li>
  365. </ul>
  366. <p>The HMAC is used to sign messages with a specific key; in this case, the threat actor uses it to generate the &#8220;API Key&#8221; using the HMAC key &#8220;MaverickZapBot2025SecretKey12345&#8221;. The signed data sent to the C2 is &#8220;3d045ada0df942c983635e|1759847631|MaverickBot&#8221;, where each segment is separated by &#8220;|&#8221;. The first segment refers to the specific resource requested (the first encrypted shellcode), the second is the infection&#8217;s timestamp, and the last, &#8220;MaverickBot&#8221;, indicates that this C2 protocol may be used in future campaigns with different variants of this threat. This ensures that tools like &#8220;wget&#8221; or HTTP downloaders cannot download this stage, only the malware.</p>
  367. <p>Upon response, the encrypted shellcode is a loader using Donut. At this point, the initial loader will start and follow two different execution paths: another loader for its WhatsApp infector and the final payload, which we call &#8220;MaverickBanker&#8221;. Each Donut shellcode embeds a .NET executable. The shellcode is encrypted using a XOR implementation, where the key is stored in the last bytes of the binary returned by the C2. The algorithm to decrypt the shellcode is as follows:</p>
  368. <ul>
  369. <li>Extract the last 4 bytes (int32) from the binary file; this indicates the size of the encryption key.</li>
  370. <li>Walk backwards until you reach the beginning of the encryption key (file size &#8211; 4 &#8211; key_size).</li>
  371. <li>Get the XOR key.</li>
  372. <li>Apply the XOR to the entire file using the obtained key.</li>
  373. </ul>
  374. <h2 id="whatsapp-infector-downloader">WhatsApp infector downloader</h2>
  375. <p>After the second Donut shellcode is decrypted and started, it will load another downloader using the same obfuscation method as the previous one. It behaves similarly, but this time it will download a PE file instead of a Donut shellcode. This PE file is another .NET assembly that will be loaded into the process as a module.</p>
  376. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212800/maverick-banker-distributing9.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117724" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212800/maverick-banker-distributing9.png" alt="" width="2045" height="818" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212800/maverick-banker-distributing9.png 2045w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212800/maverick-banker-distributing9-300x120.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212800/maverick-banker-distributing9-1024x410.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212800/maverick-banker-distributing9-768x307.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212800/maverick-banker-distributing9-1536x614.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212800/maverick-banker-distributing9-875x350.png 875w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212800/maverick-banker-distributing9-740x296.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212800/maverick-banker-distributing9-700x280.png 700w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212800/maverick-banker-distributing9-800x320.png 800w" sizes="auto, (max-width: 2045px) 100vw, 2045px" /></a></p>
  377. <p>One of the namespaces used by this .NET executable is named &#8220;Maverick.StageOne,&#8221; which is considered by the attacker to be the first one to be loaded. This download stage is used exclusively to download the WhatsApp infector in the same way as the previous stage. The main difference is that this time, it is not an encrypted Donut shellcode, but another .NET executable—the WhatsApp infector—which will be used to hijack the victim&#8217;s account and use it to spam their contacts in order to spread itself.</p>
  378. <p>This module, which is also obfuscated, is the WhatsApp infector and represents the final payload in the infection chain. It includes a script from <a href="https://github.com/wppconnect-team/wppconnect" target="_blank" rel="noopener">WPPConnect</a>, an open-source WhatsApp automation project, as well as the Selenium browser executable, used for web automation.</p>
  379. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212842/maverick-banker-distributing8.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117725" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212842/maverick-banker-distributing8.png" alt="" width="1841" height="745" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212842/maverick-banker-distributing8.png 1841w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212842/maverick-banker-distributing8-300x121.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212842/maverick-banker-distributing8-1024x414.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212842/maverick-banker-distributing8-768x311.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212842/maverick-banker-distributing8-1536x622.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212842/maverick-banker-distributing8-990x400.png 990w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212842/maverick-banker-distributing8-865x350.png 865w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212842/maverick-banker-distributing8-740x299.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212842/maverick-banker-distributing8-692x280.png 692w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212842/maverick-banker-distributing8-800x324.png 800w" sizes="auto, (max-width: 1841px) 100vw, 1841px" /></a></p>
  380. <p>The executable&#8217;s namespace name is &#8220;ZAP&#8221;, a very common word in Brazil to refer to WhatsApp. These files use almost the same obfuscation techniques as the previous examples, but the method&#8217;s variable names remain in the source code. The main behavior of this stage is to locate the WhatsApp window in the browser and use WPPConnect to instrument it, causing the infected victim to send messages to their contacts and thus spread again. The file sent depends on the &#8220;MaverickBot&#8221; executable, which will be discussed in the next section.</p>
  381. <h2 id="maverick-the-banking-trojan">Maverick, the banking Trojan</h2>
  382. <p>The Maverick Banker comes from a different execution branch than the WhatsApp infector; it is the result of the second Donut shellcode. There are no additional download steps to execute it. This is the main payload of this campaign and is embedded within another encrypted executable named &#8220;Maverick Agent,&#8221; which performs extended activities on the machine, such as contacting the C2 and keylogging. It is described in the next section.</p>
  383. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212938/maverick-banker-distributing10.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117726" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212938/maverick-banker-distributing10.png" alt="" width="1443" height="1124" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212938/maverick-banker-distributing10.png 1443w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212938/maverick-banker-distributing10-300x234.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212938/maverick-banker-distributing10-1024x798.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212938/maverick-banker-distributing10-768x598.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212938/maverick-banker-distributing10-449x350.png 449w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212938/maverick-banker-distributing10-740x576.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212938/maverick-banker-distributing10-359x280.png 359w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13212938/maverick-banker-distributing10-800x623.png 800w" sizes="auto, (max-width: 1443px) 100vw, 1443px" /></a></p>
  384. <p>Upon the initial loading of Maverick Banker, it will attempt to register persistence using the startup folder. At this point, if persistence does not exist, by checking for the existence of a .bat file in the &#8220;Startup&#8221; directory, it will not only check for the file&#8217;s existence but also perform a pattern match to see if the string &#8220;for %%&#8221; is present, which is part of the initial loading process. If such a file does not exist, it will generate a new &#8220;GUID&#8221; and remove the first 6 characters. The persistence batch script will then be stored as:</p>
  385. <ul>
  386. <li>&#8220;C:\Users\&lt;user&gt;\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\&#8221; + &#8220;HealthApp-&#8221; + GUID + &#8220;.bat&#8221;.</li>
  387. </ul>
  388. <p>Next, it will generate the bat command using the hardcoded URL, which in this case is:</p>
  389. <ul>
  390. <li>&#8220;hxxps://sorvetenopote.com&#8221; + &#8220;/api/itbi/startup/&#8221; + NEW_GUID.</li>
  391. </ul>
  392. <p>In the command generation function, it is possible to see the creation of an entirely new obfuscated PowerShell script.</p>
  393. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062224/maverick-banker-distributing6-upd.png" class="magnificImage"><img loading="lazy" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062224/maverick-banker-distributing6-upd.png" alt="" width="1719" height="631" class="aligncenter size-full wp-image-117759" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062224/maverick-banker-distributing6-upd.png 1719w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062224/maverick-banker-distributing6-upd-300x110.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062224/maverick-banker-distributing6-upd-1024x376.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062224/maverick-banker-distributing6-upd-768x282.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062224/maverick-banker-distributing6-upd-1536x564.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062224/maverick-banker-distributing6-upd-953x350.png 953w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062224/maverick-banker-distributing6-upd-740x272.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062224/maverick-banker-distributing6-upd-763x280.png 763w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062224/maverick-banker-distributing6-upd-800x294.png 800w" sizes="auto, (max-width: 1719px) 100vw, 1719px" /></a></p>
  394. <p>First, it will create a variable named &#8220;$URL&#8221; and assign it the content passed as a parameter, create a &#8220;Net.WebClient&#8221; object, and call the &#8220;DownloadString.Invoke($URL)&#8221; function. Immediately after creating these small commands, it will encode them in base64. In general, the script will create a full obfuscation using functions to automatically and randomly generate blocks in PowerShell. The persistence script reassembles the initial LNK file used to start the infection.</p>
  395. <p>This persistence mechanism seems a bit strange at first glance, as it always depends on the C2 being online. However, it is in fact clever, since the malware would not work without the C2. Thus, saving only the bootstrap .bat file ensures that the entire infection remains in memory. If persistence is achieved, it will start its true function, which is mainly to monitor browsers to check if they open banking pages.</p>
  396. <p>The browsers running on the machine are checked for possible domains accessed on the victim&#8217;s machine to verify the web page visited by the victim. The program will use the current foreground window (window in focus) and its PID; with the PID, it will extract the process name. Monitoring will only continue if the victim is using one of the following browsers:</p>
  397. <p>* Chrome<br />
  398. * Firefox<br />
  399. * MS Edge<br />
  400. * Brave<br />
  401. * Internet Explorer<br />
  402. * Specific bank web browser</p>
  403. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062253/maverick-banker-14-3.png" class="magnificImage"><img loading="lazy" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062253/maverick-banker-14-3.png" alt="" width="1814" height="636" class="aligncenter size-full wp-image-117760" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062253/maverick-banker-14-3.png 1814w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062253/maverick-banker-14-3-300x105.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062253/maverick-banker-14-3-1024x359.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062253/maverick-banker-14-3-768x269.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062253/maverick-banker-14-3-1536x539.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062253/maverick-banker-14-3-998x350.png 998w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062253/maverick-banker-14-3-740x259.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062253/maverick-banker-14-3-799x280.png 799w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062253/maverick-banker-14-3-800x280.png 800w" sizes="auto, (max-width: 1814px) 100vw, 1814px" /></a></p>
  404. <p>If any browser from the list above is running, the malware will use UI Automation to extract the title of the currently open tab and use this information with a predefined list of target online banking sites to determine whether to perform any action on them. The list of target banks is compressed with gzip, encrypted using AES-256, and stored as a base64 string. The AES initialization vector (IV) is stored in the first 16 bytes of the decoded base64 data, and the key is stored in the next 32 bytes. The actual encrypted data begins at offset 48.</p>
  405. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062323/maverick-banker-distributing12-upd.png" class="magnificImage"><img loading="lazy" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062323/maverick-banker-distributing12-upd.png" alt="" width="1689" height="1528" class="aligncenter size-full wp-image-117761" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062323/maverick-banker-distributing12-upd.png 1689w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062323/maverick-banker-distributing12-upd-300x271.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062323/maverick-banker-distributing12-upd-1024x926.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062323/maverick-banker-distributing12-upd-768x695.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062323/maverick-banker-distributing12-upd-1536x1390.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062323/maverick-banker-distributing12-upd-387x350.png 387w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062323/maverick-banker-distributing12-upd-740x669.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062323/maverick-banker-distributing12-upd-310x280.png 310w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15062323/maverick-banker-distributing12-upd-800x724.png 800w" sizes="auto, (max-width: 1689px) 100vw, 1689px" /></a></p>
  406. <p>This encryption mechanism is the same one used by <a href="https://securelist.com/coyote-multi-stage-banking-trojan/111846/" target="_blank" rel="noopener">Coyote</a>, a banking Trojan also written in .NET and documented by us in early 2024.</p>
  407. <p>If any of these banks are found, the program will decrypt another PE file using the same algorithm described in the <a href="#loader">.NET Loader</a> section of this report and will load it as an assembly, calling its entry point with the name of the open bank as an argument. This new PE is called &#8220;Maverick.Agent&#8221; and contains most of the banking logic for contacting the C2 and extracting data with it.</p>
  408. <h3 id="maverick-agent">Maverick Agent</h3>
  409. <p>The agent is the binary that will do most of the banker&#8217;s work; it will first check if it is running on a machine located in Brazil. To do this, it will check the following constraints:</p>
  410. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213458/maverick-banker-distributing3.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117732" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213458/maverick-banker-distributing3.png" alt="" width="693" height="406" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213458/maverick-banker-distributing3.png 693w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213458/maverick-banker-distributing3-300x176.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213458/maverick-banker-distributing3-597x350.png 597w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213458/maverick-banker-distributing3-478x280.png 478w" sizes="auto, (max-width: 693px) 100vw, 693px" /></a></p>
  411. <p>What each of them does is:</p>
  412. <ul>
  413. <li><strong>IsValidBrazilianTimezone()</strong><br />
  414. Checks if the current time zone is within the Brazilian time zone range. Brazil has time zones between UTC-5 (-300 min) and UTC-2 (-120 min). If the current time zone is within this range, it returns &#8220;true&#8221;.</li>
  415. <li><strong>IsBrazilianLocale()</strong><br />
  416. Checks if the current thread&#8217;s language or locale is set to Brazilian Portuguese. For example, &#8220;pt-BR&#8221;, &#8220;pt_br&#8221;, or any string containing &#8220;portuguese&#8221; and &#8220;brazil&#8221;. Returns &#8220;true&#8221; if the condition is met.</li>
  417. <li><strong>IsBrazilianRegion()</strong><br />
  418. Checks if the system&#8217;s configured region is Brazil. It compares region codes like &#8220;BR&#8221;, &#8220;BRA&#8221;, or checks if the region name contains &#8220;brazil&#8221;. Returns &#8220;true&#8221; if the region is set to Brazil.</li>
  419. <li><strong>IsBrazilianDateFormat()</strong><br />
  420. Checks if the short date format follows the Brazilian standard. The Brazilian format is dd/MM/yyyy. The function checks if the pattern starts with &#8220;dd/&#8221; and contains &#8220;/MM/&#8221; or &#8220;dd/MM&#8221;.</li>
  421. </ul>
  422. <p>Right after the check, it will enable appropriate DPI support for the operating system and monitor type, ensuring that images are sharp, fit the correct scale (screen zoom), and work well on multiple monitors with different resolutions. Then, it will check for any running persistence, previously created in &#8220;C:\Users\&lt;user&gt;\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\&#8221;. If more than one file is found, it will delete the others based on &#8220;GetCreationTime&#8221; and keep only the most recently created one.</p>
  423. <h2 id="c2-communication">C2 communication</h2>
  424. <p>Communication uses the WatsonTCP library with SSL tunnels. It utilizes a local encrypted X509 certificate to protect the communication, which is another similarity to the Coyote malware. The connection is made to the host &#8220;casadecampoamazonas.com&#8221; on port 443. The certificate is exported as encrypted, and the password used to decrypt it is Maverick2025!. After the certificate is decrypted, the client will connect to the server.</p>
  425. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213602/maverick-banker-distributing15.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117733" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213602/maverick-banker-distributing15.png" alt="" width="2048" height="527" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213602/maverick-banker-distributing15.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213602/maverick-banker-distributing15-300x77.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213602/maverick-banker-distributing15-1024x264.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213602/maverick-banker-distributing15-768x198.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213602/maverick-banker-distributing15-1536x395.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213602/maverick-banker-distributing15-1360x350.png 1360w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213602/maverick-banker-distributing15-740x190.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213602/maverick-banker-distributing15-1088x280.png 1088w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13213602/maverick-banker-distributing15-800x206.png 800w" sizes="auto, (max-width: 2048px) 100vw, 2048px" /></a></p>
  426. <p>For the C2 to work, a specific password must be sent during the first contact. The password used by the agent is &#8220;101593a51d9c40fc8ec162d67504e221&#8221;. Using this password during the first connection will successfully authenticate the agent with the C2, and it will be ready to receive commands from the operator. The important commands are:</p>
  427. <table>
  428. <tbody>
  429. <tr>
  430. <td><strong>Command</strong></td>
  431. <td><strong>Description</strong></td>
  432. </tr>
  433. <tr>
  434. <td>INFOCLIENT</td>
  435. <td>Returns the information of the agent, which is used to identify it on the C2. The information used is described in the next section.</td>
  436. </tr>
  437. <tr>
  438. <td>RECONNECT</td>
  439. <td>Disconnect, sleep for a few seconds, and reconnect again to the C2.</td>
  440. </tr>
  441. <tr>
  442. <td>REBOOT</td>
  443. <td>Reboot the machine</td>
  444. </tr>
  445. <tr>
  446. <td>KILLAPPLICATION</td>
  447. <td>Exit the malware process</td>
  448. </tr>
  449. <tr>
  450. <td>SCREENSHOT</td>
  451. <td>Take a screenshot and send it to C2, compressed with gzip</td>
  452. </tr>
  453. <tr>
  454. <td>KEYLOGGER</td>
  455. <td>Enable the keylogger, capture all locally, and send only when the server specifically requests the logs</td>
  456. </tr>
  457. <tr>
  458. <td>MOUSECLICK</td>
  459. <td>Do a mouse click, used for the remote connection</td>
  460. </tr>
  461. <tr>
  462. <td>KEYBOARDONECHAR</td>
  463. <td>Press one char, used for the remote connection</td>
  464. </tr>
  465. <tr>
  466. <td>KEYBOARDMULTIPLESCHARS</td>
  467. <td>Send multiple characters used for the remote connection</td>
  468. </tr>
  469. <tr>
  470. <td>TOOGLEDESKTOP</td>
  471. <td>Enable remote connection and send multiple screenshots to the machine when they change (it computes a hash of each screenshot to ensure it is not the same image)</td>
  472. </tr>
  473. <tr>
  474. <td>TOOGLEINTERN</td>
  475. <td>Get a screenshot of a specific window</td>
  476. </tr>
  477. <tr>
  478. <td>GENERATEWINDOWLOCKED</td>
  479. <td>Lock the screen using one of the banks&#8217; home pages.</td>
  480. </tr>
  481. <tr>
  482. <td>LISTALLHANDLESOPENEDS</td>
  483. <td>Send all open handles to the server</td>
  484. </tr>
  485. <tr>
  486. <td>KILLPROCESS</td>
  487. <td>Kill some process by using its handle</td>
  488. </tr>
  489. <tr>
  490. <td>CLOSEHANDLE</td>
  491. <td>Close a handle</td>
  492. </tr>
  493. <tr>
  494. <td>MINIMIZEHANDLE</td>
  495. <td>Minimize a window using its handle</td>
  496. </tr>
  497. <tr>
  498. <td>MAXIMIZEHANDLE</td>
  499. <td>Maximize a window using its handle</td>
  500. </tr>
  501. <tr>
  502. <td>GENERATEWINDOWREQUEST</td>
  503. <td>Generate a phishing window asking for the victim&#8217;s credentials used by banks</td>
  504. </tr>
  505. <tr>
  506. <td>CANCELSCREENREQUEST</td>
  507. <td>Disable the phishing window</td>
  508. </tr>
  509. </tbody>
  510. </table>
  511. <p><strong>Agent profile info</strong></p>
  512. <p>In the &#8220;INFOCLIENT&#8221; command, the information sent to the C2 is as follows:</p>
  513. <ul>
  514. <li><strong>Agent ID:</strong> A SHA256 hash of all primary MAC addresses used by all interfaces</li>
  515. <li>Username</li>
  516. <li>Hostname</li>
  517. <li>Operating system version</li>
  518. <li>Client version (no value)</li>
  519. <li>Number of monitors</li>
  520. <li>Home page (home): &#8220;home&#8221; indicates which bank&#8217;s home screen should be used, sent before the Agent is decrypted by the banking application monitoring routine.</li>
  521. <li>Screen resolution</li>
  522. </ul>
  523. <h2 id="conclusion">Conclusion</h2>
  524. <p>According to our telemetry, all victims were in Brazil, but the Trojan has the potential to spread to other countries, as an infected victim can send it to another location. Even so, the malware is designed to target only Brazilians at the moment.<br />
  525. It is evident that this threat is very sophisticated and complex; the entire execution chain is relatively new, but the final payload has many code overlaps and similarities with the Coyote banking Trojan, which we documented in 2024. However, some of the techniques are not exclusive to Coyote and have been observed in other low-profile banking Trojans written in .NET. The agent&#8217;s structure is also different from how Coyote operated; it did not use this architecture before.<br />
  526. It is very likely that Maverick is a new banking Trojan using shared code from Coyote, which may indicate that the developers of Coyote have completely refactored and rewritten a large part of their components.<br />
  527. This is one of the most complex infection chains we have ever detected, designed to load a banking Trojan. It has infected many people in Brazil, and its worm-like nature allows it to spread exponentially by exploiting a very popular instant messenger. The impact is enormous. Furthermore, it demonstrates the use of AI in the code-writing process, specifically in certificate decryption, which may also indicate the involvement of AI in the overall code development. Maverick works like any other banking Trojan, but the worrying aspects are its delivery method and its significant impact.<br />
  528. We have detected the entire infection chain since day one, preventing victim infection from the initial LNK file. Kaspersky products detect this threat with the verdict <strong>HEUR:Trojan.Multi.Powenot.a</strong> and <strong>HEUR:Trojan-Banker.MSIL.Maverick.gen.</strong></p>
  529. <h2 id="iocs">IoCs</h2>
  530. <table>
  531. <tbody>
  532. <tr>
  533. <td>Dominio</td>
  534. <td>IP</td>
  535. <td>ASN</td>
  536. </tr>
  537. <tr>
  538. <td><a href="https://opentip.kaspersky.com/casadecampoamazonas.com/?icid=gl_sl_opentip_sm-team_9d1b9de83ae3bad6&#038;utm_source=SL&#038;utm_medium=SL&#038;utm_campaign=SL" target="_blank" rel="noopener"><strong>casadecampoamazonas[.]com</strong></a></td>
  539. <td>181.41.201.184</td>
  540. <td>212238</td>
  541. </tr>
  542. <tr>
  543. <td><a href="https://opentip.kaspersky.com/sorvetenopote.com/?icid=gl_sl_opentip_sm-team_153c14d9b642446a&#038;utm_source=SL&#038;utm_medium=SL&#038;utm_campaign=SL" target="_blank" rel="noopener"><strong>sorvetenopote[.]com</strong></a></td>
  544. <td>77.111.101.169</td>
  545. <td>396356</td>
  546. </tr>
  547. </tbody>
  548. </table>
  549. ]]></content:encoded>
  550. <wfw:commentRss>https://securelist.com/maverick-banker-distributing-via-whatsapp/117715/feed/</wfw:commentRss>
  551. <slash:comments>0</slash:comments>
  552. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15073641/SL-Maverick-Brazilian-banker-featured.jpg" width="2000" height="1000"><media:keywords>full</media:keywords></media:content>
  553. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15073641/SL-Maverick-Brazilian-banker-featured-1024x512.jpg" width="1024" height="512"><media:keywords>large</media:keywords></media:content>
  554. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15073641/SL-Maverick-Brazilian-banker-featured-300x150.jpg" width="300" height="150"><media:keywords>medium</media:keywords></media:content>
  555. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/15073641/SL-Maverick-Brazilian-banker-featured-150x150.jpg" width="150" height="150"><media:keywords>thumbnail</media:keywords></media:content>
  556. </item>
  557. <item>
  558. <title>Mysterious Elephant: a growing threat</title>
  559. <link>https://securelist.com/mysterious-elephant-apt-ttps-and-tools/117596/</link>
  560. <comments>https://securelist.com/mysterious-elephant-apt-ttps-and-tools/117596/#respond</comments>
  561. <dc:creator><![CDATA[Noushin Shabab, Ye Jin]]></dc:creator>
  562. <pubDate>Wed, 15 Oct 2025 10:00:11 +0000</pubDate>
  563. <category><![CDATA[APT reports]]></category>
  564. <category><![CDATA[GReAT research]]></category>
  565. <category><![CDATA[Malware Technologies]]></category>
  566. <category><![CDATA[Targeted attacks]]></category>
  567. <category><![CDATA[Google Chrome]]></category>
  568. <category><![CDATA[Malware Descriptions]]></category>
  569. <category><![CDATA[Spear phishing]]></category>
  570. <category><![CDATA[Malware]]></category>
  571. <category><![CDATA[APT]]></category>
  572. <category><![CDATA[RAT Trojan]]></category>
  573. <category><![CDATA[Backdoor]]></category>
  574. <category><![CDATA[WhatsApp]]></category>
  575. <category><![CDATA[Data theft]]></category>
  576. <category><![CDATA[Defense evasion]]></category>
  577. <category><![CDATA[TTPs]]></category>
  578. <category><![CDATA[APAC]]></category>
  579. <category><![CDATA[RC4]]></category>
  580. <category><![CDATA[APT (Targeted attacks)]]></category>
  581. <category><![CDATA[Windows malware]]></category>
  582. <guid isPermaLink="false">https://kasperskycontenthub.com/securelist/?p=117596</guid>
  583.  
  584. <description><![CDATA[Kaspersky GReAT experts describe the latest Mysterious Elephant APT activity. The threat actor exfiltrates data related to WhatsApp and employs tools such as BabShell and MemLoader HidenDesk.]]></description>
  585. <content:encoded><![CDATA[<p><img width="990" height="400" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30145442/mysterious-elephant-featured-image-990x400.jpg" class="attachment-securelist-huge-promo size-securelist-huge-promo wp-post-image" alt="" decoding="async" loading="lazy" /></p><h2 id="introduction">Introduction</h2>
  586. <p>Mysterious Elephant is a highly active advanced persistent threat (APT) group that we at Kaspersky GReAT discovered in 2023. It has been consistently evolving and adapting its tactics, techniques, and procedures (TTPs) to stay under the radar. With a primary focus on targeting government entities and foreign affairs sectors in the Asia-Pacific region, the group has been using a range of sophisticated tools and techniques to infiltrate and exfiltrate sensitive information. Notably, Mysterious Elephant has been exploiting WhatsApp communications to steal sensitive data, including documents, pictures, and archive files.</p>
  587. <p>The group&#8217;s latest campaign, which began in early 2025, reveals a significant shift in their TTPs, with an increased emphasis on using new custom-made tools as well as customized open-source tools, such as BabShell and MemLoader modules, to achieve their objectives. In this report, we will delve into the history of Mysterious Elephant&#8217;s attacks, their latest tactics and techniques, and provide a comprehensive understanding of this threat.</p>
  588. <h2 id="the-emergence-of-mysterious-elephant">The emergence of Mysterious Elephant</h2>
  589. <p>Mysterious Elephant is a threat actor <a href="https://securelist.com/apt-trends-report-q2-2023/110231/#mysterious-elephant" target="_blank" rel="noopener">we&#8217;ve been tracking since 2023</a>. Initially, its intrusions resembled those of the Confucius threat actor. However, further analysis revealed a more complex picture. We found that Mysterious Elephant&#8217;s malware contained code from multiple APT groups, including Origami Elephant, Confucius, and SideWinder, which suggested deep collaboration and resource sharing between teams. Notably, our research indicates that the tools and code borrowed from the aforementioned APT groups were previously used by their original developers, but have since been abandoned or replaced by newer versions. However, Mysterious Elephant has not only adopted these tools, but also continued to maintain, develop, and improve them, incorporating the code into their own operations and creating new, advanced versions. The actor&#8217;s early attack chains featured distinctive elements, such as remote template injections and exploitation of <a href="https://www.cve.org/CVERecord?id=CVE-2017-11882" target="_blank" rel="noopener">CVE-2017-11882</a>, followed by the use of a downloader called &#8220;Vtyrei&#8221;, which was previously connected to Origami Elephant and later abandoned by this group. Over time, Mysterious Elephant has continued to upgrade its tools and expanded its operations, eventually earning its designation as a previously unidentified threat actor.</p>
  590. <h2 id="latest-campaign">Latest campaign</h2>
  591. <p>The group&#8217;s latest campaign, which was discovered in early 2025, reveals a significant shift in their TTPs. They are now using a combination of exploit kits, phishing emails, and malicious documents to gain initial access to their targets. Once inside, they deploy a range of custom-made and open-source tools to achieve their objectives. In the following sections, we&#8217;ll delve into the latest tactics and techniques used by Mysterious Elephant, including their new tools, infrastructure, and victimology.</p>
  592. <h3 id="spear-phishing">Spear phishing</h3>
  593. <p>Mysterious Elephant has started using spear phishing techniques to gain initial access. Phishing emails are tailored to each victim and are convincingly designed to mimic legitimate correspondence. The primary targets of this APT group are countries in the South Asia (SA) region, particularly Pakistan. Notably, this APT organization shows a strong interest and inclination towards diplomatic institutions, which is reflected in the themes covered by the threat actor&#8217;s spear phishing emails, as seen in bait attachments.</p>
  594. <div id="attachment_117597" style="width: 690px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101320/mysterious-elephant1.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117597" class="size-full wp-image-117597" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101320/mysterious-elephant1.png" alt="Spear phishing email used by Mysterious Elephant" width="680" height="617" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101320/mysterious-elephant1.png 680w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101320/mysterious-elephant1-300x272.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101320/mysterious-elephant1-386x350.png 386w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101320/mysterious-elephant1-309x280.png 309w" sizes="auto, (max-width: 680px) 100vw, 680px" /></a><p id="caption-attachment-117597" class="wp-caption-text">Spear phishing email used by Mysterious Elephant</p></div>
  595. <p>For example, the decoy document above concerns Pakistan&#8217;s application for a non-permanent seat on the United Nations Security Council for the 2025–2026 term.</p>
  596. <h3 id="malicious-tools">Malicious tools</h3>
  597. <p>Mysterious Elephant&#8217;s toolkit is a noteworthy aspect of their operations. The group has switched to using a variety of custom-made and open-source tools instead of employing known malware to achieve their objectives.</p>
  598. <h4 id="powershell-scripts">PowerShell scripts</h4>
  599. <p>The threat actor uses PowerShell scripts to execute commands, deploy additional payloads, and establish persistence. These scripts are loaded from C2 servers and often use legitimate system administration tools, such as curl and certutil, to download and execute malicious files.</p>
  600. <div id="attachment_117598" style="width: 696px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101409/mysterious-elephant2.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117598" class="size-full wp-image-117598" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101409/mysterious-elephant2.png" alt="Malicious PowerShell script seen in Mysterious Elephant's 2025 attacks" width="686" height="138" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101409/mysterious-elephant2.png 686w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101409/mysterious-elephant2-300x60.png 300w" sizes="auto, (max-width: 686px) 100vw, 686px" /></a><p id="caption-attachment-117598" class="wp-caption-text">Malicious PowerShell script seen in Mysterious Elephant&#8217;s 2025 attacks</p></div>
  601. <p>For example, the script above is used to download the next-stage payload and save it as <code>ping.exe</code>. It then schedules a task to execute the payload and send the results back to the C2 server. The task is set to run automatically in response to changes in the network profile, ensuring persistence on the compromised system. Specifically, it is triggered by network profile-related events (Microsoft-Windows-NetworkProfile/Operational), which can indicate a new network connection. A four-hour delay is configured after the event, likely to help evade detection.</p>
  602. <h4 id="babshell">BabShell</h4>
  603. <p>One of the most recent tools used by Mysterious Elephant is BabShell. This is a reverse shell tool written in C++ that enables attackers to connect to a compromised system. Upon execution, it gathers system information, including username, computer name, and MAC address, to identify the machine. The malware then enters an infinite loop of performing the following steps:</p>
  604. <ol>
  605. <li>It listens for and receives commands from the attacker-controlled C2 server.</li>
  606. <li>For each received command, BabShell creates a separate thread to execute it, allowing for concurrent execution of multiple commands.</li>
  607. <li>The output of each command is captured and saved to a file named <code>output_[timestamp].txt</code>, where [timestamp] is the current time. This allows the attacker to review the results of the commands.</li>
  608. <li>The contents of the <code>output_[timestamp].txt</code> file are then transmitted back to the C2 server, providing the attacker with the outcome of the executed commands and enabling them to take further actions, for instance, deploy a next-stage payload or execute additional malicious instructions.</li>
  609. </ol>
  610. <p>BabShell uses the following commands to execute command-line instructions and additional payloads it receives from the server:</p>
  611. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101459/mysterious-elephant3.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117599" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101459/mysterious-elephant3.png" alt="" width="808" height="76" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101459/mysterious-elephant3.png 808w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101459/mysterious-elephant3-300x28.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101459/mysterious-elephant3-768x72.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101459/mysterious-elephant3-800x75.png 800w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30101459/mysterious-elephant3-740x70.png 740w" sizes="auto, (max-width: 808px) 100vw, 808px" /></a></p>
  612. <h4 id="customized-open-source-tools">Customized open-source tools</h4>
  613. <p>One of the latest modules used by Mysterious Elephant and loaded by BabShell is MemLoader HidenDesk.</p>
  614. <p>MemLoader HidenDesk is a reflective PE loader that loads and executes malicious payloads in memory. It uses encryption and compression to evade detection.</p>
  615. <p>MemLoader HidenDesk operates in the following manner:</p>
  616. <ol>
  617. <li>The malware checks the number of active processes and terminates itself if there are fewer than 40 processes running — a technique used to evade sandbox analysis.</li>
  618. <li>It creates a shortcut to its executable and saves it in the autostart folder, ensuring it can restart itself after a system reboot.</li>
  619. <li>The malware then creates a hidden desktop named &#8220;MalwareTech_Hidden&#8221; and switches to it, providing a covert environment for its activities. This technique is borrowed from an open-source project on GitHub.</li>
  620. <li>Using an RC4-like algorithm with the key <code>D12Q4GXl1SmaZv3hKEzdAhvdBkpWpwcmSpcD</code>, the malware decrypts a block of data from its own binary and executes it in memory as a shellcode. The shellcode&#8217;s sole purpose is to load and execute a PE file, specifically a sample of the commercial RAT called &#8220;Remcos&#8221; (MD5: 037b2f6233ccc82f0c75bf56c47742bb).</li>
  621. </ol>
  622. <p>Another recent loader malware used in the latest campaign is MemLoader Edge.</p>
  623. <p>MemLoader Edge is a malicious loader that embeds a sample of the VRat backdoor, utilizing encryption and evasion techniques.</p>
  624. <p>It operates in the following manner:</p>
  625. <ol>
  626. <li>The malware performs a network connectivity test by attempting to connect to the legitimate website <code>bing.com:445</code>, which is likely to fail since the 445 port is not open on the server side. If the test were to succeed, suggesting that the loader is possibly in an emulation or sandbox environment, the malware would drop an embedded picture on the machine and display a popup window with three unresponsive mocked-up buttons, then enter an infinite loop. This is done to complicate detection and analysis.</li>
  627. <li>If the connection attempt fails, the malware iterates through a 1016-byte array to find the correct XOR keys for decrypting the embedded PE file in two rounds. The process continues until the decrypted data matches the byte sequence of <code>MZ\x90</code>, indicating that the real XOR keys are found within the array.</li>
  628. <li>If the malware is unable to find the correct XOR keys, it will display the same picture and popup window as before, followed by a message box containing an error message after the window is closed.</li>
  629. <li>Once the PE file is successfully decrypted, it is loaded into memory using reflective loading techniques. The decrypted PE file is based on the open-source RAT vxRat, which is referred to as VRat due to the PDB string found in the sample:<br />
  630. <pre class="urvanov-syntax-highlighter-plain-tag">C:\Users\admin\source\repos\vRat_Client\Release\vRat_Client.pdb</pre>
  631. </li>
  632. </ol>
  633. <h4 id="whatsapp-specific-exfiltration-tools">WhatsApp-specific exfiltration tools</h4>
  634. <p>Spying on WhatsApp communications is a key aspect of the exfiltration modules employed by Mysterious Elephant. They are designed to steal sensitive data from compromised systems. The attackers have implemented WhatsApp-specific features into their exfiltration tools, allowing them to target files shared through the WhatsApp application and exfiltrate valuable information, including documents, pictures, archive files, and more. These modules employ various techniques, such as recursive directory traversal, XOR decryption, and Base64 encoding, to evade detection and upload the stolen data to the attackers&#8217; C2 servers.</p>
  635. <ul>
  636. <li><strong>Uplo Exfiltrator</strong></li>
  637. </ul>
  638. <p>The Uplo Exfiltrator is a data exfiltration tool that targets specific file types and uploads them to the attackers&#8217; C2 servers. It uses a simple XOR decryption to deobfuscate C2 domain paths and employs a recursive <a href="https://en.wikipedia.org/wiki/Depth-first_search" target="_blank" rel="noopener">depth-first directory traversal algorithm</a> to identify valuable files. The malware specifically targets file types that are likely to contain potentially sensitive data, including documents, spreadsheets, presentations, archives, certificates, contacts, and images. The targeted file extensions include .TXT, .DOC, .DOCX, .PDF, .XLS, .XLSX, .CSV, .PPT, .PPTX, .ZIP, .RAR, .7Z, .PFX, .VCF, .JPG, .JPEG, and .AXX.</p>
  639. <ul>
  640. <li><strong>Stom Exfiltrator</strong></li>
  641. </ul>
  642. <p>The Stom Exfiltrator is a commonly used exfiltration tool that recursively searches specific directories, including the &#8220;Desktop&#8221; and &#8220;Downloads&#8221; folders, as well as all drives except the C drive, to collect files with predefined extensions. Its latest variant is specifically designed to target files shared through the WhatsApp application. This version uses a hardcoded folder path to locate and exfiltrate such files:</p><pre class="urvanov-syntax-highlighter-plain-tag">%AppData%\\Packages\\xxxxx.WhatsAppDesktop_[WhatsApp ID]\\LocalState\\Shared\\transfers\\</pre><p>
  643. <p>The targeted file extensions include .PDF, .DOCX, .TXT, .JPG, .PNG, .ZIP, .RAR, .PPTX, .DOC, .XLS, .XLSX, .PST, and .OST.</p>
  644. <ul>
  645. <li><strong>ChromeStealer Exfiltrator</strong></li>
  646. </ul>
  647. <p>The ChromeStealer Exfiltrator is another exfiltration tool used by Mysterious Elephant that targets Google Chrome browser data, including cookies, tokens, and other sensitive information. It searches specific directories within the Chrome user data of the most recently used Google Chrome profile, including the IndexedDB directory and the &#8220;Local Storage&#8221; directory. The malware uploads all files found in these directories to the attacker-controlled C2 server, potentially exposing sensitive data like chat logs, contacts, and authentication tokens. The response from the C2 server suggests that this tool was also after stealing files related to WhatsApp. The ChromeStealer Exfiltrator employs string obfuscation to evade detection.</p>
  648. <h2 id="infrastructure">Infrastructure</h2>
  649. <p>Mysterious Elephant&#8217;s infrastructure is a network of domains and IP addresses. The group has been using a range of techniques, including wildcard DNS records, to generate unique domain names for each request. This makes it challenging for security researchers to track and monitor their activities. The attackers have also been using virtual private servers (VPS) and cloud services to host their infrastructure. This allows them to easily scale and adapt their operations to evade detection. According to our data, this APT group has utilized the services of numerous VPS providers in their operations. Nevertheless, our analysis of the statistics has revealed that Mysterious Elephant appears to have a preference for certain VPS providers.</p>
  650. <div class="js-infogram-embed" data-id="_/PYFxzOySORx2YCuG6lUv" data-type="interactive" data-title="01-EN-RU-Mysterious Elephant charts" style="min-height:;"></div>
  651. <p style="text-align: center;font-style: italic;font-weight: bold;margin-top: -10px"><em>VPS providers most commonly used by Mysterious Elephant (<a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30102127/mysterious-elephant4.png" target="_blank" rel="noopener">download</a>)</em></p>
  652. <h2 id="victimology">Victimology</h2>
  653. <p>Mysterious Elephant&#8217;s primary targets are government entities and foreign affairs sectors in the Asia-Pacific region. The group has been focusing on Pakistan, Bangladesh, and Sri Lanka, with a lower number of victims in other countries. The attackers have been using highly customized payloads tailored to specific individuals, highlighting their sophistication and focus on targeted attacks.</p>
  654. <p>The group&#8217;s victimology is characterized by a high degree of specificity. Attackers often use personalized phishing emails and malicious documents to gain initial access. Once inside, they employ a range of tools and techniques to escalate privileges, move laterally, and exfiltrate sensitive information.</p>
  655. <ul>
  656. <li>Most targeted countries: Pakistan, Bangladesh, Afghanistan, Nepal and Sri Lanka</li>
  657. </ul>
  658. <div class="js-infogram-embed" data-id="_/R4Utu2bH5IoYCk7MIBoH" data-type="interactive" data-title="01 EN Mysterious Elephant charts 2" style="min-height:;"></div>
  659. <p style="text-align: center;font-style: italic;font-weight: bold;margin-top: -10px"><em>Countries targeted most often by Mysterious Elephant (<a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14095041/02-en-mysterious-elephant-charts.png" target="_blank" rel="noopener">download</a>)</em></p>
  660. <ul>
  661. <li>Primary targets: government entities and foreign affairs sectors</li>
  662. </ul>
  663. <div class="js-infogram-embed" data-id="_/NNQDAbzeYeYkE3UXVrZ5" data-type="interactive" data-title="03 EN Mysterious Elephant charts" style="min-height:;"></div>
  664. <p style="text-align: center;font-style: italic;font-weight: bold;margin-top: -10px"><em>Industries most targeted by Mysterious Elephant (<a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13125733/03-en-mysterious-elephant-charts.png" target="_blank" rel="noopener">download</a>)</em></p>
  665. <h2 id="conclusion">Conclusion</h2>
  666. <p>In conclusion, Mysterious Elephant is a highly sophisticated and active Advanced Persistent Threat group that poses a significant threat to government entities and foreign affairs sectors in the Asia-Pacific region. Through their continuous evolution and adaptation of tactics, techniques, and procedures, the group has demonstrated the ability to evade detection and infiltrate sensitive systems. The use of custom-made and open-source tools, such as BabShell and MemLoader, highlights their technical expertise and willingness to invest in developing advanced malware.</p>
  667. <p>The group&#8217;s focus on targeting specific organizations, combined with their ability to tailor their attacks to specific victims, underscores the severity of the threat they pose. The exfiltration of sensitive information, including documents, pictures, and archive files, can have significant consequences for national security and global stability.</p>
  668. <p>To counter the Mysterious Elephant threat, it is essential for organizations to implement <a href="https://www.kaspersky.com/enterprise-security/endpoint-detection-response-edr?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team___knext____b31b3f3de449f764" target="_blank" rel="noopener">robust security measures</a>, including regular software updates, <a href="https://www.kaspersky.com/enterprise-security/anti-targeted-attack-platform?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team___kata____86b6b7fe75e32725" target="_blank" rel="noopener">network monitoring</a>, and <a href="https://asap.kaspersky.com/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team___kasap____b3c004b7eec21817" target="_blank" rel="noopener">employee training</a>. Additionally, international cooperation and information sharing among cybersecurity professionals, governments, and industries are crucial in tracking and disrupting the group&#8217;s activities.</p>
  669. <p>Ultimately, staying ahead of Mysterious Elephant and other APT groups requires a proactive and collaborative approach to cybersecurity. By understanding their TTPs, sharing threat intelligence, and implementing effective countermeasures, we can reduce the risk of successful attacks and protect sensitive information from falling into the wrong hands.</p>
  670. <h2 id="indicators-of-compromise">Indicators of compromise</h2>
  671. <h3 id="file-hashes">File hashes</h3>
  672. <p><strong>Malicious documents</strong><br />
  673. <a href="https://opentip.kaspersky.com/c12ea05baf94ef6f0ea73470d70db3b2/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______09ab9e63c2fbae18&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">c12ea05baf94ef6f0ea73470d70db3b2</a> M6XA.rar<br />
  674. <a href="https://opentip.kaspersky.com/8650fff81d597e1a3406baf3bb87297f/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______a7b7bdc14f0ecf16&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">8650fff81d597e1a3406baf3bb87297f</a> 2025-013-PAK-MoD-Invitation_the_UN_Peacekeeping.rar</p>
  675. <p><strong>MemLoader HidenDesk</strong><br />
  676. <a href="https://opentip.kaspersky.com/658eed7fcb6794634bbdd7f272fcf9c6/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______c1ee1e8efe731ce5&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">658eed7fcb6794634bbdd7f272fcf9c6</a> STI.dll<br />
  677. <a href="https://opentip.kaspersky.com/4c32e12e73be9979ede3f8fce4f41a3a/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______39679c1e6198215a&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">4c32e12e73be9979ede3f8fce4f41a3a</a> STI.dll</p>
  678. <p><strong>MemLoader Edge</strong><br />
  679. <a href="https://opentip.kaspersky.com/3caaf05b2e173663f359f27802f10139/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______517ed2c79ff6857a&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">3caaf05b2e173663f359f27802f10139</a> Edge.exe, debugger.exe, runtime.exe<br />
  680. <a href="https://opentip.kaspersky.com/bc0fc851268afdf0f63c97473825ff75/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______4f3755f64aba0268&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">bc0fc851268afdf0f63c97473825ff75</a></p>
  681. <p><strong>BabShell</strong><br />
  682. <a href="https://opentip.kaspersky.com/85c7f209a8fa47285f08b09b3868c2a1/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______5fd77beb36827bdb&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">85c7f209a8fa47285f08b09b3868c2a1</a><br />
  683. <a href="https://opentip.kaspersky.com/f947ff7fb94fa35a532f8a7d99181cf1/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______cff906b0140720d0&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">f947ff7fb94fa35a532f8a7d99181cf1</a></p>
  684. <p><strong>Uplo Exfiltrator</strong><br />
  685. <a href="https://opentip.kaspersky.com/cf1d14e59c38695d87d85af76db9a861/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______ffa5f9bd347e41df&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">cf1d14e59c38695d87d85af76db9a861</a> SXSHARED.dll</p>
  686. <p><strong>Stom Exfiltrator</strong><br />
  687. <a href="https://opentip.kaspersky.com/ff1417e8e208cadd55bf066f28821d94/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______4bbcc5b773fb873b&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">ff1417e8e208cadd55bf066f28821d94</a><br />
  688. <a href="https://opentip.kaspersky.com/7ee45b465dcc1ac281378c973ae4c6a0/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______64062702f8c05486&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">7ee45b465dcc1ac281378c973ae4c6a0</a> ping.exe<br />
  689. <a href="https://opentip.kaspersky.com/b63316223e952a3a51389a623eb283b6/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______34280e71815f9819&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">b63316223e952a3a51389a623eb283b6</a> ping.exe<br />
  690. <a href="https://opentip.kaspersky.com/e525da087466ef77385a06d969f06c81/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______00c019d83beca9e0&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">e525da087466ef77385a06d969f06c81</a><br />
  691. <a href="https://opentip.kaspersky.com/78b59ea529a7bddb3d63fcbe0fe7af94/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______02431ea07e815c6c&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">78b59ea529a7bddb3d63fcbe0fe7af94</a></p>
  692. <p><strong>ChromeStealer Exfiltrator</strong><br />
  693. <a href="https://opentip.kaspersky.com/9e50adb6107067ff0bab73307f5499b6/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______002f6ae0f77b2068&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">9e50adb6107067ff0bab73307f5499b6</a> WhatsAppOB.exe</p>
  694. <h3 id="domains-ips">Domains/IPs</h3>
  695. <p><a href="https://opentip.kaspersky.com/hxxps%3a%2f%2fstorycentral.net/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______546a9c2d940aced9&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">hxxps://storycentral[.]net</a><br />
  696. <a href="https://opentip.kaspersky.com/hxxp%3a%2f%2flistofexoticplaces.com/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______df61d5264bb34b52&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">hxxp://listofexoticplaces[.]com</a><br />
  697. <a href="https://opentip.kaspersky.com/hxxps%3a%2f%2fmonsoonconference.com/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______95a175e16a9f2f66&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">hxxps://monsoonconference[.]com</a><br />
  698. <a href="https://opentip.kaspersky.com/hxxp%3a%2f%2fmediumblog.online/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______a1cb20769a3c44cb&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">hxxp://mediumblog[.]online:4443</a><br />
  699. <a href="https://opentip.kaspersky.com/hxxp%3a%2f%2fcloud.givensolutions.online/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______31ac06df427819a4&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">hxxp://cloud.givensolutions[.]online:4443</a><br />
  700. <a href="https://opentip.kaspersky.com/hxxp%3a%2f%2fcloud.qunetcentre.org/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______97e683db289c2d2d&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">hxxp://cloud.qunetcentre[.]org:443</a><br />
  701. <a href="https://opentip.kaspersky.com/solutions.fuzzy-network.tech/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______80e055d2bfaec218&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">solutions.fuzzy-network[.]tech</a><br />
  702. <a href="https://opentip.kaspersky.com/pdfplugins.com/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______fa3c26ff03f790a8&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">pdfplugins[.]com</a><br />
  703. <a href="https://opentip.kaspersky.com/file-share.officeweb.live/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______1906cf37a247699a&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">file-share.officeweb[.]live</a><br />
  704. <a href="https://opentip.kaspersky.com/fileshare-avp.ddns.net/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______324cee9e263be2af&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">fileshare-avp.ddns[.]net</a><br />
  705. <a href="https://opentip.kaspersky.com/91.132.95.148/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______ab2914e9238c3621&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">91.132.95[.]148</a><br />
  706. <a href="https://opentip.kaspersky.com/62.106.66.80/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______847c267eca71ef78&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">62.106.66[.]80</a><br />
  707. <a href="https://opentip.kaspersky.com/158.255.215.45/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______2d778fa9b216c661&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">158.255.215[.]45</a></p>
  708. ]]></content:encoded>
  709. <wfw:commentRss>https://securelist.com/mysterious-elephant-apt-ttps-and-tools/117596/feed/</wfw:commentRss>
  710. <slash:comments>0</slash:comments>
  711. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30145442/mysterious-elephant-featured-image.jpg" width="2000" height="1000"><media:keywords>full</media:keywords></media:content>
  712. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30145442/mysterious-elephant-featured-image-1024x512.jpg" width="1024" height="512"><media:keywords>large</media:keywords></media:content>
  713. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30145442/mysterious-elephant-featured-image-300x150.jpg" width="300" height="150"><media:keywords>medium</media:keywords></media:content>
  714. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30145442/mysterious-elephant-featured-image-150x150.jpg" width="150" height="150"><media:keywords>thumbnail</media:keywords></media:content>
  715. </item>
  716. <item>
  717. <title>Signal in the noise: what hashtags reveal about hacktivism in 2025</title>
  718. <link>https://securelist.com/dfi-meta-hacktivist-report/117708/</link>
  719. <comments>https://securelist.com/dfi-meta-hacktivist-report/117708/#respond</comments>
  720. <dc:creator><![CDATA[Kaspersky Security Services]]></dc:creator>
  721. <pubDate>Tue, 14 Oct 2025 10:00:09 +0000</pubDate>
  722. <category><![CDATA[Research]]></category>
  723. <category><![CDATA[SOC, TI and IR posts]]></category>
  724. <category><![CDATA[Twitter]]></category>
  725. <category><![CDATA[Darknet]]></category>
  726. <category><![CDATA[Threat intelligence]]></category>
  727. <category><![CDATA[hacktivists]]></category>
  728. <category><![CDATA[Telegram]]></category>
  729. <category><![CDATA[Cybersecurity]]></category>
  730. <guid isPermaLink="false">https://kasperskycontenthub.com/securelist/?p=117708</guid>
  731.  
  732. <description><![CDATA[Kaspersky researchers identified over 2000 unique hashtags across 11,000 hacktivist posts on the surface web and the dark web to find out how hacktivist campaigns function and whom they target.]]></description>
  733. <content:encoded><![CDATA[<p><img width="990" height="400" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14082820/SL-DFI-META-report-featured-1200-990x400.jpg" class="attachment-securelist-huge-promo size-securelist-huge-promo wp-post-image" alt="" decoding="async" loading="lazy" /></p><p>What do hacktivist campaigns look like in 2025? To answer this question, we analyzed more than 11,000 posts produced by over 120 hacktivist groups circulating across both the surface web and the dark web, with a particular focus on groups targeting MENA countries. The primary goal of our research is to highlight patterns in hacktivist operations, including attack methods, public warnings, and stated intent. The analysis is undertaken exclusively from a cybersecurity perspective and anchored in the principle of neutrality.</p>
  734. <p>Hacktivists are politically motivated threat actors who typically value visibility over sophistication. Their tactics are designed for maximum visibility, reach, and ease of execution, rather than stealth or technical complexity. The term &#8220;hacktivist&#8221; may refer to either the administrator of a community who initiates the attack or an ordinary subscriber who simply participates in the campaign.</p>
  735. <h2 id="key-findings">Key findings</h2>
  736. <p>While it may be assumed that most operations unfold on hidden forums, in fact, most hacktivist planning and mobilization happens in the open. Telegram has become the command center for today&#8217;s hacktivist groups, hosting the highest density of attack planning and calls to action. The second place is occupied by X (ex-Twitter).</p>
  737. <div id="attachment_117709" style="width: 790px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13172136/META-hacktivist-channels.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117709" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13172136/META-hacktivist-channels.png" alt="Distribution of social media references in posts published in 2025" width="780" height="361" class="size-full wp-image-117709" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13172136/META-hacktivist-channels.png 780w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13172136/META-hacktivist-channels-300x139.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13172136/META-hacktivist-channels-768x355.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13172136/META-hacktivist-channels-756x350.png 756w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13172136/META-hacktivist-channels-740x342.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13172136/META-hacktivist-channels-605x280.png 605w" sizes="auto, (max-width: 780px) 100vw, 780px" /></a><p id="caption-attachment-117709" class="wp-caption-text">Distribution of social media references in posts published in 2025</p></div>
  738. <p>Although we focused on hacktivists operating in MENA, the targeting of the groups under review is global, extending well beyond the region. There are victims throughout Europe and Middle East, as well as Argentina, the United States, Indonesia, India, Vietnam, Thailand, Cambodia, Türkiye, and others.</p>
  739. <h3 id="hashtags-as-the-connective-tissue-of-hacktivist-operations">Hashtags as the connective tissue of hacktivist operations</h3>
  740. <p>One notable feature of hacktivist posts and messages on dark web sites is the frequent use of hashtags (#words). Used in their posts constantly, hashtags often serve as political slogans, amplifying messages, coordinating activity or claiming credit for attacks. The most common themes are political statements and hacktivist groups names, though hashtags sometimes reference geographical locations, such as specific countries or cities.</p>
  741. <p>Hashtags also map alliances and momentum. We have identified 2063 unique tags in 2025: 1484 appearing for the first time, and many tied directly to specific groups or joint campaigns. Most tags are short-lived, lasting about two months, with &#8220;popular&#8221; ones persisting longer when amplified by alliances; channel bans contribute to attrition.</p>
  742. <p>Operationally, reports of completed attacks dominate hashtagged content (58%), and within those, DDoS is the workhorse (61%). Spikes in threatening rhetoric do not by themselves predict more attacks, but timing matters: when threats are published, they typically refer to actions in the near term, i.e. the same week or month, making early warning from open-channel monitoring materially useful.</p>
  743. <p>The full version of the report details the following findings:</p>
  744. <ul>
  745. <li>How long it typically takes for an attack to be reported after an initial threat post</li>
  746. <li>How hashtags are used to coordinate attacks or claim credit</li>
  747. <li>Patterns across campaigns and regions</li>
  748. <li>The types of cyberattacks being promoted or celebrated</li>
  749. </ul>
  750. <h2 id="practical-takeaways-and-recommendations">Practical takeaways and recommendations</h2>
  751. <p>For defenders and corporate leaders, we recommend the following:</p>
  752. <ul>
  753. <li>Prioritize scalable DDoS mitigation and proactive security measures.</li>
  754. <li>Treat public threats as short-horizon indicators rather than long-range forecasts.</li>
  755. <li>Invest in continuous monitoring across Telegram and related ecosystems to discover alliance announcements, threat posts, and cross-posted &#8220;proof&#8221; rapidly.</li>
  756. </ul>
  757. <p>Even organizations outside geopolitical conflict zones should assume exposure: hacktivist campaigns seek reach and spectacle, not narrow geography, and hashtags remain a practical lens for separating noise from signals that demand action.</p>
  758. <p><strong>To download the full report, please fill in the form below.</strong></p>
  759. <p><script data-b24-form="inline/1808/7dlezh" data-skip-moving="true">
  760.              (function (w, d, u) {
  761.                var s = d.createElement("script");
  762.                s.async = true;
  763.                s.src = u + "?" + ((Date.now() / 180000) | 0);
  764.                var h = d.getElementsByTagName("script")[0];
  765.                h.parentNode.insertBefore(s, h);
  766.              })(window, document, "https://cdn.bitrix24.eu/b30707545/crm/form/loader_1808.js");
  767.            </script><br />
  768.            <script src="https://storage.yandexcloud.net/kasperskyform/validator.js"></script><br />
  769.            <script>
  770.              initBxFormValidator({
  771.                formId: "inline/1808/7dlezh",
  772.                emailFieldName: "CONTACT_EMAIL",
  773.                redirectUrl: "https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13172551/Hacktivist_report-DFI-META.pdf",
  774.                naturalFieldNames: ["CONTACT_UF_CRM_NODES"],
  775.                lengthRestrictedFieldNames: {
  776.                  CONTACT_EMAIL: 250,
  777.                  CONTACT_POST: 128,
  778.                  CONTACT_NAME: 50,
  779.                  CONTACT_UF_CRM_COMPANY: 255,
  780.                  CONTACT_UF_CRM_COMPANY_TAX_ID: 50,
  781.                  CONTACT_UF_CRM_PRODUCT_INTEREST: 255,
  782.                  CONTACT_UF_CRM_FORM_QUESTION_2: 255,
  783.                  CONTACT_UF_CRM_FORM_QUESTION_3: 255,
  784.                  CONTACT_UF_CRM_FORM_QUESTION_5: 255,
  785.                },
  786.              });
  787.            </script></p>
  788. ]]></content:encoded>
  789. <wfw:commentRss>https://securelist.com/dfi-meta-hacktivist-report/117708/feed/</wfw:commentRss>
  790. <slash:comments>0</slash:comments>
  791. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14082820/SL-DFI-META-report-featured-1200.jpg" width="1200" height="762"><media:keywords>full</media:keywords></media:content>
  792. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14082820/SL-DFI-META-report-featured-1200-1024x650.jpg" width="1024" height="650"><media:keywords>large</media:keywords></media:content>
  793. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14082820/SL-DFI-META-report-featured-1200-300x191.jpg" width="300" height="191"><media:keywords>medium</media:keywords></media:content>
  794. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14082820/SL-DFI-META-report-featured-1200-150x150.jpg" width="150" height="150"><media:keywords>thumbnail</media:keywords></media:content>
  795. </item>
  796. <item>
  797. <title>The king is dead, long live the king! Windows 10 EOL and Windows 11 forensic artifacts</title>
  798. <link>https://securelist.com/forensic-artifacts-in-windows-11/117680/</link>
  799. <comments>https://securelist.com/forensic-artifacts-in-windows-11/117680/#respond</comments>
  800. <dc:creator><![CDATA[Kirill Magaskin]]></dc:creator>
  801. <pubDate>Tue, 14 Oct 2025 08:00:57 +0000</pubDate>
  802. <category><![CDATA[Research]]></category>
  803. <category><![CDATA[Microsoft Windows]]></category>
  804. <category><![CDATA[Digital forensics]]></category>
  805. <category><![CDATA[Forensic journey]]></category>
  806. <category><![CDATA[Cybersecurity]]></category>
  807. <guid isPermaLink="false">https://kasperskycontenthub.com/securelist/?p=117680</guid>
  808.  
  809. <description><![CDATA[With the end of Windows 10 support approaching, we discuss which forensic artifacts in Windows 11 may be of interest.]]></description>
  810. <content:encoded><![CDATA[<p><img width="990" height="400" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13154941/SL-forensic-artifacts-in-windows-11-featured-990x400.jpg" class="attachment-securelist-huge-promo size-securelist-huge-promo wp-post-image" alt="" decoding="async" loading="lazy" /></p><h2 id="introduction">Introduction</h2>
  811. <p>Windows 11 was released a few years ago, yet it has seen relatively weak enterprise adoption. According to statistics from our Global Emergency Response Team (GERT) investigations, as recently as early 2025, we found that Windows 7, which reached end of support in 2020, was encountered only slightly less often than the newest operating system. Most systems still run Windows 10.</p>
  812. <div class="js-infogram-embed" data-id="_/wUFDDTvIb5MX90BS2iz7" data-type="interactive" data-title="01 EN-RU-ES-PT-BR Win 11 graph" style="min-height:;"></div>
  813. <p style="text-align: center;font-style: italic;font-weight: bold;margin-top: -10px"><em>Distribution of Windows versions in organizations&#8217; infrastructure. The statistics are based on the Global Emergency Response Team (GERT) data (<a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10100944/01-en-ru-es-pt-br-win-11-graph.png" target="_blank" rel="noopener">download</a>)</em></p>
  814. <p>The most widely used operating system was released more than a decade ago, and Microsoft discontinues its support on October 14, 2025. This means we are certainly going to see an increase in the number of Windows 11 systems in organizations where we provide incident response services. This is why we decided to offer a brief overview of changes to forensic artifacts in this operating system. The information should be helpful to our colleagues in the field. The artifacts described here are relevant for Windows 11 24H2, which is the latest OS version at the time of writing this.</p>
  815. <h2 id="what-is-new-in-windows-11">What is new in Windows 11</h2>
  816. <h3 id="recall">Recall</h3>
  817. <p>The Recall feature was first introduced in May 2024. It allows the computer to remember everything a user has done on the device over the past few months. It works by taking screenshots of the entire display every few seconds. A local AI engine then analyzes these screenshots in the background, extracting all useful information, which is subsequently saved to a database. This database is then used for intelligent searching. Since May 2025, Recall has been broadly available on computers equipped with an NPU, a dedicated chip for AI computations, which is currently compatible only with ARM CPUs.</p>
  818. <p>Microsoft Recall is certainly one of the most highly publicized and controversial features announced for Windows 11. Since its initial reveal, it <a href="https://www.kaspersky.com/blog/how-to-disable-copilot-recall-spyware/51522/" target="_blank" rel="noopener">has been the subject of criticism within the cybersecurity community</a> because of the potential threat it poses to data privacy. Microsoft refined Recall before its release, yet <a href="https://www.kaspersky.com/blog/recall-2025-risks-benefits/53407/" target="_blank" rel="noopener">certain concerns remain</a>. Because of its controversial nature, the option is disabled by default in corporate builds of Windows 11. However, examining the artifacts it creates is worthwhile, just in case an attacker or malicious software activates it. In theory, an organization&#8217;s IT department could enable Recall using Group Policies, but we consider that scenario unlikely.</p>
  819. <p>As previously mentioned, Recall takes screenshots, which naturally requires temporary storage before analysis. The raw JPEG images can be found at <code>%AppData%\Local\CoreAIPlatform.00\UKP\{GUID}\ImageStore\*</code>. The filenames themselves are the screenshot identifiers (more on those later).</p>
  820. <p>Along with the screenshots, their metadata is stored within the standard Exif.Photo.MakerNote (0x927c) tag. This tag holds a significant amount of interesting data, such as the boundaries of the foreground window, the capture timestamp, the window title, the window identifier, and the full path of the process that launched the window. Furthermore, if a browser is in use during the screenshot capture, the URI and domain may be preserved, among other details.</p>
  821. <p>Recall is activated on a per-user basis. A key in the user&#8217;s registry hive, specifically <code>Software\Policies\Microsoft\Windows\WindowsAI\</code>, is responsible for enabling and disabling the saving of these screenshots. Microsoft has also introduced <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-windowsai" target="_blank" rel="noopener">several new registry keys</a> associated with Recall management in the latest Windows 11 builds.</p>
  822. <p>It is important to note that the version of the feature refined following public controversy includes a specific filter intended to prevent the saving of screenshots and text when potentially sensitive information is on the screen. This includes, for example, an incognito browser window, a payment data input field, or a password manager. However, <a href="https://doublepulsar.com/microsoft-recall-on-copilot-pc-testing-the-security-and-privacy-implications-ddb296093b6c" target="_blank" rel="noopener">researchers</a> have indicated that this filter may not always engage reliably.</p>
  823. <p>To enable fast searches across all data captured from screenshots, the system uses two DiskANN vector databases (<code>SemanticTextStore.sidb</code> and <code>SemanticImageStore.sidb</code>). However, the standard SQLite database is the most interesting one for investigation: <code>%AppData%\Local\CoreAIPlatform.00\UKP\{GUID}\ukg.db</code>, which consists of 20 tables. In the latest release, it is accessible without administrative privileges, yet it is encrypted. At the time of writing this post, there are no publicly known methods to decrypt the database directly. Therefore, we will examine the most relevant tables from the 2024 Windows 11 beta release with Recall.</p>
  824. <ul>
  825. <li>The <code>App</code> table holds data about the process that launched the application&#8217;s graphical user interface window.</li>
  826. <li>The <code>AppDwellTime</code> table contains information such as the full path of the process that initiated the application GUI window (WindowsAppId column), the date and time it was launched (HourOfDay, DayOfWeek, HourStartTimestamp), and the duration the window&#8217;s display (DwellTime).</li>
  827. <li>The <code>WindowCapture</code> table records the type of event (Name column):
  828. <ul>
  829. <li><strong>WindowCreatedEvent</strong> indicates the creation of the first instance of the application window. It can be correlated with the process that created the window.</li>
  830. <li><strong>WindowChangedEvent</strong> tracks changes to the window instance. It allows monitoring movements or size changes of the window instance with the help of the WindowId column, which contains the window&#8217;s identifier.</li>
  831. <li><strong>WindowCaptureEvent</strong> signifies the creation of a screen snapshot that includes the application window. Besides the window identifier, it contains an image identifier (ImageToken). The value of this token can later be used to retrieve the JPEG snapshot file from the aforementioned ImageStore directory, as the filename corresponds to the image identifier.</li>
  832. <li><strong>WindowDestroyedEvent</strong> signals the closing of the application window.</li>
  833. <li><strong>ForegroundChangedEvent</strong> does not contain useful data from a forensics perspective.</li>
  834. </ul>
  835. <p>The <code>WindowCapture</code> table also includes a flag indicating whether the application window was in the foreground (IsForeground column), the window boundaries as screen coordinates (WindowBounds), the window title (WindowTitle), a service field for properties (Properties), and the event timestamp (TimeStamp).
  836. </li>
  837. </ul>
  838. <ul>
  839. <li><code>WindowCaptureTextIndex_content</span></code> contains the text extracted with Optical Character Recognition (OCR) from the snapshot (c2 column), the window title (WindowTitle), the application path (App.Path), the snapshot timestamp (TimeStamp), and the name (Name). This table can be used in conjunction with the WindowCapture (the c0 and Id columns hold identical data, which can be used for joining the tables) and App tables (identical data resides in the AppId and Id columns).</li>
  840. </ul>
  841. <p>Recall artifacts (if the feature was enabled on the system prior to the incident) represent a &#8220;goldmine&#8221; for the incident responder. They allow for a detailed reconstruction of the attacker&#8217;s activity within the compromised system. Conversely, this same functionality can be weaponized: as mentioned previously, the private information filter in Recall does not work flawlessly. Consequently, attackers and malware can exploit it to locate credentials and other sensitive information.</p>
  842. <h3 id="updated-standard-applications">Updated standard applications</h3>
  843. <p>Standard applications in Windows 11 have also undergone updates, and for some, this involved changes to both the interface and functionality. Specifically, applications such as Notepad, File Explorer, and the Command Prompt in this version of the OS now support multi-tab mode. Notably, Notepad retains the state of these tabs even after the process terminates. Therefore, Windows 11 now has new artifacts associated with the usage of this application. Our colleague, AbdulRhman Alfaifi, researched these in detail; his work is available <a href="https://u0041.co/posts/articals/exploring-windows-artifacts-notepad-files/" target="_blank" rel="noopener">here</a>.</p>
  844. <p>The main directory for Notepad artifacts in Windows 11 is located at <code>%LOCALAPPDATA%\Packages\Microsoft.WindowsNotepad_8wekyb3d8bbwe\LocalState\</code>.<br />
  845. This directory contains two subdirectories:</p>
  846. <ul>
  847. <li><strong>TabState</strong> stores a {GUID}.bin state file for each Notepad tab. This file contains the tab&#8217;s contents if the user did not save it to a file. For saved tabs, the file contains the full path to the saved content, the SHA-256 hash of the content, the content itself, the last write time to the file, and other details.</li>
  848. <li><strong>WindowsState</strong> stores information about the application window state. This includes the total number of tabs, their order, the currently active tab, and the size and position of the application window on the screen. The state file is named either *.0.bin or *.1.bin.</li>
  849. </ul>
  850. <p>The structure of {GUID}.bin for saved tabs is as follows:</p>
  851. <table>
  852. <tbody>
  853. <tr>
  854. <td><strong>Field</strong></td>
  855. <td><strong>Type</strong></td>
  856. <td><strong>Value and explanation</strong></td>
  857. </tr>
  858. <tr>
  859. <td>signature</td>
  860. <td>[u8;2]</td>
  861. <td>NP</td>
  862. </tr>
  863. <tr>
  864. <td>?</td>
  865. <td>u8</td>
  866. <td>00</td>
  867. </tr>
  868. <tr>
  869. <td>file_saved_to_path</td>
  870. <td>bool</td>
  871. <td>00 = the file was not saved at the specified path<br />
  872. 01 = the file was saved</td>
  873. </tr>
  874. <tr>
  875. <td>path_length</td>
  876. <td>uLEB128</td>
  877. <td>Length of the full path (in characters) to the file where the tab content was written</td>
  878. </tr>
  879. <tr>
  880. <td>file_path</td>
  881. <td>UTF-16LE</td>
  882. <td>The full path to the file where the tab content was written</td>
  883. </tr>
  884. <tr>
  885. <td>file_size</td>
  886. <td>uLEB128</td>
  887. <td>The size of the file on disk where the tab content was written</td>
  888. </tr>
  889. <tr>
  890. <td>encoding</td>
  891. <td>u8</td>
  892. <td>File encoding:<br />
  893. 0x01 – ANSI<br />
  894. 0x02 – UTF-16LE<br />
  895. 0x03 – UTF-16BE<br />
  896. 0x04 – UTF-8BOM<br />
  897. 0x05 – UTF-8</td>
  898. </tr>
  899. <tr>
  900. <td>cr_type</td>
  901. <td>u8</td>
  902. <td>Type of carriage return:<br />
  903. 0x01 — CRLF<br />
  904. 0x02 — CR<br />
  905. 0x03 — LF</td>
  906. </tr>
  907. <tr>
  908. <td>last_write_time</td>
  909. <td>uLEB128</td>
  910. <td>The time of the last write (tab save) to the file, formatted as <a href="https://learn.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-filetime?redirectedfrom=MSDN" target="_blank" rel="noopener">FILETIME</a></td>
  911. </tr>
  912. <tr>
  913. <td>sha256_hash</td>
  914. <td>[u8;32]</td>
  915. <td>The SHA-256 hash of the tab content</td>
  916. </tr>
  917. <tr>
  918. <td>?</td>
  919. <td>[u8;2]</td>
  920. <td>00 01</td>
  921. </tr>
  922. <tr>
  923. <td>selection_start</td>
  924. <td>uLEB128</td>
  925. <td>The offset of the section start from the beginning of the file</td>
  926. </tr>
  927. <tr>
  928. <td>selection_end</td>
  929. <td>uLEB128</td>
  930. <td>The offset of the section end from the beginning of the file</td>
  931. </tr>
  932. <tr>
  933. <td>config_block</td>
  934. <td>ConfigBlock</td>
  935. <td>ConfigBlock structure configuration</td>
  936. </tr>
  937. <tr>
  938. <td>content_length</td>
  939. <td>uLEB128</td>
  940. <td>The length of the text in the file</td>
  941. </tr>
  942. <tr>
  943. <td>content</td>
  944. <td>UTF-16LE</td>
  945. <td>The file content before it was modified by the new data. This field is absent if the tab was saved to disk with no subsequent modifications.</td>
  946. </tr>
  947. <tr>
  948. <td>contain_unsaved_data</td>
  949. <td>bool</td>
  950. <td>00 = the tab content in the {GUID}.bin file matches the tab content in the file on disk<br />
  951. 01 = changes to the tab have not been saved to disk</td>
  952. </tr>
  953. <tr>
  954. <td>checksum</td>
  955. <td>[u8;4]</td>
  956. <td>The CRC32 checksum of the {GUID}.bin file content, offset by 0x03 from the start of the file</td>
  957. </tr>
  958. <tr>
  959. <td>unsaved_chunks</td>
  960. <td>[UnsavedChunk]</td>
  961. <td>A list of UnsavedChunk structures. This is absent if the tab was saved to disk with no subsequent modifications</td>
  962. </tr>
  963. </tbody>
  964. </table>
  965. <div id="attachment_117682" style="width: 903px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102005/forensic-artifacts2.jpeg" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117682" class="size-full wp-image-117682" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102005/forensic-artifacts2.jpeg" alt="Example content of the {GUID.bin} file for a Notepad tab that was saved to a file and then modified with new data which was not written to the file" width="893" height="622" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102005/forensic-artifacts2.jpeg 893w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102005/forensic-artifacts2-300x209.jpeg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102005/forensic-artifacts2-768x535.jpeg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102005/forensic-artifacts2-502x350.jpeg 502w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102005/forensic-artifacts2-740x515.jpeg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102005/forensic-artifacts2-402x280.jpeg 402w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102005/forensic-artifacts2-800x557.jpeg 800w" sizes="auto, (max-width: 893px) 100vw, 893px" /></a><p id="caption-attachment-117682" class="wp-caption-text">Example content of the {GUID.bin} file for a Notepad tab that was saved to a file and then modified with new data which was not written to the file</p></div>
  966. <p>For tabs that were never saved, the {GUID}.bin file structure in the TabState directory is shorter:</p>
  967. <table>
  968. <tbody>
  969. <tr>
  970. <td><strong>Field</strong></td>
  971. <td><strong>Type</strong></td>
  972. <td><strong>Value and explanation</strong></td>
  973. </tr>
  974. <tr>
  975. <td>signature</td>
  976. <td>[u8;2]</td>
  977. <td>NP</td>
  978. </tr>
  979. <tr>
  980. <td>?</td>
  981. <td>u8</td>
  982. <td>00</td>
  983. </tr>
  984. <tr>
  985. <td>file_saved_to_path</td>
  986. <td>bool</td>
  987. <td>00 = the file was not saved at the specified path (always)</td>
  988. </tr>
  989. <tr>
  990. <td>selection_start</td>
  991. <td>uLEB128</td>
  992. <td>The offset of the section start from the beginning of the file</td>
  993. </tr>
  994. <tr>
  995. <td>selection_end</td>
  996. <td>uLEB128</td>
  997. <td>The offset of the section end from the beginning of the file</td>
  998. </tr>
  999. <tr>
  1000. <td>config_block</td>
  1001. <td>ConfigBlock</td>
  1002. <td>ConfigBlock structure configuration</td>
  1003. </tr>
  1004. <tr>
  1005. <td>content_length</td>
  1006. <td>uLEB128</td>
  1007. <td>The length of the text in the file</td>
  1008. </tr>
  1009. <tr>
  1010. <td>content</td>
  1011. <td>UTF-16LE</td>
  1012. <td>File content</td>
  1013. </tr>
  1014. <tr>
  1015. <td>contain_unsaved_data</td>
  1016. <td>bool</td>
  1017. <td>01 = changes to the tab have not been saved to disk (always)</td>
  1018. </tr>
  1019. <tr>
  1020. <td>checksum</td>
  1021. <td>[u8;4]</td>
  1022. <td>The CRC32 checksum of the {GUID}.bin file content, offset by 0x03 from the start of the file</td>
  1023. </tr>
  1024. <tr>
  1025. <td>unsaved_chunks</td>
  1026. <td>[UnsavedChunk]</td>
  1027. <td>List of UnsavedChunk structures</td>
  1028. </tr>
  1029. </tbody>
  1030. </table>
  1031. <div id="attachment_117683" style="width: 1190px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102254/forensic-artifacts3.jpeg" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117683" class="size-full wp-image-117683" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102254/forensic-artifacts3.jpeg" alt="Example content of the {GUID.bin} file for a Notepad tab that has not been saved to a file" width="1180" height="207" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102254/forensic-artifacts3.jpeg 1180w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102254/forensic-artifacts3-300x53.jpeg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102254/forensic-artifacts3-1024x180.jpeg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102254/forensic-artifacts3-768x135.jpeg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102254/forensic-artifacts3-740x130.jpeg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102254/forensic-artifacts3-800x140.jpeg 800w" sizes="auto, (max-width: 1180px) 100vw, 1180px" /></a><p id="caption-attachment-117683" class="wp-caption-text">Example content of the {GUID.bin} file for a Notepad tab that has not been saved to a file</p></div>
  1032. <p>Note that the saving of tabs may be disabled in the Notepad settings. If this is the case, the TabState and WindowState artifacts will be unavailable for analysis.</p>
  1033. <p>If these artifacts are available, however, you can use <a href="https://github.com/AbdulRhmanAlfaifi/notepad_parser" target="_blank" rel="noopener">the notepad_parser tool</a>, developed by our colleague Abdulrhman Alfaifi, to automate working with them.</p>
  1034. <p>This particular artifact may assist in recovering the contents of malicious scripts and batch files. Furthermore, it may contain the results and logs from network scanners, credential extraction utilities, and other executables used by threat actors, assuming any unsaved modifications were inadvertently made to them.</p>
  1035. <h2 id="changes-to-familiar-artifacts-in-windows-11">Changes to familiar artifacts in Windows 11</h2>
  1036. <p>In addition to the new artifacts, Windows 11 introduced several noteworthy changes to existing ones that investigators should be aware of when analyzing incidents.</p>
  1037. <h3 id="changes-to-ntfs-attribute-behavior">Changes to NTFS attribute behavior</h3>
  1038. <p>The behavior of NTFS attributes was changed between Windows 10 and Windows 11 in two $MFT structures: $STANDARD_INFORMATION and $FILE_NAME.</p>
  1039. <p>The changes to the behavior of the $STANDARD_INFORMATION attributes are presented in the table below:</p>
  1040. <table>
  1041. <tbody>
  1042. <tr>
  1043. <td><strong>Event</strong></td>
  1044. <td>Access file</td>
  1045. <td>Rename file</td>
  1046. <td>Copy file to new folder</td>
  1047. <td>Move file within one volume</td>
  1048. <td>Move file between volumes</td>
  1049. </tr>
  1050. <tr>
  1051. <td><strong>Win 10<br />
  1052. 1903</strong></td>
  1053. <td>The File Access timestamp is updated. However, it remains unchanged if the system volume is larger than 128 GB</td>
  1054. <td>The File Access timestamp remains unchanged</td>
  1055. <td>The copy metadata is updated</td>
  1056. <td>The File Access timestamp remains unchanged</td>
  1057. <td>The metadata is inherited from the original file</td>
  1058. </tr>
  1059. <tr>
  1060. <td><strong>Win 11 24H2</strong></td>
  1061. <td>The File Access timestamp is updated</td>
  1062. <td>The File Access timestamp is updated to match the modification time</td>
  1063. <td>The copy metadata is inherited from the original file</td>
  1064. <td>The File Access timestamp is updated to match the moving time</td>
  1065. <td>The metadata is updated</td>
  1066. </tr>
  1067. </tbody>
  1068. </table>
  1069. <p>Behavior of the $FILENAME attributes was changed as follows:</p>
  1070. <table>
  1071. <tbody>
  1072. <tr>
  1073. <td><strong>Event</strong></td>
  1074. <td>Rename file</td>
  1075. <td>Move file via Explorer within one volume</td>
  1076. <td>Move file to Recycle Bin</td>
  1077. </tr>
  1078. <tr>
  1079. <td><strong>Win 10<br />
  1080. 1903</strong></td>
  1081. <td>The timestamps and metadata remain unchanged</td>
  1082. <td>The timestamps and metadata remain unchanged</td>
  1083. <td>The timestamps and metadata remain unchanged</td>
  1084. </tr>
  1085. <tr>
  1086. <td><strong>Win 11 24H2</strong></td>
  1087. <td>The File Access and File Modify timestamps along with the metadata are inherited from the previous version of $STANDARD_INFORMATION</td>
  1088. <td>The File Access and File Modify timestamps along with the metadata are inherited from the previous version of $STANDARD_INFORMATION</td>
  1089. <td>The File Access and File Modify timestamps along with the metadata are inherited from the previous version of $STANDARD_INFORMATION</td>
  1090. </tr>
  1091. </tbody>
  1092. </table>
  1093. <p>Analysts should consider these changes when examining the service files of the NTFS file system.</p>
  1094. <h3 id="program-compatibility-assistant">Program Compatibility Assistant</h3>
  1095. <p>Program Compatibility Assistant (PCA) first appeared way back in 2006 with the release of Windows Vista. Its purpose is to run applications designed for older operating system versions, thus being a relevant artifact for identifying evidence of program execution.</p>
  1096. <p>Windows 11 introduced new files associated with this feature that are relevant for forensic analysis of application executions. These files are located in the directory <code>C:\Windows\appcompat\pca\</code>:</p>
  1097. <ul>
  1098. <li><code>PcaAppLaunchDic.txt</code>: each line in this file contains data on the most recent launch of a specific executable file. This information includes the time of the last launch formatted as YYYY-MM-DD HH:MM:SS.f (UTC) and the full path to the file. A pipe character (|) separates the data elements. When the file is run again, the information in the corresponding line is updated. The file uses ANSI (CP-1252) encoding, so executing files with Unicode in their names &#8220;breaks&#8221; it: new entries (including the entry for running a file with Unicode) stop appearing, only old ones get updated.</li>
  1099. </ul>
  1100. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102559/forensic-artifacts4.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117684" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102559/forensic-artifacts4.png" alt="" width="1007" height="306" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102559/forensic-artifacts4.png 1007w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102559/forensic-artifacts4-300x91.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102559/forensic-artifacts4-768x233.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102559/forensic-artifacts4-740x225.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102559/forensic-artifacts4-921x280.png 921w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102559/forensic-artifacts4-800x243.png 800w" sizes="auto, (max-width: 1007px) 100vw, 1007px" /></a></p>
  1101. <ul>
  1102. <li><code>PcaGeneralDb0.txt</code> and <code>PcaGeneralDb1.txt</code> alternate during data logging: new records are saved to the primary file until its size reaches two megabytes. Once that limit is reached, the secondary file is cleared and becomes the new primary file, and the full primary file is then designated as the secondary. This cycle repeats indefinitely. The data fields are delimited with a pipe (|). The file uses UTF-16LE encoding and contains the following fields:
  1103. <ul>
  1104. <li>Executable launch time (YYYY-MM-DD HH:MM:SS.f (UTC))</li>
  1105. <li>Record type (0–4):
  1106. <ul>
  1107. <li>0 = installation error</li>
  1108. <li>1 = driver blocked</li>
  1109. <li>2 = abnormal process exit</li>
  1110. <li>3 = PCA Resolve call (component responsible for fixing compatibility issues when running older programs)</li>
  1111. <li>4 = value not set</li>
  1112. </ul>
  1113. </li>
  1114. <li>Path to executable file. This path omits the volume letter and frequently uses environment variables (%USERPROFILE%, %systemroot%, %programfiles%, and others).</li>
  1115. <li>Product name (from the PE header, lowercase)</li>
  1116. <li>Company name (from the PE header, lowercase)</li>
  1117. <li>Product version (from the PE header)</li>
  1118. <li>Windows application ID (format matches that used in <a href="https://securelist.com/amcache-forensic-artifact/117622/" target="_blank" rel="noopener">AmCache</a>)</li>
  1119. <li>Message</li>
  1120. </ul>
  1121. </li>
  1122. </ul>
  1123. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102803/forensic-artifacts5.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117685" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102803/forensic-artifacts5.png" alt="" width="2390" height="341" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102803/forensic-artifacts5.png 2390w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102803/forensic-artifacts5-300x43.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102803/forensic-artifacts5-1024x146.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102803/forensic-artifacts5-768x110.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102803/forensic-artifacts5-1536x219.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102803/forensic-artifacts5-2048x292.png 2048w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102803/forensic-artifacts5-740x106.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102803/forensic-artifacts5-1600x228.png 1600w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/10102803/forensic-artifacts5-800x114.png 800w" sizes="auto, (max-width: 2390px) 100vw, 2390px" /></a></p>
  1124. <p>Note that these text files only record data related to program launches executed through Windows File Explorer. They do not log launches of executable files initiated from the console.</p>
  1125. <h3 id="windows-search">Windows Search</h3>
  1126. <p>Windows Search is the built-in indexing and file search mechanism within Windows. Initially, it combed through files directly, resulting in sluggish and inefficient searches. Later, a separate application emerged that created a fast file index. It was not until 2006&#8217;s Windows Vista that a search feature was fully integrated into the operating system, with file indexing moved to a background process.</p>
  1127. <p>From Windows Vista up to and including Windows 10, the file index was stored in an Extensible Storage Engine (ESE) database:<br />
  1128. <code>%PROGRAMDATA%\Microsoft\Search\Data\Applications\Windows\Windows.edb</code>.</p>
  1129. <p>Windows 11 breaks this storage down into three SQLite databases:</p>
  1130. <ul>
  1131. <li><code>%PROGRAMDATA%\Microsoft\Search\Data\Applications\Windows\Windows-gather.db</code> contains general information about indexed files and folders. The most interesting element is the SystemIndex_Gthr table, which stores data such as the name of the indexed file or directory (FileName column), the last modification of the indexed file or directory (LastModified), an identifier used to link to the parent object (ScopeID), and a unique identifier for the file or directory itself (DocumentID). Using the ScopeID and the SystemIndex_GthrPth table, investigators can reconstruct the full path to a file on the system. The SystemIndex_GthrPth table contains the folder name (Name column), the directory identifier (Scope), and the parent directory identifier (Parent). By matching the file&#8217;s ScopeID with the directory&#8217;s Scope, one can determine the parent directory of the file.</li>
  1132. <li><code>%PROGRAMDATA%\Microsoft\Search\Data\Applications\Windows\Windows.db</code> stores information about the metadata of indexed files. The SystemIndex_1_PropertyStore table is of interest for analysis; it holds the unique identifier of the indexed object (WorkId column), the metadata type (ColumnId), and the metadata itself. Metadata types are described in the SystemIndex_1_PropertyStore_Metadata table (where the content of the Id column corresponds to the ColumnId content from SystemIndex_1_PropertyStore) and are specified in the UniqueKey column.</li>
  1133. <li><code>%PROGRAMDATA%\Microsoft\Search\Data\Applications\Windows\Windows-usn.db</code> does not contain useful information for forensic analysis.</li>
  1134. </ul>
  1135. <p>As depicted in the image below, analyzing the <code>Windows-gather.db</code> file using DB Browser for SQLite can provide us evidence of the presence of certain files (e.g., malware files, configuration files, files created and left by attackers, and others).<br />
  1136. <a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064945/forensic-artifacts-6.png" class="magnificImage"><img loading="lazy" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064945/forensic-artifacts-6.png" alt="" width="1234" height="667" class="aligncenter size-full wp-image-117735" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064945/forensic-artifacts-6.png 1234w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064945/forensic-artifacts-6-300x162.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064945/forensic-artifacts-6-1024x553.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064945/forensic-artifacts-6-768x415.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064945/forensic-artifacts-6-648x350.png 648w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064945/forensic-artifacts-6-740x400.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064945/forensic-artifacts-6-518x280.png 518w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064945/forensic-artifacts-6-800x432.png 800w" sizes="auto, (max-width: 1234px) 100vw, 1234px" /></a><br />
  1137. It is worth noting that the LastModified column is stored in the Windows FILETIME format, which holds an unsigned 64-bit date and time value, representing the number of 100-nanosecond units since the start of January 1, 1601. Using a utility such as DCode, we can see this value in UTC, as shown in the image below.<br />
  1138. <a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064958/forensic-artifacts-7.png" class="magnificImage"><img loading="lazy" decoding="async" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064958/forensic-artifacts-7.png" alt="" width="1062" height="434" class="aligncenter size-full wp-image-117736" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064958/forensic-artifacts-7.png 1062w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064958/forensic-artifacts-7-300x123.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064958/forensic-artifacts-7-1024x418.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064958/forensic-artifacts-7-768x314.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064958/forensic-artifacts-7-856x350.png 856w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064958/forensic-artifacts-7-740x302.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064958/forensic-artifacts-7-685x280.png 685w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/14064958/forensic-artifacts-7-800x327.png 800w" sizes="auto, (max-width: 1062px) 100vw, 1062px" /></a></p>
  1139. <h3 id="other-minor-changes-in-windows-11">Other minor changes in Windows 11</h3>
  1140. <p>It is also worth mentioning a few small but important changes in Windows 11 that do not require a detailed analysis:</p>
  1141. <ul>
  1142. <li>A complete discontinuation of NTLMv1 means that pass-the-hash attacks are gradually becoming a thing of the past.</li>
  1143. <li>Removal of the well-known Windows 10 Timeline activity artifact. Although it is no longer being actively maintained, its database remains for now in the files containing user activity information, located at: <code>%userprofile%\AppData\Local\ConnectedDevicesPlatform\ActivitiesCache.db</code>.</li>
  1144. <li>Similarly, Windows 11 removed Cortana and Internet Explorer, but the artifacts of these can still be found in the operating system. This may be useful for investigations conducted in machines that were updated from Windows 10 to the newer version.</li>
  1145. <li><a href="https://github.com/AndrewRathbun/Windows11Research/tree/main/EventLogs/4624" target="_blank">Previous research</a> also showed that Event ID 4624, which logs successful logon attempts in Windows, remained largely consistent across versions until a notable update appeared in Windows 11 Pro (22H2). This version introduces a new field, called Remote Credential Guard, marking a subtle but potentially important change in forensic analysis. While its real-world use and forensic significance remain to be observed, its presence suggests Microsoft&#8217;s ongoing efforts to enhance authentication-related telemetry.</li>
  1146. <li>Expanded support for the ReFS file system. The latest Windows 11 update preview made it possible to install the operating system directly onto a ReFS volume, and BitLocker support was also introduced. This file system has several key differences from the familiar NTFS:
  1147. <ul>
  1148. <li>ReFS does not have the $MFT (Master File Table) that forensics specialists rely on, which contains all current file records on the disk.</li>
  1149. <li>It does not generate short file names, as NTFS does for DOS compatibility.</li>
  1150. <li>It does not support hard links or extended object attributes.</li>
  1151. <li>It offers increased maximum volume and single-file sizes (35 PB compared to 256 TB in NTFS).</li>
  1152. </ul>
  1153. </li>
  1154. </ul>
  1155. <h2 id="conclusion">Conclusion</h2>
  1156. <p>This post provided a brief overview of key changes to Windows 11 artifacts that are relevant to forensic analysis – most notably, the changes of PCA and modifications to Windows Search mechanism. The ultimate utility of these artifacts in investigations remains to be seen. Nevertheless, we recommend you immediately incorporate the aforementioned files into the scope of your triage collection tool.</p>
  1157. ]]></content:encoded>
  1158. <wfw:commentRss>https://securelist.com/forensic-artifacts-in-windows-11/117680/feed/</wfw:commentRss>
  1159. <slash:comments>0</slash:comments>
  1160. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13154941/SL-forensic-artifacts-in-windows-11-featured.jpg" width="2000" height="1000"><media:keywords>full</media:keywords></media:content>
  1161. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13154941/SL-forensic-artifacts-in-windows-11-featured-1024x512.jpg" width="1024" height="512"><media:keywords>large</media:keywords></media:content>
  1162. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13154941/SL-forensic-artifacts-in-windows-11-featured-300x150.jpg" width="300" height="150"><media:keywords>medium</media:keywords></media:content>
  1163. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/13154941/SL-forensic-artifacts-in-windows-11-featured-150x150.jpg" width="150" height="150"><media:keywords>thumbnail</media:keywords></media:content>
  1164. </item>
  1165. <item>
  1166. <title>How we trained an ML model to detect DLL hijacking</title>
  1167. <link>https://securelist.com/building-ml-model-to-detect-dll-hijacking/117565/</link>
  1168. <comments>https://securelist.com/building-ml-model-to-detect-dll-hijacking/117565/#respond</comments>
  1169. <dc:creator><![CDATA[Anna Pidzhakova]]></dc:creator>
  1170. <pubDate>Mon, 06 Oct 2025 08:00:21 +0000</pubDate>
  1171. <category><![CDATA[Research]]></category>
  1172. <category><![CDATA[Security technology]]></category>
  1173. <category><![CDATA[Machine learning]]></category>
  1174. <category><![CDATA[DLL hijacking]]></category>
  1175. <category><![CDATA[Threat hunting]]></category>
  1176. <category><![CDATA[Artificial intelligence]]></category>
  1177. <category><![CDATA[DLL]]></category>
  1178. <category><![CDATA[Cybersecurity]]></category>
  1179. <guid isPermaLink="false">https://kasperskycontenthub.com/securelist/?p=117565</guid>
  1180.  
  1181. <description><![CDATA[An expert at the Kaspersky AI expertise center explains how the team developed a machine-learning model to identify DLL hijacking attacks.]]></description>
  1182. <content:encoded><![CDATA[<p><img width="990" height="400" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30133010/SL-ML-model-training-featured-990x400.jpg" class="attachment-securelist-huge-promo size-securelist-huge-promo wp-post-image" alt="" decoding="async" loading="lazy" /></p><p>DLL hijacking is a common technique in which attackers replace a library called by a legitimate process with a malicious one. It is used by both creators of mass-impact malware, like stealers and banking Trojans, and by APT and cybercrime groups behind targeted attacks. In recent years, the number of DLL hijacking attacks has grown significantly.</p>
  1183. <div class="js-infogram-embed" data-id="_/re1cVhfDkiTvQdIHwndC" data-type="interactive" data-title="01(2)_EN_RU_ES_PT-BR_DLL Hijacking charts" style="min-height:;"></div>
  1184. <p style="text-align: center;font-style: italic;font-weight: bold;margin-top: -10px"><em>Trend in the number of DLL hijacking attacks. 2023 data is taken as 100% (<a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/02132719/012en_ru_es_pt-br_dll-hijacking-charts.png" target="_blank" rel="noopener">download</a>)</em></p>
  1185. <p>We have observed this technique and its variations, like DLL sideloading, in targeted attacks on organizations in <a href="https://securelist.com/cobalt-strike-attacks-using-quora-github-social-media/117085/" target="_blank" rel="noopener">Russia</a>, <a href="https://securelist.com/apt41-in-africa/116986/" target="_blank" rel="noopener">Africa</a>, <a href="https://securelist.com/operation-synchole-watering-hole-attacks-by-lazarus/116326/" target="_blank" rel="noopener">South Korea</a>, and other countries and regions. <a href="https://securelist.com/lumma-fake-captcha-attacks-analysis/116274/" target="_blank" rel="noopener">Lumma</a>, one of 2025&#8217;s most active stealers, uses this method for distribution. Threat actors trying to profit from popular applications, such as DeepSeek, also <a href="https://securelist.com/backdoors-and-stealers-prey-on-deepseek-and-grok/115801/#scheme-3-backdoors-and-attacks-on-chinese-users" target="_blank" rel="noopener">resort</a> to DLL hijacking.</p>
  1186. <p>Detecting a DLL substitution attack is not easy because the library executes within the trusted address space of a legitimate process. So, to a security solution, this activity may look like a trusted process. Directing excessive attention to trusted processes can compromise overall system performance, so you have to strike a delicate balance between a sufficient level of security and sufficient convenience.</p>
  1187. <h2 id="detecting-dll-hijacking-with-a-machine-learning-model">Detecting DLL hijacking with a machine-learning model</h2>
  1188. <p>Artificial intelligence can help where simple detection algorithms fall short. Kaspersky has been using machine learning for 20 years to identify malicious activity at various stages. The AI expertise center researches the capabilities of different models in threat detection, then trains and implements them. Our colleagues at the threat intelligence center approached us with a question of whether machine learning could be used to detect DLL hijacking, and more importantly, whether it would help improve detection accuracy.</p>
  1189. <h3 id="preparation">Preparation</h3>
  1190. <p>To determine if we could train a model to distinguish between malicious and legitimate library loads, we first needed to define a set of features highly indicative of DLL hijacking. We identified the following key features:</p>
  1191. <ul>
  1192. <li><strong>Wrong library location.</strong> Many standard libraries reside in standard directories, while a malicious DLL is often found in an unusual location, such as the same folder as the executable that calls it.</li>
  1193. <li><strong>Wrong executable location.</strong> Attackers often save executables in non-standard paths, like temporary directories or user folders, instead of %Program Files%.</li>
  1194. <li><strong>Renamed executable.</strong> To avoid detection, attackers frequently save legitimate applications under arbitrary names.</li>
  1195. <li><strong>Library size has changed, and it is no longer signed.</strong></li>
  1196. <li><strong>Modified library structure.</strong></li>
  1197. </ul>
  1198. <h3 id="training-sample-and-labeling">Training sample and labeling</h3>
  1199. <p>For the training sample, we used dynamic library load data provided by our internal automatic processing systems, which handle millions of files every day, and anonymized telemetry, such as that voluntarily provided by Kaspersky users through Kaspersky Security Network.</p>
  1200. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220803/dll-hijackingEN2.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117583" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220803/dll-hijackingEN2.png" alt="" width="644" height="470" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220803/dll-hijackingEN2.png 644w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220803/dll-hijackingEN2-300x219.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220803/dll-hijackingEN2-480x350.png 480w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220803/dll-hijackingEN2-384x280.png 384w" sizes="auto, (max-width: 644px) 100vw, 644px" /></a></p>
  1201. <p>The training sample was labeled in three iterations. Initially, we could not automatically pull event labeling from our analysts that indicated whether an event was a DLL hijacking attack. So, we used data from our databases containing only file reputation, and labeled the rest of the data manually. We labeled as DLL hijacking those library-call events where the process was definitively legitimate but the DLL was definitively malicious. However, this labeling was not enough because some processes, like &#8220;svchost&#8221;, are designed mainly to load various libraries. As a result, the model we trained on this data had a high rate of false positives and was not practical for real-world use.</p>
  1202. <p>In the next iteration, we additionally filtered malicious libraries by family, keeping only those which were known to exhibit DLL-hijacking behavior. The model trained on this refined data showed significantly better accuracy and essentially confirmed our hypothesis that we could use machine learning to detect this type of attacks.</p>
  1203. <p>At this stage, our training dataset had tens of millions of objects. This included about 20 million clean files and around 50,000 definitively malicious ones.</p>
  1204. <table>
  1205. <tbody>
  1206. <tr>
  1207. <td><strong>Status</strong></td>
  1208. <td><strong>Total</strong></td>
  1209. <td><strong>Unique files</strong></td>
  1210. </tr>
  1211. <tr>
  1212. <td>Unknown</td>
  1213. <td>~ 18M</td>
  1214. <td>~ 6M</td>
  1215. </tr>
  1216. <tr>
  1217. <td>Malicious</td>
  1218. <td>~ 50K</td>
  1219. <td>~ 1,000</td>
  1220. </tr>
  1221. <tr>
  1222. <td>Clean</td>
  1223. <td>~ 20M</td>
  1224. <td>~ 250K</td>
  1225. </tr>
  1226. </tbody>
  1227. </table>
  1228. <p>We then trained subsequent models on the results of their predecessors, which had been verified and further labeled by analysts. This process significantly increased the efficiency of our training.</p>
  1229. <h2 id="loading-dlls-what-does-normal-look-like">Loading DLLs: what does normal look like?</h2>
  1230. <p>So, we had a labeled sample with a large number of library loading events from various processes. How can we describe a &#8220;clean&#8221; library? Using a process name + library name combination does not account for renamed processes. Besides, a legitimate user, not just an attacker, can rename a process. If we used the process hash instead of the name, we would solve the renaming problem, but then every version of the same library would be treated as a separate library. We ultimately settled on using a library name + process signature combination. While this approach considers all identically named libraries from a single vendor as one, it generally produces a more or less realistic picture.</p>
  1231. <p>To describe safe library loading events, we used a set of counters that included information about the processes (the frequency of a specific process name for a file with a given hash, the frequency of a specific file path for a file with that hash, and so on), information about the libraries (the frequency of a specific path for that library, the percentage of legitimate launches, and so on), and event properties (that is, whether the library is in the same directory as the file that calls it).</p>
  1232. <p>The result was a system with multiple aggregates (sets of counters and keys) that could describe an input event. These aggregates can contain a single key (e.g., a DLL&#8217;s hash sum) or multiple keys (e.g., a process&#8217;s hash sum + process signature). Based on these aggregates, we can derive a set of features that describe the library loading event. The diagram below provides examples of how these features are derived:</p>
  1233. <div id="attachment_117584" style="width: 1468px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220906/dll-hijackingEN3.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117584" class="size-full wp-image-117584" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220906/dll-hijackingEN3.png" alt="Feature extraction from aggregates" width="1458" height="546" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220906/dll-hijackingEN3.png 1458w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220906/dll-hijackingEN3-300x112.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220906/dll-hijackingEN3-1024x383.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220906/dll-hijackingEN3-768x288.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220906/dll-hijackingEN3-935x350.png 935w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220906/dll-hijackingEN3-740x277.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220906/dll-hijackingEN3-748x280.png 748w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220906/dll-hijackingEN3-800x300.png 800w" sizes="auto, (max-width: 1458px) 100vw, 1458px" /></a><p id="caption-attachment-117584" class="wp-caption-text">Feature extraction from aggregates</p></div>
  1234. <h2 id="loading-dlls-how-to-describe-hijacking">Loading DLLs: how to describe hijacking</h2>
  1235. <p>Certain feature combinations (dependencies) strongly indicate DLL hijacking. These can be simple dependencies. For some processes, the clean library they call always resides in a separate folder, while the malicious one is most often placed in the process folder.</p>
  1236. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220953/dll-hijackingEN4.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117585" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220953/dll-hijackingEN4.png" alt="" width="1264" height="278" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220953/dll-hijackingEN4.png 1264w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220953/dll-hijackingEN4-300x66.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220953/dll-hijackingEN4-1024x225.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220953/dll-hijackingEN4-768x169.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220953/dll-hijackingEN4-740x163.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28220953/dll-hijackingEN4-800x176.png 800w" sizes="auto, (max-width: 1264px) 100vw, 1264px" /></a></p>
  1237. <p>Other dependencies can be more complex and require several conditions to be met. For example, a process renaming itself does not, on its own, indicate DLL hijacking. However, if the new name appears in the data stream for the first time, and the library is located on a non-standard path, it is highly likely to be malicious.</p>
  1238. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221027/dll-hijackingEN5.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117586" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221027/dll-hijackingEN5.png" alt="" width="1264" height="452" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221027/dll-hijackingEN5.png 1264w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221027/dll-hijackingEN5-300x107.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221027/dll-hijackingEN5-1024x366.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221027/dll-hijackingEN5-768x275.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221027/dll-hijackingEN5-979x350.png 979w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221027/dll-hijackingEN5-740x265.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221027/dll-hijackingEN5-783x280.png 783w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221027/dll-hijackingEN5-800x286.png 800w" sizes="auto, (max-width: 1264px) 100vw, 1264px" /></a></p>
  1239. <h2 id="model-evolution">Model evolution</h2>
  1240. <p>Within this project, we trained several generations of models. The primary goal of the first generation was to show that machine learning could at all be applied to detecting DLL hijacking. When training this model, we used the broadest possible interpretation of the term.</p>
  1241. <p>The model&#8217;s workflow was as simple as possible:</p>
  1242. <ol>
  1243. <li>We took a data stream and extracted a frequency description for selected sets of keys.</li>
  1244. <li>We took the same data stream from a different time period and obtained a set of features.</li>
  1245. <li>We used type 1 labeling, where events in which a legitimate process loaded a malicious library from a specified set of families were marked as DLL hijacking.</li>
  1246. <li>We trained the model on the resulting data.</li>
  1247. </ol>
  1248. <div id="attachment_117587" style="width: 654px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221117/dll-hijackingEN6.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117587" class="size-full wp-image-117587" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221117/dll-hijackingEN6.png" alt="First-generation model diagram" width="644" height="470" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221117/dll-hijackingEN6.png 644w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221117/dll-hijackingEN6-300x219.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221117/dll-hijackingEN6-480x350.png 480w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221117/dll-hijackingEN6-384x280.png 384w" sizes="auto, (max-width: 644px) 100vw, 644px" /></a><p id="caption-attachment-117587" class="wp-caption-text">First-generation model diagram</p></div>
  1249. <p>The second-generation model was trained on data that had been processed by the first-generation model and verified by analysts (labeling type 2). Consequently, the labeling was more precise than during the training of the first model. Additionally, we added more features to describe the library structure and slightly complicated the workflow for describing library loads.</p>
  1250. <div id="attachment_117588" style="width: 654px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221153/dll-hijackingEN7.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117588" class="size-full wp-image-117588" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221153/dll-hijackingEN7.png" alt="Second-generation model diagram" width="644" height="470" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221153/dll-hijackingEN7.png 644w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221153/dll-hijackingEN7-300x219.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221153/dll-hijackingEN7-480x350.png 480w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221153/dll-hijackingEN7-384x280.png 384w" sizes="auto, (max-width: 644px) 100vw, 644px" /></a><p id="caption-attachment-117588" class="wp-caption-text">Second-generation model diagram</p></div>
  1251. <p>Based on the results from this second-generation model, we were able to identify several common types of false positives. For example, the training sample included potentially unwanted applications. These can, in certain contexts, exhibit behavior similar to DLL hijacking, but they are not malicious and rarely belong to this attack type.</p>
  1252. <p>We fixed these errors in the third-generation model. First, with the help of analysts, we flagged the potentially unwanted applications in the training sample so the model would not detect them. Second, in this new version, we used an expanded labeling that included useful detections from both the first and second generations. Additionally, we expanded the feature description through one-hot encoding — a technique for converting categorical features into a binary format — for certain fields. Also, since the volume of events processed by the model increased over time, this version added normalization of all features based on the data flow size.</p>
  1253. <div id="attachment_117589" style="width: 654px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221236/dll-hijackingEN8.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117589" class="size-full wp-image-117589" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221236/dll-hijackingEN8.png" alt="Third-generation model diagram" width="644" height="470" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221236/dll-hijackingEN8.png 644w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221236/dll-hijackingEN8-300x219.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221236/dll-hijackingEN8-480x350.png 480w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221236/dll-hijackingEN8-384x280.png 384w" sizes="auto, (max-width: 644px) 100vw, 644px" /></a><p id="caption-attachment-117589" class="wp-caption-text">Third-generation model diagram</p></div>
  1254. <h2 id="comparison-of-the-models">Comparison of the models</h2>
  1255. <p>To evaluate the evolution of our models, we applied them to a test data set none of them had worked with before. The graph below shows the ratio of true positive to false positive verdicts for each model.</p>
  1256. <div id="attachment_117590" style="width: 1639px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221323/dll-hijackingEN9.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117590" class="size-full wp-image-117590" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221323/dll-hijackingEN9.png" alt="Trends in true positives and false positives from the first-, second-, and third-generation models" width="1629" height="664" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221323/dll-hijackingEN9.png 1629w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221323/dll-hijackingEN9-300x122.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221323/dll-hijackingEN9-1024x417.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221323/dll-hijackingEN9-768x313.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221323/dll-hijackingEN9-1536x626.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221323/dll-hijackingEN9-859x350.png 859w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221323/dll-hijackingEN9-740x302.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221323/dll-hijackingEN9-687x280.png 687w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/28221323/dll-hijackingEN9-800x326.png 800w" sizes="auto, (max-width: 1629px) 100vw, 1629px" /></a><p id="caption-attachment-117590" class="wp-caption-text">Trends in true positives and false positives from the first-, second-, and third-generation models</p></div>
  1257. <p>As the models evolved, the percentage of true positives grew. While the first-generation model achieved a relatively good result (0.6 or higher) only with a very high false positive rate (10<sup>⁻³</sup> or more), the second-generation model reached this at 10<sup>⁻⁵</sup>. The third-generation model, at the same low false positive rate, produced 0.8 true positives, which is considered a good result.</p>
  1258. <p>Evaluating the models on the data stream at a fixed score shows that the absolute number of new events labeled as DLL Hijacking increased from one generation to the next. That said, evaluating the models by their false verdict rate also helps track progress: the first model has a fairly high error rate, while the second and third generations have significantly lower ones.</p>
  1259. <div class="js-infogram-embed" data-id="_/OWgUgOWv4ByEQ85H3Kvx" data-type="interactive" data-title="03-EN-DLL Hijacking charts" style="min-height:;"></div>
  1260. <p style="text-align: center;font-style: italic;font-weight: bold;margin-top: -10px"><em>False positives rate among model outputs, July 2024 – August 2025 (<a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/02095204/03-en-dll-hijacking-charts-1.png" target="_blank" rel="noopener">download</a>)</em></p>
  1261. <h2 id="practical-application-of-the-models">Practical application of the models</h2>
  1262. <p>All three model generations are used in our internal systems to detect likely cases of DLL hijacking within telemetry data streams. We receive 6.5 million security events daily, linked to 800,000 unique files. Aggregates are built from this sample at a specified interval, enriched, and then fed into the models. The output data is then ranked by model and by the probability of DLL hijacking assigned to the event, and then sent to our analysts. For instance, if the third-generation model flags an event as DLL hijacking with high confidence, it should be investigated first, whereas a less definitive verdict from the first-generation model can be checked last.</p>
  1263. <p>Simultaneously, the models are tested on a separate data stream they have not seen before. This is done to assess their effectiveness over time, as a model&#8217;s detection performance can degrade. The graph below shows that the percentage of correct detections varies slightly over time, but on average, the models detect 70–80% of DLL hijacking cases.</p>
  1264. <div class="js-infogram-embed" data-id="_/x8oClVXPCh0H7k2VhVBA" data-type="interactive" data-title="04-EN-DLL Hijacking charts" style="min-height:;"></div>
  1265. <p style="text-align: center;font-style: italic;font-weight: bold;margin-top: -10px"><em>DLL hijacking detection trends for all three models, October 2024 – September 2025 (<a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/02095150/04-en-dll-hijacking-charts-1.png" target="_blank" rel="noopener">download</a>)</em></p>
  1266. <p>Additionally, we recently deployed a DLL hijacking detection model into the <a href="https://www.kaspersky.com/enterprise-security/unified-monitoring-and-analysis-platform?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______e9dd8a9973100725" target="_blank" rel="noopener">Kaspersky SIEM</a>, but first we tested the model in the <a href="https://www.kaspersky.com/enterprise-security/managed-detection-and-response?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team___kmdr____8449ede27504ec48" target="_blank" rel="noopener">Kaspersky MDR</a> service. During the pilot phase, the model helped to detect and prevent a number of DLL hijacking incidents in our clients&#8217; systems. We have written <a href="https://securelist.com/detecting-dll-hijacking-with-machine-learning-in-kaspersky-siem/117567/" target="_blank" rel="noopener">a separate article</a> about how the machine learning model for detecting targeted attacks involving DLL hijacking works in Kaspersky SIEM and the incidents it has identified.</p>
  1267. <h2 id="conclusion">Conclusion</h2>
  1268. <p>Based on the training and application of the three generations of models, the experiment to detect DLL hijacking using machine learning was a success. We were able to develop a model that distinguishes events resembling DLL hijacking from other events, and refined it to a state suitable for practical use, not only in our internal systems but also in commercial products. Currently, the models operate in the cloud, scanning hundreds of thousands of unique files per month and detecting thousands of files used in DLL hijacking attacks each month. They regularly identify previously unknown variations of these attacks. The results from the models are sent to analysts who verify them and create new detection rules based on their findings.</p>
  1269. ]]></content:encoded>
  1270. <wfw:commentRss>https://securelist.com/building-ml-model-to-detect-dll-hijacking/117565/feed/</wfw:commentRss>
  1271. <slash:comments>0</slash:comments>
  1272. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30133010/SL-ML-model-training-featured.jpg" width="2000" height="1000"><media:keywords>full</media:keywords></media:content>
  1273. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30133010/SL-ML-model-training-featured-1024x512.jpg" width="1024" height="512"><media:keywords>large</media:keywords></media:content>
  1274. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30133010/SL-ML-model-training-featured-300x150.jpg" width="300" height="150"><media:keywords>medium</media:keywords></media:content>
  1275. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30133010/SL-ML-model-training-featured-150x150.jpg" width="150" height="150"><media:keywords>thumbnail</media:keywords></media:content>
  1276. </item>
  1277. <item>
  1278. <title>Detecting DLL hijacking with machine learning: real-world cases</title>
  1279. <link>https://securelist.com/detecting-dll-hijacking-with-machine-learning-in-kaspersky-siem/117567/</link>
  1280. <comments>https://securelist.com/detecting-dll-hijacking-with-machine-learning-in-kaspersky-siem/117567/#respond</comments>
  1281. <dc:creator><![CDATA[Gleb Ivanov, Andrey Gunkin]]></dc:creator>
  1282. <pubDate>Mon, 06 Oct 2025 08:00:08 +0000</pubDate>
  1283. <category><![CDATA[Security technologies]]></category>
  1284. <category><![CDATA[Security technology]]></category>
  1285. <category><![CDATA[Machine learning]]></category>
  1286. <category><![CDATA[DLL hijacking]]></category>
  1287. <category><![CDATA[Threat hunting]]></category>
  1288. <category><![CDATA[DLL sideloading]]></category>
  1289. <category><![CDATA[Cybersecurity]]></category>
  1290. <category><![CDATA[Artificial intelligence]]></category>
  1291. <category><![CDATA[DLL]]></category>
  1292. <category><![CDATA[SIEM]]></category>
  1293. <category><![CDATA[Cybersecurity]]></category>
  1294. <guid isPermaLink="false">https://kasperskycontenthub.com/securelist/?p=117567</guid>
  1295.  
  1296. <description><![CDATA[We will tell you how we integrated a DLL Hijacking detection model into the Kaspersky SIEM platform and how it helped us uncover several incidents in their early stages.]]></description>
  1297. <content:encoded><![CDATA[<p><img width="990" height="400" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30120509/SL-DLL-Hicjacking-detection-featured-990x400.jpg" class="attachment-securelist-huge-promo size-securelist-huge-promo wp-post-image" alt="" decoding="async" loading="lazy" /></p><h2 id="introduction">Introduction</h2>
  1298. <p>Our colleagues from the AI expertise center recently developed a machine-learning model that detects DLL-hijacking attacks. We then integrated this model into the <a href="https://www.kaspersky.com/enterprise-security/unified-monitoring-and-analysis-platform?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______e9dd8a9973100725" target="_blank" rel="noopener">Kaspersky Unified Monitoring and Analysis Platform</a> SIEM system. In <a href="https://securelist.com/building-ml-model-to-detect-dll-hijacking/117565/" target="_blank" rel="noopener">a separate article</a>, our colleagues shared how the model had been created and what success they had achieved in lab environments. Here, we focus on how it operates within Kaspersky SIEM, the preparation steps taken before its release, and some real-world incidents it has already helped us uncover.</p>
  1299. <h2 id="how-the-model-works-in-kaspersky-siem">How the model works in Kaspersky SIEM</h2>
  1300. <p>The model&#8217;s operation generally boils down to a step-by-step check of all DLL libraries loaded by processes in the system, followed by validation in the Kaspersky Security Network (KSN) cloud. This approach allows local attributes (path, process name, and file hashes) to be combined with a global knowledge base and behavioral indicators, which significantly improves detection quality and reduces the probability of false positives.</p>
  1301. <p>The model can run in one of two modes: on a correlator or on a collector. A correlator is a SIEM component that performs event analysis and correlation based on predefined rules or algorithms. If detection is configured on a correlator, the model checks events that have already triggered a rule. This reduces the volume of KSN queries and the model&#8217;s response time.</p>
  1302. <p>This is how it looks:</p>
  1303. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220337/detecting-dll-hijackingEN2.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117570" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220337/detecting-dll-hijackingEN2.png" alt="" width="984" height="395" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220337/detecting-dll-hijackingEN2.png 984w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220337/detecting-dll-hijackingEN2-300x120.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220337/detecting-dll-hijackingEN2-768x308.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220337/detecting-dll-hijackingEN2-872x350.png 872w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220337/detecting-dll-hijackingEN2-740x297.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220337/detecting-dll-hijackingEN2-698x280.png 698w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220337/detecting-dll-hijackingEN2-800x321.png 800w" sizes="auto, (max-width: 984px) 100vw, 984px" /></a></p>
  1304. <p>A collector is a software or hardware component of a SIEM platform that collects and normalizes events from various sources, and then delivers these events to the platform&#8217;s core. If detection is configured on a collector, the model processes all events associated with various processes loading libraries, provided these events meet the following conditions:</p>
  1305. <ul>
  1306. <li>The path to the process file is known.</li>
  1307. <li>The path to the library is known.</li>
  1308. <li>The hashes of the file and the library are available.</li>
  1309. </ul>
  1310. <p>This method consumes more resources, and the model&#8217;s response takes longer than it does on a correlator. However, it can be useful for retrospective threat hunting because it allows you to check all events logged by Kaspersky SIEM. The model&#8217;s workflow on a collector looks like this:</p>
  1311. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220444/detecting-dll-hijackingEN4.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117572" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220444/detecting-dll-hijackingEN4.png" alt="" width="984" height="366" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220444/detecting-dll-hijackingEN4.png 984w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220444/detecting-dll-hijackingEN4-300x112.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220444/detecting-dll-hijackingEN4-768x286.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220444/detecting-dll-hijackingEN4-941x350.png 941w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220444/detecting-dll-hijackingEN4-740x275.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220444/detecting-dll-hijackingEN4-753x280.png 753w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220444/detecting-dll-hijackingEN4-800x298.png 800w" sizes="auto, (max-width: 984px) 100vw, 984px" /></a></p>
  1312. <p>It is important to note that the model is not limited to a binary &#8220;malicious/non-malicious&#8221; assessment; it ranks its responses by confidence level. This allows it to be used as a flexible tool in SOC practice. Examples of possible verdicts:</p>
  1313. <ul>
  1314. <li>0: data is being processed.</li>
  1315. <li>1: maliciousness not confirmed. This means the model currently does not consider the library malicious.</li>
  1316. <li>2: suspicious library.</li>
  1317. <li>3: maliciousness confirmed.</li>
  1318. </ul>
  1319. <p>A Kaspersky SIEM rule for detecting DLL hijacking would look like this:</p><pre class="urvanov-syntax-highlighter-plain-tag">N.KL_AI_DLLHijackingCheckResult &gt; 1</pre><p>
  1320. Embedding the model into the Kaspersky SIEM correlator automates the process of finding DLL-hijacking attacks, making it possible to detect them at scale without having to manually analyze hundreds or thousands of loaded libraries. Furthermore, when combined with correlation rules and telemetry sources, the model can be used not just as a standalone module but as part of a comprehensive defense against infrastructure attacks.</p>
  1321. <h2 id="incidents-detected-during-the-pilot-testing-of-the-model-in-the-mdr-service">Incidents detected during the pilot testing of the model in the MDR service</h2>
  1322. <p>Before being released, the model (as part of the Kaspersky SIEM platform) was tested in the <a href="https://www.kaspersky.com/enterprise-security/managed-detection-and-response?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team___kmdr____8449ede27504ec48" target="_blank" rel="noopener">MDR</a> service, where it was trained to identify attacks on large datasets supplied by our telemetry. This step was necessary to ensure that detection works not only in lab settings but also in real client infrastructures.</p>
  1323. <p>During the pilot testing, we verified the model&#8217;s resilience to false positives and its ability to correctly classify behavior even in non-typical DLL-loading scenarios. As a result, several real-world incidents were successfully detected where attackers used one type of DLL hijacking — the DLL Sideloading technique — to gain persistence and execute their code in the system.</p>
  1324. <p>Let us take a closer look at the three most interesting of these.</p>
  1325. <h3 id="incident-1-toddycat-trying-to-launch-cobalt-strike-disguised-as-a-system-library">Incident 1. ToddyCat trying to launch Cobalt Strike disguised as a system library</h3>
  1326. <p>In one incident, the attackers successfully leveraged the vulnerability <a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27076" target="_blank" rel="noopener">CVE-2021-27076</a> to exploit a SharePoint service that used IIS as a web server. They ran the following command:</p><pre class="urvanov-syntax-highlighter-plain-tag">c:\windows\system32\inetsrv\w3wp.exe -ap "SharePoint - 80" -v "v4.0" -l "webengine4.dll" -a \\.\pipe\iisipmd32ded38-e45b-423f-804d-34471928538b -h "C:\inetpub\temp\apppools\SharePoint - 80\SharePoint - 80.config" -w "" -m 0</pre><p>
  1327. After the exploitation, the IIS process created files that were later used to run malicious code via the DLL sideloading technique (<a href="https://attack.mitre.org/techniques/T1574/001/" target="_blank" rel="noopener">T1574.001 Hijack Execution Flow:</a><a href="https://attack.mitre.org/techniques/T1574/001/" target="_blank" rel="noopener"> DLL</a>):</p><pre class="urvanov-syntax-highlighter-plain-tag">C:\ProgramData\SystemSettings.exe
  1328. C:\ProgramData\SystemSettings.dll</pre><p>
  1329. SystemSettings.dll is the name of a library associated with the Windows Settings application (SystemSettings.exe). The original library contains code and data that the Settings application uses to manage and configure various system parameters. However, the library created by the attackers has malicious functionality and is only pretending to be a system library.</p>
  1330. <p>Later, to establish persistence in the system and launch a DLL sideloading attack, a scheduled task was created, disguised as a Microsoft Edge browser update. It launches a SystemSettings.exe file, which is located in the same directory as the malicious library:</p><pre class="urvanov-syntax-highlighter-plain-tag">Schtasks  /create  /ru "SYSTEM" /tn "\Microsoft\Windows\Edge\Edgeupdates" /sc DAILY /tr "C:\ProgramData\SystemSettings.exe" /F</pre><p>
  1331. The task is set to run daily.</p>
  1332. <p>When the SystemSettings.exe process is launched, it loads the malicious DLL. As this happened, the process and library data were sent to our model for analysis and detection of a potential attack.</p>
  1333. <div id="attachment_117573" style="width: 693px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220709/detecting-dll-hijacking3.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117573" class="size-full wp-image-117573" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220709/detecting-dll-hijacking3.png" alt="Example of a SystemSettings.dll load event with a DLL Hijacking module verdict in Kaspersky SIEM" width="683" height="1082" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220709/detecting-dll-hijacking3.png 683w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220709/detecting-dll-hijacking3-189x300.png 189w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220709/detecting-dll-hijacking3-646x1024.png 646w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220709/detecting-dll-hijacking3-221x350.png 221w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220709/detecting-dll-hijacking3-631x1000.png 631w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220709/detecting-dll-hijacking3-177x280.png 177w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220709/detecting-dll-hijacking3-568x900.png 568w" sizes="auto, (max-width: 683px) 100vw, 683px" /></a><p id="caption-attachment-117573" class="wp-caption-text">Example of a SystemSettings.dll load event with a DLL Hijacking module verdict in Kaspersky SIEM</p></div>
  1334. <p>The resulting data helped our analysts highlight a suspicious DLL and analyze it in detail. The library was found to be a <a href="https://tip.kaspersky.com/landscape/software/S0353" target="_blank" rel="noopener">Cobalt Strike</a> implant. After loading it, the SystemSettings.exe process attempted to connect to the attackers&#8217; command-and-control server.</p><pre class="urvanov-syntax-highlighter-plain-tag">DNS query: connect-microsoft[.]com
  1335. DNS query type: AAAA
  1336. DNS response: ::ffff:8.219.1[.]155;
  1337. 8.219.1[.]155:8443</pre><p>
  1338. After establishing a connection, the attackers began host reconnaissance to gather various data to develop their attack.</p><pre class="urvanov-syntax-highlighter-plain-tag">C:\ProgramData\SystemSettings.exe
  1339. whoami /priv
  1340. hostname
  1341. reg query HKLM\SOFTWARE\Microsoft\Cryptography /v MachineGuid
  1342. powershell -c $psversiontable
  1343. dotnet --version
  1344. systeminfo
  1345. reg query "HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware Drivers"
  1346. cmdkey /list
  1347. REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber
  1348. reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers
  1349. netsh wlan show profiles
  1350. netsh wlan show interfaces
  1351. set
  1352. net localgroup administrators
  1353. net user
  1354. net user administrator
  1355. ipconfig /all
  1356. net config workstation
  1357. net view
  1358. arp -a
  1359. route print
  1360. netstat -ano
  1361. tasklist
  1362. schtasks /query /fo LIST /v
  1363. net start
  1364. net share
  1365. net use
  1366. netsh firewall show config
  1367. netsh firewall show state
  1368. net view /domain
  1369. net time /domain
  1370. net group "domain admins" /domain
  1371. net localgroup administrators /domain
  1372. net group "domain controllers" /domain
  1373. net accounts /domain
  1374. nltest / domain_trusts
  1375. reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
  1376. reg query HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
  1377. reg query HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
  1378. reg query HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
  1379. reg query HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce</pre><p>
  1380. Based on the attackers&#8217; TTPs, such as <a href="https://securelist.com/toddycat-keep-calm-and-check-logs/110696/" target="_blank" rel="noopener">loading Cobalt Strike as a DLL</a>, using the DLL sideloading technique (<a href="https://securelist.com/toddycat-keep-calm-and-check-logs/110696/" target="_blank" rel="noopener">1</a>, <a href="https://securelist.com/toddycat-traffic-tunneling-data-extraction-tools/112443/" target="_blank" rel="noopener">2</a>), and exploiting SharePoint, we can say with a high degree of confidence that the <a href="https://securelist.com/tag/toddycat/" target="_blank" rel="noopener">ToddyCat APT group</a> was behind the attack. Thanks to the prompt response of our model, we were able to respond in time and block this activity, preventing the attackers from causing damage to the organization.</p>
  1381. <h3 id="incident-2-infostealer-masquerading-as-a-policy-manager">Incident 2. Infostealer masquerading as a policy manager</h3>
  1382. <p>Another example was discovered by the model after a client was connected to MDR monitoring: a legitimate system file located in an application folder attempted to load a suspicious library that was stored next to it.</p><pre class="urvanov-syntax-highlighter-plain-tag">C:\Program Files\Chiniks\SettingSyncHost.exe
  1383. C:\Program Files\Chiniks\policymanager.dll E83F331BD1EC115524EBFF7043795BBE</pre><p>
  1384. The SettingSyncHost.exe file is a system host process for synchronizing settings between one user&#8217;s different devices. Its 32-bit and 64-bit versions are usually located in C:\Windows\System32\ and C:\Windows\SysWOW64\, respectively. In this incident, the file location differed from the normal one.</p>
  1385. <div id="attachment_117574" style="width: 877px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220932/detecting-dll-hijacking4.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117574" class="size-full wp-image-117574" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220932/detecting-dll-hijacking4.png" alt="Example of a policymanager.dll load event with a DLL Hijacking module verdict in Kaspersky SIEM" width="867" height="818" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220932/detecting-dll-hijacking4.png 867w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220932/detecting-dll-hijacking4-300x283.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220932/detecting-dll-hijacking4-768x725.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220932/detecting-dll-hijacking4-371x350.png 371w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220932/detecting-dll-hijacking4-740x698.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220932/detecting-dll-hijacking4-297x280.png 297w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27220932/detecting-dll-hijacking4-800x755.png 800w" sizes="auto, (max-width: 867px) 100vw, 867px" /></a><p id="caption-attachment-117574" class="wp-caption-text">Example of a policymanager.dll load event with a DLL Hijacking module verdict in Kaspersky SIEM</p></div>
  1386. <p>Analysis of the library file loaded by this process showed that it was malware designed to steal information from browsers.</p>
  1387. <div id="attachment_117575" style="width: 984px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221012/detecting-dll-hijacking5.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117575" class="size-full wp-image-117575" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221012/detecting-dll-hijacking5.png" alt="Graph of policymanager.dll activity in a sandbox" width="974" height="503" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221012/detecting-dll-hijacking5.png 974w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221012/detecting-dll-hijacking5-300x155.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221012/detecting-dll-hijacking5-768x397.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221012/detecting-dll-hijacking5-678x350.png 678w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221012/detecting-dll-hijacking5-740x382.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221012/detecting-dll-hijacking5-542x280.png 542w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221012/detecting-dll-hijacking5-800x413.png 800w" sizes="auto, (max-width: 974px) 100vw, 974px" /></a><p id="caption-attachment-117575" class="wp-caption-text">Graph of policymanager.dll activity in a sandbox</p></div>
  1388. <p>The file directly accesses browser files that contain user data.</p><pre class="urvanov-syntax-highlighter-plain-tag">C:\Users\&lt;user&gt;\AppData\Local\Google\Chrome\User Data\Local State</pre><p>
  1389. The library file is on the list of files used for DLL hijacking, as published in the HijackLibs project. The project contains a list of common processes and libraries employed in DLL-hijacking attacks, which can be used to detect these attacks.</p>
  1390. <h3 id="incident-3-malicious-loader-posing-as-a-security-solution">Incident 3. Malicious loader posing as a security solution</h3>
  1391. <p>Another incident discovered by our model occurred when a user connected a removable USB drive:</p>
  1392. <div id="attachment_117576" style="width: 984px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221114/detecting-dll-hijacking6.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117576" class="size-full wp-image-117576" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221114/detecting-dll-hijacking6.png" alt="Example of a Kaspersky SIEM event where a wsc.dll library was loaded from a USB drive, with a DLL Hijacking module verdict" width="974" height="894" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221114/detecting-dll-hijacking6.png 974w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221114/detecting-dll-hijacking6-300x275.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221114/detecting-dll-hijacking6-768x705.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221114/detecting-dll-hijacking6-381x350.png 381w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221114/detecting-dll-hijacking6-740x679.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221114/detecting-dll-hijacking6-305x280.png 305w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221114/detecting-dll-hijacking6-800x734.png 800w" sizes="auto, (max-width: 974px) 100vw, 974px" /></a><p id="caption-attachment-117576" class="wp-caption-text">Example of a Kaspersky SIEM event where a wsc.dll library was loaded from a USB drive, with a DLL Hijacking module verdict</p></div>
  1393. <p>The connected drive&#8217;s directory contained hidden folders with an identically named shortcut for each of them. The shortcuts had icons typically used for folders. Since file extensions were not shown by default on the drive, the user might have mistaken the shortcut for a folder and launched it. In turn, the shortcut opened the corresponding hidden folder and ran an executable file using the following command:</p><pre class="urvanov-syntax-highlighter-plain-tag">"%comspec%" /q /c "RECYCLER.BIN\1\CEFHelper.exe [$DIGITS] [$DIGITS]"</pre><p>
  1394. CEFHelper.exe is a legitimate Avast Antivirus executable that, through DLL sideloading, loaded the wsc.dll library, which is a malicious loader.</p>
  1395. <div id="attachment_117577" style="width: 461px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221216/detecting-dll-hijacking7.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117577" class="size-full wp-image-117577" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221216/detecting-dll-hijacking7.png" alt="Code snippet from the malicious file" width="451" height="485" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221216/detecting-dll-hijacking7.png 451w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221216/detecting-dll-hijacking7-279x300.png 279w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221216/detecting-dll-hijacking7-325x350.png 325w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/27221216/detecting-dll-hijacking7-260x280.png 260w" sizes="auto, (max-width: 451px) 100vw, 451px" /></a><p id="caption-attachment-117577" class="wp-caption-text">Code snippet from the malicious file</p></div>
  1396. <p>The loader opens a file named AvastAuth.dat, which contains an encrypted backdoor. The library reads the data from the file into memory, decrypts it, and executes it. After this, the backdoor attempts to connect to a remote command-and-control server.</p>
  1397. <p>The library file, which contains the malicious loader, is on the list of known libraries used for DLL sideloading, as presented on the HijackLibs project website.</p>
  1398. <h2 id="conclusion">Conclusion</h2>
  1399. <p>Integrating the model into the product provided the means of early and accurate detection of DLL-hijacking attempts which previously might have gone unnoticed. Even during the pilot testing, the model proved its effectiveness by identifying several incidents using this technique. Going forward, its accuracy will only increase as data accumulates and algorithms are updated in KSN, making this mechanism a reliable element of proactive protection for corporate systems.</p>
  1400. <h2 id="ioc">IoC</h2>
  1401. <p><strong>Legitimate files used for DLL hijacking<br />
  1402. </strong>E0E092D4EFC15F25FD9C0923C52C33D6 loads SystemSettings.dll<br />
  1403. 09CD396C8F4B4989A83ED7A1F33F5503 loads policymanager.dll<br />
  1404. A72036F635CECF0DCB1E9C6F49A8FA5B loads wsc.dll</p>
  1405. <p><strong>Malicious files</strong><br />
  1406. <a href="https://opentip.kaspersky.com/ea2882b05f8c11a285426f90859f23c6/?icid=gl_OpenTIP_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______20de3dc00773942a&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">EA2882B05F8C11A285426F90859F23C6</a>   SystemSettings.dll<br />
  1407. <a href="https://opentip.kaspersky.com/e83f331bd1ec115524ebff7043795bbe/?icid=gl_OpenTIP_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______cbf93adf43b574f2&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">E83F331BD1EC115524EBFF7043795BBE</a>   policymanager.dll<br />
  1408. <a href="https://opentip.kaspersky.com/831252e7fa9bd6fa174715647ebce516/?icid=gl_OpenTIP_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______01488fcf88e4ecaf&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">831252E7FA9BD6FA174715647EBCE516</a>   wsc.dll</p>
  1409. <p><strong>Paths</strong><br />
  1410. C:\ProgramData\SystemSettings.exe<br />
  1411. C:\ProgramData\SystemSettings.dll<br />
  1412. C:\Program Files\Chiniks\SettingSyncHost.exe<br />
  1413. C:\Program Files\Chiniks\policymanager.dll<br />
  1414. D:\RECYCLER.BIN\1\CEFHelper.exe<br />
  1415. D:\RECYCLER.BIN\1\wsc.dll</p>
  1416. ]]></content:encoded>
  1417. <wfw:commentRss>https://securelist.com/detecting-dll-hijacking-with-machine-learning-in-kaspersky-siem/117567/feed/</wfw:commentRss>
  1418. <slash:comments>0</slash:comments>
  1419. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30120509/SL-DLL-Hicjacking-detection-featured.jpg" width="2000" height="1000"><media:keywords>full</media:keywords></media:content>
  1420. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30120509/SL-DLL-Hicjacking-detection-featured-1024x512.jpg" width="1024" height="512"><media:keywords>large</media:keywords></media:content>
  1421. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30120509/SL-DLL-Hicjacking-detection-featured-300x150.jpg" width="300" height="150"><media:keywords>medium</media:keywords></media:content>
  1422. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30120509/SL-DLL-Hicjacking-detection-featured-150x150.jpg" width="150" height="150"><media:keywords>thumbnail</media:keywords></media:content>
  1423. </item>
  1424. <item>
  1425. <title>Forensic journey: hunting evil within AmCache</title>
  1426. <link>https://securelist.com/amcache-forensic-artifact/117622/</link>
  1427. <comments>https://securelist.com/amcache-forensic-artifact/117622/#respond</comments>
  1428. <dc:creator><![CDATA[Cristian Souza]]></dc:creator>
  1429. <pubDate>Wed, 01 Oct 2025 10:00:20 +0000</pubDate>
  1430. <category><![CDATA[SOC, TI and IR posts]]></category>
  1431. <category><![CDATA[Digital forensics]]></category>
  1432. <category><![CDATA[Threat hunting]]></category>
  1433. <category><![CDATA[Researchers tools]]></category>
  1434. <category><![CDATA[Incident response]]></category>
  1435. <category><![CDATA[Forensic journey]]></category>
  1436. <category><![CDATA[Cybersecurity]]></category>
  1437. <guid isPermaLink="false">https://kasperskycontenthub.com/securelist/?p=117622</guid>
  1438.  
  1439. <description><![CDATA[Kaspersky experts share insights into how AmCache may prove useful during incident investigation, and provide a command line tool to extract data from this artifact.]]></description>
  1440. <content:encoded><![CDATA[<p><img width="990" height="400" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/01111328/SL-AmCache-forensic-artifact-featured-990x400.jpg" class="attachment-securelist-huge-promo size-securelist-huge-promo wp-post-image" alt="" decoding="async" loading="lazy" /></p><h2 id="introduction">Introduction</h2>
  1441. <p>When it comes to digital forensics, AmCache plays a vital role in identifying malicious activities in Windows systems. This artifact allows the identification of the execution of both benign and malicious software on a machine. It is managed by the operating system, and at the time of writing this article, there is no known way to modify or remove AmCache data. Thus, in an incident response scenario, it could be the key to identifying lost artifacts (e.g., ransomware that auto-deletes itself), allowing analysts to search for patterns left by the attacker, such as file names and paths. Furthermore, AmCache stores the SHA-1 hashes of executed files, which allows DFIR professionals to search public threat intelligence feeds — such as <a href="https://opentip.kaspersky.com/" target="_blank" rel="noopener">OpenTIP</a> and <a href="https://www.virustotal.com/gui/" target="_blank" rel="noopener">VirusTotal</a> — and generate rules for blocking this same file on other systems across the network.</p>
  1442. <p>This article presents a comprehensive analysis of the AmCache artifact, allowing readers to better understand its inner workings. In addition, we present a new tool named &#8220;<a href="https://github.com/cristianzsh/amcache-evilhunter" target="_blank" rel="noopener">AmCache-EvilHunter</a>&#8220;, which can be used by any professional to easily parse the <code>Amcache.hve</code> file and extract IOCs. The tool is also able to query the aforementioned intelligence feeds to check for malicious file detections, this level of built-in automation reduces manual effort and speeds up threat detection, which is of significant value for analysts and responders.</p>
  1443. <h2 id="the-importance-of-evidence-of-execution">The importance of evidence of execution</h2>
  1444. <p>Evidence of execution is fundamentally important in digital forensics and incident response, since it helps investigators reconstruct how the system was used during an intrusion. Artifacts such as Prefetch, ShimCache, and <a href="https://securelist.com/userassist-artifact-forensic-value-for-incident-response/116911/" target="_blank" rel="noopener">UserAssist</a> offer clues about what was executed. AmCache is also a robust artifact for evidencing execution, preserving metadata that indicates a file&#8217;s presence and execution, even if the file has been deleted or modified. An advantage of AmCache over other Windows artifacts is that unlike them, it stores the file hash, which is immensely useful for analysts, as it can be used to hunt malicious files across the network, increasing the likelihood of fully identifying, containing, and eradicating the threat.</p>
  1445. <h2 id="introduction-to-amcache">Introduction to AmCache</h2>
  1446. <p>Application Activity Cache (AmCache) was first introduced in Windows 7 and fully leveraged in Windows 8 and beyond. Its purpose is to replace the older <code>RecentFileCache.bcf</code> in newer systems. Unlike its predecessor, AmCache includes valuable forensic information about program execution, executed binaries and loaded drivers.</p>
  1447. <p>This artifact is stored as a registry hive file named <code>Amcache.hve</code> in the directory <code>C:\Windows\AppCompat\Programs</code>. The metadata stored in this file includes file paths, publisher data, compilation timestamps, file sizes, and SHA-1 hashes.</p>
  1448. <p>It is important to highlight that the AmCache format does not depend on the operating system version, but rather on the version of the libraries (DLLs) responsible for filling the cache. In this way, even Windows systems with different patch levels could have small differences in the structure of the AmCache files. The known libraries used for filling this cache are stored under <code>%WinDir%\System32</code> with the following names:</p>
  1449. <ul>
  1450. <li>aecache.dll</li>
  1451. <li>aeevts.dll</li>
  1452. <li>aeinv.dll</li>
  1453. <li>aelupsvc.dll</li>
  1454. <li>aepdu.dll</li>
  1455. <li>aepic.dll</li>
  1456. </ul>
  1457. <p>It is worth noting that this artifact has its peculiarities and limitations. The AmCache computes the SHA-1 hash over only the first 31,457,280 bytes (≈31 MB) of each executable, so comparing its stored hash online can fail for files exceeding this size. Furthermore, <code>Amcache.hve</code> is not a true execution log: it records files in directories scanned by the Microsoft Compatibility Appraiser, executables and drivers copied during program execution, and GUI applications that required compatibility shimming. Only the last category reliably indicates actual execution. Items in the first two groups simply confirm file presence on the system, with no data on whether or when they ran.</p>
  1458. <p>In the same directory, we can find additional LOG files used to ensure <code>Amcache.hve</code> consistency and recovery operations:</p>
  1459. <ul>
  1460. <li>C:\Windows\AppCompat\Programs\Amcache.hve.*LOG1</li>
  1461. <li>C:\Windows\AppCompat\Programs\Amcache.hve.*LOG2</li>
  1462. </ul>
  1463. <p>The <code>Amcache.hve</code> file can be collected from a system for forensic analysis using tools like <a href="https://github.com/abaghinyan/aralez" target="_blank" rel="noopener">Aralez</a>, <a href="https://docs.velociraptor.app/downloads/" target="_blank" rel="noopener">Velociraptor</a>, or <a href="https://www.sans.org/tools/kape" target="_blank" rel="noopener">Kape</a>.</p>
  1464. <h2 id="amcache-hve-structure">Amcache.hve structure</h2>
  1465. <p>The <code>Amcache.hve</code> file is a Windows Registry hive in REGF format; it contains multiple subkeys that store distinct classes of data. A simple Python parser can be implemented to iterate through <code>Amcache.hve</code> and present its keys:</p><pre class="urvanov-syntax-highlighter-plain-tag">#!/usr/bin/env python3
  1466.  
  1467. import sys
  1468. from Registry.Registry import Registry
  1469.  
  1470. hive = Registry(str(sys.argv[1]))
  1471. root = hive.open("Root")
  1472.  
  1473. for rec in root.subkeys():
  1474.    print(rec.name())</pre><p>
  1475. The result of this parser when executed is:</p>
  1476. <div id="attachment_117624" style="width: 1667px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163530/amcache-forensic-artifact1.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117624" class="size-full wp-image-117624" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163530/amcache-forensic-artifact1.png" alt="AmCache keys" width="1657" height="796" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163530/amcache-forensic-artifact1.png 1657w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163530/amcache-forensic-artifact1-300x144.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163530/amcache-forensic-artifact1-1024x492.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163530/amcache-forensic-artifact1-768x369.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163530/amcache-forensic-artifact1-1536x738.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163530/amcache-forensic-artifact1-729x350.png 729w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163530/amcache-forensic-artifact1-740x355.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163530/amcache-forensic-artifact1-583x280.png 583w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163530/amcache-forensic-artifact1-800x384.png 800w" sizes="auto, (max-width: 1657px) 100vw, 1657px" /></a><p id="caption-attachment-117624" class="wp-caption-text">AmCache keys</p></div>
  1477. <p>From a DFIR perspective, the keys that are of the most interest to us are <code>InventoryApplicationFile</code>, <code>InventoryApplication</code>, <code>InventoryDriverBinary</code>, and <code>InventoryApplicationShortcut</code>, which are described in detail in the following subsections.</p>
  1478. <h3 id="inventoryapplicationfile">InventoryApplicationFile</h3>
  1479. <p>The <code>InventoryApplicationFile</code> key is essential for tracking every executable discovered on the system. Under this key, each executable is represented by its own uniquely named subkey, which stores the following main metadata:</p>
  1480. <ul>
  1481. <li><strong>ProgramId:</strong> a unique hash generated from the binary name, version, publisher, and language, with some zeroes appended to the beginning of the hash</li>
  1482. <li><strong>FileID:</strong> the SHA-1 hash of the file, with four zeroes appended to the beginning of the hash</li>
  1483. <li><strong>LowerCaseLongPath:</strong> the full lowercase path to the executable</li>
  1484. <li><strong>Name:</strong> the file base name without the path information</li>
  1485. <li><strong>OriginalFileName:</strong> the original filename as specified in the PE header&#8217;s version resource, indicating the name assigned by the developer at build time</li>
  1486. <li><strong>Publisher:</strong> often used to verify if the source of the binary is legitimate. For malware, this subkey is usually empty</li>
  1487. <li><strong>Version:</strong> the specific build or release version of the executable</li>
  1488. <li><strong>BinaryType:</strong> indicates whether the executable is a 32-bit or 64-bit binary</li>
  1489. <li><strong>ProductName:</strong> the ProductName field from the version resource, describing the broader software product or suite to which the executable belongs</li>
  1490. <li><strong>LinkDate: </strong>the compilation timestamp extracted from the PE header</li>
  1491. <li><strong>Size:</strong> the file size in bytes</li>
  1492. <li><strong>IsOsComponent:</strong> a boolean flag that specifies whether the executable is a built-in OS component or a third-party application/library</li>
  1493. </ul>
  1494. <p>With some tweaks to our original Python parser, we can read the information stored within this key:</p><pre class="urvanov-syntax-highlighter-plain-tag">#!/usr/bin/env python3
  1495.  
  1496. import sys
  1497. from Registry.Registry import Registry
  1498.  
  1499. hive = Registry(sys.argv[1])
  1500. root = hive.open("Root")
  1501.  
  1502. subs = {k.name(): k for k in root.subkeys()}
  1503. parent = subs.get("InventoryApplicationFile")
  1504.  
  1505. for rec in parent.subkeys():
  1506.   vals = {v.name(): v.value() for v in rec.values()}
  1507.   print("{}\n{}\n\n-----------\n".format(rec, vals))</pre><p>
  1508. <div id="attachment_117625" style="width: 1345px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163907/amcache-forensic-artifact2.jpeg" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117625" class="size-full wp-image-117625" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163907/amcache-forensic-artifact2.jpeg" alt="InventoryApplicationFile subkeys" width="1335" height="560" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163907/amcache-forensic-artifact2.jpeg 1335w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163907/amcache-forensic-artifact2-300x126.jpeg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163907/amcache-forensic-artifact2-1024x430.jpeg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163907/amcache-forensic-artifact2-768x322.jpeg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163907/amcache-forensic-artifact2-834x350.jpeg 834w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163907/amcache-forensic-artifact2-740x310.jpeg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163907/amcache-forensic-artifact2-668x280.jpeg 668w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30163907/amcache-forensic-artifact2-800x336.jpeg 800w" sizes="auto, (max-width: 1335px) 100vw, 1335px" /></a><p id="caption-attachment-117625" class="wp-caption-text">InventoryApplicationFile subkeys</p></div>
  1509. <p>We can also use tools like Registry Explorer to see the same data in a graphical way:</p>
  1510. <div id="attachment_117626" style="width: 1295px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164000/amcache-forensic-artifact3.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117626" class="size-full wp-image-117626" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164000/amcache-forensic-artifact3.png" alt="InventoryApplicationFile inspected through Registry Explorer" width="1285" height="546" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164000/amcache-forensic-artifact3.png 1285w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164000/amcache-forensic-artifact3-300x127.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164000/amcache-forensic-artifact3-1024x435.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164000/amcache-forensic-artifact3-768x326.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164000/amcache-forensic-artifact3-824x350.png 824w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164000/amcache-forensic-artifact3-740x314.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164000/amcache-forensic-artifact3-659x280.png 659w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164000/amcache-forensic-artifact3-800x340.png 800w" sizes="auto, (max-width: 1285px) 100vw, 1285px" /></a><p id="caption-attachment-117626" class="wp-caption-text">InventoryApplicationFile inspected through Registry Explorer</p></div>
  1511. <p>As mentioned before, AmCache computes the SHA-1 hash over only the first 31,457,280 bytes (≈31 MB). To prove this, we did a small experiment, during which we got a binary smaller than 31 MB (Aralez) and one larger than this value (a custom version of Velociraptor). For the first case, the SHA-1 hash of the entire binary was stored in AmCache.</p>
  1512. <div id="attachment_117627" style="width: 1720px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164055/amcache-forensic-artifact4.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117627" class="size-full wp-image-117627" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164055/amcache-forensic-artifact4.png" alt="First AmCache SHA-1 storage scenario" width="1710" height="561" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164055/amcache-forensic-artifact4.png 1710w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164055/amcache-forensic-artifact4-300x98.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164055/amcache-forensic-artifact4-1024x336.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164055/amcache-forensic-artifact4-768x252.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164055/amcache-forensic-artifact4-1536x504.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164055/amcache-forensic-artifact4-1067x350.png 1067w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164055/amcache-forensic-artifact4-740x243.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164055/amcache-forensic-artifact4-853x280.png 853w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164055/amcache-forensic-artifact4-800x262.png 800w" sizes="auto, (max-width: 1710px) 100vw, 1710px" /></a><p id="caption-attachment-117627" class="wp-caption-text">First AmCache SHA-1 storage scenario</p></div>
  1513. <p>For the second scenario, we used the dd utility to extract the first 31 MB of the Velociraptor binary:</p>
  1514. <div id="attachment_117628" style="width: 1566px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164152/amcache-forensic-artifact5.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117628" class="size-full wp-image-117628" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164152/amcache-forensic-artifact5.png" alt="Stripped binary" width="1556" height="375" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164152/amcache-forensic-artifact5.png 1556w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164152/amcache-forensic-artifact5-300x72.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164152/amcache-forensic-artifact5-1024x247.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164152/amcache-forensic-artifact5-768x185.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164152/amcache-forensic-artifact5-1536x370.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164152/amcache-forensic-artifact5-1452x350.png 1452w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164152/amcache-forensic-artifact5-740x178.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164152/amcache-forensic-artifact5-1162x280.png 1162w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164152/amcache-forensic-artifact5-800x193.png 800w" sizes="auto, (max-width: 1556px) 100vw, 1556px" /></a><p id="caption-attachment-117628" class="wp-caption-text">Stripped binary</p></div>
  1515. <p>When checking the Velociraptor entry on AmCache, we found that it indeed stored the SHA-1 hash calculated only for the first 31,457,280 bytes of the binary. Interestingly enough, the Size value represented the actual size of the original file. Thus, relying only on the file hash stored on AmCache for querying threat intelligence portals may be not enough when dealing with large files. So, we need to check if the file size in the record is bigger than 31,457,280 bytes before searching threat intelligence portals.</p>
  1516. <div id="attachment_117629" style="width: 1720px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164250/amcache-forensic-artifact6.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117629" class="size-full wp-image-117629" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164250/amcache-forensic-artifact6.png" alt="Second AmCache SHA-1 storage scenario" width="1710" height="552" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164250/amcache-forensic-artifact6.png 1710w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164250/amcache-forensic-artifact6-300x97.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164250/amcache-forensic-artifact6-1024x331.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164250/amcache-forensic-artifact6-768x248.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164250/amcache-forensic-artifact6-1536x496.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164250/amcache-forensic-artifact6-1084x350.png 1084w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164250/amcache-forensic-artifact6-740x239.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164250/amcache-forensic-artifact6-867x280.png 867w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30164250/amcache-forensic-artifact6-800x258.png 800w" sizes="auto, (max-width: 1710px) 100vw, 1710px" /></a><p id="caption-attachment-117629" class="wp-caption-text">Second AmCache SHA-1 storage scenario</p></div>
  1517. <p>Additionally, attackers may take advantage of this characteristic to purposely generate large malicious binaries. In this way, even if investigators find that a malware was executed/present on a Windows system, the actual SHA-1 hash of the binary will still be unknown, making it difficult to track it across the network and gathering it from public databases like VirusTotal.</p>
  1518. <h4 id="inventoryapplicationfile-use-case-example-finding-a-deleted-tool-that-was-used">InventoryApplicationFile – use case example: finding a deleted tool that was used</h4>
  1519. <p>Let&#8217;s suppose you are searching for a possible insider threat. The user denies having run any suspicious programs, and any suspicious software was securely erased from disk. But in the InventoryApplicationFile, you find a record of winscp.exe being present in the user&#8217;s Downloads folder. Even though the file is gone, this tells you the tool was on the machine and it was likely used to transfer files before being deleted. In our incident response practice, we have seen similar cases, where this key proved useful.</p>
  1520. <h3 id="inventoryapplication">InventoryApplication</h3>
  1521. <p>The <code>InventoryApplication</code> key records details about applications that were previously installed on the system. Unlike <code>InventoryApplicationFile</code>, which logs every executable encountered, <code>InventoryApplication</code> focuses on those with installation records. Each entry is named by its unique ProgramId, allowing straightforward linkage back to the corresponding InventoryApplicationFile key. Additionally, <code>InventoryApplication</code> has the following subkeys of interest:</p>
  1522. <ul>
  1523. <li><strong>InstallDate:</strong> a date‑time string indicating when the OS first recorded or recognized the application</li>
  1524. <li><strong>MsiInstallDate:</strong> present only if installed via Windows Installer (MSI); shows the exact time the MSI package was applied, sourced directly from the MSI metadata</li>
  1525. <li><strong>UninstallString:</strong> the exact command line used to remove the application</li>
  1526. <li><strong>Language:</strong> numeric locale identifier set by the developer (LCID)</li>
  1527. <li><strong>Publisher:</strong> the name of the software publisher or vendor</li>
  1528. <li><strong>ManifestPath:</strong> the file path to the installation manifest used by UWP or AppX/MSIX apps</li>
  1529. </ul>
  1530. <p>With a simple change to our parser, we can check the data contained in this key:</p><pre class="urvanov-syntax-highlighter-plain-tag">&lt;...&gt;
  1531. parent = subs.get("InventoryApplication")
  1532. &lt;...&gt;</pre><p>
  1533. <div id="attachment_117630" style="width: 1355px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165005/amcache-forensic-artifact7.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117630" class="size-full wp-image-117630" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165005/amcache-forensic-artifact7.png" alt="InventoryApplication subkeys" width="1345" height="345" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165005/amcache-forensic-artifact7.png 1345w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165005/amcache-forensic-artifact7-300x77.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165005/amcache-forensic-artifact7-1024x263.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165005/amcache-forensic-artifact7-768x197.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165005/amcache-forensic-artifact7-740x190.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165005/amcache-forensic-artifact7-1092x280.png 1092w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165005/amcache-forensic-artifact7-800x205.png 800w" sizes="auto, (max-width: 1345px) 100vw, 1345px" /></a><p id="caption-attachment-117630" class="wp-caption-text">InventoryApplication subkeys</p></div>
  1534. <p>When a <code>ProgramId</code> appears both here and under <code>InventoryApplicationFile</code>, it confirms that the executable is not merely present or executed, but was formally installed. This distinction helps us separate ad-hoc copies or transient executions from installed software. The following figure shows the <code>ProgramId</code> of the WinRAR software under <code>InventoryApplicationFile</code>.</p>
  1535. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165157/amcache-forensic-artifact8.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117631" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165157/amcache-forensic-artifact8.png" alt="" width="1434" height="480" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165157/amcache-forensic-artifact8.png 1434w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165157/amcache-forensic-artifact8-300x100.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165157/amcache-forensic-artifact8-1024x343.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165157/amcache-forensic-artifact8-768x257.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165157/amcache-forensic-artifact8-1046x350.png 1046w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165157/amcache-forensic-artifact8-740x248.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165157/amcache-forensic-artifact8-837x280.png 837w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165157/amcache-forensic-artifact8-800x268.png 800w" sizes="auto, (max-width: 1434px) 100vw, 1434px" /></a></p>
  1536. <p>When searching for the <code>ProgramId</code>, we find an exact match under <code>InventoryApplication</code>. This confirms that WinRAR was indeed installed on the system.</p>
  1537. <p><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165257/amcache-forensic-artifact9.png" class="magnificImage"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-117632" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165257/amcache-forensic-artifact9.png" alt="" width="1435" height="421" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165257/amcache-forensic-artifact9.png 1435w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165257/amcache-forensic-artifact9-300x88.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165257/amcache-forensic-artifact9-1024x300.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165257/amcache-forensic-artifact9-768x225.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165257/amcache-forensic-artifact9-1193x350.png 1193w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165257/amcache-forensic-artifact9-740x217.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165257/amcache-forensic-artifact9-954x280.png 954w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165257/amcache-forensic-artifact9-800x235.png 800w" sizes="auto, (max-width: 1435px) 100vw, 1435px" /></a></p>
  1538. <p>Another interesting detail about <code>InventoryApplication</code> is that it contains a subkey named <code>LastScanTime</code>, which is stored separately from <code>ProgramIds</code> and holds a value representing the last time the Microsoft Compatibility Appraiser ran. This is a scheduled task that launches the <code>compattelrunner.exe</code> binary, and the information in this key should only be updated when that task executes. As a result, software installed since the last run of the Appraiser may not appear here. The <code>LastScanTime</code> value is stored in <strong>Windows FileTime</strong> format.</p>
  1539. <div id="attachment_117633" style="width: 888px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165538/amcache-forensic-artifact10.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117633" class="size-full wp-image-117633" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165538/amcache-forensic-artifact10.png" alt="InventoryApplication LastScanTime information" width="878" height="118" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165538/amcache-forensic-artifact10.png 878w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165538/amcache-forensic-artifact10-300x40.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165538/amcache-forensic-artifact10-768x103.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165538/amcache-forensic-artifact10-740x99.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165538/amcache-forensic-artifact10-800x108.png 800w" sizes="auto, (max-width: 878px) 100vw, 878px" /></a><p id="caption-attachment-117633" class="wp-caption-text">InventoryApplication LastScanTime information</p></div>
  1540. <h4 id="inventoryapplication-use-case-example-spotting-remote-access-software">InventoryApplication – use case example: spotting remote access software</h4>
  1541. <p>Suppose that during an incident response engagement, you find an entry for AnyDesk in the InventoryApplication key (although the application is not installed anymore). This means that the attacker likely used it for remote access and then removed it to cover their tracks. Even if wiped from disk, this key proves it was present. We have seen this scenario in real-world cases more than once.</p>
  1542. <h3 id="inventorydriverbinary">InventoryDriverBinary</h3>
  1543. <p>The <code>InventoryDriverBinary</code> key records every kernel-mode driver that the system has loaded, providing the essential metadata needed to spot suspicious or malicious drivers. Under this key, each driver is captured in its own uniquely named subkey and includes:</p>
  1544. <ul>
  1545. <li><strong>FileID</strong>: the SHA-1 hash of the driver binary, with four zeroes appended to the beginning of the hash</li>
  1546. <li><strong>LowerCaseLongPath</strong>: the full lowercase file path to the driver on disk</li>
  1547. <li><strong>DigitalSignature</strong>: the code-signing certificate details. A valid, trusted signature helps confirm the driver&#8217;s authenticity</li>
  1548. <li><strong>LastModified</strong>: the file&#8217;s last modification timestamp from the filesystem metadata, revealing when the driver binary was most recently altered on disk</li>
  1549. </ul>
  1550. <p>Because Windows drivers run at the highest privilege level, they are frequently exploited by malware. For example, a previous study conducted by Kaspersky shows that attackers are <a href="https://securelist.com/av-killer-exploiting-throttlestop-sys/117026/" target="_blank" rel="noopener">exploiting vulnerable drivers for killing EDR processes</a>. When dealing with a cybersecurity incident, investigators correlate each driver&#8217;s cryptographic hash, file path, signature status, and modification timestamp. That can help in verifying if the binary matches a known, signed version, detecting any tampering by spotting unexpected modification dates, and flagging unsigned or anomalously named drivers for deeper analysis. Projects like <a href="https://www.loldrivers.io/" target="_blank" rel="noopener">LOLDrivers</a> help identify vulnerable drivers in use by attackers in the wild.</p>
  1551. <div id="attachment_117634" style="width: 1460px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165732/amcache-forensic-artifact11.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117634" class="size-full wp-image-117634" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165732/amcache-forensic-artifact11.png" alt="InventoryDriverBinary inspection" width="1450" height="533" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165732/amcache-forensic-artifact11.png 1450w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165732/amcache-forensic-artifact11-300x110.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165732/amcache-forensic-artifact11-1024x376.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165732/amcache-forensic-artifact11-768x282.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165732/amcache-forensic-artifact11-952x350.png 952w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165732/amcache-forensic-artifact11-740x272.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165732/amcache-forensic-artifact11-762x280.png 762w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30165732/amcache-forensic-artifact11-800x294.png 800w" sizes="auto, (max-width: 1450px) 100vw, 1450px" /></a><p id="caption-attachment-117634" class="wp-caption-text">InventoryDriverBinary inspection</p></div>
  1552. <p>In addition to the <code>InventoryDriverBinary</code>, AmCache also provides the <code>InventoryApplicationDriver</code> key, which keeps track of all drivers that have been installed by specific applications. It includes two entries:</p>
  1553. <ul>
  1554. <li><strong>DriverServiceName</strong>, which identifies the name of the service linked to the installed driver; and</li>
  1555. <li><strong>ProgramIds</strong>, which lists the program identifiers (corresponding to the key names under <code>InventoryApplication</code>) that were responsible for installing the driver.</li>
  1556. </ul>
  1557. <p>As shown in the figure below, the <code>ProgramIds</code> key can be used to track the associated program that uses this driver:</p>
  1558. <div id="attachment_117635" style="width: 1565px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170026/amcache-forensic-artifact12.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117635" class="size-full wp-image-117635" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170026/amcache-forensic-artifact12.png" alt="Checking program information by ProgramIds" width="1555" height="894" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170026/amcache-forensic-artifact12.png 1555w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170026/amcache-forensic-artifact12-300x172.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170026/amcache-forensic-artifact12-1024x589.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170026/amcache-forensic-artifact12-768x442.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170026/amcache-forensic-artifact12-1536x883.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170026/amcache-forensic-artifact12-609x350.png 609w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170026/amcache-forensic-artifact12-740x425.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170026/amcache-forensic-artifact12-487x280.png 487w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170026/amcache-forensic-artifact12-800x460.png 800w" sizes="auto, (max-width: 1555px) 100vw, 1555px" /></a><p id="caption-attachment-117635" class="wp-caption-text">Checking program information by ProgramIds</p></div>
  1559. <h4 id="inventorydriverbinary-use-case-example-catching-a-bad-driver">InventoryDriverBinary – use case example: catching a bad driver</h4>
  1560. <p>If the system was compromised through the abuse of a known vulnerable or malicious driver, you can use the <code>InventoryDriverBinary</code> registry key to confirm its presence. Even if the driver has been removed or hidden, remnants in this key can reveal that it was once loaded, which helps identify kernel-level compromises and supporting timeline reconstruction during the investigation. This is exactly how the <a href="https://securelist.com/av-killer-exploiting-throttlestop-sys/117026/" target="_blank" rel="noopener">AV Killer malware</a> was discovered.</p>
  1561. <h3 id="inventoryapplicationshortcut">InventoryApplicationShortcut</h3>
  1562. <p>This key contains entries for <code>.lnk</code> (shortcut) files that were present in folders like each user&#8217;s Start Menu or Desktop. Within each shortcut key, the ShortcutPath provides the absolute path to the LNK file at the moment of discovery. The <code>ShortcutTargetPath</code> shows where the shortcut pointed. We can also search for the <code>ProgramId</code> entry within the <code>InventoryApplication</code> key using the <code>ShortcutProgramId</code> (similar to what we did for drivers).</p>
  1563. <div id="attachment_117636" style="width: 1596px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170311/amcache-forensic-artifact13.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117636" class="size-full wp-image-117636" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170311/amcache-forensic-artifact13.png" alt="InventoryApplicationShortcut key" width="1586" height="306" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170311/amcache-forensic-artifact13.png 1586w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170311/amcache-forensic-artifact13-300x58.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170311/amcache-forensic-artifact13-1024x198.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170311/amcache-forensic-artifact13-768x148.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170311/amcache-forensic-artifact13-1536x296.png 1536w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170311/amcache-forensic-artifact13-740x143.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170311/amcache-forensic-artifact13-1451x280.png 1451w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30170311/amcache-forensic-artifact13-800x154.png 800w" sizes="auto, (max-width: 1586px) 100vw, 1586px" /></a><p id="caption-attachment-117636" class="wp-caption-text">InventoryApplicationShortcut key</p></div>
  1564. <h4 id="inventoryapplicationshortcut-use-case-example-confirming-use-of-a-removed-app">InventoryApplicationShortcut – use case example: confirming use of a removed app</h4>
  1565. <p>You find that a suspicious program was deleted from the computer, but the user claims they never ran it. The <code>InventoryApplicationShortcut</code> key shows a shortcut to that program was on their desktop and was accessed recently. With supplementary evidence, such as that from Prefetch analysis, you can confirm the execution of the software.</p>
  1566. <h2 id="amcache-key-comparison">AmCache key comparison</h2>
  1567. <p>The table below summarizes the information presented in the previous subsections, highlighting the main information about each AmCache key.</p>
  1568. <table>
  1569. <tbody>
  1570. <tr>
  1571. <td><strong>Key</strong></td>
  1572. <td><strong>Contains</strong></td>
  1573. <td><strong>Indicates execution?</strong></td>
  1574. </tr>
  1575. <tr>
  1576. <td>InventoryApplicationFile</td>
  1577. <td>Metadata for all executables seen on the system.</td>
  1578. <td>Possibly (presence = likely executed)</td>
  1579. </tr>
  1580. <tr>
  1581. <td>InventoryApplication</td>
  1582. <td>Metadata about formally installed software.</td>
  1583. <td>No (indicates installation, not necessarily execution)</td>
  1584. </tr>
  1585. <tr>
  1586. <td>InventoryDriverBinary</td>
  1587. <td>Metadata about loaded kernel-mode drivers.</td>
  1588. <td>Yes (driver was loaded into memory)</td>
  1589. </tr>
  1590. <tr>
  1591. <td>InventoryApplicationShortcut</td>
  1592. <td>Information about .lnk files.</td>
  1593. <td>Possibly (combine with other data for confirmation)</td>
  1594. </tr>
  1595. </tbody>
  1596. </table>
  1597. <h2 id="amcache-evilhunter">AmCache-EvilHunter</h2>
  1598. <p>Undoubtedly <code>Amcache.hve</code> is a very important forensic artifact. However, we could not find any tool that effectively parses its contents while providing threat intelligence for the analyst. With this in mind, we developed <a href="https://github.com/cristianzsh/amcache-evilhunter" target="_blank" rel="noopener">AmCache-EvilHunter</a> a command-line tool to parse and analyze Windows <code>Amcache.hve</code> registry hives, identify evidence of execution, suspicious executables, and integrate Kaspersky OpenTIP and VirusTotal lookups for enhanced threat intelligence.</p>
  1599. <p>AmCache-EvilHunter is capable of processing the <code>Amcache.hve</code> file and filter records by date range (with the options <code>--start</code> and <code>--end</code>). It is also possible to search records using keywords (<code>--search</code>), which is useful for searching for known naming conventions adopted by attackers. The results can be saved in CSV (<code>--csv</code>) or JSON (<code>--json</code>) formats.</p>
  1600. <p>The image below shows an example of execution of AmCache-EvilHunter with these basic options, by using the following command:</p><pre class="urvanov-syntax-highlighter-plain-tag">amcache-evilhunter -i Amcache.hve --start 2025-06-19 --end 2025-06-19 --csv output.csv</pre><p>
  1601. The output contains all applications that were present on the machine on June 19, 2025. The last column contains information whether the file is an operating system component, or not.</p>
  1602. <div id="attachment_117638" style="width: 1352px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213455/amcache-forensic-artifact14.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117638" class="size-full wp-image-117638" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213455/amcache-forensic-artifact14.png" alt="Basic usage of AmCache-EvilHunter" width="1342" height="370" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213455/amcache-forensic-artifact14.png 1342w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213455/amcache-forensic-artifact14-300x83.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213455/amcache-forensic-artifact14-1024x282.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213455/amcache-forensic-artifact14-768x212.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213455/amcache-forensic-artifact14-1269x350.png 1269w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213455/amcache-forensic-artifact14-740x204.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213455/amcache-forensic-artifact14-1016x280.png 1016w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213455/amcache-forensic-artifact14-800x221.png 800w" sizes="auto, (max-width: 1342px) 100vw, 1342px" /></a><p id="caption-attachment-117638" class="wp-caption-text">Basic usage of AmCache-EvilHunter</p></div>
  1603. <div id="attachment_117639" style="width: 1350px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213535/amcache-forensic-artifact15.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117639" class="size-full wp-image-117639" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213535/amcache-forensic-artifact15.png" alt="CSV result" width="1340" height="268" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213535/amcache-forensic-artifact15.png 1340w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213535/amcache-forensic-artifact15-300x60.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213535/amcache-forensic-artifact15-1024x205.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213535/amcache-forensic-artifact15-768x154.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213535/amcache-forensic-artifact15-740x148.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213535/amcache-forensic-artifact15-800x160.png 800w" sizes="auto, (max-width: 1340px) 100vw, 1340px" /></a><p id="caption-attachment-117639" class="wp-caption-text">CSV result</p></div>
  1604. <p>Analysts are often faced with a large volume of executables and artifacts. To narrow down the scope and reduce noise, the tool is able to search for known suspicious binaries with the <code>--find-suspicious option</code>. The patterns used by the tool include common malware names, Windows processes containing small typos (e.g., <code>scvhost.exe</code>), legitimate executables usually found in use during incidents, one-letter/one-digit file names (such as <code>1.exe</code>, <code>a.exe</code>), or random hex strings. The figure below shows the results obtained by using this option; as highlighted, one <code>svchost.exe</code> file is part of the operating system and the other is not, making it a good candidate for collection and analysis if not deleted.</p>
  1605. <div id="attachment_117640" style="width: 1351px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213814/amcache-forensic-artifact16.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117640" class="size-full wp-image-117640" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213814/amcache-forensic-artifact16.png" alt="Suspicious files identification" width="1341" height="235" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213814/amcache-forensic-artifact16.png 1341w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213814/amcache-forensic-artifact16-300x53.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213814/amcache-forensic-artifact16-1024x179.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213814/amcache-forensic-artifact16-768x135.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213814/amcache-forensic-artifact16-740x130.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213814/amcache-forensic-artifact16-800x140.png 800w" sizes="auto, (max-width: 1341px) 100vw, 1341px" /></a><p id="caption-attachment-117640" class="wp-caption-text">Suspicious files identification</p></div>
  1606. <p>Malicious files usually do not include any publisher information and are definitely not part of the default operating system. For this reason, AmCache-EvilHunter also ships with the <code>--missing-publisher</code> and <code>--exclude-os options</code>. These parameters allow for easy filtering of suspicious binaries and also allow fast threat intelligence gathering, which is crucial during an incident.</p>
  1607. <p>Another important feature that distinguishes our tool from other proposed approaches is that AmCache-EvilHunter can query Kaspersky OpenTIP (<code>--opentip</code> ) and VirusTotal (<code>--vt</code>) for hashes it identifies. In this way, analysts can rapidly gain insights into samples to decide whether they are going to proceed with a full analysis of the artifact or not.</p>
  1608. <div id="attachment_117641" style="width: 1349px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213952/amcache-forensic-artifact17.jpeg" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117641" class="size-full wp-image-117641" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213952/amcache-forensic-artifact17.jpeg" alt="Threat intel lookup" width="1339" height="182" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213952/amcache-forensic-artifact17.jpeg 1339w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213952/amcache-forensic-artifact17-300x41.jpeg 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213952/amcache-forensic-artifact17-1024x139.jpeg 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213952/amcache-forensic-artifact17-768x104.jpeg 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213952/amcache-forensic-artifact17-740x101.jpeg 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/30213952/amcache-forensic-artifact17-800x109.jpeg 800w" sizes="auto, (max-width: 1339px) 100vw, 1339px" /></a><p id="caption-attachment-117641" class="wp-caption-text">Threat intel lookup</p></div>
  1609. <p>Binaries of the tool are available on <a href="https://github.com/cristianzsh/amcache-evilhunter/releases/" target="_blank" rel="noopener">our GitHub page</a> for both Linux and Windows systems.</p>
  1610. <h2 id="conclusion">Conclusion</h2>
  1611. <p><code>Amcache.hve</code> is a cornerstone of Windows forensics, capturing rich metadata, such as full paths, SHA-1 hashes, compilation timestamps, publisher and version details, for every executable that appears on a system. While it does not serve as a definitive execution log, its strength lies in documenting file presence and paths, making it invaluable for spotting anomalous binaries, verifying trustworthiness via hash lookups against threat‐intelligence feeds, and correlating <code>LinkDate</code> values with known attack campaigns.</p>
  1612. <p>To extract its full investigative potential, analysts should merge AmCache data with other artifacts (e.g., Prefetch, ShimCache, and Windows event logs) to confirm actual execution and build accurate timelines. Comparing <code>InventoryApplicationFile</code> entries against <code>InventoryApplication</code> reveals whether a file was merely dropped or formally installed, and identifying unexpected driver records can expose stealthy rootkits and persistence mechanisms. Leveraging parsers like AmCache-EvilHunter and cross-referencing against VirusTotal or proprietary threat databases allows IOC generation and robust incident response, making AmCache analysis a fundamental DFIR skill.</p>
  1613. ]]></content:encoded>
  1614. <wfw:commentRss>https://securelist.com/amcache-forensic-artifact/117622/feed/</wfw:commentRss>
  1615. <slash:comments>0</slash:comments>
  1616. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/01111328/SL-AmCache-forensic-artifact-featured.jpg" width="2000" height="955"><media:keywords>full</media:keywords></media:content>
  1617. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/01111328/SL-AmCache-forensic-artifact-featured-1024x489.jpg" width="1024" height="489"><media:keywords>large</media:keywords></media:content>
  1618. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/01111328/SL-AmCache-forensic-artifact-featured-300x143.jpg" width="300" height="143"><media:keywords>medium</media:keywords></media:content>
  1619. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/10/01111328/SL-AmCache-forensic-artifact-featured-150x150.jpg" width="150" height="150"><media:keywords>thumbnail</media:keywords></media:content>
  1620. </item>
  1621. <item>
  1622. <title>Massive npm infection: the Shai-Hulud worm and patient zero</title>
  1623. <link>https://securelist.com/shai-hulud-worm-infects-500-npm-packages-in-a-supply-chain-attack/117547/</link>
  1624. <comments>https://securelist.com/shai-hulud-worm-infects-500-npm-packages-in-a-supply-chain-attack/117547/#respond</comments>
  1625. <dc:creator><![CDATA[Vladimir Gursky, Dmitry Vinogradov]]></dc:creator>
  1626. <pubDate>Thu, 25 Sep 2025 10:00:12 +0000</pubDate>
  1627. <category><![CDATA[Incidents]]></category>
  1628. <category><![CDATA[Malware descriptions]]></category>
  1629. <category><![CDATA[Malware Technologies]]></category>
  1630. <category><![CDATA[Linux]]></category>
  1631. <category><![CDATA[Microsoft Windows]]></category>
  1632. <category><![CDATA[JavaScript]]></category>
  1633. <category><![CDATA[Apple MacOS]]></category>
  1634. <category><![CDATA[Malware Descriptions]]></category>
  1635. <category><![CDATA[Malware]]></category>
  1636. <category><![CDATA[Worm]]></category>
  1637. <category><![CDATA[Supply-chain attack]]></category>
  1638. <category><![CDATA[Data theft]]></category>
  1639. <category><![CDATA[Open source]]></category>
  1640. <category><![CDATA[GitHub]]></category>
  1641. <category><![CDATA[npm]]></category>
  1642. <category><![CDATA[Windows malware]]></category>
  1643. <category><![CDATA[Unix and macOS malware]]></category>
  1644. <category><![CDATA[Web threats]]></category>
  1645. <guid isPermaLink="false">https://kasperskycontenthub.com/securelist/?p=117547</guid>
  1646.  
  1647. <description><![CDATA[We dissect a recent incident where npm packages with millions of downloads were infected by the Shai-Hulud worm. Kaspersky experts describe the starting point for the source of the infection.]]></description>
  1648. <content:encoded><![CDATA[<p><img width="990" height="400" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/25072805/shai-hulud-featured-image-990x400.jpg" class="attachment-securelist-huge-promo size-securelist-huge-promo wp-post-image" alt="" decoding="async" loading="lazy" /></p><h2 id="introduction">Introduction</h2>
  1649. <p>The modern development world is almost entirely dependent on third-party modules. While this certainly speeds up development, it also creates a massive attack surface for end users, since anyone can create these components. It is no surprise that malicious modules are becoming more common. When a single maintainer account for popular modules or a single popular dependency is compromised, it can quickly turn into a <a href="https://securelist.com/ksb-story-of-the-year-2024/114883/" target="_blank" rel="noopener">supply chain attack</a>. Such compromises are now a frequent attack vector trending among threat actors. In the last month alone, there have been two major incidents that confirm this interest in creating malicious modules, dependencies, and packages. We have already discussed the <a href="https://www.kaspersky.com/blog/npm-packages-trojanized/54280/" target="_blank" rel="noopener">recent compromise</a> of popular npm packages. September 16, 2025 saw <a href="https://www.kaspersky.com/blog/tinycolor-shai-hulud-supply-chain-attack/54315/" target="_blank" rel="noopener">reports</a> of a new wave of npm package infections, caused by the self-propagating malware known as Shai-Hulud.</p>
  1650. <p>Shai-Hulud is designed to steal sensitive data, expose private repositories of organizations, and hijack victim credentials to infect other packages and spread on. Over 500 packages were infected in this incident, including one with more than two million weekly downloads. As a result, developers who integrated these malicious packages into their projects risk losing sensitive data, and their own libraries could become infected with Shai-Hulud. This self-propagating malware takes over accounts and steals secrets to create new infected modules, spreading the threat along the dependency chain.</p>
  1651. <h2 id="technical-details">Technical details</h2>
  1652. <p>The worm&#8217;s malicious code executes when an infected package is installed. It then publishes infected releases to all packages the victim has update permissions for.</p>
  1653. <p>Once the infected package is installed from the npm registry on the victim&#8217;s system, a special command is automatically executed. This command launches a malicious script over 3 MB in size named <code>bundle.js</code>, which contains several legitimate, open-source work modules.</p>
  1654. <p>Key modules within <code>bundle.js</code> include:</p>
  1655. <ul>
  1656. <li>Library for interacting with AWS cloud services</li>
  1657. <li>GCP module that retrieves metadata from the Google Cloud Platform environment</li>
  1658. <li>Functions for <a href="https://github.com/trufflesecurity/trufflehog" target="_blank" rel="noopener">TruffleHog</a>, a tool for scanning various data sources to find sensitive information, specifically secrets</li>
  1659. <li>Tool for interacting with the GitHub API</li>
  1660. </ul>
  1661. <p>The JavaScript file also contains network utilities for data transfer and the main operational module, Shai-Hulud.</p>
  1662. <p>The worm begins its malicious activity by collecting information about the victim&#8217;s operating system and checking for an npm token and authenticated GitHub user token in the environment. If a valid GitHub token is not present, <code>bundle.js</code> will terminate. A distinctive feature of Shai-Hulud is that most of its functionality is geared toward Linux and macOS systems: almost all malicious actions are performed exclusively on these systems, with the exception of using TruffleHog to find secrets.</p>
  1663. <h3 id="exfiltrating-secrets">Exfiltrating secrets</h3>
  1664. <p>After passing the checks, the malware uses the token mentioned earlier to get information about the current GitHub user. It then runs the <code>extraction</code> function, which creates a temporary executable bash script at <code>/tmp/processor.sh</code> and runs it as a separate process, passing the token as an argument. Below is the <code>extraction</code> function, with strings and variable names modified for readability since the original source code was illegible.</p>
  1665. <div id="attachment_117553" style="width: 560px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155009/shai-hulud1.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117553" class="size-full wp-image-117553" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155009/shai-hulud1.png" alt="The extraction function, formatted for readability" width="550" height="533" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155009/shai-hulud1.png 550w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155009/shai-hulud1-300x291.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155009/shai-hulud1-361x350.png 361w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155009/shai-hulud1-289x280.png 289w" sizes="auto, (max-width: 550px) 100vw, 550px" /></a><p id="caption-attachment-117553" class="wp-caption-text">The extraction function, formatted for readability</p></div>
  1666. <p>The bash script is designed to communicate with the GitHub API and collect secrets from the victim&#8217;s repository in an unconventional way. First, the script checks if the token has the necessary permissions to create branches and work with GitHub Actions. If it does, the script gets a list of all the repositories the user can access from 2025. In each of these, it creates a new branch named <code>shai-hulud</code> and uploads a <code>shai-hulud-workflow.yml</code> <a href="https://docs.github.com/en/actions/concepts/workflows-and-actions/workflows" target="_blank" rel="noopener">workflow</a>, which is a configuration file for describing GitHub Actions workflows. These files are automation scripts that are triggered in GitHub Actions whenever changes are made to a repository. The Shai-Hulud workflow activates on every push.</p>
  1667. <div id="attachment_117554" style="width: 694px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155101/shai-hulud2.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117554" class="size-full wp-image-117554" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155101/shai-hulud2.png" alt="The malicious workflow configuration" width="684" height="233" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155101/shai-hulud2.png 684w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155101/shai-hulud2-300x102.png 300w" sizes="auto, (max-width: 684px) 100vw, 684px" /></a><p id="caption-attachment-117554" class="wp-caption-text">The malicious workflow configuration</p></div>
  1668. <p>This file collects secrets from the victim&#8217;s repositories and forwards them to the attackers&#8217; server. Before being sent, the confidential data is encoded twice with Base64.</p>
  1669. <p>This unusual method for data collection is designed for a one-time extraction of secrets from a user&#8217;s repositories. However, it poses a threat not only to Shai-Hulud victims but also to ordinary researchers. If you search for &#8220;shai-hulud&#8221; on GitHub, you will find numerous repositories that have been compromised by the worm.</p>
  1670. <div id="attachment_117555" style="width: 1160px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155148/shai-hulud3.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117555" class="size-full wp-image-117555" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155148/shai-hulud3.png" alt="Open GitHub repositories compromised by Shai-Hulud" width="1150" height="756" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155148/shai-hulud3.png 1150w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155148/shai-hulud3-300x197.png 300w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155148/shai-hulud3-1024x673.png 1024w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155148/shai-hulud3-768x505.png 768w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155148/shai-hulud3-532x350.png 532w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155148/shai-hulud3-740x486.png 740w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155148/shai-hulud3-426x280.png 426w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155148/shai-hulud3-800x526.png 800w" sizes="auto, (max-width: 1150px) 100vw, 1150px" /></a><p id="caption-attachment-117555" class="wp-caption-text">Open GitHub repositories compromised by Shai-Hulud</p></div>
  1671. <p>The main <code>bundle.js</code> script then requests a list of all organizations associated with the victim and runs the migration function for each one. This function also runs a bash script, but in this case, it saves it to <code>/tmp/migrate-repos.sh</code>, passing the organization name, username, and token as parameters for further malicious activity.</p>
  1672. <p>The bash script automates the migration of all private and internal repositories from the specified GitHub organization to the user&#8217;s account, making them public. The script also uses the GitHub API to copy the contents of the private repositories as <a href="https://docs.github.com/en/repositories/creating-and-managing-repositories/duplicating-a-repository" target="_blank" rel="noopener">mirrors</a>.</p>
  1673. <p>We believe these actions are intended for the automated theft of source code from the private repositories of popular communities and organizations. For example, the well-known company CrowdStrike was caught in this wave of infections.</p>
  1674. <h3 id="the-worms-self-replication">The worm&#8217;s self-replication</h3>
  1675. <p>After running operations on the victim&#8217;s GitHub, the main <code>bundle.js</code> script moves on to its next crucial stage: self-replication. First, the script gets a list of the victim&#8217;s 20 most downloaded packages. To do this, it performs a search query with the username from the previously obtained npm token:</p><pre class="urvanov-syntax-highlighter-plain-tag">https://registry.npmjs.org/-/v1/search?text=maintainer:{%user_details%}&amp;size=20</pre><p> </p>
  1676. <p>Next, for each of the packages it finds, it calls the <code>updatePackage</code> function. This function first attempts to download the tarball version of the package (a <code>.TAR</code> archive). If it exists, a temporary directory named <code>npm-update-{target_package_name}</code> is created. The tarball version of the package is saved there as <code>package.tgz</code>, then unpacked and modified as follows:</p>
  1677. <ul>
  1678. <li>The malicious <code>bundle.js</code> is added to the original package.</li>
  1679. <li>A postinstall command is added to the <code>package.json</code> file (which is used in Node.js projects to manage dependencies and project metadata). This command is configured to execute the malicious script via <code>node bundle.js</code>.</li>
  1680. <li>The package version number is incremented by 1.</li>
  1681. </ul>
  1682. <p>The modified package is then re-packed and published to npm as a new version with the <code>npm publish</code> command. After this, the temporary directory for the package is cleared.</p>
  1683. <div id="attachment_117556" style="width: 687px" class="wp-caption aligncenter"><a href="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155303/shai-hulud4.png" class="magnificImage"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-117556" class="size-full wp-image-117556" src="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155303/shai-hulud4.png" alt="The updatePackage function, formatted for readability" width="677" height="771" srcset="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155303/shai-hulud4.png 677w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155303/shai-hulud4-263x300.png 263w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155303/shai-hulud4-307x350.png 307w, https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/24155303/shai-hulud4-246x280.png 246w" sizes="auto, (max-width: 677px) 100vw, 677px" /></a><p id="caption-attachment-117556" class="wp-caption-text">The updatePackage function, formatted for readability</p></div>
  1684. <h3 id="uploading-secrets-to-github">Uploading secrets to GitHub</h3>
  1685. <p>Next, the worm uses the previously mentioned TruffleHog utility to harvest secrets from the target system. It downloads the latest version of the utility from the original repository for the specific operating system type using the following link:</p><pre class="urvanov-syntax-highlighter-plain-tag">https://github.com/trufflesecurity/trufflehog/releases/download/{utility version}/{OS-specific file}</pre><p> </p>
  1686. <p>The worm also uses modules for AWS and Google Cloud Platform (GCP) to scan for secrets. The script then aggregates the collected data into a single object and creates a repository named &#8220;Shai-Hulud&#8221; in the victim&#8217;s profile. It then uploads the collected information to this repository as a <code>data.json</code> file.</p>
  1687. <p>Below is a list of data formats collected from the victim&#8217;s system and uploaded to GitHub:</p><pre class="urvanov-syntax-highlighter-plain-tag">{
  1688. "application": {
  1689.  "name": "",
  1690.  "version": "",
  1691.  "description": ""
  1692. },
  1693. "system": {
  1694.  "platform": "",
  1695.  "architecture": "",
  1696.  "platformDetailed": "",
  1697.  "architectureDetailed": ""
  1698. },
  1699. "runtime": {
  1700.  "nodeVersion": "",
  1701.  "platform": "",
  1702.  "architecture": "",
  1703.  "timestamp": ""
  1704. },
  1705. "environment": {
  1706. },
  1707. "modules": {
  1708.  "github": {
  1709.   "authenticated": false,
  1710.   "token": "",
  1711.   "username": {}
  1712.  },
  1713.  "aws": {
  1714.   "secrets": []
  1715.  },
  1716.  "gcp": {
  1717.   "secrets": []
  1718.  },
  1719.  "truffleHog": {
  1720.   "available": false,
  1721.   "installed": false,
  1722.   "version": "",
  1723.   "platform": "",
  1724.   "results": [
  1725.    {}
  1726.   ]
  1727.  },
  1728.  "npm": {
  1729.   "token": "",
  1730.   "authenticated": true,
  1731.   "username": ""
  1732.  }
  1733. }
  1734. }</pre><p>
  1735. <h3 id="infection-characteristics">Infection characteristics</h3>
  1736. <p>A distinctive characteristic of the modified packages is that they contain an archive named <code>package.tar</code>. This is worth noting because packages usually contain an archive with a name that matches the package itself.</p>
  1737. <p>Through our research, we were able to identify the first package from which Shai-Hulud began to spread, thanks to a key difference. As we mentioned earlier, after infection, a postinstall command to execute the malicious script, <code>node bundle.js</code>, is written to the <code>package.json</code> file. This command typically runs immediately after installation. However, we discovered that one of the infected packages listed the same command as a preinstall command, meaning it ran before the installation. This package was <strong>ngx-bootstrap version 18.1.4</strong>. We believe this was the starting point for the spread of this infection. This hypothesis is further supported by the fact that the archive name in the first infected version of this package differed from the name characteristic of later infected packages (<code>package.tar</code>).</p>
  1738. <p>While investigating different packages, we noticed that in some cases, a single package contained multiple versions with malicious code. This was likely possible because the infection spread to all maintainers and contributors of packages, and the malicious code was then introduced from each of their accounts.</p>
  1739. <h2 id="infected-libraries-and-crowdstrike">Infected libraries and CrowdStrike</h2>
  1740. <p>The rapidly spreading Shai-Hulud worm has infected many popular libraries that organizations and developers use daily. Shai-Hulud has infected over 500 popular packages in recent days, including libraries from the well-known company CrowdStrike.<br />
  1741. Among the infected libraries were the following:</p>
  1742. <ul>
  1743. <li>@crowdstrike/commitlint versions 8.1.1, 8.1.2</li>
  1744. <li>@crowdstrike/falcon-shoelace versions 0.4.1, 0.4.2</li>
  1745. <li>@crowdstrike/foundry-js versions 0.19.1, 0.19.2</li>
  1746. <li>@crowdstrike/glide-core versions 0.34.2, 0.34.3</li>
  1747. <li>@crowdstrike/logscale-dashboard versions 1.205.1, 1.205.2</li>
  1748. <li>@crowdstrike/logscale-file-editor versions 1.205.1, 1.205.2</li>
  1749. <li>@crowdstrike/logscale-parser-edit versions 1.205.1, 1.205.2</li>
  1750. <li>@crowdstrike/logscale-search versions 1.205.1, 1.205.2</li>
  1751. <li>@crowdstrike/tailwind-toucan-base versions 5.0.1, 5.0.2</li>
  1752. </ul>
  1753. <p>But the event that has drawn significant attention to this spreading threat was the infection of the @ctrl/tinycolor library, which is downloaded by over two million users every week.</p>
  1754. <p>As mentioned above, the malicious script exposes an organization&#8217;s private repositories, posing a serious threat to their owners, as this creates a risk of exposing the source code of their libraries and products, among other things, and leading to an even greater loss of data.</p>
  1755. <h2 id="prevention-and-protection">Prevention and protection</h2>
  1756. <p>To protect against this type of infection, we recommend using a specialized solution for monitoring open-source components. Kaspersky maintains a <a href="https://www.kaspersky.com/open-source-feed?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______9cfe10194bda62de" target="_blank" rel="noopener">continuous feed of compromised packages and libraries</a>, which can be used to secure your supply chain and protect development from similar threats.</p>
  1757. <p>For personal devices, we recommend <a href="https://www.kaspersky.com/premium?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team___kprem____311534b86c615e6e" target="_blank" rel="noopener">Kaspersky Premium</a>, which provides multi-layered protection to prevent and neutralize infection threats. Our solution can also restore the device&#8217;s functionality if it&#8217;s infected with malware.</p>
  1758. <p>For corporate devices, we advise implementing a comprehensive solution like <a href="https://www.kaspersky.com/enterprise-security/xdr?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team___xdr____33801aaaec3e63b3" target="_blank" rel="noopener">Kaspersky Next</a>, which allows you to build a flexible and effective security system. This product line provides threat visibility and real-time protection, as well as EDR and XDR capabilities for investigation and response. It is suitable for organizations of any scale or industry.</p>
  1759. <p>Kaspersky products detect the Shai-Hulud threat as <code>HEUR:Worm.Script.Shulud.gen</code>.</p>
  1760. <p>In the event of a Shai-Hulud infection, and as a proactive response to the spreading threat, we recommend taking the following measures across your systems and infrastructure:</p>
  1761. <ul>
  1762. <li>Use a reliable security solution to conduct a full system scan.</li>
  1763. <li>Audit your GitHub repositories:</li>
  1764. <ul>
  1765. <li>Check for repositories named <code>shai-hulud</code>.</li>
  1766. <li>Look for non-trivial or unknown branches, pull requests, and files.</li>
  1767. <li>Audit GitHub Actions logs for strings containing <code>shai-hulud</code>.</li>
  1768. </ul>
  1769. <li>Reissue npm and GitHub tokens, cloud keys (specifically for AWS and Google Cloud Platform), and rotate other secrets.</li>
  1770. <li>Clear the cache and inventory your npm modules: check for malicious ones and roll back versions to clean ones.</li>
  1771. <li>Check for indicators of compromise, such as files in the system or network artifacts.</li>
  1772. </ul>
  1773. <h2 id="indicators-of-compromise">Indicators of compromise</h2>
  1774. <p><strong>Files:</strong><br />
  1775. bundle.js<br />
  1776. shai-hulud-workflow.yml</p>
  1777. <p><strong>Strings:</strong><br />
  1778. shai-hulud</p>
  1779. <p><strong>Hashes:</strong><br />
  1780. <a href="https://opentip.kaspersky.com/c96fbbe010dd4c5bfb801780856ec228/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______b82fb35982be9fef&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">C96FBBE010DD4C5BFB801780856EC228</a><br />
  1781. <a href="https://opentip.kaspersky.com/78e701f42b76ccde3f2678e548886860/results?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______2bd661a09cbb2bbb&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">78E701F42B76CCDE3F2678E548886860</a></p>
  1782. <p><strong>Network artifacts:</strong><br />
  1783. <a href="https://opentip.kaspersky.com/https%3a%2f%2fwebhook.site%2fbb8ca5f6-4175-45d2-b042-fc9ebb8170b7/?icid=gl_securelist_acq_ona_smm__onl_b2b_securelist_lnk_sm-team_______9bd279cc4ffc602e&amp;utm_source=SL&amp;utm_medium=SL&amp;utm_campaign=SL" target="_blank" rel="noopener">https://webhook.site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7</a></p>
  1784. <p><strong>Compromised packages:</strong><br />
  1785. @ahmedhfarag/ngx-perfect-scrollbar<br />
  1786. @ahmedhfarag/ngx-virtual-scroller<br />
  1787. @art-ws/common<br />
  1788. @art-ws/config-eslint<br />
  1789. @art-ws/config-ts<br />
  1790. @art-ws/db-context<br />
  1791. @art-ws/di<br />
  1792. @art-ws/di-node<br />
  1793. @art-ws/eslint<br />
  1794. @art-ws/fastify-http-server<br />
  1795. @art-ws/http-server<br />
  1796. @art-ws/openapi<br />
  1797. @art-ws/package-base<br />
  1798. @art-ws/prettier<br />
  1799. @art-ws/slf<br />
  1800. @art-ws/ssl-info<br />
  1801. @art-ws/web-app<br />
  1802. @basic-ui-components-stc/basic-ui-components<br />
  1803. @crowdstrike/commitlint<br />
  1804. @crowdstrike/falcon-shoelace<br />
  1805. @crowdstrike/foundry-js<br />
  1806. @crowdstrike/glide-core<br />
  1807. @crowdstrike/logscale-dashboard<br />
  1808. @crowdstrike/logscale-file-editor<br />
  1809. @crowdstrike/logscale-parser-edit<br />
  1810. @crowdstrike/logscale-search<br />
  1811. @crowdstrike/tailwind-toucan-base<br />
  1812. @ctrl/deluge<br />
  1813. @ctrl/golang-template<br />
  1814. @ctrl/magnet-link<br />
  1815. @ctrl/ngx-codemirror<br />
  1816. @ctrl/ngx-csv<br />
  1817. @ctrl/ngx-emoji-mart<br />
  1818. @ctrl/ngx-rightclick<br />
  1819. @ctrl/qbittorrent<br />
  1820. @ctrl/react-adsense<br />
  1821. @ctrl/shared-torrent<br />
  1822. @ctrl/tinycolor<br />
  1823. @ctrl/torrent-file<br />
  1824. @ctrl/transmission<br />
  1825. @ctrl/ts-base32<br />
  1826. @nativescript-community/arraybuffers<br />
  1827. @nativescript-community/gesturehandler<br />
  1828. @nativescript-community/perms<br />
  1829. @nativescript-community/sentry<br />
  1830. @nativescript-community/sqlite<br />
  1831. @nativescript-community/text<br />
  1832. @nativescript-community/typeorm<br />
  1833. @nativescript-community/ui-collectionview<br />
  1834. @nativescript-community/ui-document-picker<br />
  1835. @nativescript-community/ui-drawer<br />
  1836. @nativescript-community/ui-image<br />
  1837. @nativescript-community/ui-label<br />
  1838. @nativescript-community/ui-material-bottom-navigation<br />
  1839. @nativescript-community/ui-material-bottomsheet<br />
  1840. @nativescript-community/ui-material-core<br />
  1841. @nativescript-community/ui-material-core-tabs<br />
  1842. @nativescript-community/ui-material-ripple<br />
  1843. @nativescript-community/ui-material-tabs<br />
  1844. @nativescript-community/ui-pager<br />
  1845. @nativescript-community/ui-pulltorefresh<br />
  1846. @nstudio/angular<br />
  1847. @nstudio/focus<br />
  1848. @nstudio/nativescript-checkbox<br />
  1849. @nstudio/nativescript-loading-indicator<br />
  1850. @nstudio/ui-collectionview<br />
  1851. @nstudio/web<br />
  1852. @nstudio/web-angular<br />
  1853. @nstudio/xplat<br />
  1854. @nstudio/xplat-utils<br />
  1855. @operato/board<br />
  1856. @operato/data-grist<br />
  1857. @operato/graphql<br />
  1858. @operato/headroom<br />
  1859. @operato/help<br />
  1860. @operato/i18n<br />
  1861. @operato/input<br />
  1862. @operato/layout<br />
  1863. @operato/popup<br />
  1864. @operato/pull-to-refresh<br />
  1865. @operato/shell<br />
  1866. @operato/styles<br />
  1867. @operato/utils<br />
  1868. @teselagen/bio-parsers<br />
  1869. @teselagen/bounce-loader<br />
  1870. @teselagen/file-utils<br />
  1871. @teselagen/liquibase-tools<br />
  1872. @teselagen/ove<br />
  1873. @teselagen/range-utils<br />
  1874. @teselagen/react-list<br />
  1875. @teselagen/react-table<br />
  1876. @teselagen/sequence-utils<br />
  1877. @teselagen/ui<br />
  1878. @thangved/callback-window<br />
  1879. @things-factory/attachment-base<br />
  1880. @things-factory/auth-base<br />
  1881. @things-factory/email-base<br />
  1882. @things-factory/env<br />
  1883. @things-factory/integration-base<br />
  1884. @things-factory/integration-marketplace<br />
  1885. @things-factory/shell<br />
  1886. @tnf-dev/api<br />
  1887. @tnf-dev/core<br />
  1888. @tnf-dev/js<br />
  1889. @tnf-dev/mui<br />
  1890. @tnf-dev/react<br />
  1891. @ui-ux-gang/devextreme-angular-rpk<br />
  1892. @ui-ux-gang/devextreme-rpk<br />
  1893. @yoobic/design-system<br />
  1894. @yoobic/jpeg-camera-es6<br />
  1895. @yoobic/yobi<br />
  1896. ace-colorpicker-rpk<br />
  1897. airchief<br />
  1898. airpilot<br />
  1899. angulartics2<br />
  1900. another-shai<br />
  1901. browser-webdriver-downloader<br />
  1902. capacitor-notificationhandler<br />
  1903. capacitor-plugin-healthapp<br />
  1904. capacitor-plugin-ihealth<br />
  1905. capacitor-plugin-vonage<br />
  1906. capacitorandroidpermissions<br />
  1907. config-cordova<br />
  1908. cordova-plugin-voxeet2<br />
  1909. cordova-voxeet<br />
  1910. create-hest-app<br />
  1911. db-evo<br />
  1912. devextreme-angular-rpk<br />
  1913. devextreme-rpk<br />
  1914. ember-browser-services<br />
  1915. ember-headless-form<br />
  1916. ember-headless-form-yup<br />
  1917. ember-headless-table<br />
  1918. ember-url-hash-polyfill<br />
  1919. ember-velcro<br />
  1920. encounter-playground<br />
  1921. eslint-config-crowdstrike<br />
  1922. eslint-config-crowdstrike-node<br />
  1923. eslint-config-teselagen<br />
  1924. globalize-rpk<br />
  1925. graphql-sequelize-teselagen<br />
  1926. json-rules-engine-simplified<br />
  1927. jumpgate<br />
  1928. koa2-swagger-ui<br />
  1929. mcfly-semantic-release<br />
  1930. mcp-knowledge-base<br />
  1931. mcp-knowledge-graph<br />
  1932. mobioffice-cli<br />
  1933. monorepo-next<br />
  1934. mstate-angular<br />
  1935. mstate-cli<br />
  1936. mstate-dev-react<br />
  1937. mstate-react<br />
  1938. ng-imports-checker<br />
  1939. ng2-file-upload<br />
  1940. ngx-bootstrap<br />
  1941. ngx-color<br />
  1942. ngx-toastr<br />
  1943. ngx-trend<br />
  1944. ngx-ws<br />
  1945. oradm-to-gql<br />
  1946. oradm-to-sqlz<br />
  1947. ove-auto-annotate<br />
  1948. pm2-gelf-json<br />
  1949. printjs-rpk<br />
  1950. react-complaint-image<br />
  1951. react-jsonschema-form-conditionals<br />
  1952. react-jsonschema-form-extras<br />
  1953. react-jsonschema-rxnt-extras<br />
  1954. remark-preset-lint-crowdstrike<br />
  1955. rxnt-authentication<br />
  1956. rxnt-healthchecks-nestjs<br />
  1957. rxnt-kue<br />
  1958. swc-plugin-component-annotate<br />
  1959. tbssnch<br />
  1960. teselagen-interval-tree<br />
  1961. tg-client-query-builder<br />
  1962. tg-redbird<br />
  1963. tg-seq-gen<br />
  1964. thangved-react-grid<br />
  1965. ts-gaussian<br />
  1966. ts-imports<br />
  1967. tvi-cli<br />
  1968. ve-bamreader<br />
  1969. ve-editor<br />
  1970. verror-extra<br />
  1971. voip-callkit<br />
  1972. wdio-web-reporter<br />
  1973. yargs-help-output<br />
  1974. yoo-styles</p>
  1975. ]]></content:encoded>
  1976. <wfw:commentRss>https://securelist.com/shai-hulud-worm-infects-500-npm-packages-in-a-supply-chain-attack/117547/feed/</wfw:commentRss>
  1977. <slash:comments>0</slash:comments>
  1978. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/25072805/shai-hulud-featured-image.jpg" width="2000" height="1000"><media:keywords>full</media:keywords></media:content>
  1979. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/25072805/shai-hulud-featured-image-1024x512.jpg" width="1024" height="512"><media:keywords>large</media:keywords></media:content>
  1980. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/25072805/shai-hulud-featured-image-300x150.jpg" width="300" height="150"><media:keywords>medium</media:keywords></media:content>
  1981. <media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2025/09/25072805/shai-hulud-featured-image-150x150.jpg" width="150" height="150"><media:keywords>thumbnail</media:keywords></media:content>
  1982. </item>
  1983. </channel>
  1984. </rss>
  1985.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=https%3A//securelist.com/feed/

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda