Take a Product Tour Request a Demo Cybersecurity Assessment Contact Us

Blogs

The latest cybersecurity trends, best practices, security vulnerabilities, and more

Unmasking the Evolving Threat: A Deep Dive into the Latest Version of Lumma InfoStealer with Code Flow Obfuscation

Summary

Lumma Stealer, first identified in 2022, remains a significant threat to this day, continuously evolving its tactics, techniques, and procedures (TTPs) to stay aligned with emerging trends. It is distributed on the dark web via a subscription-based model, Malware-As-A-Service(MaaS). Lumma is designed to detect virtual and sandbox environments, allowing it to avoid detection by security systems that depend on the sandbox environment to assess the file behaviour. The malware is capable of exfiltrating sensitive data, including information from web browsers, email applications, cryptocurrency wallets, and other personally identifiable information (PII) stored in critical system directories.

The Trellix Advanced Research Center has been tracking recent campaigns by the threat actors behind Lumma Stealer and analyzing the evolution of their TTPs. In this blog we present our technical analysis on how Lumma performs the below objectives

  • Infection chain
  • Code flow obfuscation
  • API hash resolving
  • Heaven’s gate
  • Disabling ETWTi callbacks
  • Anti-Sandox techniques 
  • Command and control, exfiltration

Infection Chain

Figure 1: Lumma stealer’s infection chain
Figure 1: Lumma stealer’s infection chain

A threat actor was observed distributing Lumma via obfuscated PowerShell scripts. These scripts contain two executable files in Base64-encoded format,

  1. A .NET executable (loader) named GOO.dll
  2. The Lumma payload
Figure 2: Obfuscated Powershell Script
Figure 2: Obfuscated Powershell Script

The PowerShell script loads the .NET executable using the Reflection API, then locates the "R2" Class within the assembly, and invokes its "Run()" method. The arguments supplied to the "Run" method are stored within the $YOO variable. The first argument is the path to RegSvcs.exe ("C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegSvcs.exe"), and the second argument is the Lumma payload ($hgh).

Powershell
$YOO=[object[]]
('C:\Windows\MicrFFosoft.NFFET\FraDDmewDDork\v4.0.30319\RegSvcs.exe'.replace('FF','').replace('DD',''),$hgh)


The .NET binary, obfuscated with Crypto Obfuscator, injects the Lumma binary into the RegSvcs.exe process. The injected Lumma payload then continues to operate, masquerading as the legitimate RegSvcs.exe utility.

Figure 3: Packer information
Figure 3: Packer information


Figure 4: .NET assembly and the function used to invoke Lumma
      payload
Figure 4: .NET assembly and the function used to invoke Lumma payload


Figure 5 : Powershell spawning Regsvcs.exe
Figure 5 : Powershell spawning Regsvcs.exe

Technical Analysis of Lumma Stealer

During the analysis of the derived sample, the command and control (C2) servers were inactive, resulting in an incomplete behavioral analysis. To provide a thorough analysis for our readers, we have detailed the observed behavior of the latest Lumma sample, which may be delivered to the victim's environment via the technique previously discussed.

Sample hash (SHA256) : 80741061ccb6a337cbdf1b1b75c4fcfae7dd6ccde8ecc333fcae7bcca5dc8861

Performing code analysis on the Lumma’s binary, its main function begins by passing encrypted strings to a decryption routine. The first string to be decrypted is "ntdll.dll". Similarly, the names of other important libraries such as kernel32.dll, user32.dll, winhttp.dll, and crypt32.dll are also decrypted during runtime.

The decrypted string is passed as an argument to a function that leverages Process Environment Block (PEB) data structure in Windows to resolve the library's address in memory. With this technique, Lumma avoids calling very commonly monitored APIs like LoadLibrary and GetProcAddress, which are scrutinized by EDR and other security systems.

Code flow obfuscation

