Yazarlar: Kseniia Yamburh, Moonlock by MacPaw'da Kötü Amaçlı Yazılım Araştırma Mühendisi ve Mykhailo Pazyniuk, Moonlock by MacPaw'da Kötü Amaçlı Yazılım Araştırma Mühendisi
Açık kaynaklı yazılım, inovasyonun temelidir ancak aynı zamanda istismara da kapı açar. Son zamanlarda, Checkmarx araştırmacıları
macOS kullanıcılarını korumaya odaklandığımız Moonlock'ta, bu konuyu daha derinlemesine araştırmamız gerektiğini biliyorduk. Katmanları çözdükçe, bulgularımız bizi 10 ek depoya götürdü — her biri neredeyse aynı kodu paylaşıyordu, ancak ince farklılıklar vardı. Bu otomatik bir dağıtımın işi miydi? Koordineli bir kampanyanın? İşte araştırmanın nasıl ortaya çıktığı.
Hikaye, kripto meraklıları için sadece başka bir yardımcı araç gibi görünen "Meme-Token-Hunter-Bot" ile başlıyor. README, kullanıcılara, Python tabanlı çoğu uygulamada ana işlevselliği başlatan bir dosya olan main.py'yi çalıştırmalarını söylüyor. Talimatları izleyerek, main.py'ye daldık ve base_helper.py adlı bir yardımcı betiği çağırdığını gördük. Bu yardımcı dosya, araştırmamızın temel taşı olacaktı.
Meme-Token-Hunter-Bot'un saldırısını nasıl gerçekleştirdiğini daha net anlamak için, kötü amaçlı yazılımın sürecinin ilk kurulumdan veri sızdırmaya kadar her adımını gösteren bir akış şeması çizdik. Bu görsel sunum, paketin içine yerleştirilmiş kodlama ve gizlilik taktiklerinin katmanlarını ortaya koyarak, nasıl çalıştığına dair tam bir görünüm sunar.
Akış şemamız, paketin macOS'ta çalıştığını tespit ederse base_helper.py'ı çağıran başlangıç noktası olan main.py ile başlar.
Bu dosya, encoded_base_key ve encoded_licences gibi değişkenlerde saklanan base64 kodlu URL'leri ve dosya adlarını içerir.
Bu kodlanmış değerler, betiğin gerçek amacını gizler, https://coinsw[.]app/basec/ adresine bağlanan ve ~/tmpcode/ dizinine daha fazla dosya indiren URL'yi maskeler.
Dosyalar indirildikten sonra, akış şemamızdaki bir sonraki adım, kötü amaçlı yazılımın MHTBot.py adlı bir dosyayı başlattığını, tüm görünür çıktıları /dev/null'a yönlendirdiğini ve böylece faaliyetlerini kullanıcılardan ve izleme araçlarından gizlediğini gösteriyor.
Akış şemasında, MHTBot.py saldırıdaki dönüm noktası olarak öne çıkıyor. PyQT5 kullanan bu dosya, meşru yazılımı taklit eden, bir parola istemi ve ilerleme çubuğu gösteren grafiksel bir kullanıcı arayüzü oluşturuyor. Bu kılık değiştirme, kullanıcıları rahatlatmak için tasarlanmışken, gerçekte MHTBot.py arka planda bir dizi veri toplama modülünü gizlice etkinleştiriyor.
MHTBot.py akıllıca bir kaçınma tekniği kullanır: ilk parola girişimini "güvensiz" olarak reddeder, yalnızca ikincisini kabul eder. Bu yerleşik gecikme muhtemelen sandbox tespitinden kaçınmayı amaçlar, çünkü birçok sandbox ortamının kötü amaçlı yazılım tam olarak etkinleşmeden önce sona erebilecek sınırlı çalışma zamanı vardır.
Kaçma taktiklerinin bir parçası olarak, Meme-Token-Hunter-Bot ana veri çalma operasyonlarını başlatmadan önce bir gecikme kullanır. Bu gecikme ayrıca, genellikle otomatik analiz için sınırlı çalışma süresine sahip olan sandbox ortamları tarafından tespit edilmekten kaçınmak için tasarlanmıştır. Kötü amaçlı yazılım, yürütmeyi geciktirerek bu ilk taramaları geçme ve gerçek bir kullanıcının sisteminde tam olarak etkinleşme şansını artırır.
Aşağıdaki ekran görüntüsü bu gecikmeden sorumlu olan belirli kodu vurgular. start_one_py_main_after_delayfunction, QTimer.singleShot kullanarak 7000 milisaniyelik (7 saniye) bir gecikme başlatır ve ardından run_one_py_main fonksiyonunu çağırır. Bu fonksiyon daha sonra ayrı bir iş parçacığında ana veri hırsızlığı modülü olan one.py'yi tetikler.
MHTBot.py kontrolü one.py'ye devrederken, kötü amaçlı yazılımın birincil veri çalma operasyonları başlar. Aşağıdaki kod parçacıkları, one.py'nin kullanıcının sisteminden hassas bilgileri toplamak için çeşitli işlevleri ve modülleri nasıl kullandığını ortaya koymaktadır. Kodun her bir bölümünü ve amacını parçalayalım.
İlk kod parçacığında, main() fonksiyonunun çalınan verilerin geçici depolanması için gizli bir dizin hazırladığını görüyoruz. Kötü amaçlı yazılım, kullanıcıyı uyarmadan dosyaları depolamak için gizli bir dizin olarak ~/.temp/premium/ oluşturur. Bu dizini ayarladıktan sonra, fonksiyon belirli uygulamalardan veri toplamak için çeşitli rutinleri çağırır:
mediax(): Muhtemelen depolanan notları çıkarmak için Apple Notes'u hedef alır.
copy_stickies() ve copy_stickies_database(): Bu fonksiyonlar Stickies uygulamasından veri toplar.
backup_ssh(): Sistemden SSH anahtarlarını toplar.
copy_terminal_history(): Terminal geçmiş dosyalarını kopyalar.
copy_ssh_and_keychain(): SSH ve macOS Keychain'den veri çıkarır.
Bu işlevler, uygulamalardan, kullanıcı kimlik bilgilerinden ve SSH yapılandırmalarından geniş bir yelpazede veri toplamaya adanmıştır ve one.py'ı kapsamlı bir veri toplayıcısı haline getirir.
Sonraki kod parçacığında görülen search_files() fonksiyonu, belirli dosya türlerini hedefleyerek veri toplama kapsamını genişletir. Bu fonksiyon, .txt, .csv, .json, .config ve .env gibi uzantılara sahip hassas dosyalar için ortak dizinlerde (İndirilenler, Belgeler, Masaüstü ve ana dizin) arama yapar. Bu dosya türleri genellikle yapılandırma ayarları, API anahtarları ve diğer değerli bilgileri içerir.
Bulunan dosyalar daha sonra geçici bir dizine kopyalanır, sıkıştırılır ve dışarı sızdırılmaya hazırlanır. Bu adım, genellikle kullanıcı dizinlerinde veya proje yapılandırma dosyalarında depolanan tüm verilerin toplanmasını sağlar.
Aşağıdaki kod parçacığında, copy_terminal_history() ve copy_ssh_and_keychain() işlevleri kritik kullanıcı verilerini yakalar. Kötü amaçlı yazılım, .zprofile ve .zsh_history dosyalarından terminal geçmişini ayıklayarak, terminalde girilen hassas bilgiler veya kimlik bilgileri dahil olmak üzere kullanıcının yürüttüğü komutları potansiyel olarak ortaya çıkarır.
Ayrıca, macOS Keychain ve SSH dizinine erişilerek sistemde saklanan şifrelenmiş kimlik bilgileri, parolalar ve SSH anahtarları ele geçirilerek saldırganlara yüksek değerli kimlik bilgileri sağlanıyor.
Bu kötü amaçlı yazılımın en dikkat çekici kısımlarından biri kripto cüzdanlarını hedeflemesidir. zip_additional_wallets() işlevi özellikle popüler kripto para cüzdanlarıyla ilişkili dizinleri arar. Kötü amaçlı yazılım sistematik olarak Bitcoin, Electrum, Coinomi, Exodus ve diğer büyük kripto cüzdanlarına ait cüzdan dosyalarını arar. Tanımlandıktan sonra, bu cüzdan dizinleri sıkıştırılır ve geçici dizinde saklanır, sızdırılmaya hazır hale getirilir.
Kötü amaçlı yazılım ayrıca Telegram veri hırsızlığı için belirli işlevler içerir. backup_telegram() ve backup_tdata() işlevleri Telegram veri dizinlerini arar ve uygulamada depolanan mesajlara, kişilere ve medyaya erişmeye çalışır. Bu dosyaları kopyalayarak, kötü amaçlı yazılım saldırganların kullanıcının Telegram iletişimlerini ve medya geçmişini yeniden oluşturmasına izin verebilir.
Hassas bilgileri topladıktan sonra Meme-Token-Hunter-Bot, verileri uzak bir sunucuya sızdırmaya devam eder. Bu sızdırma, dosya yeniden adlandırma, yükleme ve saldırganın Telegram botuna bildirimde bulunma işlemlerini gerçekleştiren bir dizi işlevle gerçekleştirilir. Aşağıdaki kod parçacıkları bu sürecin nasıl gerçekleştiğini göstermektedir.
send_telegram_message işlevi, önceden yapılandırılmış bir Telegram botuna, saldırganlara yeni bir çalıntı dosya grubunun yüklendiğine dair uyarıda bulunan bir mesaj gönderir. Bu işlev, saldırganların her sızdırmada zamanında güncellemeler almasını sağlayarak, veri hırsızlığı sürecini gerçek zamanlı olarak izlemelerine olanak tanır.
Kötü amaçlı yazılım, varlığını daha da gizlemek için çalınan dosyaları .minecraft uzantısıyla yeniden adlandırır; bu, belirli dosya türlerini izleyen temel ağ saldırı tespit sistemlerini atlatmak için tasarlanmış alışılmadık bir numaradır. Yeniden adlandırıldığında, upload_file saldırganın uzak sunucusuna veri aktarımını başlatır. Dosya ikili okuma modunda açılır ve herkese açık bir dosya paylaşım platformu olan https://store1.gofile[.]io/ adresine requests.post() kullanılarak yüklenir.
Yükleme başarılı olursa (200 durum koduyla belirtilir), fonksiyon indirme bağlantısını alır ve bu bağlantı Telegram aracılığıyla saldırgana gönderilir.
Soruşturmamız sırasında Meme-Token-Hunter-Bot'un izole bir paket olmayabileceğinden şüphelendik. Hedeflenen bir GitHub kullanarak
İlginçtir ki, Meme-Token-Hunter-Bot 10 aydır ortalıkta olmasına rağmen, kötü amaçlı kod eklemeye ancak Ağustos 2024'te, yani Stage-2 Python hırsızını indirmekten sorumlu dosya olan base_helper.py ilk kez tanıtıldığında başladı. Bu dosyanın son güncellemesi 28 Eylül 2024'te yapıldı.
Öte yandan, 11 ek depo, base_helper.py eklendiğinde yaklaşık iki ay önce kötü amaçlı güncellemelerini aldı. Bu koordineli zamanlama, bu depoların kötü amaçlı yazılımı dağıtmak için özel olarak kurulduğunu ve Meme-Token-Hunter-Bot'ta görülen ilk başarı ve yöntemlere dayandığını gösteriyor.
Ayrıca bu depoların birçoğunda, kullanıcıları macOS güvenlik uyarılarını atlatma konusunda yönlendirmek için tasarlanmış Gatekeeper atlama talimatları bulduk. Talimatlar, kullanıcıları uygulamaya sağ tıklamaya, "Aç"ı seçmeye ve Gatekeeper'ın uyarısını atlatmaya teşvik eden adım adım görsel bir biçimde sunuldu.
Ek olarak, tanımlanan 10 ek deponun arasında "Solana-Bot" adlı bir varyant öne çıktı. Meme-Token-Hunter-Bot ile aynı kötü amaçlı akışı takip etse de, özellikle dosya adlarında ve işlev kullanımında küçük değişiklikler gözlemledik. Solana-Bot'un base_helper.py dosyasının ve Meme-Token-Hunter-Bot'un dosyasının yan yana bir diff analizi bu farklılıkları vurgulamaktadır.
Solana-Bot ile Meme-Token-Hunter-Bot arasındaki temel farklar arasında URL değişiklikleri yer alıyor.
"aHR0cHM6Ly9jb2luc3cuYXBwL2Jhc2VjLw==" + "UENTQm90LnB5" = "https://coinsw.app/basec/PCSBot.py" <-- Solana-Bot "aHR0cHM6Ly9jb2luc3cuYXBwL2Jhc2VjLw==" + "TUhUQm90LnB5" = "https://coinsw.app/basec/MHTBot.py"
Meme-Token-Hunter-Bot ve ilgili varyantlarına yönelik bu araştırma, macOS kullanıcılarını hedef alan dikkatlice düzenlenmiş bir kampanyayı ortaya koyuyor. Başlangıçta Checkmarx tarafından gün yüzüne çıkarılan bu hırsız paketi, başlangıçta bir kripto aracı olarak gizlenmişti ve daha geniş bir tehdide dönüştü. Analizimiz, her biri orijinal kodun ufak varyasyonlarını içeren 11 ek depoyu ortaya çıkardı. Saldırganlar, tespit edilmekten kaçınmak ve sürekli kullanılabilirliği sağlamak için adlarda, kullanıcı arayüzü etiketlerinde ve işlevsellikte ufak değişiklikler kullanarak bu depoları hızla oluşturmak için otomasyonu kullanmış gibi görünüyor.
Bununla birlikte, macOS kullanıcılarını hedef alan bilindik sosyal mühendislik taktiklerini, özellikle Gatekeeper bypass talimatlarını da gözlemledik. Bu, tehdit aktörlerinin hala kullanıcı güvenini istismar etmeye yoğun bir şekilde güvendiğini gösteriyor. Bu kampanyada görülen gelişmiş tekniklere rağmen, kullanıcı destekli bypasslara olan bu güven, sürekli kullanıcı eğitiminin gerekliliğini vurguluyor.
Farkındalık en iyi savunmadır. Moonlock blogu gibi kaynaklar