SkullLocker est un ransomware Windows dont les premières traces remontent au 28 février 2023. Il s’agit d’une variante du ransomware Chaos découvert durant l’été 2021. SkullLocker est diffusé par l’intermédiaire de mails de phishing et de sites de torrent. Le langage des instructions de rançon semble indiquer que le malware vise la Pologne.
Le sample du ransomware SkullLocker
Voici les informations d’identification de l'échantillon étudié.
Ransomware SkullLocker : analyse technique
Le sample est un exécutable PE écrit en .NET mais sans aucune couche d'obfuscation. Le sample étant de petite taille, il est possible de mener une analyse complète des fonctionnalités du malware.
Le sample présente une fonction Main
qui décrit d'un point de vue macro toutes les actions du malware.
Voici la liste des actions effectuées par le ransomware :
- vérification que le malware n'est pas déjà en exécution ;
- élévation de privilèges et déplacement de l'exécution dans
%AppData%
; - mise en place de la persistance ;
- chiffrement des fichiers ;
- désactivation des mécanismes de récupération des données ;
- propagation ;
- mise en place des instructions de rançon ;
- mise en place d'un mécanisme de détournement de transactions bitcoin.
Nous allons rentrer dans le détail de chacune de ces actions dans les paragraphes suivants.
Vérification que le malware n'est pas déjà en exécution
Le malware vérifie qu’il n’est pas déjà lancé sur le poste. Pour cela, il liste les noms des exécutables des autres processus du système et s’arrête s’il est déjà présent.
Élévation de privilèges et déplacement de l'exécution dans %AppData%
Le malware effectue une élévation de privilèges de manière très basique : il copie son propre exécutable à l'emplacement %AppData%\svchost.exe
puis demande son lancement avec les droits administrateur.
Selon la configuration du système, un prompt UAC va apparaitre. Il est possible pour un utilisateur averti de remarquer l’attaque car le svchost.exe de Microsoft est un exécutable signé, ce qui n’est pas le cas de celui déclenché par le malware. Si l'utilisateur refuse la demande, le malware réitère la requête en boucle jusqu'à ce que l'utilisateur accepte.
Une fois le process privilégié lancé, le processus originel s'arrête. Toutes les autres étapes seront réalisées par le processus privilégié.
Si l’élévation de privilèges échoue, le malware effectue tout de même le déplacement de l’exécutable vers %AppData%
.
Mise en place de la persistance
Pour assurer une persistance sur le système, le malware s'inscrit dans le dossier « Startup » en écrivant un fichier à l'emplacement %AppData%\Microsoft\Windows\Start Menu\Programs\Startup\svchost.url
. En renseignant son exécutable dans le fichier, le malware s'assure d'être démarré automatiquement par Windows à chaque ouverture de session de cet utilisateur. MITRE catégorise cette technique sous l’identifiant T1547.001.
Voici le contenu du fichier svchost.url
:
[InternetShortcut]
URL=file:///C:\Users\admin\AppData\Roaming\svchost.exe
IconIndex=0
IconFile=C:/Users/admin/AppData/Roaming/svchost.exe
L’image ci-dessous montre le code du malware réalisant cette action :
Chiffrement des fichiers
Le malware liste les dossiers dans lesquels il va chiffrer récursivement les fichiers. On y retrouve :
- les disques montés autres que
C:
; - ces dossiers du profil de l'utilisateur courant ;
- Desktop ;
- Links ;
- Contacts ;
- Documents ;
- Downloads ;
- Pictures ;
- Music ;
- OneDrive ;
- Saved Games ;
- Favorites ;
- Searches ;
- Videos ;
- le dossier
%AppData%
; - ces dossiers communs à tous les utilisateurs (par défaut, présents dans
C:\Users\Public
) :- Documents ;
- Pictures ;
- Music ;
- Videos ;
- Desktop.
Voici le code listant les différents dossiers à chiffrer :
Chiffrement d’un dossier
Dans chaque dossier parcouru, le malware vérifie que les fichiers soient dans la liste de ceux ciblés pour le chiffrement :
Pour cela, le malware se base sur l'extension. Si le fichier a une extension présente dans cette liste, il sera traité par le malware :
.txt .jar .dat .contact .settings .doc .docx .xls .xlsx .ppt .pptx .odt .jpg .mka .mhtml .oqy .png .csv .py .sql .mdb .php .asp .aspx .html .htm .xml .psd .pdf .xla .cub .dae .indd .cs .mp3 .mp4 .dwg .zip .rar .mov .rtf .bmp .mkv .avi .apk .lnk .dib .dic .dif .divx .iso .7zip .ace .arj .bz2 .cab .gzip .lzh .tar .jpeg .xz .mpeg .torrent .mpg .core .pdb .ico .pas .db .wmv .swf .cer .bak .backup .accdb .bay .p7c .exif .vss .raw .m4a .wma .flv .sie .sum .ibank .wallet .css .js .rb .crt .xlsm .xlsb .7z .cpp .java .jpe .ini .blob .wps .docm .wav .3gp .webm .m4v .amv .m4p .svg .ods .bk .vdi .vmdk .onepkg .accde .jsp .json .gif .log .gz .config .vb .m1v .sln .pst .obj .xlam .djvu .inc .cvs .dbf .tbi .wpd .dot .dotx .xltx .pptm .potx .potm .pot .xlw .xps .xsd .xsf .xsl .kmz .accdr .stm .accdt .ppam .pps .ppsm .1cd .3ds .3fr .3g2 .accda .accdc .accdw .adp .ai .ai3 .ai4 .ai5 .ai6 .ai7 .ai8 .arw .ascx .asm .asmx .avs .bin .cfm .dbx .dcm .dcr .pict .rgbe .dwt .f4v .exr .kwm .max .mda .mde .mdf .mdw .mht .mpv .msg .myi .nef .odc .geo .swift .odm .odp .oft .orf .pfx .p12 .pl .pls .safe .tab .vbs .xlk .xlm .xlt .xltm .svgz .slk .tar.gz .dmg .ps .psb .tif .rss .key .vob .epsp .dc3 .iff .onepkg .onetoc2 .opt .p7b .pam .r3d
Traitement des fichiers
Le malware effectue un traitement différent suivant la taille du fichier. Si le fichier fait moins de 2 Mo, il sera chiffré (cf prochaine partie). S'il est plus grand, il sera écrasé par des données aléatoires.
Important à noter : il est donc impossible de retrouver les fichiers d'origine faisant plus de 2 Mo, même en payant la rançon...
Chiffrement d’un fichier
Le chiffrement des fichiers s'effectue en AES, alors que la clé secrète est, elle, chiffrée en RSA. Plus précisément, voici la procédure appliquée pour le chiffrement :
Un mot de passe unique est généré par fichier. Il est constitué de 20 caractères tirés aléatoirement dans l’ensemble de caractères suivant : abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890*!=&?/
. Ce mot de passe est ensuite utilisé pour dériver la clé de chiffrement AES avec la fonction PBKDF2 (Base sur HMAC et SHA1). Le mot de passe est tout d’abord chiffré via RSA en utilisant une clé publique de 1 024 bits, stockée dans les données du binaire.
Voici le code d’initialisation de la clé publique RSA :
Le contenu du fichier est chiffré via AES 256 en mode CBC, puis codé en base64. Dans le détail, le malware écrase les données du fichier en commençant par le mot de passe chiffré et encodé entre des balises <EncryptedKey>
, avant de placer les données originelles du fichier chiffrées et encodées.
Voici par exemple le début d'un fichier une fois chiffré :
Du fait de l'encodage en base64 et de l'ajout du header, les fichiers vont prendre plus de place sur le disque qu'avant le chiffrement. Les fichiers prennent environ 33% d’espace en plus.
Les fichiers chiffrés sont renommés en leur ajoutant l'extension ".skull"
.
Voici une vue d'un dossier et du bureau après la procédure de chiffrement :
Désactivation des mécanismes de récupération des données
Le malware désactive des mécanismes de Windows permettant la récupération des fichiers qu’il a modifiés.
Action
Commandes utilisées
Propagation
Le malware cherche également à se propager à travers les différents disques montés par le système. Il copie son exécutable sous le nom skull.exe
à la racine de tous les disques n'étant pas C:
.
Le malware cherche ainsi à se propager sur d'autres postes avec des capacités d’air gap (propagation vers un autre poste sans l’intermédiaire de connexions réseau) en copiant son exécutable sur les supports USB.
Mise en place des instructions de rançons
Le malware place un fichier texte d’instructions de rançon dans chaque dossier qu’il a parcouru et dans le dossier %AppData%
. Il demande ensuite l'ouverture d’un de ces fichiers texte afin que les instructions soient affichées à l'utilisateur.
Ces instructions sont écrites en polonais.
Une fois traduites en français, les instructions sont les suivantes :
Bonjour,
Vos fichiers ont été chiffrés par le ransomware SkullLocker. Pour y accéder à nouveau, vous devez payer la rançon dans les 72 heures. Sinon, vos données seront définitivement perdues.
Pour plus d'informations sur la manière de payer la rançon et de récupérer vos fichiers, consultez le site web ci-dessous.
U6cQ2nV4KzL3H8jxSdGhTfMlR0N1wX7eJbO9mZyIaP5pgqWvEoBkYtAxDsFi.onion
Si vous avez des questions, vous pouvez nous contacter par courriel à l'adresse [email protected].
N'essayez pas de supprimer le ransomware ou de récupérer vos données à l'aide d'un logiciel antivirus. Vous risqueriez d'endommager définitivement vos fichiers.
N'oubliez pas que le temps est un facteur essentiel. Plus vous tardez, moins vous avez de chances de récupérer vos fichiers.
Salutations,
L'équipe du ransomware
Mise en place d'un mécanisme de détournement de transactions bitcoin
Le malware reste ensuite actif et tente de détourner des transactions bitcoin en se mettant en écoute des modifications du presse papier (mécanisme de copier/coller).
Le malware utilise une regex à chaque changement du contenu du presse papier pour vérifier la présence d'une adresse de wallet bitcoin. Si le ransomware trouve une adresse, il la remplace par une adresse fixe contenue dans le binaire. Les auteurs du malware semblent ainsi chercher à remplacer l'adresse destinatrice d'une transaction par l’adresse d’un wallet détenu par les cyber-criminels et récupérer les bitcoins envoyés.
Les deux adresses de wallets bitcoins utilisées par le sample sont les suivantes :
- bc1qw0ll8p9m8uezhqhyd7z459ajrk722yn8c5j4fg
- 17CqMQFeuB3NTzJ2X28tfRmWaPyPQgvoHV
Synthèse
SkullLocker est un ransomware rustique, n'effectuant aucune communication réseau pour contacter un serveur C2 et écrasant purement et simplement une bonne partie des fichiers de données lors de la procédure de chiffrement. Il n'y a aucune confiance à avoir vis-à-vis de la possible récupération des fichiers en payant la rançon. Le chiffrement des fichiers les moins volumineux ne semble être mis en place que pour "prouver" lors des négociations que les fichiers peuvent être récupérés.
Pour aller plus loin, les équipes d’un autre acteur de cybersécurité ont publié un article sur le malware Chaos en fournissant des vues du builder (l’outil permettant aux cyber-criminels de créer des exécutables du malware).
Le sample étudié durant notre analyse est une variante de Chaos dont seule la configuration change par rapport aux autres samples du malware. Les configurations possibles du malware permettent par exemple de changer :
- l’extension des fichiers chiffrés ;
- le nom de l’exécutable utilisé pour l’élévation de privilège ;
- le texte des instructions de rançon ;
- l’activation du chiffrement (sinon les fichiers de moins de 2 Mo sont aussi purement écrasés).
Ransomware SkullLocker et moyens de protection Stormshield
Breach Fighter
Le service de sandboxing Breach Fighter, disponible en option dans les firewalls Stormshield Network Security (sur le flux SMTP/HTTP/FTP) et également proposé en API, détecte et bloque le malware.
Indice de confiance de la protection proposée par Stormshield |
Indice de confiance de l’absence de faux positif |
Stormshield Network Security
Les firewalls Stormshield Network Security détectent également le transport du malware avec l’option Advanced Antivirus, même sans la présence de l’option Breach Fighter.
Indice de confiance de la protection proposée par Stormshield |
Indice de confiance de l’absence de faux positif |
Stormshield Endpoint Security Evolution
La solution SES Evolution est capable de détecter et de bloquer le malware lors de son exécution, avant même le commencement du chiffrement.
La protection anti ransomware détecte et bloque le malware durant deux étapes : lors du chiffrement des fichiers et lors de la désactivation des fonctionnalités Windows de récupération de fichiers.
Indice de confiance de la protection proposée par Stormshield |
Indice de confiance de l’absence de faux positif |
SkullLocker & IOC
SkullLocker IOCs : retrouvez ici les références des échantillons étudiés pour cette analyse.
Hashes
- Executable
- MD5: 62e53bc5aa5f2a70a54e328bff51505f
- SHA1: E7DECEEE97A09D539D81EB91F988ECE5E2A2FF51
- SHA256: BB5CA9D8DE51734DBD14DC081C7C892D819CD14FAFD7CCD62849D70F9E679369
- Instructions de rançon
- MD5: A23E76CE33ADF72409FB0C43393D3087
- SHA1: 502620245BE1D0912AB9C4FB5390AB14E27778A8
- SHA256: 88702C38B8BEA9555A13AE747CBFDF2947FFF6060F4FEF75486025E0152DDF3A
Paths
- .skull
- read_it.txt
- %AppData%\Microsoft\Windows\Start Menu\Programs\Startup\svchost.url
- %AppData%\svchost.exe
- X:\skull.exe
Processes
- vssadmin delete shadows /all /quiet
- wmic shadowcopy delete
- bcdedit /set {default} bootstatuspolicy ignoreallfailures
- bcdedit /set {default} recoveryenabled no
- wbadmin delete catalog -quiet