Lumma employs advanced codeflow obfuscation techniques to significantly complicate the analysis. As a result, this malware makes it difficult for decompilers(a commonly used tool in malware analysis) to fully decompile the code.

Due to this, static analysis methods are rendered ineffective in revealing the complete logic of the program.

Figure 6: The next instruction is determined by calculating ECX, with the green
      box highlighting the calculation used to derive ECX
Figure 6: The next instruction is determined by calculating ECX, with the green box highlighting the calculation used to derive ECX

From the image above, the larger box highlights the routine responsible for calculating the next jump, while the smaller box shows a jump instruction that contains the next instruction address in the “ecx” register. As a result, the code-blocks are scattered without any static links between them, the links (i.e.,addresses to the next valid code-block) are calculated dynamically, resulting in the decompiler failing to analyze the code accurately and the code-flow is broken. Lumma Stealer extends this obfuscation technique to control flow statements such as If-Else and Do-While, further complicating the analysis.

Additionally, the calculation varies with each jump, making it difficult to automate or clean the code effectively. In this case, the jump leads to the immediate next instruction at address ECX = 0067BCD6 (Refer Image). 

API hash resolving

Lumma uses an API hashing technique to dynamically resolve API functions during runtime, a common method employed by malware to locate APIs as needed.

Below listed are a few API’s resolved by Lumma dynamically,

  • RtlAllocateHeap
  • RtlReAllocateHeap
  • RtlFreeHeap
  • RtlExpandEnvironmentStrings

Also, APIs required for networking are resolved using the same function.

Lumma sample being 32-bit, it uses Heaven’s gate technique to run 64-bit code when it is executed on a 64-bit machine.

Heaven’s gate 

Lumma identifies whether it’s running on a 32-bit or 64-bit machine by comparing the value of the Code Segment (CS) register.

If the value is 0x23. Then it's a 32-bit machine.

If the value is 0x33. Then it's a 64-bit machine.

When running on a 64-bit system, Lumma transitions to 64-bit code using the ‘jmp far 33’ instruction.

Figure 7: Jmp far instruction for 32 to 64 bit transition
Figure 7: Jmp far instruction for 32 to 64 bit transition

To invoke NTAPI functions, Lumma constructs a table that includes Syscall Hashes and Syscall Indexes. It traverses the export table of the ntdll.dll library to generate custom hashes for API names starting with "Nt" such as NtQueryInformationFile and NtOpenFile.

Lumma hashes syscalls based on their opcode pattern. Specifically,

  • Syscalls that begin with the opcode B8 and end with a return opcode of C2 or C3 are considered for hashing
Figure 8: Hashing Criteria
Figure 8: Hashing Criteria

Below image depicts the syscalls matching above discussed pattern.

For example:

  • NtYieldExecution syscall starts with B8 and returns using “C3” opcode
  • NtAddAtom syscall starts with B8 and returns using “C2” opcode
Figure 9: Debugger snippet
Figure 9: Debugger snippet

On the other hand, syscalls like NtCurrentTeb, which do not start with B8, are excluded from the Syscall hash table.

Figure 10: NtCurrentTeb Syscall pattern not matching the hashing
      criteria
Figure 10: NtCurrentTeb Syscall pattern not matching the hashing criteria

Syscall hash/index table

Figure 11: Syscall hash table
Figure 11: Syscall hash table

The above image shows the syscall table, A DWORD (hash) followed by another DWORD containing “Syscall Index”.

For instance, the first DWORD is the hash value for the NtAcceptConnectPort/ZwAcceptConnectPort API (Index = 2) followed by the second DWORD consisting of the syscall index(2). Whenever Lumma has to Invoke a NTAPI, it finds the syscall index by traversing the table and matching on the respective hash.

Figure 12: ZwAcceptConnectionPort Syscall pattern
Figure 12: ZwAcceptConnectionPort Syscall pattern

NTDLL Re-mapping

