Meduza Stealer is an emerging malware threat known for its ability to harvest sensitive data from infected systems. First identified in 2023, it targets a wide array of personal and financial information, including login credentials, payment data, and cryptocurrency wallets. Meduza Stealer is distributed through phishing campaigns, malicious downloads, or exploits, employing evasion techniques to bypass antivirus and sandbox systems.
In this blog, the Splunk Threat Research Team analyzes multiple variants of the Meduza Stealer malware to identify its MITRE ATT&CK® tactics, techniques, and procedures (TTPs). This analysis provides valuable insights for enhancing Splunk detections and expanding security coverage, empowering organizations to better identify and mitigate threats associated with this information-stealing malware.
In this section, the Splunk Threat Research Team delves into the various stages of Meduza Stealer's operation, focusing on how it avoids detection and delivers its malicious payload.
The loader of this information-stealing malware incorporates anti-virtual machine (anti-VM) and anti-sandbox features to evade reverse engineering and prevent the detonation of its payload for analysis and detection. These capabilities are designed to hinder security researchers and automated analysis environments, further complicating efforts to understand and mitigate the threat.
Figure 1 shows a screenshot of the pseudocode for a Meduza Stealer function used to check if it is running in a virtual machine (VM). The function utilizes the CPUID instruction with RAX set to 1, which returns the 31st bit indicating whether the code is executing within a VM environment. This technique enables the malware to identify and potentially evade virtualized analysis setups.
Figure 1: Meduza Stealer Anti-VM via CPUID
Figure 2 displays screenshots of the Meduza Stealer code, which initializes checks for known virtual machine and sandbox components. These components are commonly targeted by threat actors to determine if their malware is running in a virtualized environment. If any of these components are detected, Meduza Stealer will terminate its execution to avoid analysis or detection.
Figure 2: Virtual Machine/Sandbox Component Checking
The Meduza Stealer loader employs both encoding and encryption to protect its payload. The payload is encrypted using the ChaCha20 algorithm, with both the decryption key and nonce securely handled. Additionally, the payload itself is encoded in Base64, adding another layer of obfuscation. These measures make it more challenging to analyze and detect the malware during its execution.
Figure 3 illustrates a simplified diagram of how the Meduza Stealer loader decodes and decrypts the actual payload.
Figure 3: Decryption Process
After analyzing the decryption routine of the loader, the Splunk Threat Research Team was able to implement this into a Python script to attempt decrypting all possible variants that utilize this decryption algorithm.
Figure 4: Base64 Encoded Payload, Key, and Nonce Decryption
Figure 5: Payload Extraction
Meduza Stealer incorporates geo-restriction checks to avoid targeting systems in specific regions. Before executing its malicious payload, the malware checks the system’s geographical location using the GeoID or related system settings. If the detected GeoID matches one from a predefined list—RU (Russia), KZ (Kazakhstan), BY (Belarus), GE (Georgia), TM (Turkmenistan), UZ (Uzbekistan), AM (Armenia), KG (Kyrgyzstan), MD (Moldova), or TJ (Tajikistan)—the malware will terminate itself or skip further execution.
Figure 6: The List of Regions Meduza Stealer Skipped
Want to test which GeoID your system is similar to, just like Meduza Stealer does before executing its payload? You can do so by running this PowerShell command:
$geoIdsToCheck = @('RU', 'KZ', 'BY', 'GE', 'TM', 'UZ', 'AM', 'KG', 'MD', 'TJ')
$currentGeoId = [System.Globalization.RegionInfo]::CurrentRegion.TwoLetterISORegionName
if ($geoIdsToCheck -contains $currentGeoId) {
Write-Output "GeoID '$currentGeoId' is on the restricted list. Malware execution is terminated."
} else {
Write-Output "GeoID '$currentGeoId' is not restricted. Malware would proceed with execution."
}
Figure 7: Region Checking Simulation
Meduza Stealer queries specific system registry keys related to installed and uninstalled software, such as [HKLM/HKCU]\Software\Microsoft\Windows\CurrentVersion\Uninstall and SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Install registry.
By accessing these registry locations, Meduza Stealer retrieves a list of installed applications, including details like software names, versions, and installation paths. This data allows attackers to profile the system, identify high-value targets like security tools or cryptocurrency wallets, and potentially exploit vulnerabilities in outdated software.
Want to see how an information stealer profiles your system for installed software, similar to Meduza Stealer? You can do so by running this PowerShell command to query installed software from registry keys:
$registryPaths = @(
'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall',
'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall',
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall'
)
foreach ($path in $registryPaths) {
Get-ItemProperty -Path "$path\*" -ErrorAction SilentlyContinue | ForEach-Object {
[PSCustomObject]@{
Name = $_.DisplayName
Version = $_.DisplayVersion
InstallLocation = $_.InstallLocation
}
} | Where-Object { $_.Name -ne $null } | Format-Table -AutoSize
}
Figure 8: Installed Application Query Simulation
Meduza Stealer checks whether its malware is running with elevated privileges, such as administrator rights. If the malware process is not running with administrative privileges, it attempts to gain elevated access by executing a COM object or by modifying the process token of its running instance using the SeDebugPrivilege. This enables the malware to bypass privilege restrictions and maintain control over the compromised system.
Figure 9: Adjust Process Token Privilege
This malware uses the CredEnumerateA() API to steal sensitive information. In this example, the malware is specifically targeting credentials stored on the victim's system. The CredEnumerateA() function is part of the Windows API and allows applications to enumerate the credentials stored in the Windows Credential Manager. These credentials may include usernames, passwords, and other sensitive data used for authentication by various applications and services.
Figure 10: Enumerate Credential from Password Store
In addition, this malware leverages the VaultCli.dll module to steal sensitive information, specifically targeting credentials stored within the Windows Vault. The Windows Vault is a secure storage system that holds passwords, credentials, and other sensitive data, such as those used for web services, applications, and network resources. VaultCli.dll can be used to enumerate, retrieve, and decrypt these stored credentials, allowing Meduza Stealer to exfiltrate them.
Figure 11: Enumerate Credential from Password Store - vaultcli.dll
Meduza Stealer also extracts sensitive information from a wide range of web browsers. It targets popular browsers like Chrome, Firefox, Edge, and others by exploiting their data storage mechanisms. The malware accesses saved credentials, browsing history, autofill data, cookies, and even credit card details stored in encrypted formats. By bypassing security measures, Meduza decrypts this information and sends it to remote servers controlled by attackers. This technique has been observed in various Trojan Stealers, as previously described by the Splunk Threat Research Team in our analysis of the Amadey Trojan Stealer.
Figure 12: Snippet of Browser List
Below is a comprehensive list of web browsers targeted by Meduza Stealer for credential theft.
Google Chrome | Amigo | QQBrowser |
Google Chrome Beta | Vivaldi | K-Meleon |
Google Chrome Dev | Kometa | Xpom |
Google Chrome Canary | Orbitum | Lenovo Browser |
Google Chrome (x86) | Mail.Ru Atom | Xvast |
Google Chrome SxS | Comodo Dragon | Go! |
360ChromeX | Torch | Safer Secure Browser |
Microsoft Edge | Comodo | Safer Technologies\Secure Browser |
Microsoft Edge Canary | Slimjet | Sputnik |
Microsoft Edge SxS | 360Browser | Nichrome |
Microsoft Edge Dev | 360 Secure Browser | Uran |
Microsoft Edge Beta | Maxthon3 | uCozMedia\Uran |
Brave Browser | Maxthon5 | Yandex Browser |
Epic Privacy Browser | Maxthon | 7Star |
Chedot | CocCoc Browser | Iridium |
Opera Stable | Chromodo | Opera Crypto Developer |
Opera GX | CentBrowser | Citrio |
Sleipnir5 | Opera Neon | Coowon |
ChromiumViewer | Elements Browser | Suhba |
ChromePlus | QIP Surf | Bromium |
TorBro | Liebao | AcWebBrowser |
Twinkstar | Rafotech Mustang | SRWare Iron |
CoolNovo | RockMelt | AVG Browser |
Titan Browser | CCleaner Browser | Blisk |
UCBrowser | Baidu Spark | SwingBrowser |
Flock | AVAST Browser | SalamWeb |
Sidekick | URBrowser | GarenaPlus |
GhostBrowser | CryptoTab Browser | ViaSat Browser |
Kinza | Superbird | Firefox |
Naver Whale | NetboxBrowser | CLIQZ |
SeaMonkey | InsomniacBrowser | Cyberfox |
Thunderbird | Falkon | IceCat |
BlackHawk | Waterfox | SlimBrowser |
Basilisk | IceDragon | Pale Moon |
BitTube |
Meduza Stealer extends its reach to browser extensions by taking advantage of weak encryption and insecure storage mechanisms to access sensitive data. It targets files such as IndexedDB in local storage, allowing threat actors to locate and extract wallet credentials, private keys, and transaction history. This enables attackers to compromise accounts, steal assets, and potentially escalate their attacks further. Such capabilities make Meduza Stealer particularly dangerous for users relying on extensions for secure operations.
Below is a table listing the extensions that Meduza Stealer targets in order to extract sensitive information.
Browser Extension Name | Browser Extension ID | Browser Extension Name | Browser Extension ID |
---|---|---|---|
Authenticator | bhghoamapcdpbohphigoooaddinpkbai | TronLink | ibnejdfjmmkpcnlpebklmnkoeoihofec |
Authenticator (Edge) | ocglkepbibnalbgmbachknglpdipeoio | TokenPocket | mfgccjchihfkkindfppnaooecgfneiii |
Trezor Password Manager | imloifkgjagghnncjkhggdhalmcnfklk | XinPay | bocpokimicclpaiekenaeelehdjllofo |
GAuth Authenticator | ilgcnhelpchnceeipipijaljkblbcobl | Ton | nphplpgoakhhjchkkhmiggakijnkhfnd |
EOS Authenticator | oeljdldpnmdbchonielidgobddffflal | CryptoCom | hifafgmccdpekplomjjkcfgodnhcellj |
1Password | aeblfdkhhhdcdjpifhhbdiojplfjncoa | OKX | mcohilncbfahbmgdjkbpemcciiolgcge |
1Password (Edge) | dppgmdbiimibapkepcbdbmkaabgiofem | OKX (Edge) | pbpjkcldjiffchgbbndmhojiacbgflha |
KeePassXC (Web) | oboonakemofpalcgghocfoadofidjkkk | Sollet | fhmfendgdocmcbmfikdcogofphimnkno |
KeePassXC (Web Edge) | pdffhmdngciaglkoonimfcmckehcpafo | Slope | pocmplpaccanhmnllbbkpgfliimjljgo |
Dashlane | fdjamakpfbbddfjaooikfcpapjohcfmg | DuinoCoin | ippiokklhjjdlmmonmjimgbgnnllcleg |
Dashlane (Edge) | gehmmocbbkpblljhkekmfhjpfbkclbph | Starcoin | mfhbebgoclkghebffdldpobeajmbecfk |
Bitwarden | nngceckbapebfimnlniiiahkandclblb | Hiro Wallet | ldinpeekobnhjjdofggfgjlcehhmanlj |
Bitwarden (Edge) | jbkfoedolllekgbhcbcoahefnbanhhlh | MetaWallet | bkklifkecemccedpkhcebagjpehhabfb |
NordPass | fooolghllnmhmmndgjiamiiodkpenpbb | Swash | cmndjbecilbocjfkibfbifhngkdmjgog |
Keeper | bfogiafebfohielmmehodmfbbebbbpei | Finnie | cjmkndjhnagcfbpiemnkdpomccnjblmj |
RoboForm (Web) | pnlccmojcmeohlpggmfnbbiapkmbliob | Keplr | dmkamcknogkgcdfhhbddcghachkejeap |
RoboForm (Web Edge) | ljfpcifpgbbchoddpjefaipoiigpdmag | Crocobit | pnlfjmlcjdjgkddecgincndfgegkecke |
LastPass | hdokiejnpimakedhajhdlcegeplioahd | Oxygen | fhilaheimglignddkjgofkcbgekhenbh |
LastPass (Edge) | bbcinlkgjjkejfdpemiealijmmooekmp | Nifty | jbdaocneiiinmjbjlgalhcelgbejmnid |
BrowserPass | naepdomgkenhinolocfifgehidddafch | Liquality | kpfopkelmapcoipemfendmdcghnegimn |
MYKI | bmikpgodpkclnkgmnpphehdgcimmided | Ronin | fnjhmkhhmkbjkkabndcnnogagogbneec |
MYKI (Edge) | nofkfblpeailgignhkbnapbephdnmbmn | Ronin (Edge) | kjmoohlgokccodicjjfebfomlbljgfhk |
Splikity | jhfjfclepacoldmjmkmdlmganfaalklb | Oasis | ppdadbejkmjnefldpcdjhnkpbjkikoip |
CommonKey | chgfefjpcobfbnpmiokfjjaglahmnded | Temple | ookjlbkiijinhpmnjffcofjonbfbgaoc |
SAASPASS | nhhldecdfagpbfggphklkaeiocfnaafm | Pontem | phkbamefinggmakgklpkljjmgibohnba |
Zoho Vault | igkpcodhieompeloncfnbekccinhapdb | Solflare | bhhhlbepdkbapadjdnnojkbgioiodbic |
Authy (Web) | gaedmjdfmmahhbjefcbgaolhhanlaolb | Yoroi | ffnbelfdoeiohenkjibnmadjiehjhajb |
Metamask | nkbihfbeogaeaoehlefnkodbefgpgknn | iWallet | kncchdigobghenbbaddojjnnaogfppfj |
Metamask (Edge) | ejbalbakoplchlghecdalmeeeajnimhm | Wombat | amkmjjmmflddogmhpjloimipbofnfjih |
Metamask (Opera) | djclckkglechooblngghdinmeemkbgci | Coinbase | hnfanknocfeofbddgcijnmhnfnkdnaad |
BinanceChain | fhbohimaelbohpjbbldcngcnapndodjp | MewCx | nlbmnnijcnlegkjjpcfjclmcfggfefdm |
Bitapp | fihkakfobkmkjojpchpfgcmhfjnmnfpi | Jaxx Liberty (Web) | cjelfplplebdjjenllpjcblmjkfcffne |
Coin98 | aeachknmefphepccionboohckonoeemg | OneKey | jnmbobjmhlngoefaiojfljckilhhlhcj |
Safe Pal | lgmpcpglpngdoalbgeoldeajfclnhafa | Hycon Lite Client | bcopgchhojmggmffilplmbdicgaihlkp |
Safe Pal (Edge) | apenkfbbpmhihehmihndmmcdanacolnh | SubWallet (Polkadot) | onhogfjeacnfoofkfgppdlbmlmnplgbn |
DAppPlay | lodccjjbdhfakaekdiahmedfbieldgik | Goby | jnkelfanjkeadonecabehalmbgpfodjm |
Guarda | hpglfhgfnhbgpjdenjgmdgoeiappafln | TezBox | mnfifefkajgofkcjkemidiaecocnkjeh |
Equal | blnieiiffboillknjnepogjhkgnoapac | ONTO Wallet | ifckdpamphokdglkkdomedpdegcjhjdp |
Guild | nanjmdknhkinifnkgdcggcfnhdaammmj | Hashpack | gjagmgiddbbciopjhllkdnddhcglnemk |
Talisman | fijngjgcjhjmmpcmkeiomlglpeiijkld | Cyano | dkdedlpgdmmkkfjabffeganieamfklkm |
Casper | abkahkcbhngaebpcgfmhkoioedceoigp | Martian Wallet | efbglgofoippbgcjepnhiblaibcnclgk |
Casper (Edge) | dfmbcapkkeejcpmfhpnglndfkgmalhik | Sender Wallet | epapihdplajcdnnkdeiahlgigofloibg |
ICONex | flpiciilemghbmfalicajoolhkkenfel | Zecrey | ojbpcbinjmochkhelkflddfnmcceomdi |
Math | afbcbjpbpfadlkmhmclhkeeodmamcflc | Auro | cnmamaachppnkjgnildpdmkaakejnhae |
Math (Edge) | dfeccadlilpndjjohbjdblepmjeahlmm | Terra Station | aiifbnbfobpmeekipheeijimdpnlpgpp |
Mobox | fcckkdbjnoikooededlapcalpionmalo | KardiaChain | pdadjkfkgcafgbceimcpbkalnfnepbnk |
Phantom | bfnaelmomeimhlpmgjnjophhpkkoljpa | Rabby | acmacodkjbdgmoleebolmdjonilkdbch |
Enkrypt | kkpllkodjeloidieedojogacfhpaihoh | Petra | ejjladinnckdgjemekebdpeokbikhfci |
NeoLine | cphhlgmgameodnhkjdmkpanlelnlohao | Maiar DeFi Wallet | dngmlblcodfobpdpecaadgfbcggfjfnm |
Nabox | nknhiehlklippafakaeklbeglecifhad | Leaf Wallet | cihmoadaighcejopammfbmddcmdekcje |
XDeFi | hmeobnfnfcmdkdcmlblgagmfpfboieaf | Brave Wallet | odbfpeeihdkbihmopkbjmoonfanlbfcl |
KHC | hcflpincpppdclinealmandijcmnkbgn | Opera Wallet | gojhcdgcpbpfigcaejpfhfegekdgiblk |
OneKey | jnmbobjmhlngoefaiojfljckilhhlhcj | CardWallet | apnehcjmnengpnmccpaibjmhhoadaico |
Auro | cnmamaachppnkjgnildpdmkaakejnhae | Flint | hnhobjmcibchnmglfbldbfabcgaknlkj |
CLW | nhnkbkgjikgcigadomkphalanndcapjk | Exodus (Web) | aholpfdialjgjfhomihkjbmgjidlcdno |
Polymesh | jojhfeoedkpkglbfimdfabpdfjaoolaf | TrustWallet | egjidjbpglichdcondbcbdnbeeppgdph |
ZilPay | klnaejjgbibmhlephnhpmaofohgkpgkd | CryptoAirdrop | dhgnlgphgchebgoemcjekedjjbifijid |
Byone | nlgbhdfgdhgbiamfdfmbikcdghidoadd | Magic Eden Wallet | mkpegjkblkkefacfnmkajcjmabijhclg |
Eternl | kmhcihpebfmpgmihbkipmjlmmioameka | Backpack | aflkmfhebedbjioipglgcbcmnbpgliof |
Guarda (Web) | acdamagkdfmpkclpoglgnbddngblgibo | Leap Cosmos | fcfcfllfndlomdhbehjjcoimbgofdncg |
Nami | lpfcbjknijpeeillifnkikgncikgfhdo | Manta Wallet | enabgbdfcbaehmbigakijjabdpdnimlg |
Sui | opcgpfmipidbgpenhmajoajpbobppdil | 5ire Wallet | keenhcnmdmjjhincpilijphpiohdppno |
Venom Wallet | ojggmchlghnjlapmfbnjholfjkiidbch | Xverse Wallet | idnnbdplmphpflfnlkomgpfbpcgelopg |
Argent X | dlcobpjiigpikoobohmabehhmhfoodbb | Braavos Smart Wallet | jnlgamecbpmbajjfhmmmlhejkemejdma |
Leo Wallet | nebnhfamliijlghikdgcigoebonmoibm | UniSat Wallet | ppbibelpcjmhbdihakflkdcoccbgbkpo |
Bitget Wallet | jiidiaalihmmhddjgbnbgdfflelocpak | Rainbow | opfgelmcmbiajamepnmloijbpoleiama |
Zerion | klghhnkeealcohjjanjjdaeeggmfmlpl | BearBy | papngmkmknnmfhabbckobgfpihpdgplk |
Shell Wallet | kbdcddcmgoplfockflacnnefaehaiocb | Tonkeeper | omaabbefbmiijedngplfjmnooppbclkk |
MyTonWallet | fldfpgipfncgndfolcbkdeeknbbbnhcc | MyTonWallet (Edge) | pgpdomeflfhcmgdbfdlociknopahmbej |
XTon | cjookpbkjnpkmknedggeecikaponcalb | XTon (Edge) | cgadeiniijaimpdmhfklcphfnglpkmll |
OpenMask | penjlddjkjgpnkllboccdgccekpkcbin | iWallet Pro | jbppfhkifinbpinekbahmdomhlaidhfm |
Below are lists of additional applications targeted by Meduza Stealer in its attempt to steal credentials and sensitive information:
Meduza Stealer queries the Windows Registry to extract credentials and related information from Microsoft Outlook user profiles. Outlook stores configuration and user data, including usernames, passwords, and profile details, in specific registry keys. Meduza Stealer targets these keys to gather sensitive information.
As seen in the table below, during our analysis we observed Meduza Stealer targeting Outlook versions 12.0, 14.0, 15.0, and 16.0.
SOFTWARE\Microsoft\Office\{version_number}\Outlook\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676 |
SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676 |
SOFTWARE\Microsoft\Windows Messaging Subsystem\Profiles\9375CFF0413111d3B88A00104B2A6676 |
This malware uses api[.]ipify[.]org
as part of its operation. This API is a public service designed to provide the external (public) IP address of the device making the request. Meduza Stealer uses it to obtain the victim's IP address, which can help attackers gather information about the user's network, location, or ISP.
Figure 13: Network Discovery
Like other malware that often leverages common batch commands, Meduza Stealer uses the ping timeout (sleep) technique to control the flow of execution and evade detection. The ping command, typically used for network diagnostics, can serve as a makeshift delay mechanism. By pinging a non-existent or benign IP address (e.g., ping 1.1.1.1 -n X), the malware introduces a time delay equivalent to the number of echo requests sent. This method is a stealthy way to implement pauses without directly using more suspicious commands or APIs.
Figure 14 shows a screenshot of the Meduza Stealer code that initialized the ping sleep batch script:
CMD.EXE /C ping 1.1.1.1 -n 1 -w 3000 > Nul & Del /f /q *
Figure 14: Ping Sleep
Meduza Stealer uses an encrypted configuration file to store essential details required for its operation. This configuration typically includes the malware’s command and control (C2) server addresses, targeted application paths, file types for data extraction, and other operational parameters. The configuration is encrypted to evade detection and analysis by security tools. Upon execution, the malware decrypts this file in memory, allowing it to dynamically adjust its behavior, such as tailoring its data theft operations to specific targets or updating its C2 endpoints. This approach enhances its flexibility and resilience against static analysis. The decryption process for the configuration file uses the same algorithm employed to decrypt the actual Meduza payload from the loader. Figure 15 illustrates an example of a decrypted configuration file, obtained by simulating the decryption routine using a Python script.
Figure 15: Meduza Stealer Configuration File
After completing data collection on the compromised host, Meduza Stealer exfiltrates the stolen information to its C2 server using data encoding techniques. The collected data is encoded, typically in Base64, to obfuscate its content during transmission. Figure 16 provides a screenshot of a large chunk of Base64-encoded data being sent to the C2 server over the TCP protocol.
Figure 16: Meduza Stealer Base64 Encoded Data Collection
Upon extracting and decoding the packet, the contents reveal data in JSON file format, with Base64-encoded values representing the information collected by Meduza Stealer from the compromised host. The specific data captured may vary based on the malware’s configuration, as outlined earlier.
Figure 17: Meduza Stealer Base64 Decoded Data Collection
Figure 18, on the other hand, displays a screenshot of the decoded SQLite database file sent by this information stealer to its C2 server as part of its data exfiltration process.
Figure 18: SQLite DB File Decoded
The Splunk Threat Research Team has developed a set of detections to help Splunk customers identify potential indicators of the Meduza Stealer malware. These detections, detailed in the section below, have been incorporated into the new Meduza Stealer analytic story alongside other relevant detections.
The following analytic detects non-Chrome processes attempting to access the Chrome extensions file. It leverages Windows Security Event logs, specifically event code 4663, to identify this behavior. This activity is significant because adversaries may exploit this file to extract sensitive information from the Chrome browser, posing a security risk.
`wineventlog_security` EventCode=4663
object_file_path="*\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Local Extension Settings\\*"
AND NOT (process_path IN ("*:\\Windows\\explorer.exe", "*\\chrome.exe"))
| stats count min(_time) as firstTime max(_time) as lastTime by object_file_name object_file_path process_name process_path process_id EventCode dest
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
Figure 19: Windows Credentials from Password Stores Chrome Extension Access Detection
The following analytic identifies non-Chrome processes accessing the Chrome user data file "login data." This file is an SQLite database containing sensitive information, including saved passwords. The detection leverages Windows Security Event logs, specifically event code 4663, to monitor access attempts.
`wineventlog_security` EventCode=4663
object_file_path="*\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Login Data"
AND NOT (process_path IN ("*:\\Windows\\explorer.exe", "*:\\Windows\\System32\\dllhost.exe", "*\\chrome.exe"))
| stats count min(_time) as firstTime max(_time) as lastTime by object_file_name object_file_path process_name process_path process_id EventCode dest
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
Figure 20: Windows Credentials from Password Stores Chrome Login Data Access Detection
The following analytic detects processes attempting to connect to known IP check web services. This behavior is identified using Sysmon Event Code 22 logs, specifically monitoring DNS queries to services like "wtfismyip.com" and "ipinfo.io" for reconnaissance to determine the infected machine's IP address.
`sysmon` EventCode=22 QueryName IN ("*wtfismyip.com", "*checkip.*", "*ipecho.net", "*ipinfo.io", "*api.ipify.org", "*icanhazip.com", "*ip.anysrc.com","*api.ip.sb", "ident.me", "www.myexternalip.com", "*zen.spamhaus.org", "*cbl.abuseat.org", "*b.barracudacentral.org", "*dnsbl-1.uceprotect.net", "*spam.dnsbl.sorbs.net", "*iplogger.org*", "*ip-api.com*", "*geoip.*", "*icanhazip.*")
| stats min(_time) as firstTime max(_time) as lastTime count by Image ProcessId QueryName QueryStatus QueryResults EventCode Computer
| rename Computer as dest
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
Figure 21: Windows Gather Victim Network Info Through IP Check Web Services Detection
The following analytic identifies processes running from file paths not typically associated with legitimate software. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on specific process paths within the endpoint data model. This activity is significant because adversaries often use unconventional file paths to execute malicious code without requiring administrative privileges.
| tstats `security_content_summariesonly` count values(Processes.process_name) as process_name values(Processes.process) as process min(_time) as firstTime max(_time) as lastTime
from datamodel=Endpoint.Processes
where Processes.process_path = "*\\windows\\fonts\\*" OR Processes.process_path = "*\\windows\\temp\\*" OR Processes.process_path = "*\\users\\public\\*" OR Processes.process_path = "*\\windows\\debug\\*" OR Processes.process_path = "*\\Users\\Administrator\\Music\\*" OR Processes.process_path = "*\\Windows\\servicing\\*" OR Processes.process_path = "*\\Users\\Default\\*" OR Processes.process_path = "*Recycle.bin*" OR Processes.process_path = "*\\Windows\\Media\\*" OR Processes.process_path = "\\Windows\\repair\\*" OR Processes.process_path = "*\\temp\\*" OR Processes.process_path = "*\\PerfLogs\\*"
by Processes.parent_process_name Processes.parent_process Processes.process_path Processes.dest Processes.user
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
Figure 22: Suspicious Process File Path Detection
The following analytic detects the presence of information-stealing malware that exploits the VaultCLI.dll module to extract credentials from the Windows Credential Vault. It identifies abnormal interactions with VaultCLI.dll, particularly those initiated by processes located in publicly writable Windows folder paths.
`sysmon` EventCode=7
ImageLoaded ="*\\vaultcli.dll"
process_path IN("*\\windows\\fonts\\*", "*\\windows\\temp\\*", "*\\users\\public\\*", "*\\windows\\debug\\*", "*\\Users\\Administrator\\Music\\*", "*\\Windows\\servicing\\*", "*\\Users\\Default\\*", "*Recycle.bin*", "*\\Windows\\Media\\*", "\\Windows\\repair\\*", "*\\temp\\*", "*\\PerfLogs\\*")
| stats count min(_time) as firstTime max(_time) as lastTime by dest Image ImageLoaded process_name EventCode Signed ProcessId
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
Figure 23: Windows Credentials Access via VaultCli Module Detection
Overall, the Meduza Stealer analytic story introduces 14 detections across MITRE ATT&CK techniques.
Description | Hashes |
---|---|
Meduza Stealer Loader | 4531a1efd815df17d3a6f247d0850ab5e510de2345723e41c062716e65df686e 48a5eb3b0d4d5b8c3b8ae32b638ee0b0b5fb1ce45bb4c30463d697720a136974 5c6985e002a60d821fd7b029b2c5d04c3ee16bb619999202f6dbdf432d229989 93626f2a12a4ab1fbe7e284af0a3368c4041e58428f18429acc64d3f09067a29 a39cb2c31b6724eaa78f60fe29ced83e50ffad7e39efd604a7debdac63a2a80e cc332b2b190d6bed3bfccf6f7b878a2065cf70babd1cc79a65b7adeadf130323 d61985407f31d1fbba3aaf4e6d1e79c5fc79fa333879fd478a0ffb4d9476a04f |
Meduza Stealer | 0646980e8e68974948861e60bd4497d17464da101ec697241ba8ea96d86d22c6 1c123f8cd194d826aaa48e97fa67b9db9faa1a5a1ada139f367d56904f6e0c04 322608e24d59934b175fe0f128fc70112b69ac82ed25deb794c98f19af3204f4 545dce672f9a6cad9aa56f689a50403bebd68ca99c2a6b8806b28025f8b3b0a0 5c7f4086a64f90787ea13a00c4dc217d8ec6188abc24e4f2e841f7c805a8cca5 85d96a1ba8fa7426e48bcf430d305c6e4764db53fb86abbe53d9b80c5e474e72 8f52ef228b7cc3178f414984ed686132de1527cb6f04700feeaea20993814eea 9c57d9431e5a3b8206bceadad97108bb59bd08e0e90a4946c41ca268a2093412 a681393f417174f96a6f0814677b28d81884fb836b501de132eb0003e4782eac b056dd707d21bd57b256767dc3e13cd8c824cf059ca70f13e2cda9f96b101012 b174f3ba74f08dab33a60a99b4c6a1fa7d021a20b68283a15d82c84367c2c28d d510497588fe468e45119bf8a094b1be3a9eb2e78e26ddfdc1466911bab8b629 d82fe3ed607a8d4827f6b8f007bae911b7201e9af927ffb7442d571347903ab8 f3cb381e29fe29872b86838500dc6ee2f810865bf5a0b1cd4718b0036c3d51a5 edd39f9eff63770ff224f000a73c5703a7b7225bddc329ef4467ee986be40744 940d413dd95bc28d5c724d814f2cd1ecca005d2cb58ed28788d9c07d962d829b f3cb381e29fe29872b86838500dc6ee2f810865bf5a0b1cd4718b0036c3d51a5 f862bb143150aa9ee9601ab102264d127caae7f9562dc085030d3429cf89586e a681393f417174f96a6f0814677b28d81884fb836b501de132eb0003e4782eac c4199805b4245bdc6667e46cf4ab639b1e661b422b7a4f6372733ac6ca367c83 1420f60f053c3ea5605239ee431e5f487245108b1c01be75d16b5246156fa178 |
This blog helps security analysts, blue teamers, and Splunk customers identify Meduza Stealer malware by enabling the community to discover related TTPs used by threat actors and adversaries. You can implement the detections in this blog using the Enterprise Security Content Updates app or the Splunk Security Essentials app. To view the Splunk Threat Research Team's complete security content repository, visit research.splunk.com.
Any feedback or requests? Feel free to put in an issue on GitHub, and we’ll follow up. Alternatively, join us on the Slack channel #security-research. Follow these instructions if you need an invitation to our Splunk user groups on Slack.
We would like to thank Teoderick Contreras for authoring this post and the entire Splunk Threat Research Team for their contributions: Michael Haag, Jose Hernandez, Lou Stella, Bhavin Patel, Rod Soto, Eric McGinnis, Patrick Bareiss, Nasreddine Bencherchali, and Tucker Favreau.
The Splunk platform removes the barriers between data and action, empowering observability, IT and security teams to ensure their organizations are secure, resilient and innovative.
Founded in 2003, Splunk is a global company — with over 7,500 employees, Splunkers have received over 1,020 patents to date and availability in 21 regions around the world — and offers an open, extensible data platform that supports shared data across any environment so that all teams in an organization can get end-to-end visibility, with context, for every interaction and business process. Build a strong data foundation with Splunk.