18 september 2025

SafePay ransomware: Det snabbt ökande hotet mot MSP:er

Sammanfattning

 

  • Under Q1 2025 lyfte en ransomware-grupp snabbt från okänd till att bli en av de mest aktiva och farliga aktörerna i det globala hotlandskapet: SafePay. Det har diskret men aggressivt byggt upp momentum och slagit till mot över 200 offer världen över, inklusive managed service providers (MSP:er) och små till medelstora företag (SMB:er) inom olika branscher.
  • Acronis Threat Research Unit (TRU) analyserade flera SafePay-prover och bekräftade att gruppen använder återanvända – men mycket effektiva – taktiker, inklusive att inaktivera endpoint-skydd, radera skuggkopior och rensa loggar för att försvåra upptäckt och respons.
  • Till skillnad från många ransomwaregrupper som förlitar sig på affiliates i en ransomware-as-a-service-modell (RaaS) verkar SafePay driva en centraliserad struktur där de själva hanterar operationer, infrastruktur och förhandlingar.
  • Gruppen använder klassiska men effektiva tekniker: intrång via RDP och VPN, stöld av autentiseringsuppgifter, privilegieeskalering samt ”living-off-the-land”-binärer för att obemärkt röra sig genom offrets nätverk, exfiltrera känslig data och därefter kryptera filer.
  • Nyligen kopplades SafePay till ransomwareattacken som slog ut Ingram Micro, en global distributör som betjänar tusentals partners och MSP:er.

 

SafePay-ransomware: En avknoppning av LockBit?

SafePay dök upp första gången 2024. Under sitt första verksamhetsår krävde den mer än 20 offer. Även om det är okänt om SafePay är en ny aktör eller ett ombrandat tidigare projekt, delar deras prover många likheter med LockBit-familjen – en välkänd ransomware-builder. År 2022 läckte källkoden för SafePays LockBit 3.0-buildern ut. Efter läckan dök en mängd nya ransomware upp. 3.0-versionen av LockBit-buildern är också känd som LockBit Black eftersom den delar likheter med BlackByte ransomware.

Det SafePay-ransomwareprov som analyserades av TRU är en PE32-DLL med ett förfalskat kompileringstidsstämpel.

Acronis

Tekniska detaljer

Översikt

SafePay ransomware-eksemplet är en PE32 DLL med en falsk tidstämpel för kompilering. Den första likheten med LockBit är en dummyfunktion som har ett antal sekventiella Windows API-anrop. Att skriva anrop på det sättet är meningslöst eftersom det inte finns några argument som skickas till dessa funktioner, vilket kommer att orsaka fel. I själva verket kommer dessa funktioner i båda fallen aldrig att anropas, eftersom exekveringen kommer att avbrytas innan provet kan komma in i detta avsnitt.

 Andra likheter med LockBit:

  • Kräver lösenord för fullständig körning.
  • Alla strängar är kodade.
  • Alla WinAPI-adresser löses under körningen.
  • Undvikande av språk i samma system.
  • CMSTPLUA COM-gränssnittet missbrukas för att öka behörigheten.
  • Skapade trådar har flaggan ”ThreadHideFromDebugger”.
  • Lista över processer och tjänster som måste avslutas.

Även om provet inte är en fullständig kopia av LockBit 3.0 och har vissa skillnader, är det vanligt att hotaktörer ändrar källkoden för att göra sitt skadeprogram mer unikt – och ännu viktigare, för att lägga till nya funktioner och förbättra förmågan att undvika upptäckt.

Leverans och exfiltrering

SafePay ransomware levererades till offren med hjälp av RDP-anslutningar. Även om det är okänt hur hotaktörer fick autentiseringsuppgifter, gjorde tekniken det möjligt för dem att inaktivera Windows Defender och ladda upp filer till C2-servern innan de krypterade dem. Innan exfiltrering av filer körde angripare ”ShareFinder.ps1”-skriptet, som hittar alla tillgängliga nätverksdelningar i den lokala domänen. Den är hämtad från ett projekt med Open Source:

https://github.com/darkoperator/Veil-PowerView/blob/master/PowerView/functions/Invoke-ShareFinder.ps1

Detta skript hittar nätverksresurser på värddatorer i den lokala domänen. Det har tidigare upptäckts i Emotet-attacker, liksom under C0015-kampanjen, som användes för att distribuera Conti ransomware.

För att samla in filer på systemet användes WinRar-programmet med följande kommando:

WinRAR.exe a -v5g -ed -r -tn1000d -m0 -mt5 -x*.rar -x*.JPEG -x*.RAW -x*.PSD -x*.TIFF -x*.BMP -x*.GIF -x*.JPG -x*.MOV -x*.pst -x*.FIT -x*.FIL -x*.mp4 -x*.avi -x*.mov -x*.mdb -x*.iso -x*.exe -x*.dll -x*.bak -x*.msg -x*.png -x*.zip -x*.ai -x*.7z -x*.DPM -x*.log -x*.dxf -x*.insp -x*.upd -x*.db -x*.dwg -x*.nc1 -x*.metadata -x*.dg -x*.inp -x*.dat -x*.TIFF -x*.tiger -x*.pcp -x*.rvt -x*.rws -x*.nwc -x*.tif -x*.frx -x*.dyf -x*.rcs -x*.diff C:\[redacted].rar \\[redacted]\C$\Users\

Efter arkivering av filer distribuerades en FileZilla-klient för att exfiltrera filer till C2-servern. Efter att processen var klar togs både WinRar och FileZilla bort från målen.

Acronis

Körning

I början av exekveringen dekrypterar SafePay strängar. Den använder en loop, där den utför XOR-operationen tre gånger på varje byte. Varje operation använder en annan nyckel. Den första använder det aktuella indexvärdet. Den andra använder den första symbolen från ”kernel32.dll”, som alltid är ”M”. Den sista nyckeln är ett konstant värde, som är olika för varje krypterad sträng. Denna dekrypteringsrutin är inte implementerad som en separat funktion utan används för att dekryptera alla strängar som provet innehåller. Provet innehåller strängar endast i krypterat format.

Acronis

Provet innehåller inte heller tabellen med importfunktioner. Det avkodar biblioteksnamn och laddar dem med hjälp av ”LoadLibrary”-importen, och adresserna till deras exportfunktioner löses och sparas med hjälp av ”GetProcAddress”. Här är listan över biblioteksnamn som SafePay lagrar i ett krypterat format:

advapi32.dll, rstrtmgr.dll, ole32.dll, shell32.dll, ntdll.dll, mpr.dll, user32.dll

Efter att ha erhållit ytterligare import får SafePay-provet aktuellt datum / tid och Windows UI-språk. Därefter kontrollerar det om systemets språk-ID-nummer är större eller mindre än de sparade värdena. Provet kommer sedan att hoppa till ett visst avsnitt med andra nummerjämförelser.

Acronis

Därefter hämtar SafePay-provet kommandoradsargument och avkodar ytterligare strängar. Dessa strängar är supportade argument:

Acronis

För att analysera argument hämtar SafePay-provet kommandoraden som användes för att köra provet och lagrar den som en argumentmatris, som i slingan jämförs med den sparade listan. När ett element i en matris jämförs med en sparad lista, läggs ”1” till matrisens indexvärde. När något argument matchas sätts det lämpliga värdet till ”1”.

Acronis

Vissa argument är bara set-flaggor, medan andra måste innehålla ytterligare information. Ett lösenordsargument måste t.ex. bestå av 38 symboler, inklusive delsträngen ”-pass=”. I alla andra fall avslutas programmet. Lösenordet måste vara 32 byte långt och används för att avkoda ytterligare information i koden. Om lösenordet är okänt kan inte hela verkställighetsprocessen utföras.

Acronis

Argumentet krypteringsnivå måste bestå av sex symboler, inklusive en delsträng ”-enc=”. Det accepterar siffror från ”1” till ”9” för detta argument. Detta värde multipliceras med 10 och fungerar som filkrypteringsprocent. Om du t.ex. anger värdet ”5” kommer urvalet att kryptera 50 % av filen.

Acronis

När argumenten har analyserats skapar SafePay-provet en ny Åtkomstkontrollista och lägger till en ACE (Access Denied Access Control Entry). Denna lista används i funktionen ”SetSecurityInfo”.

Acronis

Därefter försöker provet att få ”SeDebugPrivilege”.

Acronis

Efter att ha erhållit denna behörighet skapar provet en ögonblicksbild av alla processer som körs i systemet. Den jämför sedan namnen med sin egen sparade lista, som också är lagrad i kodat format. När en lämplig process har hittats kommer den att bearbetas.

Här är en lista över processer som måste avslutas:

sql, oracle, ocssd, dbsnmp, synctime, agntsvc, isqlplussvc, xfssvccon, mydesktopservice, ocautoupds, encsvc, firefox, tbirdconfig, mydesktopqos, ocomm, dbeng50, sqbcoreservice, excel, infopath, msaccess, mspub, far, onenote, outlook, powerpnt, steam, thebat, thunderbird, visio, winword, wordpad, notepad, wuauclt, onedrive, sqlmangr

