www.welivesecurity.com
Open in
urlscan Pro
2a02:26f0:780::210:ca08
Public Scan
URL:
https://www.welivesecurity.com/en/eset-research/moustachedbouncer-espionage-against-foreign-diplomats-in-belarus/
Submission: On November 07 via manual from IN — Scanned from DE
Submission: On November 07 via manual from IN — Scanned from DE
Form analysis
3 forms found in the DOMGET https://www.welivesecurity.com/en/search
<form data-v-ed6a42ae="" id="searchform" method="get" action="https://www.welivesecurity.com/en/search" autocomplete="off" role="search">
<div data-v-ed6a42ae="" class="search-area"><input data-v-ed6a42ae="" name="term" class="searchbar-input form-control" type="text"
placeholder="Search WeLiveSecurity"><a data-v-ed6a42ae="" class="search-icon-trigger"><span data-v-ed6a42ae="" class="search-icon"></span></a><!----><!----></div><!---->
</form>
GET https://www.welivesecurity.com/en/search
<form data-v-ed6a42ae="" id="searchform" method="get" action="https://www.welivesecurity.com/en/search" autocomplete="off" role="search">
<div data-v-ed6a42ae="" class="search-area"><input data-v-ed6a42ae="" name="term" class="searchbar-input form-control" type="text"
placeholder="Search WeLiveSecurity"><a data-v-ed6a42ae="" class="search-icon-trigger"><span data-v-ed6a42ae="" class="search-icon"></span></a><!----><!----></div><!---->
</form>
POST https://enjoy.eset.com/pub/rf
<form action="https://enjoy.eset.com/pub/rf" class="basic-searchform col-md-12 col-sm-12 col-xs-12 no-padding newsletter px-0" target="_blank" method="post" role="search">
<div class="search-input clearfix">
<input type="text" name="EMAIL_ADDRESS_" value="" placeholder="Your Email Address" required="">
<input type="checkbox" id="TOPIC" name="TOPIC" value="We Live Security Ukraine Newsletter">
<label for="TOPIC">Ukraine Crisis newsletter</label>
<input type="checkbox" id="NEWSLETTER" name="NEWSLETTER" value="We Live Security">
<label for="NEWSLETTER">Regular weekly newsletter</label>
<input type="hidden" name="_ri_" value="X0Gzc2X%3DAQpglLjHJlTQGgXv4jDGEK4KW2uhw0qgUzfwuivmOJOPCgzgo9vsI3VwjpnpgHlpgneHmgJoXX0Gzc2X%3DAQpglLjHJlTQGzbD6yU2pAgzaJM16bkTA7tOwuivmOJOPCgzgo9vsI3">
<input type="hidden" name="_ei_" value="Ep2VKa8UKNIAPP_2GAEW0bY">
<input type="hidden" name="_di_" value="m0a5n0j02duo9clmm4btuu5av8rdtvqfqd03v1hallrvcob47ad0">
<input type="hidden" name="EMAIL_PERMISSION_STATUS_" value="0">
<input type="hidden" name="CONTACT_SOURCE_MOST_RECENT" value="WLS_Subscribe_Form">
<button type="submit" class="redirect-button primary">Subscribe</button>
</div>
</form>
Text Content
Award-winning news, views, and insight from the ESET security community English Español Deutsch Português Français * * TIPS & ADVICE -------------------------------------------------------------------------------- * BUSINESS SECURITY -------------------------------------------------------------------------------- * ESET RESEARCH About ESET ResearchBlogpostsPodcastsWhite papersThreat reports -------------------------------------------------------------------------------- * FEATURED Ukraine crisis – Digital security resource centerWe Live ProgressCOVID-19ResourcesVideos -------------------------------------------------------------------------------- * TOPICS Digital SecurityScamsHow toPrivacyCybercrimeKids onlineSocial mediaInternet of ThingsMalwareRansomwareSecure codingMobile securityCritical infrastructureThreat research -------------------------------------------------------------------------------- * ABOUT US About WeLiveSecurityOur ExpertsContact Us -------------------------------------------------------------------------------- * English EspañolDeutschPortuguêsFrançais * Award-winning news, views, and insight from the ESET security community ESET Research MOUSTACHEDBOUNCER: ESPIONAGE AGAINST FOREIGN DIPLOMATS IN BELARUS Long-term espionage against diplomats, leveraging email-based C&C protocols, C++ modular backdoors, and adversary-in-the-middle (AitM) attacks… Sounds like the infamous Turla? Think again! Matthieu Faou 10 Aug 2023 • , 29 min. read MoustachedBouncer is a cyberespionage group discovered by ESET Research and first publicly disclosed in this blogpost. The group has been active since at least 2014 and only targets foreign embassies in Belarus. Since 2020, MoustachedBouncer has most likely been able to perform adversary-in-the-middle (AitM) attacks at the ISP level, within Belarus, in order to compromise its targets. The group uses two separate toolsets that we have named NightClub and Disco. > Key points of this report: > > * MoustachedBouncer has been operating since at least 2014. > * We assess with medium confidence that they are aligned with Belarus's > interests. > * MoustachedBouncer specializes in the espionage of foreign embassies in > Belarus. > * MoustachedBouncer has used the adversary-in-the-middle technique since 2020 > to redirect captive portal checks to a C&C server and deliver malware > plugins via SMB shares. > * We believe that MoustachedBouncer uses a lawful interception system (such > as SORM) to conduct its AitM operations. > * We assess with low confidence that MoustachedBouncer is closely cooperating > with Winter Vivern, another group targeting European diplomats but using > different TTPs. > * Since 2014, the group has been operating a malware framework that we have > named NightClub. It uses the SMTP and IMAP (email) protocols for C&C > communications. > * Starting in 2020, the group has been using, in parallel, a second malware > framework we have named Disco. > * Both NightClub and Disco support additional spying plugins including a > screenshotter, an audio recorder, and a file stealer. > The group's intricate tactics, techniques and procedures were also discussed > on the ESET Research Podcast. Just press play to learn more from ESET's > Director of Threat Research Jean-Ian Boutin and ESET Distinguished Researcher > Aryeh Goretsky. VICTIMOLOGY According to ESET telemetry, the group targets foreign embassies in Belarus, and we have identified four different countries whose embassy staff have been targeted: two from Europe, one from South Asia, and one from Africa. The key dates are shown in Figure 1. Figure 1. Timeline of MoustachedBouncer activities ATTRIBUTION While we track MoustachedBouncer as a separate group, we have found elements that make us assess with low confidence that they are closely collaborating with another group known as Winter Vivern. The latter was discovered in 2021 and is still active as of 2023. In March 2023, Winter Vivern used a known XSS vulnerability (CVE-2022-27926) in the Zimbra mail portal in order to steal webmail credentials of diplomats of several European countries. This campaign was publicly disclosed by Proofpoint researchers. MoustachedBouncer’s activity spans from 2014 to 2022 and the TTPs of the group have evolved over time. For example, we have first seen them use AitM attacks only in 2020. However, the targeted vertical has stayed the same. Table 1 shows the characteristics of each campaign. Given these elements, we assess with high confidence that they are all linked to MoustachedBouncer. Table 1. Connections between the MoustachedBouncer campaigns VirusTotal (2014) Victim A (2017) Victim B (2020-2022) Victim C (2020-2022) Victim D (2021-2022) NightClub implant X X X NightClub plugins X X X Disco implant X X SharpDisco dropper X Compromise via AitM ? ? ? ? X Malware delivery via AitM on SMB shares X X Victims: foreign embassies in Belarus ? X X X X COMPROMISE VECTOR: AITM In this section, we detail the initial access for Disco. We don’t yet know the initial access method MoustachedBouncer uses to install NightClub. FAKE WINDOWS UPDATE To compromise their targets, MoustachedBouncer operators tamper with their victims’ internet access, probably at the ISP level, to make Windows believe it’s behind a captive portal. Windows 10 checks whether it’s able to access the internet with an HTTP request to http://www.msftconnecttest.com/connecttest.txt. In case the answer is not Microsoft Connect Test, a browser window is opened to http://www.msftconnecttest.com/redirect . For IP ranges targeted by MoustachedBouncer, the network traffic is tampered at the ISP level, and the latter URL redirects to a seemingly legitimate, but fake, Windows Update URL, http://updates.microsoft[.]com/. Hence, the fake Windows Update page will be displayed to a potential victim upon network connection. The fake update page is shown in Figure 2. The text we observed is in Russian, most likely because that is the main language used in Belarus, but it is possible that versions in other languages exist. The page indicates that there are critical system security updates that must be installed. Figure 2. Fake Windows Update page Note that it is using unencrypted HTTP and not HTTPS, and that the updates.microsoft[.]com subdomain does not exist on Microsoft’s nameservers, so it does not resolve on the open internet. During the attack, this domain resolved to 5.45.121[.]106 on the target’s machine. This IP address is used for parking domains and is unrelated to Microsoft. Although this is an internet-routable IP address, traffic to this IP never reaches the internet while the AitM attack is ongoing. Both the DNS resolutions and the HTTP replies were injected in transit, probably at the ISP level. An important point is that the adversary-in-the-middle (AitM) technique only occurs against a few selected organizations (perhaps just embassies), not countrywide. It is not possible to reproduce the redirection by simply exiting from a random IP address in Belarus. MALWARE DELIVERY The HTML page, shown in Figure 2, loads JavaScript code from http://updates.microsoft[.]com/jdrop.js. This script first calls setTimeout to execute the function jdrop one second after the page has loaded. That function (see Figure 3) displays a modal window with a button named Получить обновления (translation: Get updates). Figure 3. jdrop function A click on the button executes the update function, shown in Figure 4. Figure 4. update function This function triggers the download of a fake Windows Update installer from the legitimate-seeming URL http://updates.microsoft[.]com/MicrosoftUpdate845255.zip. It also displays some instructions to install the update: Для установки обновлений, скачайте и запустите "MicrosoftUpdate845255.msi". (translation: To install updates, download and run "MicrosoftUpdate845255.msi"). We were unable to retrieve the downloaded MicrosoftUpdate845255.zip file but our telemetry shows it contains a malicious executable named MicrosoftUpdate845255.exe. Written in Go, it creates a scheduled task that executes \\35.214.56[.]2\OfficeBroker\OfficeBroker.exe every minute. Like the path suggests, it fetches the executable via SMB from 35.214.56[.]2. This IP address belongs to a Google Cloud customer, but just like the HTTP server, we believe that SMB replies are injected on the fly via AitM and that the attackers don’t control the actual internet-routable IP address. We have also observed the following SMB servers, intercepted via AitM: * \\209.19.37[.]184 * \\38.9.8[.]78 * \\59.6.8[.]25 We have observed this behavior in two separate ISP networks: Unitary Enterprise A1 and Beltelecom. This suggests that those ISPs may not provide full data confidentiality and integrity. We strongly recommend that foreign organizations in Belarus use an end-to-end encrypted VPN tunnel, ideally out-of-band (i.e., not from the endpoint), providing internet connectivity from a trusted network. Figure 5 depicts our hypothesis about the compromise vector and the traffic interception. Figure 5. Compromise via AitM scenario AITM – GENERAL THOUGHTS The AitM scenario reminds us of the Turla and StrongPity threat actors who have trojanized software installers on the fly at the ISP level. Usually, this initial access method is used by threat actors operating in their own country because it requires significant access inside the internet service providers, or their upstream providers. In many countries, security services are allowed to perform so-called “lawful interception” using special devices installed on the ISPs’ premises. In Russia, a law from 2014 requires ISPs to install devices called SORM-3 that enable the Federal Security Service (FSB) to conduct targeted surveillance. The devices have deep packet inspection (DPI) capabilities and were likely used by Turla in its Mosquito campaign. In 2018, the Citizen Lab revealed that DPI devices developed by the Canadian company Sandvine were used to modify HTTP traffic in Turkey and Egypt. In Turkey, the devices were allegedly used to redirect internet users to a malicious server when they tried to download certain Windows applications, which is in line with StrongPity activities. In Egypt, those devices were allegedly used to inject ads and cryptocurrency mining scripts in order to generate money. In 2020, a Bloomberg article revealed that Belarus’s National Traffic Exchange Center bought the same Sandvine DPI equipment, but according to a Cyberscoop article the contract was cancelled in September 2020. According to a report by Amnesty International published in 2021, “Under Belarusian law, all telecommunications providers in the country must make their hardware compatible with the SORM system”. They also state that “The SORM system allows the authorities direct, remote-control access to all user communications and associated data without notifying the provider”. We assess with low confidence that MoustachedBouncer uses this SORM system to conduct its operations. While the compromise of routers in order to conduct AitM on embassy networks cannot be fully discarded, the presence of lawful interception capabilities in Belarus suggests the traffic mangling is happening at the ISP level rather than on the targets’ routers. IMPLANTS: NIGHTCLUB AND DISCO Since 2014, the malware families used by MoustachedBouncer have evolved, and a big change happened in 2020 when the group started to use AitM attacks. At the same time, it started to use much simpler tools developed in .NET and Go. In reference to NightClub, we named this new toolset Disco. MoustachedBouncer operates the two implant families in parallel, but on a given machine, only one is deployed at a time. We believe that Disco is used in conjunction with AitM attacks while NightClub is used for victims where traffic interception at the ISP level isn’t possible because of a mitigation such as the use of an end-to-end encrypted VPN where internet traffic is routed outside of Belarus. DISCO As mentioned in the previous section, a fake Windows Update page delivers the first stage (SHA-1: E65EB4467DDB1C99B09AE87BA0A964C36BAB4C30). This is a simple dropper written in Go that creates a scheduled task to execute \\35.214.56[.]2\OfficeBroker\OfficeBroker.exe every minute. OfficeBroker.exe is downloaded over the SMB protocol via AitM attack. The dropper’s main function is shown in Figure 6. Figure 6. Main function of the Go dropper Finally, the dropper does a DNS query for windows.system.update[.]com. This domain does not exist but the DNS request is probably intercepted via AitM, and is likely a beacon to notify the operators that the machine has been successfully compromised. We were unable to retrieve the OfficeBroker.exe file, but it is very likely that it acts as a downloader, since we have observed further plugins being executed from SMB shares. The plugins are developed in Go and are rather simple because they mostly rely on external Go libraries. Table 2 summarizes the different plugins. Table 2. Go plugins used by MoustachedBouncer in 2021–2022 Download URL / Path on disk Description \\209.19.37[.]184\driverpack\aact.exe Takes screenshots using the kbinani/screenshot library. Screenshots are saved in .\AActdata\<d>_<s>.dat (on the SMB share) where <d> is the active display number and <s> the date. It sleeps 15 seconds between each screenshot. C:\Users\Public\driverpack\driverpackUpdate.exe Executes PowerShell scripts with powershell.exe -NoProfile -NonInteractive <command>, where <command> is read from the file .\idata. The output is written in .\odata. C:\Users\Public\driverpack\sdrive.exe Executes C:\Users\Public\driverpack\driverpackUpdate.exe (the plugin above) using elevated rights via CVE-2021-1732. The code was likely inspired by a PoC on GitHub and uses the zydis code generation library. \\209.19.37[.]184\driverpack\officetelemetry.exe A reverse proxy strongly inspired by the GitHub repository revsocks. We were unable to retrieve the command line parameters with the proxy IP address. \\38.9.8[.]78\driverpack\DPU.exe Another sample of the PowerShell plugin. %userprofile%\appdata\nod32update\nod32update.exe Another sample of the reverse proxy plugin. \\59.6.8[.]25\outlooksync\outlooksync.exe Takes screenshots; it is similar to the first plugin. Images are saved in ./logs/${DATETIME}.dat. \\52.3.8[.]25\oracle\oracleTelemetry.exe Screenshot plugin packed with Themida. Interestingly, the plugins also use SMB shares for data exfiltration. There is no C&C server outside the attackers’ premises to look at or to take down. There also seems to be no way to reach that C&C server from the internet. This gives high resiliency to the attackers’ network infrastructure. SHARPDISCO AND NIGHTCLUB PLUGINS In January 2020 we observed a MoustachedBouncer dropper, which we named SharpDisco, being downloaded from https://mail.mfa.gov.<redacted>/EdgeUpdate.exe by a Microsoft Edge process. It is not clear how attackers were able to tamper with HTTPS traffic, but it is possible an invalid TLS certificate warning was shown to the victim. Another possibility is that MoustachedBouncer compromised this governmental website. SHARPDISCO (SHA-1: A3AE82B19FEE2756D6354E85A094F1A4598314AB) SharpDisco is a dropper developed in C#. It displays a fake update window, shown in Figure 7, while creating two scheduled tasks in the background. Figure 7. Fake Microsoft Edge update window These scheduled tasks are: WINCMDA.EXE and WINCMDB.EXE are probably just cmd.exe renamed. Every minute, the task reads what is in \\24.9.51[.]94\EDGEUPDATE\EDGEAIN (on the SMB share), pipes it to cmd.exe, and writes the output to \\24.9.51[.]94\EDGEUPDATE\EDGEAOUT. It is the same for the second task, but with the EDGEBIN and EDGEBOUT files. From a higher viewpoint, those tasks are reverse shells with a one-second latency. Then, as shown in Figure 8, the dropper sends a DNS request for an unregistered domain, edgeupdate-security-windows[.]com. This is similar to what the 2022 Disco dropper does. Figure 8. Dropper used in 2020 ESET telemetry shows that the reverse shell was used to drop a genuine Python interpreter in C:\Users\Public\WinTN\WinTN.exe. We then observed two plugins being dropped on disk by cmd.exe, which means they were likely dropped by the reverse shell as well. The two plugins are: * A recent-files stealer in C:\Users\Public\WinSrcNT\It11.exe * An external drive monitor in C:\Users\Public\It3.exe It is interesting to note that those plugins share code with NightClub (described in the section NightClub – 2017 (SHA-1: F92FE4DD679903F75ADE64DC8A20D46DFBD3B277) below). This allowed us to link the Disco and NightClub toolsets. RECENT-FILES STEALER (SHA-1: 0DAEA89F91A55F46D33C294CFE84EF06CE22E393) This plugin is a Windows executable named It11.exe. We believe it was executed via the reverse shell mentioned above. There is no persistence mechanism implemented in the plugin. It gets the files recently opened on the machine by reading the content of the folder %USERPROFILE%\Recent (on Windows XP) or of %APPDATA%\Microsoft\Windows\Recent (in newer Windows versions). Those folders contain LNK files, each pointing to a recently opened file. The plugin embeds its own LNK format parser in order to extract the path to the original file. We were unable to make this plugin work, but static analysis shows that the files are exfiltrated to the SMB share \\24.9.51[.]94\EDGEUPDATE\update\. The plugin maintains a list of already exfiltrated files, and their CRC-32 checksum, in %TEMP%\index.dat. This likely avoids retransmitting the same file more than once. EXTERNAL DRIVE MONITOR (SHA-1: 11CF38D971534D9B619581CEDC19319962F3B996) This plugin is a Windows executable named It3.exe. As with the recent-files stealer, it doesn’t implement any persistence mechanism. The plugin calls GetLogicalDrives in a loop to get a list of all connected drives, including removable ones such as USB keys. Then, it does a raw copy of the NTFS volume of each removable drive and writes it in the current working directory, C:\Users\Public\ in our example. The filename is a randomly generated string of six to eight alphanumeric characters, for example heNNYwmY. It maintains a log file in <working directory>\index.dat with the CRC-32 checksums of the copied disks. The plugin doesn’t appear to have any exfiltration capabilities. It is likely that the staged drive dumps are later retrieved using the reverse shell. NIGHTCLUB Since 2014, MoustachedBouncer has been using a malware framework we named NightClub because it contains a C++ class named nightclub. We found samples from 2014, 2017, 2020, and 2022. This section describes the evolution of NightClub from a simple backdoor to a fully modular C++ implant. In summary, NightClub is an implant family using emails for its C&C communications. Since 2016, additional modules could be delivered by email to extend its spying capabilities. NIGHTCLUB – 2014 This is the oldest known version of NightClub. We found a dropper and an orchestrator. The dropper (SHA-1: 0401EE7F3BC384734BF7E352C4C4BC372840C30D) is an executable named EsetUpdate-0117583943.exe, and it was uploaded to VirusTotal from Ukraine on 2014-11-19. We don’t know how it was distributed at that time. The main function, illustrated in Figure 9, loads the resource MEMORY and writes its content in %SystemRoot%\System32\creh.dll. It is stored in cleartext in the PE resource. Figure 9. Main function of the dropper Then, the dropper modifies the Creation, Access, and Write timestamps of creh.dll to those of the genuine Windows DLL user32.dll. Finally, it creates a Windows service named WmdmPmSp and sets, in the registry, its ServiceDll to %SystemRoot%\System32\creh.dll – see Figure 10. Figure 10. Modification of the value ServiceDll The previously dropped DLL, creh.dll (SHA-1: 5B55250CC0DA407201B5F042322CFDBF56041632) is the NightClub orchestrator. It has a single export named ServiceMain and its PDB path is D:\Programming\Projects\Work\SwampThing\Release\Win32\WorkingDll.pdb. It is written in C++ and the names of some methods and classes are present in the RTTI data – see Figure 11. Figure 11. Method and class names from the RTTI data Some of the strings are encrypted using the following linear congruential generator (LCG): staten+1 = (690069 × staten + 1) mod 232. For each encrypted string, a seed (state0) between 0 and 255 is provided. To decrypt a string, the staten is subtracted from each encrypted byten. An example of an encrypted string structure is shown in Figure 12. Figure 12. Encrypted string format A non-encrypted log file is present in C:\Windows\System32\servdll.log. It contains very basic information about the initialization of the orchestrator – see Figure 13. Figure 13. Log file NightClub has two main capabilities: • Monitoring files • Exfiltrating data via SMTP (email) FILE MONITOR Functionality implemented here is very close to that of the recent file monitor plugin seen in 2020 and described above. It also browses the directories %USERPROFILE%\Recent on Windows XP, and in newer Windows versions %APPDATA%\Microsoft\Windows\Recent, and implements the same LNK parser – see Figure 14 and Figure 15. Figure 14. LNK parser (2014 sample – 5B55250CC0DA407201B5F042322CFDBF56041632) Figure 15. LNK parser (2020 sample – 0DAEA89F91A55F46D33C294CFE84EF06CE22E393) The files retrieved from the LNK files are copied to %TEMP%\<original filename>.bin. Note that unlike the 2020 variant, only files with extensions .doc, .docx, .xls, .xslx, or .pdf are copied. It also monitors removable drives in a loop, in order to steal files from them. SMTP C&C COMMUNICATIONS NightClub uses the SMTP protocol to exfiltrate data. Even if C&C communication by email is not unique to MoustachedBouncer and is also used by other adversaries such as Turla (see LightNeuron and the Outlook backdoor), it is quite rare. The code is based on the CSmtp project available on GitHub. The email accounts’ information is hardcoded, encrypted with the LCG algorithm. In the sample we analyzed, the mail configuration is: • SMTP server: smtp.seznam.cz • Sender address: glen.morriss75@seznam[.]cz • Sender password: <redacted> • Recipient address: SunyaF@seznam[.]cz seznam.cz is a Czech web portal offering a free webmail service. We believe the attackers created their own email accounts, instead of compromising legitimate ones. NightClub exfiltrates the files previously copied to %TEMP% by the file monitor functionality (FileMonitor in Figure 11). They’re encoded in base64 and added as an attachment. The attachment name is the original filename with the .bin extension. Figure 16 shows the exfiltration of a file via SMTP. NightClub authenticates using the credentials for the glen.morriss75@seznam[.]cz account and sends an email to SunyaF@seznam[.]cz with the stolen file attached. Figure 16. TCP stream of the SMTP communication from our test machine Note that some headers that might look suspicious at first sight are the defaults from the CSmtp project, so they are probably not distinctive. These include: • X-Mailer: The Bat! (v3.02) Professional • Content-Type: multipart/mixed; boundary="__MESSAGE__ID__54yg6f6h6y456345" The Bat! is an email client widely used in Eastern Europe. As such, the X-Mailer header likely blends in with email traffic in Belarus. NIGHTCLUB – 2017 (SHA-1: F92FE4DD679903F75ADE64DC8A20D46DFBD3B277) In 2017, we found a more recent version of NightClub, which was compiled on 2017-06-05. On the victim’s machine, it was located at C:\Windows\System32\metamn.dll. Its filename in the DLL export directory is DownloaderService.dll, and it has a single export named ServiceMain. It contains the PDB path D:\AbcdMainProject\Rootsrc\Projects\MainS\Ink\Release\x64\EtfFavoriteFinder.pdb. To persist, it creates a Windows service named WmdmPmSp, as in previous versions. Unfortunately, we have not been able to recover the dropper. This NightClub version also includes a few C++ class and method names, including nightclub, in the RTTI data – see Figure 17. Figure 17. Method and class names from the RTTI data of the 2017 NightClub version As in previous versions, C&C communications use the SMTP protocol, via the CSmtp library, with hardcoded credentials. In the sample we analyzed, the mail configuration is: • SMTP server: smtp.mail.ru • Sender address: fhtgbbwi@mail[.]ru • Sender password: [redacted] • Recipient address: nvjfnvjfnjf@mail[.]ru The main difference is that they switched the free email provider from Seznam.cz to Mail.ru. This NightClub version uses external plugins stored in the folder %APPDATA%\NvmFilter\. They are DLLs named <random>.cr (e.g., et2z7q0FREZ.cr) with a single export named Starts. We have identified two plugins: a keylogger and a file monitor. KEYLOGGER (SHA-1: 6999730D0715606D14ACD19329AF0685B8AD0299) This plugin was stored in %APPDATA%\NvmFilter\et2z7q0FREZ.cr and is a DLL with one export, Starts. It contains the PDB path D:\Programming\Projects\Autogen\Kh\AutogenAlg\Release\x64\SearchIdxDll.pdb and was developed in C++. RTTI data shows a few class names – see Figure 18. Figure 18. Method and class names from the RTTI data of the NightClub keylogger plugin The keylogger implementation is rather traditional, using the Windows GetKeyState API function – see Figure 19. Figure 19. NightClub keylogger The keylogger maintains a cleartext log file in %TEMP%\uirtl.tmp. It contains the date, the title of the application, and the logged keystrokes for this specific application. An example, which we generated, is provided in Figure 20. Figure 20. Example of the output of the keylogger (generated by us) FILE MONITOR (SHA-1: 6E729E84C7672F048ED8AE847F20A0219E917FA) This plugin was stored in %APPDATA%\NvmFilter\sTUlsWa1.cr and is a DLL with a single export named Starts. Its PDB path, D:\Programming\Projects\Autogen\Kh\AutogenAlg\Release\x64\FileMonitoringModule.pdb, has not been stripped, and it reuses code from the 2014 and 2020 file monitors, described above. It monitors drives and recent files, and copies files for exfiltration to %TEMP%\AcmSym\rm. Its log file is stored in %TEMP%\indexwti.sxd. NIGHTCLUB – 2020–2022 In 2020-11, we observed a new version of NightClub deployed in Belarus, on the computers of the diplomatic staff of a European country. In 2022-07, MoustachedBouncer again compromised some of the same computers. The 2020 and 2022 versions of NightClub are almost identical, and the compromise vector remains unknown. Its architecture is slightly different from the previous versions, as the orchestrator also implements networking functions. The second component, which its developers call the module agent, is only responsible for loading the plugins. All samples were found in the folder %APPDATA%\microsoft\def\ and are written in C++ with statically linked libraries such as CSmtp or cpprestsdk. As a result, the executables are quite large – around 5MB. ORCHESTRATOR On the victims’ machines, both orchestrator variants (SHA-1: 92115E21E565440B1A26ECC20D2552A214155669 and D14D9118335C9BF6633CB2A41023486DACBEB052) were named svhvost.exe. We believe MoustachedBouncer tried to masquerade as the name of the legitimate executable svchost.exe. For persistence, it creates a service named vAwast. Contrary to previous versions, to encrypt the strings they simply add 0x01 to each byte. For example, the string cmd.exe would be encrypted as dne/fyf. Another difference is that the configuration is stored in an external file, rather than hardcoded in the binary. It is stored in the hardcoded path %APPDATA%\Microsoft\def\Gfr45.cfg and the data is decrypted with a private 2048-bit RSA key (see Figure 21) using the function BCryptImportKeyPair and BCryptDecrypt. Figure 21. Hardcoded private RSA key The config is formatted in JSON, as shown in Figure 22. Figure 22. NightClub external configuration format The most important keys are transport and modules. The former contains information about the mailbox used for C&C communications, as in the previous versions. The latter contains the list of modules. MODULE AGENT The two variants of the module agent (SHA-1: DE0B38E12C0AF0FD63A67B03DD1F8C1BF7FA6128 and E6DE72516C1D4338D7E45E028340B54DCDC7A8AC) were named schvost.exe, which is another imitation of the svchost.exe filename. This component is responsible for starting the modules that are specified in the configuration. They are DLLs, each with an export named Start or Starts. They are stored on disk unencrypted with the .ini extension, but actually are DLLs. MODULES Over the course of our investigation, we found five different modules: an audio recorder, two almost identical screenshotters, a keylogger, and a DNS backdoor. For all of them: their configuration, which is formatted in JSON, is passed as an argument to the Start or Starts function. By default, the output of the plugin is written in %TEMP%\tmp123.tmp. This can be changed using the config field file. Table 3 shows the different plugins. Table 3. NightClub plugins DLL export name Configuration Description NotifyLoggers.dll { "name":"<value>", "enabled":"<value>", "max_size":"<value>", "file":"<value>", "chk_t":"<value>", "r_d":"<value>", "f_hs":"<value>", "t_hs":"<value>" } An audio recorder that uses the Lame library, and mciSendStringW to control the audio device. The additional configuration fields are likely used to specify options for Lame. MicroServiceRun.dll { "name":"<value>", "enabled":"<value>", "max_size":"<value>", "file":"<value>" "capture_on_key_press":"<value>", "period_in_sec":"<value>", "quality":"<value>", "app_keywords":"<value>" } A screenshotter that uses CreateCompatibleDC and GdipSaveImageToStream and writes captured images in file to disk. If app_keywords is not empty, it uses GetForegroundWindow to check the name of the active Window and capture it only if it matches app_keywords. JobTesterDll.dll { "name":"<value>", "enabled":"<value>", "max_size":"<value>", "file":"<value>" } A keylogger that uses the GetKeyState API. It writes the log in file to disk and the format is <Date><Title bar><content>. ParametersParserer.dll { "name":"<value>", "enabled":"<value>", "max_size":"<value>", "file":"<value>", "cc_server_address":"<value>" } A DNS-tunneling backdoor. cc_server_address specifies the IP address of a DNS server to which requests are sent. More details follow. The DNS-tunneling backdoor (ParametersParserer.dll) uses a custom protocol to send and receive data from a malicious DNS server (cc_server_address). Figure 23 shows that the DNS request is sent to the IP address provided in the configuration, using the pExtra parameter of DnsQuery_A. Figure 23. DNS request to the C&C server The plugin adds the data to exfiltrate as part of the subdomain name of the domain that is used in the DNS request (pszName above). The domain is always 11.1.1.cid and the data is contained in the subdomain. It uses the following format, where x is the letter, not some variable: x + <modified base64(buffer)> + x.11.1.1.cid For example, the first DNS request the plugin sends is xZW1wdHkx.11.1.1.cid, where ZW1wdHk decodes to empty. Note that the base64 function is not standard. It removes the =, if any, from the result of the base64 encoding, and also replaces / characters with -s and + characters with -p. This is to create valid subdomains, because standard base64 encoding output can include +, / and = characters, all of which are invalid in domain names and could be detected in network traffic. Then, the plugin reads the result that should be one or many TXT DNS records, since the flag DNS_TYPE_TEXT is passed to DnsQuery_A. Microsoft names the underlying structure DNS_TXT_DATAA. It contains an array of strings, which are concatenated to compute the output buffer. Figure 24. The plugin reads the TXT record The expected format of the reply is: x + <argument encoded with modified base64> + x.<cmd_id>.<unknown integer>.1.<cmd_name> This is similar to the format of the requests. The <argument encoded with modified base64> also uses the custom base64 encoding without = and with -p for + and -s for /. <cmd_name> is an arbitrary string that is not used by the backdoor; it’s likely used by the operators to keep track of the different commands. <cmd_id> is an integer that corresponds to a command in the backdoor switch statement. For example, if the operators wanted to execute calc.exe, the DNS C&C server would send the reply xYzpcd2luZG93c1xzeXN0ZW0zMlxjYWxjLmV4ZQx.27.2.1.calc, where Yzpcd2luZG93c1xzeXN0ZW0zMlxjYWxjLmV4ZQ decodes to c:\windows\system32\calc.exe and 27 is the command ID to create a new process. All commands supported by this backdoor are detailed in Table 4. Table 4. Commands implemented by the DNS backdoor ID Description 0x15 (21) Copy a directory (from a source to a destination) 0x16 (22) Move a file (from a source to a destination) 0x17 (23) Remove a file or a directory 0x18 (24) Search a file for a given pattern (Note: we are unsure about the exact behavior of this command) 0x19 (25) Write a buffer to a file 0x1A (26) Read a file 0x1B (27) Create a process The result of the commands is exfiltrated back to the attacker using DNS requests, as detailed above. The only difference is that 11 is replaced by 12 in the domain name, as shown in this example: xdGltZW91dAx.12.1.1.cid. In this case, the plugin sent the message timeout to the C&C server. CONCLUSION MoustachedBouncer is a skilled threat actor targeting foreign diplomats in Belarus. It uses quite advanced techniques for C&C communications including network interception at the ISP level for the Disco implant, emails for the NightClub implant, and DNS in one of the NightClub plugins. The main takeaway is that organizations in foreign countries where the internet cannot be trusted should use an end-to-end encrypted VPN tunnel to a trusted location for all their internet traffic in order to circumvent any network inspection devices. > For any inquiries about our research published on WeLiveSecurity, please > contact us at threatintel@eset.com. > ESET Research offers private APT intelligence reports and data feeds. For any > inquiries about this service, visit the ESET Threat Intelligence page. ESET RESEARCH PODCAST If you want to know how ESET researchers named MoustachedBouncer and its tools Disco and NightClub, what makes this group worthy of the “advanced” label, or if employees of the targeted embassies could have brought the malware home from work, then listen to the latest episode of the ESET Research podcast. ESET’s Director of Threat Research Jean-Ian Boutin explains the intricacies of MoustachedBouncer to our host and ESET Distinguished Researcher Aryeh Goretsky. If you enjoy listening to cybersecurity topics, subscribe to our ESET Research podcast on Spotify, Google Podcasts, Apple Podcasts, or PodBean. IOCS FILES SHA-1 Filename Detection Description 02790DC4B276DFBB26C714F29D19E53129BB6186 index.html JS/TrojanDownloader.Agent.YJJ Fake Windows update webpage. 6EFF58EDF7AC0FC60F0B8F7E22CFE243566E2A13 jdrop.js JS/TrojanDownloader.Agent.YJJ JavaScript code that triggers the download prompt of the fake Windows update. E65EB4467DDB1C99B09AE87BA0A964C36BAB4C30 MicrosoftUpdate845255.exe WinGo/Agent.ET Disco dropper. 3A9B699A25257CBD0476CB1239FF9B25810305FE driverpackUpdate.exe WinGo/Runner.B Disco plugin. Executes PowerShell scripts. 19E3D06FBE276D4AAEA25ABC36CC40EA88435630 DPU.exe WinGo/Runner.C Disco plugin. Executes PowerShell scripts. 52BE04C420795B0D9C7CD1A4ACBF8D5953FAFD16 sdrive.exe Win64/Exploit.CVE-2021-1732.I Disco plugin. LPE exploit for CVE-2021-1732. 0241A01D4B03BD360DD09165B59B63AC2CECEAFB nod32update.exe WinGo/Agent.EV Disco plugin. Reverse proxy based on revsocks. A01F1A9336C83FFE1B13410C93C1B04E15E2996C aact.exe WinGo/Spy.Agent.W Disco plugin. Takes screenshots. C2AA90B441391ADEFAA3A841AA8CE777D6EC7E18 officetelemetry.exe WinGo/Agent.BT Disco plugin. Reverse proxy based on revsocks. C5B2323EAE5E01A6019931CE35FF7623DF7346BA oracleTelemetry.exe WinGo/Spy.Agent.W Disco plugin packed with Themida. Takes screenshots. C46CB98D0CECCB83EC7DE070B3FA7AFEE7F41189 outlooksync.exe WinGo/Spy.Agent.W Disco plugin. Takes screenshots. A3AE82B19FEE2756D6354E85A094F1A4598314AB kb4480959_EdgeUpdate.exe MSIL/TrojanDropper.Agent.FKQ Disco .NET dropper. 4F1CECF6D05571AE35ED00AC02D5E8E0F878A984 WinSrcNT.exe Win32/Nightclub.B NightClub plugin used by Disco. Steals recent files. 0DAEA89F91A55F46D33C294CFE84EF06CE22E393 It11.exe Win32/Nightclub.B NightClub plugin used by Disco. Steals recent files. 11CF38D971534D9B619581CEDC19319962F3B996 It3.exe Win32/Nightclub.B NightClub plugin used by Disco. Makes raw dumps of removable drives. F92FE4DD679903F75ADE64DC8A20D46DFBD3B277 metamn.dll Win64/Nightclub.B NightClub (2017 version). 6999730D0715606D14ACD19329AF0685B8AD0299 et2z7q0FREZ.cr Win64/Nightclub.B NightClub plugin. Keylogger. 6E729E84C7672F048ED8AE847F20A0219E917FA3 sTUlsWa1.cr Win64/Nightclub.A NightClub plugin. File stealer. 0401EE7F3BC384734BF7E352C4C4BC372840C30D EsetUpdate-0117583943.exe Win32/Nightclub.C NightClub dropper. 5B55250CC0DA407201B5F042322CFDBF56041632 creh.dll Win32/Nightclub.C NightClub (2014). D14D9118335C9BF6633CB2A41023486DACBEB052 svhvost.exe Win32/Nightclub.D Orchestrator (NightClub). E6DE72516C1D4338D7E45E028340B54DCDC7A8AC schvost.exe Win32/Nightclub.D Module agent (NightClub). 3AD77281640E7BA754E9B203C8B6ABFD3F6A7BDD nullnat.ini Win32/Nightclub.D Backdoor with DNS tunneling (NightClub plugin). 142FF0770BC6E3D077FBB64D6F23499D9DEB9093 soccix.ini Win32/Nightclub.D Keylogger (NightClub plugin). FE9527277C06D7F986161291CE7854EE79788CB8 oreonion.ini Win32/Nightclub.D Screenshotter (NightClub plugin). 92115E21E565440B1A26ECC20D2552A214155669 svhvost.exe Win32/Nightclub.D Orchestrator (NightClub). DE0B38E12C0AF0FD63A67B03DD1F8C1BF7FA6128 schvost.exe Win32/Nightclub.D Module agent (NightClub). D2B715A72BBA307CC9BF7690439D34F62EDF1324 sysleg.ini Win32/Nightclub.D Records audio (NightClub plugin). DF8DED42F9B7DE1F439AEC50F9C2A13CD5EB1DB6 oreonion.ini Win32/Nightclub.D Takes screenshots (NightClub plugin). C&C SERVERS IP Domain First seen Comment 185.87.148[.]86 centrocspupdate[.]com November 3, 2021 Suspected NightClub C&C server. 185.87.151[.]130 ocsp-atomsecure[.]com November 11, 2021 Suspected NightClub C&C server. 45.136.199[.]67 securityocspdev[.]com July 5, 2022 NightClub C&C server. 45.136.199[.]129 dervasopssec[.]com October 12, 2022 Suspected NightClub C&C server. “FAKE” DOMAINS USED IN AITM Note: These domains are used in a context where DNS queries are intercepted before reaching the internet. They do not resolve outside the context of the AitM attack. windows.network.troubleshooter[.]com updates.microsoft[.]com SMB SHARE IP ADDRESSES WHILE AITM IS ONGOING Note: These IP addresses are used in a context where traffic to them is intercepted before reaching the internet. These internet-routable IP addresses are not malicious outside the context of the AitM attack. 24.9.51[.]94 35.214.56[.]2 38.9.8[.]78 52.3.8[.]25 59.6.8[.]25 209.19.37[.]184 Email addresses fhtgbbwi@mail[.]ru nvjfnvjfnjf@mail[.]ru glen.morriss75@seznam[.]cz SunyaF@seznam[.]cz MITRE ATT&CK TECHNIQUES This table was built using version 13 of the MITRE ATT&CK framework. Tactic ID Name Description Reconnaissance T1590.005 Gather Victim Network Information: IP Addresses MoustachedBouncer operators have collected IP addresses, or address blocks, of their targets in order to modify network traffic for just those addresses. Initial Access T1189 Drive-by Compromise Disco is delivered via a fake Windows Update website. Execution T1204.002 User Execution: Malicious File Disco needs to be manually executed by the victim. Persistence T1053.005 Scheduled Task/Job: Scheduled Task Disco persists as a scheduled task that downloads an executable from a “fake” SMB share every minute. T1543.003 Create or Modify System Process: Windows Service NightClub persists as a ServiceDll of a service named WmdmPmSp. Privilege Escalation T1068 Exploitation for Privilege Escalation Disco has a plugin to exploit the CVE-2021-1732 local privilege escalation vulnerability. Defense Evasion T1140 Deobfuscate/Decode Files or Information Since 2020, NightClub has used an external configuration file encrypted with RSA. Collection T1005 Data from Local System NightClub steals recent files from the local system. T1025 Data from Removable Media NightClub steals files from the local system. T1056.001 Input Capture: Keylogging NightClub has a plugin to record keystrokes. T1113 Screen Capture NightClub and Disco each have a plugin to take screenshots. T1123 Audio Capture NightClub has a plugin to record audio. Command and Control T1071.002 Application Layer Protocol: File Transfer Protocols Disco communicates via the SMB protocol. T1071.003 Application Layer Protocol: Mail Protocols NightClub communicates via the SMTP protocol. T1071.004 Application Layer Protocol: DNS One of the NightClub plugins is a backdoor that communicates via DNS. T1132.001 Data Encoding: Standard Encoding NightClub encodes files, attached to email, in base64. T1132.002 Data Encoding: Non-Standard Encoding NightClub encodes commands and responses sent via its DNS C&C channel with a modified form of base64. T1573.001 Encrypted Channel: Symmetric Cryptography NightClub receives plugins in email attachments, encrypted using AES-CBC. T1557 Adversary-in-the-Middle MoustachedBouncer has performed AitM at the ISP level to redirect its targets to a fake Windows Update page. It has also done AitM on the SMB protocol to deliver malicious files from “fake” servers. Exfiltration T1041 Exfiltration Over C2 Channel NightClub and Disco exfiltrate data over the C&C channel (SMTP, SMB, and DNS). Impact T1565.002 Data Manipulation: Transmitted Data Manipulation MoustachedBouncer has modified the HTTP traffic from specific IP addresses at the ISP level in order to redirect its targets to a fake Windows Update page. -------------------------------------------------------------------------------- LET US KEEP YOU UP TO DATE Sign up for our newsletters Ukraine Crisis newsletter Regular weekly newsletter Subscribe RELATED ARTICLES -------------------------------------------------------------------------------- ESET Research Who killed Mozi? Finally putting the IoT zombie botnet in its grave ESET Research Who killed Mozi? Finally putting the IoT zombie botnet in its grave • -------------------------------------------------------------------------------- ESET Research, Threat Reports ESET APT Activity Report Q2–Q3 2023 ESET Research, Threat Reports ESET APT Activity Report Q2–Q3 2023 • -------------------------------------------------------------------------------- ESET Research Winter Vivern exploits zero-day vulnerability in Roundcube Webmail servers ESET Research Winter Vivern exploits zero-day vulnerability in Roundcube Webmail servers • SHARE ARTICLE DISCUSSION Award-winning news, views, and insight from the ESET security community About us ESET Contact us Privacy Policy Legal Information Manage Cookies RSS Feed Copyright © ESET, All Rights Reserved Your account, your cookies choice We and our partners use cookies to give you the best optimized online experience, analyze our website traffic, and serve you with personalized ads. You can agree to the collection of all cookies by clicking "Accept all and close" or adjust your cookie settings by clicking "Manage cookies". You also have the right to withdraw your consent to cookies anytime. For more information, please see our Cookie Policy. Accept all and close Manage cookies Essential cookies These first-party cookies are necessary for the functioning and security of our website and the services you require. They are usually set in response to your actions to enable the use of certain functionality, such as remembering your cookie preferences, logging in, or holding items in your cart. You can´t opt out of these cookies, and blocking them via a browser may affect site functionality. Basic Analytical Cookies These first-party cookies enable us to measure the number of visitors/users of our website and create aggregated usage and performance statistics with the help of our trusted partners. We use them to get the basic insight into our website traffic and our campaign performance and to solve bugs on our website. Advanced Analytical Cookies These first or third-party cookies help us understand how you interact with our website and each offered service by enriching our datasets with data from third-party tools. We use these cookies to improve our website, services, and user experience, find and solve bugs or other problems with them, and evaluate our campaigns´ effectiveness. Marketing cookies These third-party cookies allow our marketing partners to track some of your activities on our website (for example, when you download or buy our product) to learn about your interests and needs and to show you more relevant targeted ads. Accept and close Back