Bir saldırgan, PyPI’de “requests-darwin-lite” adlı, meşru “requests” logo görselinin alışılmadık derecede büyük bir versiyonu içinde gizli bir Golang ikili dosyası içeren, popüler “requests” kütüphanesinin bir çeşidi gibi görünen kötü amaçlı bir paket yayınladı.
İkili programın yürütülmesi koşulluydu, yalnızca belirli sistem tanımlayıcılarında tetikleniyordu, bu da hedefli bir saldırı veya daha geniş dağıtımdan önce bir test aşaması olduğunu gösteriyordu.
Meşru istekler paketi, yükleme sırasında test yürütmeyi özelleştirmek için “setup.py” dosyasındaki “cmdclass” özelliğini kullanır; bu, “PyTest” adından miras alan bir sınıfı tanımlar. TestCommand.
Bu sınıf, “pytest” aracına ilişkin argümanları yapılandırmak için çeşitli yöntemleri geçersiz kılar ve “initialize_options” yöntemi, “çoklu işlemeyi” içe aktarmaya ve çekirdek sayısını belirlemek ve paralel testi buna göre yapılandırmak için “cpu_count” işlevini kullanmaya çalışır.
‘Çoklu işlem’in içe aktarılması başarısız olursa, varsayılan olarak testler tek işlemle çalıştırılır.
Kötü amaçlı request-darwin-lite paketi, sistemin macOS olup olmadığını kontrol etmek için özel “PyInstall” sınıfının “run” yöntemini değiştirir ve eğer öyleyse, sistemin UUID’sini almak için bir komut içeren base64 kodlu bir dizenin kodunu çözer.
Ücretsiz Web Semineri Canlı API Saldırı Simülasyonu: Yerinizi Ayırın | API’lerinizi bilgisayar korsanlarından korumaya başlayın
Daha sonra UUID’yi içeren çıktının belirli bir bölümünü çıkarır ve bunu sabit kodlanmış bir değerle karşılaştırır. Eşleşirlerse, içeriğin belirli bir bölümünü “requests-sidebar-large.png” adlı dosyadan çıkarır ve bunu geçici bir dizindeki “output” adlı yeni bir dosyaya yazar.
“Çıktı”nın izinlerini yürütülebilir olarak ayarlıyor ve çalıştırıyor; bu da görüntü dosyasına gömülü kötü amaçlı kodun yalnızca belirli kriterleri karşılayan macOS makinelerinde yürütüldüğünü gösteriyor.
Bir saldırgan, “requests” paketinin kötü amaçlı bir sürümünü oluşturdu ve macOS’a yükleme sırasında sistemin UUID’sini hedefleyen bir komut dosyasının kodu çözülüp yürütülüyor.
UUID önceden belirlenmiş bir değerle eşleşirse saldırgan, paket içindeki belirli bir dosyadan veri çalar.
Saldırgan, beklenenden çok daha büyük (17 MB) ve sonuna eklenen gizli veriler içeren, görünüşte normal bir PNG görüntüsü (“requests-sidebar-large.png”) dağıttı.
Temel bir steganografi tekniği olmasına rağmen ekstra veriler görüntünün nasıl görüntülendiğini etkilemedi.
Saldırganın kodu bu dosyayı ikili veri olarak tanımladı, gizli verileri dosya içindeki belirli bir konumdan çıkardı ve bunu muhtemelen kötü amaçlı kod içeren yeni bir dosyaya yazdı; bu dosya daha sonra çalıştırılabilir hale getirildi ve kurbanın makinesinde sessizce çalıştırıldı.
PNG görüntüsünün içine gizlenmiş bir Go ikili dosyasını indirerek yükleme kancasına bir damlalık kodu enjekte ederek Python paketi “requests-darwin-lite”yi tehlikeye attı.
Phylum’daki analistler ikili dosyanın Cobalt Strike’a benzer bir araç olan OSX/Silver olduğundan şüpheleniyor. Saldırganlar virüs bulaşan ilk iki sürümü kendileri kaldırdı; üçüncüsü, kötü amaçlı yükü değil, damlalığı içeriyordu ve son sürüm temiz görünüyordu. Keşfedildikten sonra PyPI tüm paketi kaldırdı.
On-Demand Webinar to Secure the Top 3 SME Attack Vectors: Watch for Free