GitGuardian Araştırmacıları PyPI (Python Paket Dizini) Paketlerinde Sızan Binlerce Sır Buldu


Yazan: Dwayne McDaniel, GitGuardian Geliştiricisi ve Güvenlik Avukatı, GitGuardian

DevOps’un modern dünyası, çalışma zamanında içe aktarılan dış hizmetlere ve bileşenlere bağlanan kodumuza güvenmek anlamına gelir. Bu erişimin tamamı sırlara, gerekli erişimi sağlayan API anahtarları ve şifreler gibi kimlik bilgilerine dayanmaktadır. İdeal olarak, bu gizli diziler kasalarda, gizli yönetim platformlarında veya sürüm kontrolünün dışında güvenli bir şekilde konumlandırılan “.env” dosyalarında güvenli bir şekilde saklanmalıdır.

Ne yazık ki, çoğu zaman sırlar, düz metin olarak kodda veya projeyle birlikte gönderilen ve erişimi olan herkes tarafından görülebilen bir “.env” dosyasında olduğu gibi, olmaması gereken yerlerde bulunur. GitGuardian’ın yıllık raporumuzda bildirdiği milyonlarca sırrın da gösterdiği gibi, bu büyüyen bir sorun olmaya devam ediyor.

Üstelik sırların yayılması sorunu şirket içinde üretilen kodlarla sınırlı değil. Ekosistemlerimize dahil ettiğimiz üçüncü parti yazılımlar için de ciddi bir sorun. Genellikle veri merkezlerimizde veya bulut sağlayıcılarımızda çalıştırılması amaçlanan özel kodumuzun aksine, PyPI paketleri gibi üçüncü taraf kodların çoğunlukla açık kaynaklı yazılım olarak serbestçe dağıtılması amaçlanır, böylece dahil edilen tüm kimlik bilgileri görülebilir. Sorun keşfedilmeden önce yüzlerce, hatta potansiyel olarak milyonlarca geliştirici tarafından.

* PyPI’de sırlar ne kadar yaygın?

GitGuardian’da, her PyPI projesini gömülü sırlara karşı taramak için güvenlik araştırmacısı Tom Forbes ile birlikte çalıştık. PyPI, Python Paket Dizini, resmi 3. taraf paket yönetim platformu olarak Python topluluğuna hizmet eder. Yayınlanan 5 milyon sürümde 9,4 milyondan fazla dosya içeren 450.000’den fazla projeyi analiz ettik. Bulduğumuz şey şu:

  • Bulunan toplam benzersiz sırlar: 3.938
  • Geçerli olduğu tespit edilen benzersiz sırlar: 768
  • Tüm sürümlerdeki toplam sır sayısı: 56.866
  • En az bir benzersiz sır içeren projeler: 2.922
  • Bireysel sır türleri tespit edildi: 151

GitGuardian Araştırmacıları PyPI (Python Paket Dizini) Paketlerinde Sızan Binlerce Sır Buldu

Altyazı: Zaman içinde dedektöre göre farklı sırlar

*En çok sır içeren dosyalar

Araştırmanın Python kodu üzerinde olduğu göz önüne alındığında, “.py” uzantılı dosyaların sabit kodlanmış kimlik bilgileri için bir numaralı kaynak olması sürpriz olmamalıdır. Sonraki en yaygın olanı ise “.JSON” ve “.yml” dosyaları gibi yapılandırma ve dokümantasyon dosyalarıydı. Ayrıca 209 README dosyası ve 675 benzersiz sır içeren test klasörleri gibi bazı beklenmedik yerlerde de geçerli sırlar bulduk.

GitGuardian Araştırmacıları PyPI (Python Paket Dizini) Paketlerinde Sızan Binlerce Sır Buldu

PyPI paketlerinde sabit kodlanmış bir sır içeren .py dışındaki en yaygın dosya türleri

*Yeni ortaya çıkan trendler

Sürümler arasında Redis kimlik bilgilerinden Azure Anahtarlarına kadar her şey bulunurken, analizimizde birkaç dikkate değer eğilim açıkça görülüyor:

  • Google API anahtarı sızıntıları, 2020’de meydana gelen çok büyük bir artış da dahil olmak üzere, zaman içinde istikrarlı bir şekilde arttı.
  • Geçerli olduğu tespit edilen Telegram bot tokenleri artan bir sıklıkta sızdırıldı; özellikle 2021’in ilk yarısında ikiye katlandı ve 2023’ün başlarında yeniden yükselişe geçti.
  • Veritabanı kimlik bilgilerinde 2022’de ciddi bir artış başladı ve araştırma döneminin sonuna kadar devam etti.