Förutom processer avslutar provet också vissa tjänster. Först öppnar den tjänstehanteraren och börjar sedan söka efter tjänstenamn som matchar dess egen lista. Provet kommer därefter att avsluta tjänster med hjälp av funktionen ”ControlService” och värdet ”1” i argumentet ”dwControl”.

Acronis

Listan över tjänster som kommer att avslutas:

vss, sqlsvc, memtas, mepocs, msexchange, Sophos, Veeam, backup, GxVss, GxBlr, GxFWD, GxCVD, GxCIMgr

Efter att ha tömt papperskorgen med funktionen ”SHEmptyRecycleBinW” laddar exemplet registersökvägen ”Software\Microsoft\Windows\CurrentVersion\Run” och skapar en ny nyckel med ett kommando som användes för att köra exemplet, inklusive alla argument. Detta gör att SafePay körs varje gång Windows startas.

Om flaggan ”-uac” godkänns missbrukar exemplet COM-gränssnittet CMSTPLUA för att utföra kommandon med förhöjda behörigheter med hjälp av API-funktionen ”ShellExecuteW”:

/c vssadmin delete shadows /all /quiet

/c wmic shadowcopy delete

/c bcdedit / set{default} bootstatuspolicy ignoreallfailures

/c bcdedit / set{default} recoveryenabled no

Om argumentet ”-logg” anges kommer provet att skapa en loggfil: ”C:\ProgramData\auto.logg”. Det innehåller PID (Process-ID), tid och en beskrivning av den utförda åtgärden.

Kryptering av filer

Innan krypteringsrutinen startas öppnar SafePay-provet ett handtag till systemets standardleverantör av kryptografiska tjänster med typen RSA_AES.

Acronis

Varje krypteringstråd kommer att skapas i suspenderat läge. Efter att tråden skapats sätter provet flaggan ”ThreadHideFromDebugger” på tråden för att undvika felsökning och tilldelar tidigare duplicerad tokeninformation.

För att hitta enheter i systemet använder exemplet importerna ”GetVolumePathNamesForVolumeNameW” och ”GetLogicalDrives”. Typen kontrolleras för varje enhet. SafePay-provet krypterar endast enheten om den har typ 2 (DRIVE_REMOVABLE) eller 3 (DRIVE_FIXED). Ytterligare diskinformation kommer att erhållas med hjälp av ”DeviceIoControl” med kontrollkoden ”IOCTL_DISK_GET_PARTITION_INFO”. Om en omonterad enhet hittas monteras den med hjälp av funktionen ”SetVolumeMountPoint”.

Acronis

För att söka efter filer i systemet laddar exemplet hittade enheters namn och använder funktionerna ”FindFirstFile” och ”FindNextFile”. För varje fil kontrolleras parametern ”dwFileAttributes”. Om parametern matchar 16, som är en katalog, kommer exemplet att anropa samma funktion med den hittade mappsökvägen.

Acronis

När provet öppnar en fil med ”CreateFileW”, sätter det ”dwFlagsAndAttributes” värde till ”0x04000000”, vilket är ”FILE_FLAG_DELETE_ON_CLOSE” flaggan. Provet raderar sedan den öppnade filen direkt efter att det har stängt sitt handtag.

Acronis

Exemplet genererar 32 slumpmässiga byte för varje fil, som används för att vara en AES-nyckel. Därefter krypteras AES-nyckeln med hjälp av RSA-algoritmen.

Acronis

Efter att ha krypterat varje fil i katalogen använder provet API:erna ”CreateIOCompletionPort” och ”PostQueuedCompletionStatus” för att hantera flertrådskryptering på ett säkert sätt. Slutligen döper provet om filen och lägger till tillägget ”.safepay” till det.

Acronis

Slutsats

SafePay ransomware använder dubbel utpressning för att se till att offren betalar sina lösensummor. Först exfiltrerar angriparna filer och använder sedan skadlig programvara för att kryptera användarnas filer med en stark kombination av AES- och RSA-kryptering. SafePay-provet är en DLL-fil som kräver verktygen ”regsvr32.exe” eller ”rundll32.dll” för att kunna köras. Provet accepterar flera argument men kräver alltid ”-pass=” ett, eftersom detta lösenord används för att avkoda ytterligare information i koden. Alla sparade strängar och importnamn lagras i ett krypterat format, vilket gör SafePay svårt att upptäcka innan det körs.

Upptäckt av Acronis

Acronis

IoCs

Filer

SHA256
a0dc80a37eb7e2716c02a94adc8df9baedec192a77bde31669faed228d9ff526

Nätverksindikatorer

URL
http://nz4z6ruzcekriti5cjjiiylzvrmysyqwibxztk6voem4trtx7gstpjid.onion
VanessaCooke94@protonmail.com