Güvenlik araştırmacıları, saldırganların PyPI paket deposu aracılığıyla kötü amaçlı yükleri dağıtmak için basit ve sorunlu bir yol keşfettiler.

Bu tekniğin içerdiği tek şey, kötü amaçlı bir paketi PyPI’da, depoda bulunan herhangi bir meşru, daha önce kayıtlı ancak şimdi kaldırılmış paketle aynı adı kullanarak yeniden kaydetmek ve ardından kuruluşların bunu indirmesini beklemektir. PyPI, kaldırılan paketlerin adlarının yeniden kullanılmasını yasaklamadığından, saldırganların bir zamanlar kayıt defterinde bulunan sahte paketleri meşru paketler olarak göstermeleri kolaydır.

Diriliş Kaçırma

“‘Revival Hijack’ yöntemi saldırganlar tarafından kolay bir tedarik zinciri saldırısı olarak kullanılabilir, kuruluşları hedef alabilir ve çok çeşitli ortamlara sızabilir,” diyor araştırmacılar. JFrog bir raporda uyardı bu hafta. “PyPI kullanıcıları uyanık olmalı ve CI/CD makinelerinin PyPI’den zaten kaldırılmış paketleri yüklemeye çalışmadığından emin olmalı,” diye belirttiler, yakın zamanda kötü amaçlı yazılım dağıtmak için bu taktiği kullanan bir tehdit aktörünü keşfettikten sonra.

JFrog’un keşfettiği saldırı yöntemi, saldırganların son yıllarda PyPI, npm, Maven Central, NuGet ve RubyGems gibi genel kod depoları aracılığıyla kötü amaçlı yazılımları kurumsal ortamlara gizlice sokmak için kullandıkları birkaç yöntemden biridir. Yaygın taktikler şunları içerir: klonlama ve enfekte etme popüler depolar, Zehirli eserler, ve arıyorum ve sızdırılan sırları kullanma Saldırılarda özel anahtarlar ve veritabanı sertifikaları gibi bilgiler ele geçirilebilir.

Tehdit aktörleri ayrıca, yaygın yazım hatalarını istismar ederek veya meşru bir paketin adında küçük değişiklikler kullanarak (“google” yerine “g00gle”) geliştiricileri yanlışlıkla kötü amaçlı paketler yüklemeye kandırmaya çalıştılar. Bu tür yazım yanlışı saldırıları PyPI ve diğer kayıtların sahipleri ve kuruluşları tarafından bunlara karşı koruma sağlama çabalarına rağmen, bu durum hız kesmeden devam ediyor.

Revival Hijack’in zorluğu, bu tekniğin, tipik olarak typosquatting ve diğer saldırı yöntemlerinde olduğu gibi, kurbanın hata yapmasına dayanmamasıdır. “Bir zamanlar güvenli olan bir paketi en son sürümüne güncellemek, birçok kullanıcı tarafından güvenli bir işlem olarak görülüyor (ama öyle olmamalı!),” diye belirtti JFrog. “Birçok CI/CD makinesi, bu paketleri otomatik olarak yüklemek üzere zaten ayarlanmıştır.”

Terk Edilmiş Paket Adlarının Yeniden Kullanılması

JFrog’a göre, bir geliştirici bir projeyi PyPI’dan kaldırdığında, ilişkili paket adları hemen başka herkesin kullanımına açık hale gelir. Bu, bir saldırganın paket adlarını kolayca ele geçirebileceği ve en son sürüme güncellemeye çalışabilecek orijinal paketlerin herhangi bir kullanıcısını enfekte edebileceği anlamına gelir. Orijinal olduğunu varsayarak ilk kez yüklemek isteyebilecek herhangi bir kullanıcı da benzer şekilde etkilenecektir.

Saldırı vektörünün etkinliğini test etmek için, JFrog araştırmacıları önce boş bir proje oluşturdular ve bunu PyPI’ye “revival-package version 1.0.0” olarak, bir test “origin_author” hesabı kullanarak yayınladılar. Projeyi yayınladıktan sonra, araştırmacılar onu PyPI’den kaldırdılar ve hemen hemen aynı isimle başka bir boş paketi PyPI’ye yayınladılar, ancak farklı bir “new_authr” hesabından ve farklı bir sürüm numarası olan 4.0.0’dan.

Egzersiz, PyPI’nin JFrog’un ikinci boş paketini, şirketin orijinal “canlandırma paketi”nin yeni bir sürümü olarak gösterdiğini ve çok farklı bir kod içerdiğine dair hiçbir belirti olmadığını gösterdi. JFrog’un orijinal paketi geliştiricilerin kullandığı meşru bir kod olsaydı, bir CI/CD sistemi, bunun bir güncelleme olduğu varsayımıyla “yeni” sürümü indirirdi.

“Meşru paketlerin ele geçirilmesinin kolayca yapılabileceğini gösterdikten sonra, [we] JFrog, “PyPI’daki kaç paketin ‘Revival Hijack’ saldırısına açık olduğunu analiz etmeye karar verdik, yani daha önce kaldırılmış ve şimdi değiştirilebilir/ele geçirilebilir durumda” dedi.

Açık ve Mevcut Bir Tehdit

JFrog araştırmacılarının araması, saldırganların kötü amaçlı yazılımları PyPI’ye gizlice sokmak için ele geçirebileceği şaşırtıcı bir şekilde 120.000 kaldırılmış paket gösterdi. Araştırmacılar sonuçları yalnızca en az aylardır etkin olan veya kullanıcıların daha önce 100.000’den fazla kez indirdiği paketleri içerecek şekilde filtrelediğinde, bu sayı yaklaşık 22.000 pakete düştü.

Rakiplerin bu terk edilmiş paket adlarını kötüye kullanmasını önlemek için, JFrog araştırmacıları bu paketlerin en popüler olanlarını “ele geçirdi” ve onları boş olanlarla değiştirdi. Ayrıca, orijinal paketleri kullanan hiç kimsenin yanlışlıkla boş paketi güncelleme olarak indirmesini önlemek için tüm boş paketlerdeki sürüm numarasının 0.0.0.1 olduğundan emin oldular.

Bu önleme rağmen, JFrog’un boş paketleri üç aylık bir süre zarfında yaklaşık 200.000 otomatik ve manuel indirmeye ulaştı ve bu da Revival Hijack tehdidinin çok gerçek olduğunu gösteriyor, dedi güvenlik satıcısı. “Bu, silinen paketleri arayan eski işler ve betiklerin veya bu paketleri yazım yanlışı nedeniyle manuel olarak indiren kullanıcıların olduğunu gösteriyor,” dedi JFrog.

Gerçek bir saldırı senaryosunda, bir saldırgan muhtemelen her ele geçirilen pakete yüksek bir sürüm numarası eklerdi, böylece CI/CD sistemleri bunları güncellemeler olduğuna inanarak otomatik olarak indirirdi, dedi JFrog. Şirket, PyPI’nin terk edilmiş paket adlarının yeniden kullanımını tamamen yasaklamasını önerdi. JFrog, PyPI kullanan kuruluşların yeni paket sürümlerine yükseltme yaparken bu saldırı vektörünün farkında olmaları gerektiği konusunda uyardı.



siber-1