*Aynı sır, farklı sürümler

Bu bulgular arasında öne çıkabilecek bir şey, tüm sürümlerde bulunan benzersiz sırların toplam bulunanlara karşı dengesiz oranıdır. Bu, bir geliştiricinin bir sırrı ekleyip yayınladığında, bunun birden fazla sürümde muhtemelen kodda kalacağının kanıtıdır. Bunun nedeni kısmen yayınlama araçlarının dosyaları göz ardı etmek için makul varsayılanlara sahip olmamasıdır. PyPI, dağıtımdan hariç tuttuklarınız için korumalardan yoksundur.
Örneğin Python, bir paket oluşturulduğunda `.gitignore` ayarlarını dikkate almaz. ‘.gitignore’, dosyaları git geçmişinizin dışında tutmak için harika olsa da, işinin tamamı budur. Yanlışlıkla dahil edilmeyi önlemek için kullanabileceğiniz “setuptools-git” kullanımı gibi çözümler vardır. Bu, `.cookiecutterrc` ve .pypirc dosyaları gibi yerel yapılandırma dosyaları için işe yarar. Referans olarak PyPI yayınlama kimlik bilgilerini içeren 43 `.pypirc` dosyası bulduk.

*Çekilen dosyalara hâlâ erişilebilir

Bir geliştirici, planlamadığı bir şeyi yayınladığında, içgüdüsü onu projeden geri çekmek olabilir. Ne yazık ki, PyPI’deki çekme mekanizması aslında dosyayı sunucudan kaldırmaz; yalnızca varsayılan olarak yükleyici tarafından yoksayılacak dosyayı işaretler. Bir kullanıcı çekilen sürümü belirtirse bu sürüm yine de kullanılacaktır. Dosya muhtemelen sonsuza kadar indirilebilir durumdadır. Dosyalar yalnızca bilinen kötü amaçlı kodlara sahipse PyPI’den tamamen kaldırılır.

* İstenmeyen erişime izin veren geçerli sırlar

Burada, herkesin ilgili sistemlere erişmesini sağlayabilecek, bulduğumuz en yaygın geçerli sır türlerinin kısmi bir listesi bulunmaktadır.

  • Auth0 Anahtarları
  • Azure Active Directory API Anahtarları
  • MongoDB, MySQL ve PostgreSQL gibi sağlayıcılar için veritabanı kimlik bilgileri.
  • Dropbox Anahtarları.
  • Coinbase Kimlik Bilgileri
  • GitHub OAuth Uygulama Anahtarları.
  • SSH Kimlik Bilgileri

Bulunan daha fazla sayıda toplam olaya odaklanmak cazip gelse de, geçerli olduğu tespit edilen sırlar en acil ve kritik tehdidi oluşturmaktadır. Araştırmacılar, yerleşik bir doğrulama süreciyle hem belirli dedektörler hem de genel kalıplar olmak üzere 400’den fazla sır türünü arayan araştırmaları için ggshield GitGuardian CLI’yi kullandılar. Tüm sırların geçerliliği kontrol edilemese de araştırmanın yapıldığı Ekim 2023’te 190’dan fazla belirli kimlik bilgisi türü doğrulanabiliyordu.

Bir kimlik bilgisinin doğrulanamamasının geçersiz sayılması gerektiği anlamına gelmediğini unutmamak önemlidir. Hashicorp Vault, Kubernetes kümeleri, Okta veya Splunk gibi bazı sistemler henüz bir kimlik bilgisinin geçerli olup olmadığını test etmek için müdahaleci olmayan bir yol sunmuyor. Bunun yerine, bu bulguların ‘geçerli’ ve ‘henüz doğrulanmamış’ olarak ikiye ayrıldığını düşünmelisiniz.

Güvenli çalış

PyPI’nize veya diğer projelere yanlışlıkla sırların eklenmesini nasıl önleyeceğinize dair bazı ipuçları.

*Kodda düz metin kimlik bilgilerinden kaçının

Eğer kodunuza hiçbir zaman bir sır eklemezseniz, bunun PyPI paketinizde yer almasının hiçbir yolu yoktur. Söylemesi yapmaktan daha kolay olduğunu kabul ediyoruz, ancak bu, kodunuzdaki sonsuz döngülerden veya yığın taşmalarından kaçınmak kadar değerli bir beceridir. ‘python-dotenv’ gibi sürüm kontrolü dışındaki dosyalardan salt okunur değerlerin programlı olarak çağrılmasını kolaylaştıran birden fazla araç vardır.

