Application Security

CI/CD Hatlarını Güvence Altına Almak: DevOps'ta Tedarik Zinciri Saldırılarını Önlemek

Giriş: Yeni Saldırı Yüzeyi

Agile ve DevOps çağında, Sürekli Entegrasyon ve Sürekli Dağıtım (CI/CD) hatları yazılım teslimatının omurgası haline gelmiştir. Ancak dağıtım hızını artırdıkça, sıklıkla saldırı yüzeyimizi farkında olmadan genişletiyoruz. Düşmanların, aşağı akış hedeflerine sızmak için güvenilir bir üçüncü taraf bileşenini veya hizmeti ele geçirdiği tedarik zinciri saldırıları—sıklık ve karmaşıklık açısından artış göstermiştir. SolarWinds, Log4j ve çeşitli npm/pypi kütüphane ihlalleriyle ilgili yüksek profilli vakalar, tek bir zayıf bağımlılığın veya ele geçirilmiş bir derleme çıktısının (build artifact) felaket boyutunda ihlallere yol açabileceğini göstermiştir. Orta ileri düzey geliştiriciler için, hattın bütünlüğünü sağlamak artık bir tercih değil; kritik bir güvenlik zorunluluğudur. Bu yazı, kimlik doğrulama, çıktı güvenliği ve en az ayrıcalık erişimi üzerine odaklanarak CI/CD ortamınızı güçlendirmek için uygulanabilir stratejileri incelemektedir.

1. Katı Kimlik ve Erişim Yönetimi (IAM) Uygulayın

Tedarik zinciri saldırıları için en yaygın vektör, hizmet hesaplarının veya derleme ajanlarının ele geçirilmesidir. Saldırganlar, genellikle kötü amaçlı kod itmelerine veya hassas verilerin dışarı aktarılmasına olanak tanıyan aşırı yetkili kimlik bilgilerini ararlar. Bunu azaltmak için, hattınızda Sıfır Güven (Zero Trust) modeli benimseyin. Asla statik, uzun ömürlü kimlik bilgileri kullanmayın. Bunun yerine, kısa ömürlü belirteçler ve makine kimliklerinden yararlanın. Çoğu modern CI/CD platformu, OIDC (OpenID Connect) federasyonunu destekler; bu da hattınızın ortam değişkenlerinde gizli anahtarlar saklamadan bulut sağlayıcılarıyla (AWS, Azure veya GCP gibi) kimlik doğrulaması yapmasını sağlar.
# Örnek: GitHub Actions'da AWS OIDC Rol Varsayımı
permissions:
  id-token: write   # OIDC için gerekli
  contents: read    # Depoyu okumak için gerekli

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: AWS Kimlik Bilgilerini Yapılandır
        uses: aws-actions/configure-aws-credentials@v1
        with:
          role-to-assume: arn:aws:iam::123456789012:role/MyGitHubActionRole
          aws-region: us-east-1
Belirli izinler gerektirerek ve geçici belirteçler kullanarak, bir işin ele geçirilmesi durumunda oluşabilecek hasarın çapını (blast radius) önemli ölçüde azaltırsınız.

2. Kod İmzalama ile Çıktı Bütünlüğünü Doğrulayın

Kod derlendikten sonra, ortaya çıkan ikili dosyalar, konteynerlar veya kütüphaneler, değiştirilmeye karşı korunmalıdır. Kod imzalama, çıktıda yapılan herhangi bir değişikliğin tespit edilmesini sağlar. Bu, üretim ortamına dağıtılan yazılımın, hatta tam olarak neyin derlendiğini ve test edildiğini doğrulamak için hayati önem taşır. Konteynerleştirilmiş uygulamalar için, imzalama yeteneklerine sahip bir kayıt defteri (Docker Content Trust veya Notary gibi) kullanmak standart bir uygulamadır.
# Docker İçerik Güvenini Etkinleştirme
export DOCKER_CONTENT_TRUST=1
docker build -t my-secure-app:latest .
docker push my-secure-app:latest
İmzasız görüntüleri çalıştırmaya veya itmeye çalışmak başarısız olacaktır; bu da yalnızca doğrulanmış çıktılarınızın üretim ortamınıza girmesini sağlar. Benzer şekilde, ikili çıktılar için Sigstore (cosign) gibi araçları kullanarak sürümlerinize kriptografik imzalar ekleyin.

2. Kapsamlı SBOM Yönetimi Uygulayın

Yazılım Malzeme Listesi (SBOM), yazılımınızda kullanılan tüm bileşenlerin ve bağımlılıkların bir envanterini sağlar. Bir güvenlik açığı bildirimi (Log4j gibi) durumunda, SBOM etkiyi hızla değerlendirmenize ve düzeltmenize olanak tanır. SBOM oluşturma işlemini CI hattınıza entegre edin. Syft, CycloneDX veya OWASP Dependency-Check gibi araçlar bu raporları otomatik olarak oluşturabilir. Kritik olarak, SBOM'u birinci sınıf bir çıktı olarak ele alın: Derlemeyi bir sonraki aşamaya geçirmeden önce onu saklayın, imzalayın ve bilinen güvenlik açıklarına (CVE'ler) karşı tarayın.
# Syft kullanarak SBOM Oluşturma
syft . -o cyclonedx-json > sbom.json

# SBOM'u bir çıktı olarak yükleme
- name: SBOM Yükle
  uses: actions/upload-artifact@v3
  with:
    name: sbom
    path: sbom.json

Sonuç: Güvenlik Süreçli Bir İştir

CI/CD hatlarını güvence altına almak tek seferlik bir yapılandırma değil; izleme, denetim ve iyileştirme sürecinin sürekliliğidir. Katı IAM politikalarını uygulayarak, kod imzalama uygulayarak ve kapsamlı SBOM'lar sürdürerek, tedarik zinciri saldırılarına karşı sağlam bir savunma oluşturursunuz. Unutmayın, amaç sadece daha hızlı inşa etmek değil, güvenle inşa etmektir. Güvenliğin DevOps hızınızı engellemek yerine hızlandırmasını sağlamak için bu uygulamaları geliştirme yaşam döngünüzün erken aşamalarında entegre edin.
Share: