CrealStealer

Creal: New Stealer Targeting Cryptocurrency Users Via Phishing Sites

Cyble Research & Intelligence labs analyzes Creal Stealer, an open-source stealer actively abused by TAs through phishing sites.

Open-Source Stealer Widely Abused by Threat Actors

The threat of InfoStealers is widespread and has been frequently employed by various Threat Actors (TA)s to launch attacks and make financial gains. Until now, the primary use of stealers by TAs has been to sell logs or to gain initial entry into a corporate network.

Recently, however, TAs have started exploiting this type of malware to disseminate crypto scams through YouTube channels. TAs successfully hacked a YouTube channel that had over 10 million subscribers and removed the original content of the channel, replacing it with two videos promoting cryptocurrency scams. According to reports, the TAs gained access to the YouTube account by stealing session cookies. It is believed that stealer malware might have been involved in the attack.

Recently Cyble Research and Intelligence Labs (CRIL) discovered a phishing site mimicking a Cryptocurrency mining platform that was spreading Creal Stealer.

The figure below shows the phishing site.

Figure 1 Phishing Site
Figure 1 – Phishing Site

This site was hosting the stealer payload on Dropbox at hxxps[:]//www[.]dropbox[.]com/s/dl/x4vgcaac6hcdgla/kryptex-setup-4.25.7[.]zip.

The stealer binary (SHA 256: f3197e998822bc45cb9f42c8b153c59573aad409da01ac139b7edd8877600511) is compiled using PyInstaller indicating that the stealer is coded in Python.

Figure 2 File Details
Figure 2 – File Details

After extracting the contents of the PyInstaller compiled file, we spotted a PYC file dubbed ‘Creal’.

The figure below shows the extracted files.

Figure 3 Creal Stealer PYC File
Figure 3 – Creal Stealer PYC File

Further investigation revealed that this stealer’s source code and builder were also available on a GitHub repository.

The figure below shows the Creal Stealer GitHub repository.

Figure 4 Creal Stealer GitHub Repo
Figure 4 – Creal Stealer GitHub Repo

We have also observed nearly 50 samples in the wild, indicating that the TAs were actively utilizing the Open-Source code to infect unsuspecting users.

Technical Analysis

Environment Checks

During the initial execution, the stealer identifies whether it is being run in a controlled environment. It checks if the victim’s username (obtained via the getpass.getuser() function) is present in a list called ‘blacklistUsers’.

The table below contains the blacklisted usernames. If a username is found in this list, then the stealer will immediately terminate its execution using the os._exit(0) function.

The table below contains the blacklisted usernames.

WDAGUtilityAccountLisa3u2v9m8Lucas
AbbyJohnJuliamike
hmarcgeorgeHEUeRzlPateX
patexPxmdUOpVyxfredh7dk1xPr
RDhJ0CNFevzX8VizSMserverLouise
kEecfMwgjw0fjuOVmCcP5ABvJChRPnsxnUser01
FranklmVwjj9bHarry Johnsontest
8Nl0ColNQ5bqPqONjHVwexsSSqgFOf3GRGzcBUyrznReg

After this, the stealer defines a list named “blacklistUsername” and then gets the hostname of the victim’s machine using the socket.gethostname() method. The script proceeds to verify if the obtained hostname matches any of the names in the “blacklistUsername” list.

If a match is discovered, the script promptly terminates itself by executing the os._exit(0) function.

The table below shows the hardcoded blacklisted hostnames present in the stealer binary.

BEE7370C-8C0C-4LISA-PCDESKTOP-7XC6GEZSERVER-PCACEPC
DESKTOP-NAKFFMTJOHN-PCDESKTOP-5OV9S0OTIQIYLA9TW5MMIKE-PC
WIN-5E07COS9ALRDESKTOP-B0T93D6QarZhrdBpjDESKTOP-KALVINODESKTOP-IAPKN1P
B30F0242-1C6A-4DESKTOP-1PYKP29ORELEEPCCOMPNAME_4047DESKTOP-NTU7VUO
DESKTOP-VRSQLAGDESKTOP-1Y2433RARCHIBALDPCDESKTOP-19OLLTDLOUISE-PC
Q9IATRKPRHWILEYPCJULIA-PCDESKTOP-DE369SET00917
XC64ZBWORKd1bnJkfVlHEA8C2E2A-D017-4test42]
DESKTOP-D019GDM6C4E733F-C2D9-4NETTYPCAIDANPC
DESKTOP-WI8CLETRALPHS-PCDESKTOP-BUGIOLUCAS-PC
SERVER1DESKTOP-WG3MYJSDESKTOP-CBGPFEEMARCI-PC

