Önbellek zehirlenmesi, Apache Maven'in bir yazılım geliştirme sürecinde önbellekleri, paketleri ve bağımlılıkları yönetme biçimini hedef alan özel bir saldırı türüdür. Önbellek zehirlenmesinin ayrıntılarına dalmadan önce, bağımlılık yönetiminin Maven'de nasıl çalıştığını anlamak önemlidir.
Duyuru
Sven, 1996'dan bu yana ve 15 yılı aşkın bir süredir dünya çapında otomotiv, havacılık, sigorta, bankacılık, Birleşmiş Milletler ve Dünya Bankası gibi endüstrilerde endüstriyel projelerde Java programlıyor. 10 yıldan fazla bir süredir Amerika'dan Yeni Zelanda'ya kadar konferanslarda ve topluluk etkinliklerinde konuşmacı olarak yer alıyor, JFrog ve Vaadin için geliştirici savunucusu olarak çalışıyor ve düzenli olarak BT dergileri ve teknoloji portalları için makaleler yazıyor. Ana konusu olan Core Java'nın yanı sıra TDD ve güvenli kodlama uygulamalarını da kapsar.
Maven ve önbelleklerine genel bakış
Apache Maven, çoğunlukla Java projelerinde kullanılan, yaygın olarak kullanılan bir yapı yönetimi aracıdır. Maven bağımlılık yönetimini, uygulama oluşturma sürecini ve dağıtımı otomatikleştirir. Maven kullanılırken geliştiricilerin depoların ve bağımlılıkların güvenliği hakkında düşünmesini gerektiren bazı temel mekanizmalar kullanılır.
Maven, kitaplıkları ve bağımlılıkları yönetmek için depoları kullanır. İki tür arasında bir ayrım yapılmalıdır:
Yerel: İndirilen tüm kitaplıkların ve bağımlılıkların bir kopyası yerel bilgisayarınıza kaydedilir.
Uzak: Maven, merkezi Maven deposu (Maven Central) ve hatta bir şirketin özel depoları gibi çeşitli uzak depolara erişebilir.
Maven, tüm bağımlılıkları uzak bir depodan indirdikten sonra yerel depoda (önbellek) saklar. Bu, birden fazla kez ihtiyaç duyulan bağımlılıkların daha hızlı yüklenebileceği anlamına gelir çünkü her seferinde uzak depoya tekrar tekrar erişim gerektirmezler.
Önbellek zehirlenmesi nedir?
Önbellek zehirlenmesi, bir saldırganın sistemin önbelleğini (bu durumda Maven önbelleği) değiştirilmiş veya kötü amaçlı içerikle doldurmayı başardığı bir saldırı sınıfını tanımlar. Bu, önbelleğe yapılan meşru isteklerin doğru orijinal verileri bulmamasına, bunun yerine bir saldırgan tarafından eklenen verileri almasına neden olabilir. Maven durumunda, önbellek zehirlenmesi, bir saldırganın Maven'in derleme sürecindeki veya depo sunucularındaki bir güvenlik açığından yararlanarak geliştiricinin veya derleme önbelleğine kötü amaçlı yapılar eklemeyi başarması anlamına gelir.
Saldırının amacı, daha sonra yazılım projelerine entegre edilecek kötü amaçlı bağımlılıklar sağlamaktır. Bu zehirli bağımlılıklar, hassas verileri çalmak, sistemin kontrolünü ele geçirmek veya projeyi sabote etmek için kötü amaçlı kod içerebilir.
Maven önbelleklerine yönelik önbellek zehirlenmesi saldırı türleri
Maven depolarında önbellek zehirlenmesi saldırıları gerçekleştirmek için çeşitli senaryolar vardır:
Ortadaki Adam (MITM) önbellek zehirlenmesi.
Saldırgan, ortadaki adam saldırısını kullanarak, geliştirme bilgisayarı ile uzak Maven deposu arasındaki ağ trafiğini yakalayabilir ve manipüle edebilir. İletişim şifrelenmemişse, bir saldırgan, tahrif edilmiş yapıları enjekte edebilir ve bunları yerel Maven önbelleğine yerleştirebilir; bu, geliştiricilerin, gerçekten tahrif edildiklerinde, güvenilir bir depodaki bağımlılıkları kullandıklarına inanmaya devam etmelerine olanak tanır.
Böyle bir saldırı, özellikle Maven'in güvenli olmayan HTTP bağlantıları aracılığıyla depolarla iletişim kurması durumunda umut vericidir. Merkezi Maven deposu (Maven Central) artık bu tür saldırıları önlemek için yalnızca HTTPS'yi kabul ediyor, ancak hâlâ HTTP kullanan özel veya eski depolar var.
Depodaki güvenlik açıklarından yararlanın
Bir saldırgan uzak depoya erişmeyi başarırsa, herhangi bir yapıyı yükleyebilir veya orada bulunan sürümleri değiştirebilir. Bu, örneğin deponun yeterince korunmaması veya depo yönetimi aracındaki (Sonatype Nexus veya JFrog Artifactory gibi) bir güvenlik açığından yararlanılabilmesi durumunda meydana gelir. Bu durumda, saldırgan kötü amaçlı yazılımı doğrudan depoya enjekte ederek her yerdeki geliştiricileri tehlikeye atılan yapıyı indirmeye ve Maven önbelleğinde saklamaya zorlayabilir.
Bağımlılık karışıklığı
Son yıllarda büyük ilgi gören özellikle tehlikeli saldırı vektörlerinden biri de “bağımlılık karışıklığı”dır. Bu saldırı, birçok modern yazılım projesinin Maven Central gibi dahili, özel ve genel depolara bağımlılıklar oluşturmasına dayanıyor. Bağımlılık karışıklığı saldırısının temel amacı, kamuya açık depolar aracılığıyla, dahili veya özel bağımlılıklar kullandığına “inanan” bir şirkete veya projeye kötü amaçlı paketler enjekte etmektir.
Bağımlılık karışıklığının temelleri
Pek çok şirket ve proje, kendi kitaplıklarını ve herkesin erişemeyeceği bağımlılıkları sakladıkları dahili Maven depolarına sahiptir. Bu dahili kütüphaneler belirli işlevleri uygulayabilir veya halk kütüphanelerine uyum sağlayabilir. Geliştiriciler genellikle Maven yapılandırmasındaki (pom.xml) bağımlılıkların adını ve sürümünü tanımlarlar; Maven'in bağımlılıkları çözerken bir öncelik belirlediğini ve açıkça farklı şekilde yapılandırılmadıkları sürece Maven Central gibi genel depoları dahili depolara tercih ettiğini fark etmezler.
Bir bağımlılık karışıklığı saldırısı tam olarak bu öncelik sırasını kullanır. Saldırgan, genel Maven deposunda, dahili kütüphaneyle aynı adı taşıyan ve genellikle dahili olarak kullanılan sürüm numarasından daha yüksek bir sürüm numarasına sahip bir paket yayınlar. Maven böyle bir bağımlılık aradığında genellikle özel dahili sürüm yerine halka açık paketi tercih eder. Bu, kötü amaçlı paketi indirir ve gelecekteki derlemelerde kullanılacağı geliştiricinin Maven önbelleğinde saklar.
Bağımlılık karışıklığı nasıl keşfedildi?
Alex Birsan adlı bir güvenlik araştırmacısı, büyük teknoloji şirketlerinin projelerindeki bağımlılıkları zehirlemenin ne kadar kolay olduğunu göstermek için gösteriler yaparken 2021 yılında bu saldırıyı popüler hale getirdi. Apple, Microsoft ve Tesla gibi büyük şirketlerin dahili kütüphaneleriyle aynı adlara sahip paketler yayınlayarak bu şirketlere karşı başarılı bağımlılık karmaşası saldırıları başlatmayı başardı.
Birsan, sistemin savunmasız olduğunu göstermek için saldırılarında kötü amaçlı içerik değil, yalnızca zararsız kod kullandı. Pek çok durumda şirketlerin yapı sistemlerinin gerçek dahili kütüphane yerine kötü amaçlı (kendi durumunda zararsız) paketi indirip kullandığını göstermeyi başardı. Bu açıklama, güvenlik topluluğunda kafa karıştırıcı bağımlılıkların riskleri konusundaki farkındalığı önemli ölçüde artırdı.
Bağımlılık karışıklığı neden bu kadar etkili çalışıyor?
Bağımlılık karışıklığı saldırısının başarısı, birçok yapı sisteminin varsayılan yapılandırmasında ve Maven'in bağımlılıkları nasıl çözdüğüne bağlıdır. Bu saldırı vektörünün bu kadar etkili olmasının birkaç nedeni var:
Yazım hatası
Yazım hatası saldırısı tekniği, Maven'de olduğu gibi yazılım geliştirmede paket adlarını yazarken meydana gelebilecek yaygın yazım hatalarını hedefleyerek kullanıcının dikkatsizliğinden yararlanır. Saldırganlar, meşru kitaplıklara çok benzeyen, benzer veya biraz yanlış yazılmış adlara sahip paketleri bırakır. Ayrıntılar, eksik harfler, ek karakterler veya alternatif yazımlar gibi küçük varyasyonları içerebilir. Geliştiriciler bağımlılık tanımlarına yanlışlıkla yanlış paket adını girerlerse veya otomatik araçlar bu paketleri çözerse, kötü amaçlı paketi indirirler. Typosquatting, Maven, npm, PyPI ve halka açık kütüphaneleri barındıran diğerleri gibi paket yöneticilerinin manipülasyonuyla ilişkili en iyi bilinen saldırı yöntemlerinden biridir.
Tipik yazım hatası teknikleri
Yanlış yazılmış paket adları: En basit tekniklerden biri, popüler bir kütüphanenin adındaki harfi değiştirmek veya eklemektir. Bir örnek, sıklıkla kullanılan com.google.common paketi olabilir. Bir saldırgan, com.gooogle.common adında (fazladan bir “o” ile) kolayca gözden kaçabilecek bir paket gönderebilir.
Farklı yazılışlar: Saldırganlar, tanınmış kitapçıların veya isimlerin alternatif yazılışlarını da kullanabilir. Örneğin, bir saldırgan, popüler com.apache.logging paketine benzeyen ancak “logging”deki “n” ve “g” harf kombinasyonunun eksik olması nedeniyle kolayca gözden kaçan com.apache.loggin adlı bir paketi bırakabilir.
Önekleri veya sonekleri kullanma: Diğer bir seçenek de meşru paketlere benzerliği artıran önekler veya sonekler eklemektir. Örneğin bir saldırgan, meşru com.google.common paketine benzeyen com.google.common-utils veya com.google.commonx gibi paketler yayınlayabilir.
Adlandırma benzerliği: Saldırganlar ayrıca diğer kütüphanelerle birlikte sıklıkla kullanılan ortak terimler veya kısaltmalar içeren paketler yayınlayarak açık kaynak topluluğundaki adlandırma kurallarından da yararlanabilirler. Bunun bir örneği, popüler Apache Commons kütüphanesi commons-lang3'e benzeyen common-lang3-utils gibi bir paketin piyasaya sürülmesi olabilir.
Yazma tehlikeleri
Yazım hatası tehdidi özellikle ciddidir çünkü tespit edilmesi zordur. Geliştiriciler, paketleri güvenilir bir şekilde indirip projelerine entegre etmek için genellikle Maven gibi oluşturma araçlarına güvenir. Yanlış bir paket adı girerseniz kötü amaçlı bir bağımlılık eklediğinizi hemen fark edemeyebilirsiniz. Yazım hatası bir tür sosyal mühendisliktir çünkü insanların hata yapma yatkınlığından yararlanır.
Başarılı bir yazım hatası saldırısının ciddi sonuçları olabilir:
Maven topluluğunda da yazım hatası vakaları yaşandı. Bir durumda, meşru ApacheCommons commons-logging günlük kaydı paketine benzeyen, commons-loggin adı verilen bir paket yayımlandı. Paket adını yanlış giren geliştiriciler, kötü amaçlı paketi indirip projelerine entegre ederek potansiyel güvenlik riskleri oluşturdu.
Typosquatting, insan hatasını hedef alan karmaşık ve genellikle tespit edilmesi zor bir saldırı yöntemidir. Saldırganlar, kötü amaçlı kod içeren yanlış yazılmış veya benzer sese sahip paketler yayınlayarak Maven, npm ve PyPI gibi paket yöneticilerinin yaygın kullanımından yararlanır. Geliştiriciler ve kuruluşlar bu tehdidin farkında olmalı ve projelerine yalnızca meşru ve güvenilir paketlerin dahil edilmesini sağlamak için uygun koruyucu önlemleri almalıdır.
Duyuru
Sven, 1996'dan bu yana ve 15 yılı aşkın bir süredir dünya çapında otomotiv, havacılık, sigorta, bankacılık, Birleşmiş Milletler ve Dünya Bankası gibi endüstrilerde endüstriyel projelerde Java programlıyor. 10 yıldan fazla bir süredir Amerika'dan Yeni Zelanda'ya kadar konferanslarda ve topluluk etkinliklerinde konuşmacı olarak yer alıyor, JFrog ve Vaadin için geliştirici savunucusu olarak çalışıyor ve düzenli olarak BT dergileri ve teknoloji portalları için makaleler yazıyor. Ana konusu olan Core Java'nın yanı sıra TDD ve güvenli kodlama uygulamalarını da kapsar.
Maven ve önbelleklerine genel bakış
Apache Maven, çoğunlukla Java projelerinde kullanılan, yaygın olarak kullanılan bir yapı yönetimi aracıdır. Maven bağımlılık yönetimini, uygulama oluşturma sürecini ve dağıtımı otomatikleştirir. Maven kullanılırken geliştiricilerin depoların ve bağımlılıkların güvenliği hakkında düşünmesini gerektiren bazı temel mekanizmalar kullanılır.
Maven, kitaplıkları ve bağımlılıkları yönetmek için depoları kullanır. İki tür arasında bir ayrım yapılmalıdır:
Yerel: İndirilen tüm kitaplıkların ve bağımlılıkların bir kopyası yerel bilgisayarınıza kaydedilir.
Uzak: Maven, merkezi Maven deposu (Maven Central) ve hatta bir şirketin özel depoları gibi çeşitli uzak depolara erişebilir.
Maven, tüm bağımlılıkları uzak bir depodan indirdikten sonra yerel depoda (önbellek) saklar. Bu, birden fazla kez ihtiyaç duyulan bağımlılıkların daha hızlı yüklenebileceği anlamına gelir çünkü her seferinde uzak depoya tekrar tekrar erişim gerektirmezler.
Önbellek zehirlenmesi nedir?
Önbellek zehirlenmesi, bir saldırganın sistemin önbelleğini (bu durumda Maven önbelleği) değiştirilmiş veya kötü amaçlı içerikle doldurmayı başardığı bir saldırı sınıfını tanımlar. Bu, önbelleğe yapılan meşru isteklerin doğru orijinal verileri bulmamasına, bunun yerine bir saldırgan tarafından eklenen verileri almasına neden olabilir. Maven durumunda, önbellek zehirlenmesi, bir saldırganın Maven'in derleme sürecindeki veya depo sunucularındaki bir güvenlik açığından yararlanarak geliştiricinin veya derleme önbelleğine kötü amaçlı yapılar eklemeyi başarması anlamına gelir.
Saldırının amacı, daha sonra yazılım projelerine entegre edilecek kötü amaçlı bağımlılıklar sağlamaktır. Bu zehirli bağımlılıklar, hassas verileri çalmak, sistemin kontrolünü ele geçirmek veya projeyi sabote etmek için kötü amaçlı kod içerebilir.
Maven önbelleklerine yönelik önbellek zehirlenmesi saldırı türleri
Maven depolarında önbellek zehirlenmesi saldırıları gerçekleştirmek için çeşitli senaryolar vardır:
Ortadaki Adam (MITM) önbellek zehirlenmesi.
Saldırgan, ortadaki adam saldırısını kullanarak, geliştirme bilgisayarı ile uzak Maven deposu arasındaki ağ trafiğini yakalayabilir ve manipüle edebilir. İletişim şifrelenmemişse, bir saldırgan, tahrif edilmiş yapıları enjekte edebilir ve bunları yerel Maven önbelleğine yerleştirebilir; bu, geliştiricilerin, gerçekten tahrif edildiklerinde, güvenilir bir depodaki bağımlılıkları kullandıklarına inanmaya devam etmelerine olanak tanır.
Böyle bir saldırı, özellikle Maven'in güvenli olmayan HTTP bağlantıları aracılığıyla depolarla iletişim kurması durumunda umut vericidir. Merkezi Maven deposu (Maven Central) artık bu tür saldırıları önlemek için yalnızca HTTPS'yi kabul ediyor, ancak hâlâ HTTP kullanan özel veya eski depolar var.
Depodaki güvenlik açıklarından yararlanın
Bir saldırgan uzak depoya erişmeyi başarırsa, herhangi bir yapıyı yükleyebilir veya orada bulunan sürümleri değiştirebilir. Bu, örneğin deponun yeterince korunmaması veya depo yönetimi aracındaki (Sonatype Nexus veya JFrog Artifactory gibi) bir güvenlik açığından yararlanılabilmesi durumunda meydana gelir. Bu durumda, saldırgan kötü amaçlı yazılımı doğrudan depoya enjekte ederek her yerdeki geliştiricileri tehlikeye atılan yapıyı indirmeye ve Maven önbelleğinde saklamaya zorlayabilir.
Bağımlılık karışıklığı
Son yıllarda büyük ilgi gören özellikle tehlikeli saldırı vektörlerinden biri de “bağımlılık karışıklığı”dır. Bu saldırı, birçok modern yazılım projesinin Maven Central gibi dahili, özel ve genel depolara bağımlılıklar oluşturmasına dayanıyor. Bağımlılık karışıklığı saldırısının temel amacı, kamuya açık depolar aracılığıyla, dahili veya özel bağımlılıklar kullandığına “inanan” bir şirkete veya projeye kötü amaçlı paketler enjekte etmektir.
Bağımlılık karışıklığının temelleri
Pek çok şirket ve proje, kendi kitaplıklarını ve herkesin erişemeyeceği bağımlılıkları sakladıkları dahili Maven depolarına sahiptir. Bu dahili kütüphaneler belirli işlevleri uygulayabilir veya halk kütüphanelerine uyum sağlayabilir. Geliştiriciler genellikle Maven yapılandırmasındaki (pom.xml) bağımlılıkların adını ve sürümünü tanımlarlar; Maven'in bağımlılıkları çözerken bir öncelik belirlediğini ve açıkça farklı şekilde yapılandırılmadıkları sürece Maven Central gibi genel depoları dahili depolara tercih ettiğini fark etmezler.
Bir bağımlılık karışıklığı saldırısı tam olarak bu öncelik sırasını kullanır. Saldırgan, genel Maven deposunda, dahili kütüphaneyle aynı adı taşıyan ve genellikle dahili olarak kullanılan sürüm numarasından daha yüksek bir sürüm numarasına sahip bir paket yayınlar. Maven böyle bir bağımlılık aradığında genellikle özel dahili sürüm yerine halka açık paketi tercih eder. Bu, kötü amaçlı paketi indirir ve gelecekteki derlemelerde kullanılacağı geliştiricinin Maven önbelleğinde saklar.
Bağımlılık karışıklığı nasıl keşfedildi?
Alex Birsan adlı bir güvenlik araştırmacısı, büyük teknoloji şirketlerinin projelerindeki bağımlılıkları zehirlemenin ne kadar kolay olduğunu göstermek için gösteriler yaparken 2021 yılında bu saldırıyı popüler hale getirdi. Apple, Microsoft ve Tesla gibi büyük şirketlerin dahili kütüphaneleriyle aynı adlara sahip paketler yayınlayarak bu şirketlere karşı başarılı bağımlılık karmaşası saldırıları başlatmayı başardı.
Birsan, sistemin savunmasız olduğunu göstermek için saldırılarında kötü amaçlı içerik değil, yalnızca zararsız kod kullandı. Pek çok durumda şirketlerin yapı sistemlerinin gerçek dahili kütüphane yerine kötü amaçlı (kendi durumunda zararsız) paketi indirip kullandığını göstermeyi başardı. Bu açıklama, güvenlik topluluğunda kafa karıştırıcı bağımlılıkların riskleri konusundaki farkındalığı önemli ölçüde artırdı.
Bağımlılık karışıklığı neden bu kadar etkili çalışıyor?
Bağımlılık karışıklığı saldırısının başarısı, birçok yapı sisteminin varsayılan yapılandırmasında ve Maven'in bağımlılıkları nasıl çözdüğüne bağlıdır. Bu saldırı vektörünün bu kadar etkili olmasının birkaç nedeni var:
- Kamu depolarının otomatik önceliklendirilmesi
- Sürüm numarasına güven
- Eksik imza doğrulaması
- Harici koda güvenin
Yazım hatası
Yazım hatası saldırısı tekniği, Maven'de olduğu gibi yazılım geliştirmede paket adlarını yazarken meydana gelebilecek yaygın yazım hatalarını hedefleyerek kullanıcının dikkatsizliğinden yararlanır. Saldırganlar, meşru kitaplıklara çok benzeyen, benzer veya biraz yanlış yazılmış adlara sahip paketleri bırakır. Ayrıntılar, eksik harfler, ek karakterler veya alternatif yazımlar gibi küçük varyasyonları içerebilir. Geliştiriciler bağımlılık tanımlarına yanlışlıkla yanlış paket adını girerlerse veya otomatik araçlar bu paketleri çözerse, kötü amaçlı paketi indirirler. Typosquatting, Maven, npm, PyPI ve halka açık kütüphaneleri barındıran diğerleri gibi paket yöneticilerinin manipülasyonuyla ilişkili en iyi bilinen saldırı yöntemlerinden biridir.
Tipik yazım hatası teknikleri
Yanlış yazılmış paket adları: En basit tekniklerden biri, popüler bir kütüphanenin adındaki harfi değiştirmek veya eklemektir. Bir örnek, sıklıkla kullanılan com.google.common paketi olabilir. Bir saldırgan, com.gooogle.common adında (fazladan bir “o” ile) kolayca gözden kaçabilecek bir paket gönderebilir.
Farklı yazılışlar: Saldırganlar, tanınmış kitapçıların veya isimlerin alternatif yazılışlarını da kullanabilir. Örneğin, bir saldırgan, popüler com.apache.logging paketine benzeyen ancak “logging”deki “n” ve “g” harf kombinasyonunun eksik olması nedeniyle kolayca gözden kaçan com.apache.loggin adlı bir paketi bırakabilir.
Önekleri veya sonekleri kullanma: Diğer bir seçenek de meşru paketlere benzerliği artıran önekler veya sonekler eklemektir. Örneğin bir saldırgan, meşru com.google.common paketine benzeyen com.google.common-utils veya com.google.commonx gibi paketler yayınlayabilir.
Adlandırma benzerliği: Saldırganlar ayrıca diğer kütüphanelerle birlikte sıklıkla kullanılan ortak terimler veya kısaltmalar içeren paketler yayınlayarak açık kaynak topluluğundaki adlandırma kurallarından da yararlanabilirler. Bunun bir örneği, popüler Apache Commons kütüphanesi commons-lang3'e benzeyen common-lang3-utils gibi bir paketin piyasaya sürülmesi olabilir.
Yazma tehlikeleri
Yazım hatası tehdidi özellikle ciddidir çünkü tespit edilmesi zordur. Geliştiriciler, paketleri güvenilir bir şekilde indirip projelerine entegre etmek için genellikle Maven gibi oluşturma araçlarına güvenir. Yanlış bir paket adı girerseniz kötü amaçlı bir bağımlılık eklediğinizi hemen fark edemeyebilirsiniz. Yazım hatası bir tür sosyal mühendisliktir çünkü insanların hata yapma yatkınlığından yararlanır.
Başarılı bir yazım hatası saldırısının ciddi sonuçları olabilir:
- Veri kaybı
- Kötü amaçlı yazılımların tanıtılması
- Güven kaybı
Maven topluluğunda da yazım hatası vakaları yaşandı. Bir durumda, meşru ApacheCommons commons-logging günlük kaydı paketine benzeyen, commons-loggin adı verilen bir paket yayımlandı. Paket adını yanlış giren geliştiriciler, kötü amaçlı paketi indirip projelerine entegre ederek potansiyel güvenlik riskleri oluşturdu.
Typosquatting, insan hatasını hedef alan karmaşık ve genellikle tespit edilmesi zor bir saldırı yöntemidir. Saldırganlar, kötü amaçlı kod içeren yanlış yazılmış veya benzer sese sahip paketler yayınlayarak Maven, npm ve PyPI gibi paket yöneticilerinin yaygın kullanımından yararlanır. Geliştiriciler ve kuruluşlar bu tehdidin farkında olmalı ve projelerine yalnızca meşru ve güvenilir paketlerin dahil edilmesini sağlamak için uygun koruyucu önlemleri almalıdır.