Lumma leverages the syscall table to remap ntdll.dll based on the system architecture. The correct version of the DLL (32-bit or 64-bit) is determined by checking the value of the Code Segment (CS) register.

On a 32-bit system, knowndlls32/ntdll.dll is mapped.

On a 64-bit system, knowndlls/ntdll.dll is mapped.

Below listed NTAPI system call Indexes are resolved using their respective hash

API Hash Syscall Index
NtOpenSection 0x06519B84 0x37
NtMapViewOfSection 0xCB8D7CB0 0x28
NtUnMapViewOfSection 0xE40A7173 0x2A
NtClose 0x2C331E1F 0x3000F
Table 1 : API, respective hash values as generated by the malware and Syscall Index

Based on the remapped NTDLL, syscall table is re-generated, and the previously created hashtable is overwritten, it is unclear why the process is repeated twice. Probably, by loading NTDLL from disk, the malware aims on getting a clean, unhooked version of the DLL, which would prevent the EDR from detecting its activities because the hooks wouldn't be in place.

Below image depicts two NTDLL libraries loaded in memory, highlighted in red is the originally loaded NTDLL module library, highlighted in green is the remapped NTDLL library.

Figure 13: Lumma remapping the NTDLL library
Figure 13: Lumma remapping the NTDLL library

Post syscall generation, newly loaded NTDLL is unmapped using “NtUnMapViewOfSection “ and its handle closed using “NtClose”.

Disabling ETWTi callbacks

Lumma invokes the NtSetInformationProcess API, passing a structure that modifies the ProcessInformation class. By setting the Callback field to 0 in the structure, callbacks set by security softwares like ETW (Event Tracing for Windows) are removed and this prevents those software from monitoring the system calls made by Lumma stealer.

Figure 14: Arguments passed to NtSetInformationProcess
Figure 14: Arguments passed to NtSetInformationProcess

Figure 15: Twelve null-bytes are being passed as the ProcessInformation
      argument
Figure 15: Twelve null-bytes are being passed as the ProcessInformation argument

Above image shows NtSetinformationprocess’s parameters, with third argument (ProcessInformation) set to null the callbacks

Anti-sandbox techniques

To avoid detection in sandbox environments, Lumma checks for the presence of specific sandbox or antivirus-related DLLs. The malware verifies that these DLLs are not loaded into memory, using the hardcoded hash values stored in Lumma’s .rdata section.

After validation, Lumma proceeds to the next stage. We wrote a python implementation of the hashing algorithm to obtain the below list of process names verified by Lumma to detect sandbox environments.

Hash DLL name Description
0xA7FD5028 avghookx.dll AVG
0x8EF13DC7 avghooka.dll AVG
0x25D20435 snxhk.dll AVAST
0x27185A1A sbiedll.dll Sandboxie
0x6B46ED5E api_log.dll iDefense Labs
0xB267D178 dir_watch.dll iDefense Labs
0x24BFD795 pstorec.dll Sunbelt Sandbox
0x51B7A9D8 vmcheck.dll Virtual PC
0x9CEDCD6D wpespy.dll WPE Pro
0x23437B0F cmdvrt64.dll Comodo Container
0x187DF7E0 cmdvrt32.dll Comodo Container
Table 2 : Analysis details of Lumma’s Dynamic hashing

For anti-analysis purposes, Lumma includes an optional feature to detect virtual machine (VM) environments. This check is performed based on the response from the Command and Control (C2) server, specifically by verifying if the response contains the property named “vm” set to "true". The command and control section below contains a detailed analysis of this feature.

Region specific execution

Lumma also includes a region-specific execution check. If the User Default Language is set to Russian (identified by the language code 0x419), the malware will exit with a prompt that the country is not supported.

Figure 16: GetUserDefaultUILanguage API being resolved using dynamic API
      hashing
Figure 16: GetUserDefaultUILanguage API being resolved using dynamic API hashing

Command and control, exfiltration