Now the stealer checks if the MAC address of the victim’s machine is present in the blacklist of MAC addresses defined in a list named BLACKLIST1. It initially retrieves the machine’s MAC address using the getnode() function from the uuid module and then checks whether the victim’s MAC address is present in BLACKLIST1.

If it is present, the os._exit(0) function is called, which immediately exits the stealer.

The table below contains the MAC addresses present in BLACKLIST1.

00:15:5d:00:07:3400:25:90:36:f0:3b00:50:56:a0:cd:a87e:05:a3:62:9c:4d
00:e0:4c:b8:7a:5800:1b:21:13:21:2600:50:56:b3:fa:2352:54:00:b3:e4:71
00:0c:29:2c:c1:2100:50:56:b3:50:de52:54:00:a0:41:9290:48:9a:9d:d5:24
00:25:90:65:39:e400:1b:21:13:32:5100:50:56:b3:f6:5700:50:56:b3:3b:a6
c8:9f:1d:b6:58:e4a6:24:aa:ae:e6:1200:e0:4c:56:42:9792:4c:a8:23:fc:2e
00:25:90:36:65:0c08:00:27:45:13:10ca:4d:4b:ca:18:cc5a:e2:a6:a4:44:db
00:15:5d:00:00:f300:1b:21:13:26:44f6:a5:41:31:b2:7800:50:56:ae:6f:54
2e:b8:24:4d:f7:de3c:ec:ef:43:fe:ded6:03:e4:ab:77:8e42:01:0a:96:00:33
00:15:5d:13:6d:0cd4:81:d7:ed:25:5400:50:56:ae:b2:b000:50:56:97:a1:f8
00:50:56:a0:dd:0000:25:90:36:65:3800:50:56:b3:94:cb5e:86:e4:3d:0d:f6
00:15:5d:13:66:ca00:03:47:63:8b:de42:01:0a:8e:00:2200:50:56:b3:ea:ee
56:e8:92:2e:76:0d00:15:5d:00:05:8d00:50:56:b3:4c:bf3e:53:81:b7:01:13
ac:1f:6b:d0:48:fe00:0c:29:52:52:5000:50:56:b3:09:9e00:50:56:97:ec:f2
00:e0:4c:94:1f:2000:50:56:b3:42:3300:50:56:b3:38:8800:e0:4c:b3:5a:2a
00:15:5d:00:05:d53c:ec:ef:44:01:0c00:50:56:a0:d0:fa12:f8:87:ab:13:ec
00:e0:4c:4b:4a:4006:75:91:59:3e:0200:50:56:b3:91:c800:50:56:a0:38:06
42:01:0a:8a:00:2242:01:0a:8a:00:333e:c1:fd:f1:bf:712e:62:e8:47:14:49
00:1b:21:13:15:20ea:f6:f1:a2:33:7600:50:56:a0:6d:8600:0d:3a:d2:4f:1f
00:15:5d:00:06:43ac:1f:6b:d0:4d:9800:50:56:a0:af:7560:02:92:66:10:79
00:15:5d:1e:01:c81e:6c:34:93:68:6400:50:56:b3:dd:0300:50:56:a0:d7:38
00:50:56:b3:38:6800:50:56:a0:61:aac2:ee:af:fd:29:21be:00:e5:c5:0c:e5
60:02:92:3d:f1:6942:01:0a:96:00:2200:50:56:b3:ee:e100:50:56:a0:59:10
00:e0:4c:7b:7b:8600:50:56:b3:21:2900:50:56:a0:84:8800:50:56:a0:06:8d
00:e0:4c:46:cf:0100:15:5d:00:00:b300:1b:21:13:32:2000:e0:4c:cb:62:08
42:85:07:f4:83:d096:2b:e9:43:96:763c:ec:ef:44:00:d04e:81:81:8e:22:4e
56:b0:6f:ca:0a:e7b4:a9:5a:b1:c6:fd00:50:56:ae:e5:d508:00:27:3a:28:73
12:1b:9e:3c:a6:2cd4:81:d7:87:05:ab00:50:56:97:f6:c800:15:5d:00:00:c3
00:15:5d:00:1c:9aac:1f:6b:d0:49:8652:54:00:ab:de:5900:50:56:a0:45:03
00:15:5d:00:1a:b952:54:00:8b:a6:0800:50:56:b3:9e:9e12:8a:5c:2a:65:d1
b6:ed:9d:27:f4:fa00:0c:29:05:d8:6e00:50:56:a0:39:1816:ef:22:04:af:76
00:15:5d:00:01:8100:23:cd:ff:94:f032:11:4d:d0:4a:9e00:15:5d:23:4c:ad
4e:79:c0:d9:af:c300:e0:4c:d6:86:7700:50:56:b3:d0:a71a:6c:62:60:3b:f4
00:15:5d:b6:e0:cc3c:ec:ef:44:01:aa94:de:80:de:1a:3500:15:5d:00:00:1d
00:15:5d:00:02:2600:15:5d:23:4c:a300:50:56:ae:5d:ea00:e0:4c:44:76:54
00:50:56:b3:05:b400:1b:21:13:33:5500:50:56:b3:14:59ac:1f:6b:d0:4d:e4
1c:99:57:1c:ad:e400:15:5d:00:00:a4ea:02:75:3c:90:9f52:54:00:3b:78:24

Afterward, the stealer checks if the victim’s public IP address is present in a blacklist called “sblacklist”. It first uses the subprocess module to run a curl command to retrieve the device’s public IP address. It then checks if this IP address is present in the blacklist. The stealer exits the program if the IP is found in the blacklist.

The table below contains the IP addresses in “sblacklist”.

88.132.231.71188.105.91.116109.74.154.9295.25.81.24
207.102.138.8334.105.183.68213.33.142.5092.211.52.62
174.7.32.19992.211.55.199109.74.154.9188.132.227.238
204.101.161.3279.104.209.3393.216.75.20935.199.6.13
207.102.138.9395.25.204.90192.87.28.10380.211.0.97
78.139.8.5034.145.89.17488.132.226.20334.85.253.170
20.99.160.173109.74.154.90195.181.175.10523.128.248.46
88.153.199.169109.145.173.16988.132.225.10035.229.69.227
84.147.62.1234.141.146.11492.211.192.14434.138.96.23
194.154.78.160212.119.227.15134.83.46.130192.211.110.74
92.211.109.160195.239.51.59188.105.91.14335.237.47.12
195.74.76.222192.40.57.23434.85.243.24187.166.50.213
34.105.0.2764.124.12.16234.141.245.2534.253.248.228
195.239.51.334.142.74.220178.239.165.70212.119.227.167
35.192.93.107188.105.91.17384.147.54.113193.225.193.201
34.145.195.5834.105.72.241193.128.114.45

Now, the stealer checks if certain Python modules are installed, and if they are not, it attempts to install them using pip. The modules to be checked and installed are defined in a nested list named “requirements”.

This list contains two strings: the name of the module to be checked and the name of the package that provides the module. Then it loops through each item in the requirements list and tries to import the module using the __import__ function.

If the import fails (which means the module is not installed), the code launches a subprocess to install the package using pip by running the command executable -m pip install <package_name>.

After launching the subprocess to install the package, the code sleeps for 3 seconds before moving on to the next item in the requirements list. The purpose of this sleep period is to give the pip enough time to complete the installation before moving on to the next package.

Figure 5 Install Modules
Figure 5 – Installing Modules

Persistence

The stealer achieves persistence by copying itself to

AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\ directory using the shutil.copyfileobj() function.

The figure below shows the persistence technique used in this stealer.

Figure 6 Persistence
Figure 6 – Establishing Persistence

Data Collection

The stealer defines and assigns values to global variables such as keyword, cookiWords, paswWords, CookiCount, P4sswCount, WalletsZip, GamingZip, and OtherZip.

Figure 7 Global Variables
Figure 7 – Global Variables

The keyword variable contains certain names and their respective domain names that the stealer targets. Now, the stealer retrieves login credentials and cookies from the browsers based on the list of names mentioned in the table below.

NameDomainNameDomain
coinbasehxxps://coinbase.comminecrafthxxps://minecraft.net
sellixhxxps://sellix.iopaypalhxxps://paypal.com
gmailhxxps://gmail.comoriginhxxps://origin.com
steamhxxps://steam.comamazonhxxps://amazon.com
Discordhxxps://Discord.comebayhxxps://ebay.com
riotgameshxxps://riotgames.comaliexpresshxxps://aliexpress.com
youtubehxxps://youtube.complaystationhxxps://playstation.com
instagramhxxps://instagram.comhbohxxps://hbo.com
tiktokhxxps://tiktok.comxboxhxxps://xbox.com
twitterhxxps://twitter.combinancehxxps://binance.com
facebookhxxps://facebook.comhotmailhxxps://hotmail.com
epicgameshxxps://epicgames.comoutlookhxxps://outlook.com
spotifyhxxps://spotify.comcrunchyrollhxxps://crunchyroll.com
yahoohxxps://yahoo.comtelegramhxxps://telegram.com
robloxhxxps://roblox.compornhubhxxps://pornhub.com
twitchhxxps://twitch.comdisneyhxxps://disney.com
uberhxxps://uber.comexpressvpnhxxps://expressvpn.com
netflixhxxps://netflix.com

Now, the stealer creates multiple threads using the threading module in Python and initiates the data-stealing functionality in parallel.

As shown in the figure below, the malware iterates through a list of application paths, starts a thread for each path it encounters, and executes a specific function responsible for stealing data from the victim’s machine.

Figure 8 Multithreading
Figure 8 – Multithreading

This stealer targets Chromium-based browsers, chat and gaming applications, cold crypto wallets, and browser extensions.

The figure below shows the applications targeted by Creal Stealer.

Figure 9 Targeted Applications
Figure 9 – Targeted Applications

Creal stealer makes a GET request to hxxps[:]//api.ipify.org/ to identify the victim’s IP. Now it appends the IP address to hxxps[:]//geolocation-db.com/jsonp/ and makes a GET request to fetch the victim’s geolocation details.

As shown in the figure below, these geolocation details are added to the variables and will be later sent to the TA’s Discord channel.

Figure 10 Fetching Geoinformation
Figure 10 – Fetching Geoinformation

To store the stolen data, including cookies and passwords, this stealer employs a commonly used function called wr1tef0rf1l3 that writes the information into files for exfiltration. The wr1tef0rf1l3 function requires two arguments, “data” and “name”.

The “data” argument holds the stolen data that is to be saved, while the “name” argument specifies the desired filename. These files are saved in the %temp% directory, and the file names are prefixed with the string “cr”, as shown below.

Figure 11 Writes Stolen Data
Figure 11 – Writing Stolen Data

Data Exfiltration

Creal Stealer is capable of exfiltrating data using Discord Webhooks and multiple file-hosting & sharing platforms such as Anonfiles and Gofile. Prior to exfiltration, this stealer removes the file extensions of .txt files containing the stolen data and compresses these files using the zip file module.

The figure below shows Creal stealer’s file upload code.

Figure 12 Removes .txt
Figure 12 – Removes .txt Extension

Finally, Creal Stealer makes a POST request using the urlopen() function to exfiltrate data using a Discord webhook. This stealer uses a dictionary object containing HTTP request headers, as shown in the figure below.

Figure 13 Request Header
Figure 13 – Requesting Header

The figure below shows the data exfiltration using Discord webhooks.

Figure 14 Data
Figure 14 – Data Exfiltration via Discord

Conclusion

Creal Stealer’s builder and source code are available on GitHub, which enables TAs to modify the code to suit their requirements. This can result in the emergence of various stealers from Creal Stealer’s source code, posing a significant threat to users. The trend of using open-source code in malware is increasing among cybercriminals, since it allows them to create sophisticated and customized attacks with minimal expenses.

Our Recommendations: 

  • Avoid downloading applications from unknown sources. 
  • Use a reputed anti-virus and internet security software package on your connected devices, including PC, laptop, and mobile.  
  • Use strong passwords and enforce multi-factor authentication wherever possible.  
  • Update your passwords periodically.  
  • Refrain from opening untrusted links and email attachments without first verifying their authenticity.  
  • Block URLs that could be used to spread the malware, e.g., Torrent/Warez.  
  • Monitor the beacon on the network level to block data exfiltration by malware or TAs.  
  • Enable Data Loss Prevention (DLP) Solutions on employees’ systems.  

MITRE ATT&CK® Techniques

Tactic  Technique ID  Technique Name  
Execution  T1204  User Execution  
Persistence T1547.001 Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder 
Credential Access  T1555  
T1539
T1528  
Credentials from Password Stores  
Steal Web Session Cookie  
Steal Application Access Token  
Discovery  T1087  
T1518  
T1057  
T1124  
T1007  
T1614  
Account Discovery  
Software Discovery  
Process Discovery  
System Time Discovery  
System Service Discovery  
System Location Discovery    
Command and Control  T1071 
T1102
Application Layer Protocol  
Web Service
Exfiltration  T1041    Exfiltration Over C&C Channel  

Indicators of Compromise (IoCs):

 

Indicators  Indicator type  Description  
bb2ca78ffff72d58599d66bf9b2f0ae6
20dcb84660e5f79a98c190d3d455fce368d96f35
4ee417cbefa1673d088a32df48b8182bdad244541e8dc02faf540b9aa483fdcb   
MD5
SHA1
SHA256 
Creal Stealer
929e6f2c8896059c72368915abcaefa2
7122f0b88607061806fd62282e8b175ae28b7e29
f3197e998822bc45cb9f42c8b153c59573aad409da01ac139b7edd8877600511 
MD5
SHA1
SHA256 
Malicious Zip Archive 
hxxps[:]//www.dropbox[.]com/s/dl/x4vgcaac6hcdgla/kryptex-setup-4.25.7[.]zip URL Malicious URL
kryptex[.]softwareURLMalicious URL

Share the Post:

Discover more from Cyble

Subscribe now to keep reading and get access to the full archive.

Continue reading

Scroll to Top