Författare: Kseniia Yamburh, Malware Research Engineer på Moonlock av MacPaw & Mykhailo Pazyniuk, Malware Research Engineer på Moonlock by MacPaw
Programvara med öppen källkod är grunden för innovation men öppnar också dörren till exploatering. Nyligen checkmarx-forskare
På Moonlock, där vi fokuserar på att skydda macOS-användare, visste vi att vi måste gräva djupare i den här. När vi avslöjade lagren ledde våra fynd oss till 10 ytterligare förråd - var och en delar nästan identisk kod, med subtila variationer. Var detta arbetet med en automatiserad distribution? En samordnad kampanj? Så här utvecklades utredningen.
Berättelsen börjar med "Meme-Token-Hunter-Bot", till synes bara ytterligare ett verktyg för kryptoentusiaster. Dess README instruerar användare att köra main.py, en fil som vanligtvis initierar huvudfunktionaliteten i de flesta Python-baserade applikationer. Efter instruktionerna grävde vi in i main.py, bara för att hitta att det anropade ett hjälpskript som heter base_helper.py. Denna hjälpfil skulle vara hörnstenen i vår undersökning.
För att få en tydligare förståelse för hur Meme-Token-Hunter-Bot utför sin attack, skissade vi upp ett flödesschema som visar varje steg i skadlig programvaras process, från initial installation till dataexfiltrering. Denna visuella representation avslöjar lagren av kodning och smygtaktiker som är inbäddade i paketet, vilket ger en fullständig bild av hur det fungerar.
Vårt flödesschema börjar med main.py, startpunkten som anropar base_helper.py om paketet upptäcker att det körs på macOS.
Den här filen innehåller base64-kodade webbadresser och filnamn, lagrade i variabler som encoded_base_key och encoded_licences.
Dessa kodade värden döljer det verkliga syftet med skriptet, maskerar webbadressen som ansluter till https://coinsw[.]app/basec/ och laddar ner ytterligare filer till ~/tmpcode/-katalogen.
När filerna har laddats ner visar nästa steg i vårt flödesschema hur skadlig programvara lanserar en fil som heter MHTBot.py, som omdirigerar all synlig utdata till /dev/null – och håller dess aktiviteter dold för både användare och övervakningsverktyg.
I flödesschemat framstår MHTBot.py som vändpunkten i attacken. Med PyQT5 skapar den här filen ett grafiskt användargränssnitt som efterliknar legitim programvara och visar en lösenordsuppmaning och förloppsindikator. Den här förklädnaden är utformad för att lugna användare, medan MHTBot.py i verkligheten smyg aktiverar en serie datahämtande moduler i bakgrunden.
MHTBot.py använder en smart undvikandeteknik: den avvisar det första lösenordsförsöket som "osäkert", accepterar bara det andra. Den här inbyggda fördröjningen syftar sannolikt till att undvika upptäckt av sandlåde, eftersom många sandlådemiljöer har begränsad körtid som kan ta slut innan skadlig programvara har aktiverats fullt ut.
Som en del av sin undanflyktstaktik använder Meme-Token-Hunter-Bot en fördröjning innan de startar sina huvudsakliga datastölder. Denna fördröjning är också utformad för att undvika upptäckt av sandlådemiljöer, som ofta har begränsad körtid för automatiserad analys. Genom att fördröja exekvering ökar skadlig programvara sina chanser att glida förbi dessa initiala skanningar och aktiveras fullt ut på en riktig användares system.
Skärmdumpen nedan visar den specifika koden som är ansvarig för denna fördröjning. Start_one_py_main_after_delay-funktionen initierar en fördröjning på 7000 millisekunder (7 sekunder) med QTimer.singleShot, varefter den anropar run_one_py_main-funktionen. Denna funktion utlöser sedan huvudmodulen för datastöld, one.py, i en separat tråd.
När MHTBot.py övergår kontrollen till one.py börjar skadlig programvaras primära datastjälningsåtgärder. Följande kodsnuttar avslöjar hur one.py använder olika funktioner och moduler för att samla in känslig information från användarens system. Låt oss bryta ner varje del av koden och dess syfte.
I det första utdraget ser vi funktionen main() som förbereder en dold katalog för tillfällig lagring av stulen data. Skadlig programvara skapar ~/.temp/premium/ som en dold katalog för att lagra filer utan att varna användaren. Efter att ha ställt in den här katalogen anropar funktionen olika rutiner för att samla in data från specifika applikationer:
mediax(): Inriktar sig troligen på Apple Notes för att extrahera lagrade anteckningar.
copy_stickies() och copy_stickies_database(): Dessa funktioner samlar in data från Stickies-applikationen.
backup_ssh(): Samlar in SSH-nycklar från systemet.
copy_terminal_history(): Kopierar terminalhistorikfiler.
copy_ssh_and_keychain(): Extraherar data från SSH och macOS Keychain.
Dessa funktioner är dedikerade till att samla in ett brett utbud av data från applikationer, användaruppgifter och SSH-konfigurationer, vilket gör one.py till en allomfattande dataskördare.
Search_files()-funktionen, som visas i nästa kodavsnitt, utökar räckvidden för datainsamling genom att rikta in sig på specifika filtyper. Den här funktionen söker igenom vanliga kataloger (nedladdningar, dokument, skrivbord och hemkatalog) efter känsliga filer med filtillägg som .txt, .csv, .json, .config och .env. Dessa filtyper innehåller ofta konfigurationsinställningar, API-nycklar och annan värdefull information.
Filerna som hittas kopieras sedan till en tillfällig katalog, komprimeras och förbereds för exfiltrering. Detta steg säkerställer att all data som vanligtvis lagras i användarkataloger eller projektkonfigurationsfiler samlas in.
I följande kodavsnitt fångar funktionerna copy_terminal_history() och copy_ssh_and_keychain() viktiga användardata. Skadlig programvara extraherar terminalhistorik från .zprofile- och .zsh_history-filer, vilket potentiellt avslöjar kommandon som användaren körde, inklusive all känslig information eller inloggningsuppgifter som skrivits in i terminalen.
Dessutom nås macOS Keychain och SSH-katalogen för att fånga in krypterade autentiseringsuppgifter, lösenord och SSH-nycklar som lagras i systemet, vilket ger angripare autentiseringsuppgifter av högt värde.
En av de mest anmärkningsvärda delarna av denna skadliga programvara är dess inriktning mot kryptoplånböcker. Funktionen zip_additional_wallets() letar specifikt efter kataloger associerade med populära kryptovalutaplånböcker. Skadlig programvara söker systematiskt efter plånboksfiler som tillhör Bitcoin, Electrum, Coinomi, Exodus och andra stora kryptoplånböcker. När de har identifierats zippas dessa plånbokskataloger och lagras i den tillfälliga katalogen, redo för exfiltrering.
Skadlig programvara innehåller också specifika funktioner för Telegram-datastöld. Funktionerna backup_telegram() och backup_tdata() letar efter Telegram-datakataloger och försöker komma åt meddelanden, kontakter och media lagrade i appen. Genom att kopiera dessa filer kan skadlig programvara tillåta angripare att rekonstruera användarens Telegram-kommunikation och mediehistorik.
Efter att ha samlat in känslig information fortsätter Meme-Token-Hunter-Bot att exfiltrera data till en fjärrserver. Denna exfiltrering utförs med en serie funktioner som hanterar filbyte, uppladdning och meddelande till angriparens Telegram-bot. Följande kodsnuttar illustrerar hur denna process utvecklas.
Funktionen send_telegram_message skickar ett meddelande till en förkonfigurerad Telegram-bot som varnar angriparna om att en ny grupp stulna filer har laddats upp. Denna funktion säkerställer att angriparna får aktuella uppdateringar om varje exfiltrering, vilket gör att de kan övervaka datastöldsprocessen i realtid.
För att ytterligare fördunkla dess närvaro döper skadlig programvara om de stulna filerna till ett .minecraft-tillägg – ett ovanligt knep som troligen är avsett att kringgå grundläggande nätverksintrångsdetekteringssystem som övervakar specifika filtyper. När den har bytt namn initierar upload_file dataöverföringen till angriparens fjärrserver. Filen öppnas i binärt läsläge och laddas upp med requests.post() till https://store1.gofile[.]io/, en offentlig fildelningsplattform.
Om uppladdningen lyckas (indikeras med en 200-statuskod) hämtar funktionen nedladdningslänken, som sedan skickas till angriparen via Telegram.
Under vår undersökning misstänkte vi att Meme-Token-Hunter-Bot kanske inte var ett isolerat paket. Använda en riktad GitHub
Intressant nog, medan Meme-Token-Hunter-Bot har funnits i 10 månader, började den införliva skadlig kod först i augusti 2024, när base_helper.py – filen som ansvarar för nedladdningen av Stage-2 Python-stealer – först introducerades. Den senaste uppdateringen av denna fil gjordes den 28 september 2024.
Å andra sidan fick de 11 ytterligare förråden sina skadliga uppdateringar för ungefär två månader sedan, när base_helper.py lades till. Denna samordnade tidpunkt tyder på att dessa förvar skapades specifikt för att distribuera skadlig programvara, som bygger på den första framgången och metoderna som sågs i Meme-Token-Hunter-Bot.
Vi hittade också Gatekeeper-bypass-instruktioner i flera av dessa förråd, utformade för att vägleda användare genom att kringgå macOS-säkerhetsvarningar. Instruktionerna presenterades i ett steg-för-steg visuellt format, som uppmuntrade användare att högerklicka på programmet, välja "Öppna" och kringgå Gatekeepers varning.
Dessutom, bland de 10 ytterligare förvar som identifierats, stack en variant med namnet "Solana-Bot" ut. Även om det följer samma skadliga flöde som Meme-Token-Hunter-Bot, observerade vi små ändringar, särskilt i filnamn och funktionsanvändning. En skillnadsanalys sida vid sida av Solana-Bots base_helper.py-fil och den för Meme-Token-Hunter-Bot belyser dessa skillnader.
De viktigaste skillnaderna mellan Solana-Bot och Meme-Token-Hunter-Bot inkluderar URL-ändringar.
"aHR0cHM6Ly9jb2luc3cuYXBwL2Jhc2VjLw==" + "UENTQm90LnB5" = "https://coinsw.app/basec/PCSBot.py" <-- Solana-Bot "aHR0cHM6Ly9jb2luc3cuYXBwL2Jhc2VjLw==" + "TUhUQm90LnB5" = "https://coinsw.app/basec/MHTBot.py"
Denna undersökning av Meme-Token-Hunter-Bot och dess relaterade varianter avslöjar en noggrant orkestrerad kampanj riktad mot macOS-användare. Ursprungligen framhävt av Checkmarx, detta stjälarpaket från början förklädd som ett kryptoverktyg har expanderat till ett bredare hot. Vår analys avslöjade 11 ytterligare arkiv, som var och en innehöll små variationer av den ursprungliga koden. Angriparna verkar ha använt automatisering för att snabbt generera dessa förråd, med hjälp av mindre ändringar i namn, UI-etiketter och funktionalitet för att undvika upptäckt och säkerställa beständig tillgänglighet.
Ändå observerade vi också välbekanta sociala ingenjörstaktiker riktade mot macOS-användare, särskilt Gatekeepers bypass-instruktioner. Detta indikerar att hotaktörer fortfarande är starkt beroende av att utnyttja användarnas förtroende. Trots de avancerade teknikerna i den här kampanjen, understryker detta beroende av användarassisterade förbikopplingar behovet av fortsatt användarutbildning.
Medvetenhet är det bästa försvaret. Resurser som Moonlock-bloggen