Dynamic analysis revealed that Lumma is calling multiple domains before calling the legitimate “steamcommunity.com”.

Figure 17: Lumma attempting to connect to the list of embedded
      domains
Figure 17: Lumma attempting to connect to the list of embedded domains

All strings related to C2 communications including domains, backup domains, header, and HTTP methods are stored in encrypted format.

For instance, an encrypted C2 domain is decrypted as “mercharena[.]biz”.

Figure 18: Analysis details of Wireshark capture
Figure 18: Analysis details of Wireshark capture

For each decrypted domain, a connection attempt (POST) is made with below request parameters

Method

POST

User Agent 

"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"

Endpoint

/api

Content-type

application/x-www-form-urlencoded

body

act=life

Table 3 : POST request parameters


Figure 19: POST request arguments starting Alternative Domain, Endpoint,
      Content-Type and request body
Figure 19: POST request arguments starting Alternative Domain, Endpoint, Content-Type and request body

The response from the server is expected to be "ok".

Figure 20: Lumma validates the response from the server to match the string
      “ok”. Notably, this string is encrypted rather than stored in plain text.
Figure 20: Lumma validates the response from the server to match the string “ok”. Notably, this string is encrypted rather than stored in plain text.

Steam as backup Domain

Lumma checks if the primary domain is available, If not, it attempts to reach the backup domains. In the event that all backup domains are unresponsive, Lumma will use the gaming website Steam[.]com to generate a C2 URL.

Lumma initiates a request to a Steam community profile at the following URL:
hxxps://steamcommunity.com/profiles/76561199724331900

From the response, Lumma extracts the Steam username and uses it to derive the C2 URL. Below image shows the usernames, used by the threat actor in the past. The usernames represent the C2 domain name in encrypted fashion.

Figure 21: Threat actor frequently modifies the steam usernames
Figure 21: Threat actor frequently modifies the steam usernames

For example, the HTML title tag in the profile page might be:

  • <title>Steam Community :: ytvzwlj-czxlyzg.df</title>

The username is initially encrypted, but the Lumma decrypts it to obtain the final C2 URL, which is:

  • hxxps://nikolay-romanov[.]su/

For this sample, the domain “mercharena[.]biz” was active and returned the expected “ok” response. Then, Lumma sends another POST request with body containing action(act) property as “recive_message” (with the misspelling of the word receive), version as “4.0” and  license ID as “f9tVYj--testik1”

“act=recive_message&ver=4.0&lid=f9tVYj--testik1&j=”

