Modern yazılım geliştirme ortamında, Sürekli Entegrasyon/Sürekli Dağıtım (CI/CD) hattı, teslimat hızının ve kalitesinin omurgasıdır. Ancak kuruluşlar dağıtım döngülerini hızlandırdıkça saldırı yüzeyi genişler. CI/CD hatları, yazılım tedarik zincirini ele geçirmeye çalışan tehdit aktörleri için yüksek değerli hedefler haline gelmiştir. Güvenilir derleme çıktılarına kötü amaçlı kod enjekte ederek veya gizli bilgileri çalarak saldırganlar güvenlik kontrollerini atlayabilir ve ölçeklendirilmiş bir şekilde zarar görmüş yazılım dağıtabilir.
Hattı güvence altına almak artık isteğe bağlı değildir; uygulama güvenliğinin kritik bir bileşenidir. Bu yazı, kimlik doğrulama, çıktı bütünlüğü ve ortam izolasyonuna odaklanarak DevOps altyapınızı güçlendirmek için pratik stratejileri incelemektedir.
Tehdit Manzarası: Neden Hattlar Hedef Alınıyor?
Tedarik zinciri saldırıları, geleneksel ihlallerden farklıdır çünkü geliştiricilerin otomatik araçlara duyduğu güveni istismar ederler. Yaygın vektörler şunları içerir:
- Bağımlılık Karışıklığı: Saldırganlar, paket yöneticilerini istismar etmek amacıyla iç paketlerle aynı ada sahip kötü amaçlı paketler yayınlar.
- Gizli Bilgi Sızıntısı: Derleme betiklerinde sabit kodlanmış API anahtarları veya belirteçlerin sürüm kontrolüne işlenmesi.
- Ele Geçirilmiş Derleme Ajanları: Saldırganların derleme çıktılarını manipüle etmek için paylaşılan çalıştırıcılara erişim sağlaması.
- Kötü Amaçlı Üçüncü Taraf Aksiyonları: Hattınıza çekilen açık kaynaklı GitHub Actions veya GitLab CI betiklerinin ele geçirilmesi.
Strateji 1: Sıkı Bağımlılık Doğrulamayı Uygulayın
Tedarik zinciri enjeksiyonunu önlemenin en etkili yollarından biri, derlemenizde kullanılan her bağımlılığın doğrulandığından emin olmaktır. Modern paket yöneticileri kilit dosyalarını ve bütünlük sağlama değerlerini (checksum) destekler, ancak bunların kullanımını uygulamak zorundasınız.
Örneğin, npm veya yarn kullanırken her zaman package-lock.json dosyasını işleyin (commit). Bu, derleme ortamının yerel olarak test edilenle aynı sürümleri ve hash değerlerini kullandığını sağlar. Ayrıca mümkün olduğunda paket imza doğrulamasını etkinleştirin.
# Örnek: package.json'da sıkı paket çözümlemeyi uygulama
{
"name": "secure-app",
"version": "1.0.0",
"dependencies": {
"express": "^4.18.2"
},
"overrides": {
"minimist": ">=1.2.6"
}
}
overrides bölümü, bir üçüncü taraf paketin ne talep ettiğinden bağımsız olarak, çözücünün zayıf bir bağımlılığın yamalı bir sürümünü kullanmasını zorlar. Bu durum, dolaylı bağımlılık saldırısı riskini azaltır.
Strateji 2: Gizli Bilgi Yönetimini Güvence Altına Alın
Gizli bilgileri CI/CD yapılandırma dosyalarında sabit kodlamak kritik bir güvenlik açığıdır. Bunun yerine, GitHub Secrets, GitLab CI Değişkenleri veya HashiCorp Vault gibi harici kasalar gibi CI platformunuz tarafından sağlanan yerleşik gizli bilgi yönetim özelliklerinden yararlanın.
Gizli bilgilerin asla günlüğe kaydedilmediğinden emin olun. Birçok CI sisteminde değişkenler günlüklerde otomatik olarak maskelenir, ancak kodunuzu da temizlemeniz (sanitize) gerekir.
# Kötü Uygulama: Gizli bilgileri günlüğe kaydetme
echo "Deploying with token: $DEPLOY_TOKEN"
# İyi Uygulama: Maskelenmiş değişkenlerin kullanımı
echo "Deploying..."
# DEPLOY_TOKEN CI günlüklerinde otomatik olarak maskelenir
Ayrıca hizmet hesapları için en az ayrıcalık ilkesini uygulayın. Bir derleme betiği, depo için tam yönetici erişimine sahip olmak yerine, yalnızca belirli çıktı kayıt defterlerine itme (push) iznine sahip olmalıdır.
Strateji 3: İş Akışı Bağımlılıklarınızı Sabitleyin
CI/CD hattınızda (örneğin GitHub Actions'da) yeniden kullanılabilir iş akışları veya üçüncü taraf aksiyonlar kullanıyorsanız, bunları her zaman v1 gibi değiştirilebilir bir etiket yerine belirli bir commit SHA'sine sabitleyin. Etiketler, bir depoyu ele geçiren saldırganlar tarafından güncellenebilir veya üzerine yazılabilir.
# Güvensiz: Değiştirilebilir etiketlerin kullanımı
- uses: actions/checkout@v3
# Güvenli: Belirli bir commit SHA'sine sabitlenmiş
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
Bu uygulama, hattınızın tutarlı bir şekilde çalışmasını ve etiketli bir sürümün içeriğini değiştirebilecek depo devralma saldırılarına karşı bağışık olmasını sağlar.
Strateji 4: Derleme Ortamlarını İzole Edin
Her iş için temiz bir ortam başlatan geçici derleme ajanları, durum kirliliği ve işler arası bulaşma riskini azaltır. Bir ele geçirilmiş işin sonraki derlemeleri etkileyebileceği, paylaşılan ve uzun süre çalışan derleme sunucularından kaçının.
Ayrıca, imzalanmamış veya doğrulanmamış çıktılarının üretim ortamına dağıtılmasını önleyen İkili Yetkilendirme (Binary Authorization) veya benzeri ilkeler uygulayın. Bu, yazılım kullanıcılarına ulaşmadan önce bütünlüğünü doğrulayan son bir kontrol noktası oluşturur.
Sonuç
CI/CD hatlarını güvence altına almak, çevre tabanlı güvenliğden sıfır-güven (zero-trust) zihniyetine bir geçişi gerektirir. Bağımlılıkları doğrulayarak, gizli bilgileri titizlikle yöneterek, iş akışlarını sabitleyerek ve ortamları izole ederek kuruluşlar saldırı yüzeylerini önemli ölçüde azaltabilir. Tedarik zinciri saldırıları daha karmaşık hale geldikçe, proaktif hatta güvenliği, kod işlemeden üretim dağıtımına kadar yazılım bütünlüğünü sağlayan tek savunmadır.