"Bilge bir ninja, tam olarak anlamadığı bir düşmanı aramaz." - Teenage Mutant Ninja Turtles'tan Splinter
Bilim kurgu tutkunu bir teknik yazar olarak Sonatype'teki işimin en heyecan verici kısımlarından biri, güvenlik araştırma ekibiyle işbirliği yapma fırsatına sahip olduğum zamandır.
Bulduğumuzdan beri
Bu nadir görülen bir durum değil: Gerçekten kötü amaçlı olup olmadıklarını belirlemek için açık kaynak kayıtlarındaki yüzlerce şüpheli paketi sürekli olarak değerlendiriyorlar. Bu prosedür sırasında paketler arasındaki tanıdık kalıpları tespit ederler ve bazen güçlü benzerlikleri fark ettikten sonra arkalarındaki aktörü/kampanyayı bulmak için daha fazla araştırma yaparlar.
2022'nin son haftası ile 2023'ün başı arasında yapay zeka sistemimiz, pyrologin
, easytimestamp
, discorder
, discord-dev
, style.py
ve pythonstyles
dahil olmak üzere PyPI kayıt defterine yüklenen şüpheli paketleri işaretledi. Güvenlik araştırmacılarımız bunlara baktı ve gerçekten kötü niyetli olduklarını doğruladı. Daha ayrıntılı bir analizin ardından, bu paketlerin Python kötü amaçlı yazılımlarında sıklıkla görülmeyen bir dizi özellik eklediğini fark ettiler.
Fiili bir strateji haline gelen bu yöntemde, kötü aktörler setup[.]py
dosyasında bir veri yükünü gizler, böylece geliştiricilerin virüse yakalanmak için yalnızca basit bir pip kurulumu kullanması gerekir. Bu durumda, saldırganın kurbanın faresini ve klavyesini kontrol etmesine, ekran görüntüleri almasına ve gizli uzak bağlantılar oluşturmasına olanak tanıyan kitaplıkları yüklemek için ZIP dosyasını indiren bir PowerShell betiğini yanlışlıkla başlatıyor olacaklar. Üstelik bu paketler aynı zamanda şifreler, çerezler ve kripto para birimi cüzdan verileri gibi hassas bilgileri de sızdırıyor ve hatta uzaktan erişim için bir araç yüklemeye çalışıyor. Bulgularımız uyumluydu
Yine de güvenlik araştırmacısı Carlos Fernandez, rahatsız edici bir deja vu duygusu yaşıyordu. Paketleri açıkladıktan sonraki hafta boyunca, bu kötü amaçlı yazılımın önceki sürümlerini gördüğüne dair anılar aklına geldi. Bir tehdit aktörü zaman içinde kötü amaçlı yazılımını geliştiriyor olabilir, ancak bundan emin olmamız gerekiyordu, bu yüzden sezgilerinde herhangi bir doğruluk payı olup olmadığını görmesine yardımcı olmak için OSINT şapkamı taktım.
Veritabanımıza dönüp baktığımızda 25 Eylül 2022'de PyPI deposuna pygradient
adlı bir paketin yüklendiğini görüyoruz. Yapay zekamız bunu şüpheli olarak işaretledi ve güvenlik araştırmacılarımız bunun kötü amaçlı yazılım içerdiğini ve pystyle
adı verilen başka bir paketin kaynaklarını bir araya getirdiğini doğruladı. Her iki kütüphanenin yazarı da
W4SP hırsızı kalıcılık (kullanıcılar bilgisayarı her yeniden başlattığında yeniden etkinleştirilir), gizleme (yazar bunun tamamen tespit edilemez olduğunu vaat ediyor) ve bir görüntü dosyası içindeki polimorfik ve oldukça karmaşık yükleri gizlemek için steganografi tekniklerine sahiptir. Kötü amaçlı yazılım, kurbanın tüm Discord hesaplarını, kredi kartlarını, şifrelerini ve kripto cüzdanlarını sabit kodlu bir Discord web kancası adresi aracılığıyla saldırgana geri gönderiyor. Bu kötü amaçlı yazılımla ilgilenen kötü aktörler, onu yaklaşık 20 ABD doları tutarında kripto para ödeyerek satın aldılar.
Başlangıçta, pystyle
kötü niyetli bir yapıya sahip değildi; okunabilirliği ve kullanıcı deneyimini geliştirmek için konsol çıktısını stillendirmek ve renklendirmek için zararsız bir paketti. Ancak Phylum araştırmasına göre, popüler hale geldikten sonra (paket PyPI'de hala aktif ve her ay 40.000'den fazla indirme işlemi gerçekleştiriyor), birkaç sürüme W4SP kötü amaçlı yazılımını eklemeye karar verdiler.
pystyle
gibi açık kaynaklı paketler aylarca uyuyan aracılar olarak görev yapabilir, ancak daha sonra kendi yazarları tarafından kötü amaçlı amaçlarla etkinleştirilebilir. Riskli bir hareket çünkü popüler paketleri bizim gibi güvenlik araştırmacıları tarafından keşfedilebilir ve bu araştırmacılar onu kötü amaçlı olarak rapor edebilir ve sonsuza kadar kaldırılabilir. Bu nedenle genellikle zararsız bir kütüphanenin kaynak kodunu içeren, bir tür kötü amaçlı yük ekleyen ve bunu yeni bir adla yükledikleri yeni paketler oluştururlar: genel, kulağa hoş gelen, masum görünen bir şey. pygradient
gibi bir isim.
Carlos'u daha yakından inceledikten sonra, bu proto-RAT mutant kötü amaçlı yazılımın Aralık sürümlerindeki bazı özelliklerden yoksun olduğunu gördük: Ayrıca bir PowerShell betiği başlatıp hassas verileri dışarı sızdırmasına rağmen, base64 kodlu yükleri veya izin verilenler listesini kullanmıyordu. Kendi kendine bulaşmayı önlemek için txt dosyası. Bir bakıma daha hafif, daha az karmaşık bir varyanttı.
Ancak daha sonra, aralarında paintpy
, devicespoof
ve devicespoofer
da bulunduğu Kasım ayı başında yüklenen paketlere baktık ve daha derine indikten sonra şüphemizin doğrulandığını gördük: kötü amaçlı yazılım gerçekten gelişiyordu.
BillyTheGoat Kasım ayından bu yana GitHub'da aktif olmasa da, çoğunlukla Portekiz'de yerleşik olduğu anlaşılan bir kullanıcı tarafından, onun yaratımlarına dayanan veya doğrudan onlardan çalınan kötü amaçlı yazılımlar buluyoruz.
Bu kullanıcı PyPI'de kısa süre önce kaldırılan pystilez
adlı bir paketi yükledi ve bu paket yanlışlıkla BillyTheGoat'a atfedildi.
Checkmarxapicolor
adlı bir pakette (benzer isimli varyasyonlarla birlikte) kötü amaçlı kodlarında bir Discord sunucusu bağlantısı içeren bir W4SP saldırısı bulduktan sonra ortaya çıktığı belirtildi. Doğrulanmış bir Steam hesabına bağlı yönetici profili ve "zeeckt" adı, saldırganın Steam takma adlarından biri olarak ortaya çıktı.
Bir güvenlik araştırmacısı, Zeeckt'in verilerinden birini eğitim amaçlı yayınladı ve W4SP hırsızının ortak yazarından ilginç bir yanıt aldı:
Hırsızınızın çalınması ne kadar da ironik.
Görünüşe göre 17 yaşında bir Python geliştiricisi olan aynı yazar, GitHub profilindeki bir README dosyasında hayal kırıklığını yineliyor:
Zeeckt'in diğer kötü aktörlerden tam olarak hangi kötü amaçlı kodu çaldığını bilmiyoruz, ancak kesin olan bir şey var: bu ad, açık kaynak kayıtlarındaki kötü amaçlı yazılım kampanyalarında ortaya çıkmaya devam ediyor.
Carlos yakın zamanda dört paket daha bulduforenitq
, forenith
, forenity
ve forenitz
. Daha fazla araştırma yaptıktan sonra bunları kötü niyetli olarak etiketledi ve kaldırılmaları için PyPI'ye bildirdi. En hızlı vakanın yayınlanmasından silinmesine kadar yaklaşık 20 dakika sürdü.
forenitq
dosyasındaki setup[.]py
bakan Carlos , aşağıdaki ilk aşama yükünü buldu:
Saldırgan, "start" komutunu kullanarak Windows ikili dosyalarını belirli URL'lerden indirip çalıştıran üç geçici dosya oluşturur. Her ne kadar /rat
ve /clip
sümüklü böcekleri kötü niyetli niyetleri akla getirse de, bu varsayımı arka plana bakmadan doğrulayamadık.
Bu yazının yazıldığı sırada, hxxp://20[.]226[.]18[.]203
adresinde barındırılan sayfa hâlâ aktiftir ve yalnızca süresi dolmuş veya özel bir Discord davetine giden bağlantıyı gösterir.
Carlos paketin popülermiş gibi göründüğünü fark etti.
RAT dosyasının gizliliğini kaldırdıktan sonra, olası bir pano korsanının yüklendiği bir satır buldu, ancak bunun ayrıntıları base64 ile kodlanmıştı:
Kodu çözdükten sonra, hedeflenen kripto para birimi cüzdan adresini saldırganın adresiyle değiştirmek için kurbanın panosunu ele geçirmek üzere tasarlanmış bir Python kodu elde ederiz:
Bitcoin (bc1), Ethereum (0x), Monero (4) ve litecoin (L veya M veya 3) gibi belirli kalıpları arar ve bir kalıp bulunduğunda amaçlanan adresi saldırganın kripto para birimi cüzdan adresiyle değiştirir. .
Kod şunları kullanır:
Ek olarak, bu RAT mutantının tespitten kaçmak için kullandığı daha fazla tekniği ortaya çıkardık: setup[.]py
forenitq/ansi[.]py
.]py dosyasına eklenen birinci aşama verisi ve her çalıştırdığınızda değişen ikinci aşama polimorfik verisi. ikili.
Saldırgan ayrıca eksiksiz bir yardım menüsü içeren yeni bir komut ve kontrol ekledi ve bu kez şunu söyledi:
Gördüğünüz gibi kötü niyetli aktörler, altyapınıza daha fazla sızmak için kripto fonlarınızı ve sistem kimlik bilgilerinizi çalmaya isteklidir. RAT kötü amaçlı yazılımları, daha kaçamak ve geliştiricilere zarar verecek şekilde mutasyona uğramaya devam ediyor. Dolayısıyla, yazılım tedarik zincirinizi bugün korumuyorsanız, bunu mümkün olan en kısa sürede yapmak için harekete geçmeyi düşünün.
hxxp://20[.]226[.]18[.]203/inject/tCxFLYLT6ViY9ZnP
hxxp://20[.]226[.]18[.]203/clip
hxxp://20[.]226[.]18[.]203/rat