İyi yönetilen bir “.env” dosyası pratik bir çözüm olsa da Azure Key Vault veya AWS Secrets Manager gibi Bulut Sırları Yöneticilerinden yararlanarak daha da güvende kalabilirsiniz. Bu gizli dizi yöneticileri, bulut altyapısı genelinde gizli diziler oluşturmak ve kullanmak için kullanılabilir, çoğu modern bulut sağlayıcısıyla standart olarak gelir ve çok iyi belgelenmiştir.

*Yayınlamadan önce tarayın

Kaydedilmemiş bir dosyadan bir sırrın kaldırılması kolay ve çok ucuzdur. Aynı sırrı paylaşılan koddan kaldırmak neredeyse imkansızdır ve zaman kaybıdır. Özellikle sırlar söz konusu olduğunda her zaman ‘sola kaymayı’ ve erkenden ve sık sık test etmek isteriz. Sırları yayınlamadan önce veya taahhütte bulunmadan önce bir sır taraması gerçekleştirmek, bir sırrın sızdırılmamasını sağlamanın en uygun maliyetli yoludur.

Ön taahhüt Git kancasında kullanabileceğiniz ggshield gibi tarama sürecini otomatikleştirmenize olanak tanıyan birden fazla araç vardır. Herhangi bir iyi tarayıcı, yalnızca sırrı bulmanın yanı sıra, türü, oluşum sayısı ve sırrın geçerli olup olmadığı gibi bilgileri de sağlayacaktır.

*PyPI sırlarının yayılması çözülebilir

GitGuardian Araştırmacıları PyPI (Python Paket Dizini) Paketlerinde Sızan Binlerce Sır Buldu

Zamanla eklenen benzersiz sırlar

Araştırma sonuçta PyPI’ye eklenen sırların sayısının zaman içinde istikrarlı bir şekilde arttığı yönündeki rahatsız edici eğilimi ortaya koyuyor. Yalnızca geçen yıl, araştırma PyPI’ye yeni projeler ve taahhütler aracılığıyla 1000’den fazla benzersiz sırrın eklendiğini gösteriyor. Bu durum cesaret kırıcı görünse de, farkındalığın artırılması, eğitim ve geliştirici araçlarının sürekli iyileştirilmesi yoluyla çözülebileceğine inandığımız bir sorundur. Bu raporun bulgularının, organizasyonlarınız ve projelerinizde konuyu gündeme getirmenize yardımcı olacağını umuyoruz.

Python topluluğu, tüm geliştiricilerin hayatlarını daha iyi hale getirmek için yenilik yapmaya ve çalışmaya devam ediyor. Topluluğa yararlı kod bağışlamak, daha fazla insanın yaptığını görmeyi umduğumuz bir şey, ancak bunun güvenli bir şekilde yapıldığını da görmek istiyoruz. GitGuardian güvenli bir şekilde çalışmanıza ve projelerinizi sırlardan uzak tutmanıza yardımcı olabilir. GitGuardian Secrets Detection platformu, açık kaynak katkıları ve 25 veya daha az geliştiriciden oluşan ekipler için ücretsizdir. Paylaşılan kodunuzun geçerli sırlarınızı değil, yalnızca amaçlanan mantığı içerdiğinden emin olmak istiyoruz.

> The Security Repo Podcast’inde PyPI araştırmasını doğrudan Tom Forbes’tan dinleyin.

EMBED: https://www.youtube.com/watch?v=AhH0aGFPoO4

yazar hakkında

GitGuardian Araştırmacıları PyPI (Python Paket Dizini) Paketlerinde Sızan Binlerce Sır BulduGitGuardian Geliştiricisi ve Güvenlik Savunucusu Dwayne McDaniel, 2016’dan beri Geliştirici İlişkileri uzmanı olarak çalışıyor ve 2005’ten beri daha geniş teknoloji topluluğunun içinde yer alıyor. Bilgisini paylaşmayı seviyor.

Dwayne’e çevrimiçi olarak https://www.linkedin.com/in/dwaynemcdaniel/ ve @McDwayne adreslerinden ve şirket web sitemiz http://www.gitguardian.com/ adresinden ulaşılabilir.



Source link