Sha256 80741061ccb6a337cbdf1b1b75c4fcfae7dd6ccde8ecc333fcae7bcca5dc8861
Build ID f9tVYj--testik1
C2 domains http:[//]blast-hubs.com/
http:[//]blastikcn.com/
http:[//]generalmills.pro/
http:[//]mercharena.biz/
http:[//]naturewsounds.help/
http:[//]nestlecompany.pro/
http:[//]shiningrstars.help/
http:[//]stormlegue.com/
Table 4 : Malware Build ID and Command & Control domains

C2 returned an encrypted configuration file. After decryption, the contents revealed a malware configuration file in JSON format, which detailed the specific data Lumma intends to exfiltrate, including browser data, wallet information, password manager details, and critical file paths.

Figure 22: Encrypted Lumma Response
Figure 22: Encrypted Lumma Response

The image below displays the decrypted configuration file in JSON format.

Figure 23: Decrypted Response containing build version, walletnames
Figure 23: Decrypted Response containing build version, walletnames

Anti-VM

Analysing the JSON file, the "v" property indicates the version of Lumma. The "se" property which is set to “true” appears to be responsible for taking screenshots.
The "vm" property is set to “false” in this sample, but when enabled, Lumma uses the "CPUID" instruction to check if it's running in a virtual machine environment.

The CPUID function passed with an EAX value of 0x40000000, and the return value in ECX is compared against the following VM values:

  • 564B4D56 - VMware
  • 43544743 - QEMU
  • 4D566572 - VMware
  • 786F4256 - VirtualBox
  • 65584D4D - Xen

Exfiltration

Lumma's configuration includes around 89 application names related to wallets, crypto applications, password managers, authentication apps, payment apps, and more, which are targeted for exfiltration.

Wallets targeted

  1. MetaMask
  2. 1Password
  3. Braavos
  4. AgrentX
  5. Coinhub
  6. LeapWallet
  7. Safepal
  8. LastPass
  9. RoninWallet
  10. BladeWallet
  11. Evernote
  12. MultiversXWallet
  13. ForniterWallet
  14. FluviWallet
  15. GlassWallet
  16. MorphisWallet
  17. XVerseWallet
  18. CompasWallet
  19. HavahWallet
  20. SuiWallet
  21. VenomWallet
  22. MetaMask
  23. TrustWallet
  24. TronLink
  25. RoninWallet
  26. OKX
  27. BinanceChainWallet
  28. Yoroi
  29. Nifty
  30. Math
  31. Coinbase
  32. Guarda
  33. EQUA
  34. JaxxLiberty
  35. BitApp
  36. iWlt
  37. EnKrypt
  38. Wombat
  39. MEWCX
  40. Guild
  41. Saturn
  42. NeoLine
  43. Clover
  44. Rabby
  45. Pontem
  46. Martian
  47. Bitwarden
  48. Nami
  49. Petra
  50. Sui
  51. ExodusWeb3
  52. Sub
  53. PolkadotJS
  54. Talisman
  55. CryptoCom
  56. Liquality
  57. TerraStation
  58. Keplr
  59. Sollet
  60. Auro
  61. Polymesh
  62. ICONex
  63. Nabox
  64. KHC
  65. Temple
  66. TezBox
  67. DAppPlay
  68. BitClip
  69. SteemKeychain
  70. NashExtension
  71. HyconLiteClient
  72. ZilPay
  73. Coin98
  74. Authenticator
  75. Cyano
  76. Byone
  77. OneKey
  78. Leaf
  79. Solflare
  80. MagicEden
  81. Backpack
  82. Authy
  83. EOSAuthenticator
  84. GAuthAuthenticator
  85. TrezorPasswordManager
  86. Phantom
  87. UniSat
  88. Rainbow
  89. BitgetWallet 

In addition to application names, the Lumma configuration includes paths to browsers, wallets, FTP applications, VPN software, Telegram, cloud-service provider applications, Anydesk, and password managers. Below table highlights the directory path(p), search terms(m), destination path(z), directory recurse depth(d) and exfiltration filesize(fs) - which is typically 20971520(20 MB).

Here is a table based on the provided JSON data:

t Directory path (p) Search terms (m) destination path (z) directory recurse depth (d) filesize to exfiltrate (fs)
0 %appdata%\Ethereum keystore Wallets/Ethereum 1 20971520
0 %appdata%\Exodus\exodus.wallet * Wallets/Exodus 0 20971520
0 %appdata%\LedgerLive * Wallets/LedgerLive 2 20971520
0 %appdata%\atomic\LocalStorage\leveldb * Wallets/Atomic 2 20971520
0 %appdata%\Armory *.wallet Wallets/Armory 1 20971520
0 %localappdata%\Coinomi\Coinomi\wallets * Wallets/Coinomi 2 20971520
0 %appdata%\AuthyDesktop\LocalStorage\leveldb * Wallets/AuthyDesktop 2 20971520
0 %appdata%\Bitcoin\wallets * Wallets/Bitcoincore 2 20971520
0 %appdata%\Binance app-store.json, .finger-print.fp, simple-storage.json, window-state.json Wallets/Binance 1 20971520
0 %appdata%\com.liberty.jaxx\IndexedDB * Wallets/JAXXNewVersion 2 20971520
0 %appdata%\Electrum\wallets * Wallets/Electrum 0 20971520
0 %appdata%\Electrum-LTC\wallets * Wallets/Electrum-LTC 0 20971520
0 %appdata%\ElectronCash\wallets * Wallets/ElectronCash 0 20971520
0 %appdata%\Guarda\IndexedDB * Wallets/Guarda 2 20971520
0 %appdata%\DashCore\wallets *.dat Wallets/DashCore 1 20971520
0 %appdata%\WalletWasabi\Client\Wallets * Wallets/Wasabi 0 20971520
0 %appdata%\DaedalusMainnet\wallets she.*.sqlite Wallets/Daedalus 0 20971520
1 %localappdata%\Google\Chrome\UserData   Chrome GoogleChrome, chrome.exe, chrome.dll  
1 %localappdata%\Google\ChromeBeta\UserData   ChromeBeta GoogleChromeBeta, chrome.exe, chrome.dll  
1 %appdata%\OperaSoftware\OperaStable   Opera opera.exe  
1 %localappdata%\OperaSoftware\OperaNeon\UserData   OperaNeon    
1 %appdata%\OperaSoftware\OperaGXStable   OperaGXStable opera.exe  
1 %localappdata%\Microsoft\Edge\UserData   Edge MicrosoftEdge, msedge.exe, msedge.dll  
1 %localappdata%\BraveSoftware\Brave-Browser\UserData   Brave BraveSoftwareBrave-Browser, brave.exe, chrome.dll  
1 %localappdata%\EpicPrivacyBrowser\UserData   EpicPrivacyBrowser    
1 %localappdata%\Vivaldi\UserData   Vivaldi    
1 %localappdata%\Maxthon\UserData   Maxthon    
1 %localappdata%\Iridium\UserData   Iridium    
1 %localappdata%\AVG\Browser\UserData   AVGSecureBrowser    
1 %localappdata%\Tencent\QQBrowser\UserData   QQBrowser    
1 %localappdata%\360Browser\Browser\UserData   360Browser    
1 %localappdata%\SuperBrowser\UserData\BrowserWorkbench_1   ZiNiaoBrowser    
1 %localappdata%\CentBrowser\UserData   CentBrowser    
1 %localappdata%\Chedot\UserData   Chedot    
1 %localappdata%\CocCoc\Browser\UserData   CocCoc    
2 %appdata%\Mozilla\Firefox\Profiles   MozillaFirefox    
2 %appdata%\Waterfox\Profiles   Waterfox    
2 %appdata%\MoonchildProductions\PaleMoon\Profiles   PaleMoon    
0 %userprofile% *.kbdx Applications/KeePass 2 20971520
0 %localappdata%\1Password .sqlite Applications/1Password 0 20971520
0 %appdata%\Bitwarden data.json Applications/Bitwarden 0 20971520
0 %appdata%\NordPass nordpass*.json, nordpass*.sqlite Applications/NordPass 0 20971520
0 %userprofile% seed, pass, ledger, trezor, metamask, bitcoin, words, wallet ImportantFiles/Profile 3 1048576
0 %userprofile%\Desktop *.txt ImportantFiles/Desktop 2 20971520
0 %appdata%\TelegramDesktop *s Applications/Telegram 3 20971520
0 %programfiles%\TelegramDesktop *s Applications/Telegram 3 20971520
0 %programw6432%\TelegramDesktop *s Applications/Telegram 3 20971520
0

%localappdata%\Packages\TelegramMessengerLLP.TelegramDesktop_t4vj0pshhgkwm\LocalCache\Roaming\TelegramDesktopUWP

*s Applications/TelegramUWP 3 20971520
0 %appdata%\FileZilla recentservers.xml, sitemanager.xml Applications/FileZilla 2 20971520
0 %appdata%\GHISLER wcx_ftp.ini Applications/TotalCommander 0 20971520
0 %userprofile% site.xml Applications/AnyClient 0 20971520
0 %programdata%\SiteDesigner\3D-FTP sites.ini Applications/3D-FTP 0 20971520
0 %appdata%\SmartFTP\Client2.0\Favorites * Applications/SmartFTP 1 20971520
0 %appdata%\FTPGetter servers.xml Applications/FTPGetter 0 20971520
0 %appdata%\FTPbox profiles.conf Applications/FTPbox 0 20971520
0 %appdata%\FTPInfo ServerList.xml Applications/FTPInfo 0 20971520
0 %appdata%\FTPRush RushSite.xml Applications/FTPRush 0 20971520
0 %programfiles%\FTPCommanderDeluxe FTPLIST.TXT Applications/FTPCommanderDeluxe 0 20971520
0 %localappdata%\DeskShareData\FTPManagerLite FTPManagerLiteSettings.db Applications/FTPManagerLite 1 20971520
0 %localappdata%\DeskShareData\AutoFTPManager AutoFTPManagerSettings.db Applications/AutoFTPManager 1 20971520
0 %appdata%\OpenVPNConnect config.json, *.ovpn Applications/OpenVPN 1 20971520
0

%localappdata%\NordVPN\NordVPN.exe_Path_5foiwug0gwlftdgafkj0xqqcuqqyshwn

user.config Applications/NordVPN 1 20971520
0

%localappdata%\ProtonVPN\ProtonVPN_Url_cmnccr2xp2ofmvhglly0haihuyzzqh0i

user.config Applications/ProtonVPN 1 20971520
0 %appdata%\AnyDesk *.conf Applications/AnyDesk 2 20971520
0 %appdata%\gcloud *.db, *.json Applications/GoogleCloud 2 20971520
0 %userprofile%.azure * Applications/Azure 1 20971520
0 %userprofile%.aws * Applications/Azure 1 20971520
0 %localappdata%.IdentityService msal.cache, msalv2.cache Applications/Azure 0 20971520
Table 5 :  Lumma’s configuration extracted from the JSON response

The image below illustrates the file paths that Lumma searches. If a specified path is found, the file is read and stored in the designated directory path before being exfiltrated to C2.

Figure 24: Lumma’s File activities recorded
Figure 24: Lumma’s File activities recorded

Lumma is also capable of stealing data from below listed mail applications,

  • TheBat
  • Pegasus
  • Mailbird
  • EmClient
Figure 25: Config JSON - Mail Clients
Figure 25: Config JSON - Mail Clients

Conclusion

In conclusion, Lumma Stealer continues to pose a significant threat to data security. It constantly adapts its TTPs and payloads to bypass security defenses. Trellix remains committed to persevering in the fight against this ever-evolving malware, ensuring the protection of our customers' data.

IOC’s and artifacts

C2 Domains/URLs

http:[//]blast-hubs.com/ 

http:[//]blastikcn.com/

http:[//]generalmills.pro/

http:[//]mercharena.biz/ 

http:[//]naturewsounds.help/

http:[//]nestlecompany.pro/

http:[//]stormlegue.com/

https:[//]nikolay-romanov[.]su/


SHA256 Hashes
80741061ccb6a337cbdf1b1b75c4fcfae7dd6ccde8ecc333fcae7bcca5dc8861 (Lumma)
e9e568dce12ca4392001860c693292203b2bfcbbb277a484e4d2ebb5b0449207 (Lumma)
1345ad4c782c91049a16ec9f01b04bfc83a4f0e1e259cfed2b535f8ec6b75590 (Lumma)
4abe068f8e8632a9074556f2adb39dd2c52a1bf631abbf5bfd47888059c35350 (Lumma)
629618eb8225361b068a11ce07f46eefd0ce4098266f274f0d56b75fb5a77321 (Lumma)
7034406778028fd6edbb340fdaeddbbec3d1f8665e8332063edc75dfaee482d1 (Lumma)
aa2dfa4e02b2eb688c7ba0d29619e082214251930e39727e35b53a436766825a (Lumma)
c2ab516bb3a39832d963770d813ab77027d454a087ad9fae8ce24336a78f9073 (Lumma)
c340bf332f68794afa171c68efadf9b1e742e4ad577582adfed61567a65aa91c (Lumma)
e52f5fcfc8034e46e0f3ff826d437ce69f7d9da30019115008f823c9b7ffb929 (Lumma)
eb69158f493de304592e67de21a42cd094693bda13fb211c46353248706df696 (Lumma)
253cdcfd6f8b6e52133bc59df92563e432b335d2a207f2f8e01fac2423ccbac8 (Powershell script)
90e35b4a519af394e32cd09d34c6d5f60b31726672aa41e37e2163c387f96a75 (Powershell script)
B3428248caa364461d4521e2ff3c853228c38f9dc2fb5bcc9049e6652bb94ba2 (Lumma payload)
B33648806f28bae6d57103a2081df7d8e8dd03db586c03057f9c60e9ac3b2bc0 (Lumma payload)
101e4eabfde77d3a2d3877042a72bed101973d0c511ba031e6e27785d48f61fd (GOO.dll)
A7f7a3c408c4839fb2dc28b7fc99f64f464d4e1aeedd75293937769626962c18 (GOO.dll)

Tactics, Techniques, and Procedures

Tactic Technique Sub-Technique ID Use
Defense Evasion Obfuscated Files or Information T1027 Implements Code flow obfuscation
  Impair Defenses: Disable or Modify Tools T1562 Disables Process instrumentation callback hooks 
  Obfuscated Files or Information: Dynamic API Resolution T1027 Uses API resolving technique to dynamically resolve APIs
Discovery System Information Discovery T1082 Collects system informations such as username, Computer name, User Default Language, HWID, RAM size, CPU/GPU information, 
  File and Directory Discovery T1083 Collects process and installed software information
Collection Automated Collection T1119 Collects data automatically based on C2 server JSON response
  Data from Local System T1005 Steals system data
  Clipboard Data T1115 Steals clipboard data
  Screen Capture T1113 Performs Screen capture
Command and Control Encrypted Channel T1573 Uses encryption to conceal exfiltrated data

Trellix ENS detections

Hash (MD5) Detection Name
9eaede7e8981fc39c0ccbe45e8ee2bf3/
80741061ccb6a337cbdf1b1b75c4fcfae7dd6ccde8ecc333fcae7bcca5dc8861
Lumma!9EAEDE7E8981
fbcf8775e7fb3ac822f8f67ff2fe990e/
e9e568dce12ca4392001860c693292203b2bfcbbb277a484e4d2ebb5b0449207
Lumma!FBCF8775E7FB

Trellix EDR Detections

Rule Name Description
_Api_PE_header_WriteProcessMemory2 Wrote PE header into remote process (PE file DOS header)
_api_process_hollowed_regasm Suspicious process injection by Regasm.exe or Regsvcs.exe (process hollowing)
_apt_process_regdotnet Manipulated .NET Component Object Model (COM) assemblies
_process_psloadassembly Invoked methods from .Net Assemblies via PowerShell and Reflection API
_script_base64_dos_header Script executed includes encoded DOS header
_process_api_getlogicaldriveSW Suspicious process performed File and Directory discovery via GetLogicalDriveStringsW API
_api_apc_injection (Exploratory) APC Injection via NtQueueApcThread API (Variation)
_process_ce_lolbin Created and executed LOLBIN binary (potential malware behaviour)

Discover the latest cybersecurity research from the Trellix Advanced Research Center: https://www.trellix.com/advanced-research-center/

Get the latest

Stay up to date with the latest cybersecurity trends, best practices, security vulnerabilities, and so much more.
Please enter a valid email address.

Zero spam. Unsubscribe at any time.