Application Security

Yazılım Tedarik Zincirini Güvence Altına Almak: SBOM'lar ve CI/CD'de Sanal İmzalama için Pratik Bir Rehber

Yazılım tedarik zinciri saldırılarının siber tehditler için birincil bir vektör haline geldiği bir çağda, kod parçacıklarımızın bütünlüğü ve menşei artık ikincil endişeler değil, temel gereksinimlerdir. Geliştiriciler ve DevOps mühendisleri olarak, sadece "kod göndermek"ten "kod güvenini kanıtlamaya" evrilmemiz gerekir. Bu dönüşüm, Sürekli Entegrasyon ve Sürekli Dağıtım (CI/CD) hatlarımızda Yazılım Malzeme Listeleri (SBOM) ve sanal imzalama uygulamalarını gerektirir. Bu rehber, bu kritik güvenlik önlemlerini geliştirme iş akışınıza entegre etmek için pratik bir yaklaşımı özetlemektedir.

Güven Neden Bozuldu: Doğrulama İhtiyacı

Modern yazılım ekosistemi, açık kaynaklı bağımlılıklara ve üçüncü taraf bileşenlere yoğun bir şekilde dayanır. Bu durum geliştirme hızını artırsa da önemli riskler getirir. Tek bir zafiyete uğramış kütüphane veya güvenilir bir pakete yapılan kötü niyetli bir güncelleme, binlerce aşağı akış uygulamasını tehlikeye atabilir. Zafiyet tarama gibi geleneksel güvenlik önlemleri tepkiseldir; olaydan sonra neyin yanlış olduğunu söylerler. İleriye gitmek için proaktif doğrulamaya ihtiyacımız var: ikili dosyanın içinde tam olarak ne olduğunu kanıtlamak ve yapım sunucusundan çıktıktan sonra değiştirilmediğinden emin olmak.

SBOM Oluşturma: Dijital Malzeme Listesi

SBOM, bir yazılım parçacığındaki tüm bileşenleri, kütüphaneleri ve bağımlılıkları içeren kapsamlı bir envanterdir. Benzer bir şekilde bir besin etiketi gibi çalışarak yazılımın kompozisyonu hakkında şeffaflık sağlar. SBOM oluşturulması, derlemeden hemen sonra ve paketlemeden önce gerçekleşen, yapım sürecinizin otomatik bir adımı olmalıdır.

Konteynerize edilmiş uygulamalar için Syft gibi araçlar endüstri standardıdır. Görüntüleri tarayarak SPDX veya CycloneDX formatlarında çıktı üretebilirler. Syft'i bir GitHub Actions iş akışına nasıl entegre edebileceğiniz aşağıdadır:


- name: Build Container Image
  run: docker build -t myapp:${{ github.sha }} .

- name: Generate SBOM
  uses: anchore/sbom-action@v0
  with:
    image: myapp:${{ github.sha }}
    output-file: sbom.json
    output-formats: spdx-json, cyclonejson

Bu yapılandırma sadece dosyayı oluşturmaz, aynı zamanda yazılımın "fişini" de yazılımın kendisiyle birlikte gönderilmesini sağlayarak yapım çıktılarına ekler. SBOM olmadan, bağımlılık riskleri ve zafiyet yama çabaları konusunda kör bir şekilde ilerlersiniz.

Sanal İmzalama: Menşei ve Bütünlüğü Kanıtlama

Parçacığınızın içinde ne olduğunu bildikten sonra, onun orijinal ve değiştirilmemiş olduğundan emin olmalısınız. Bu, kriptografik imzalama yoluyla sağlanır. Parçacıklarınızı, asla güvenli bir ortamdan (donanım güvenlik modülü veya özel bir CI gizli anahtar deposu gibi) çıkmayan bir özel anahtarla imzalayarak, dijital bir onay mührü oluşturursunuz. İlgili halka anahtarıyla doğrulama, aşağı akış sistemlerinin parçacığın menşeini onaylamasını sağlar.

Kubernetes ekosisteminde konteyner görüntülerini ve SBOM'ları imzalamak için Cosign kullanımı popüler bir yöntemdir. Cosign, anahtarsız imzalama (OIDC kullanarak) veya anahtar tabanlı imzalama sağlayan entegre bir araç seti sunarak, CI/CD ile çalışma zamanı güvenlik politikaları arasında sağlam bir köprü oluşturur.


- name: Sign Container Image
  uses: sigstore/cosign-installer@v3
  with:
    cosign-release: 'v2.1.0'

- name: Sign Image with GitHub OIDC
  run: |
    cosign sign myregistry.io/myapp:${{ github.sha }} \
      --identity-token ${{ secrets.GITHUB_TOKEN }} \
      --identity-provider https://token.actions.githubusercontent.com

Pipelineda Doğrulama Zorlaması

SBOM oluşturmak ve görüntüleri imzalamak işin sadece yarısıdır; diğer yarısı zorlamadır. Kayıt defterinizi ve dağıtım ortamlarınızı, imzasız veya doğrulanmamış parçacıkları reddetmek için yapılandırmanız gerekir. Google Artifact Registry ve AWS ECR gibi modern konteyner kayıt defterleri görüntü doğrulama politikalarını destekler. Ayrıca, CI pipeline'ınız, bir parçacık geçerli bir imzaya sahip değilse yapımı başarısız kılan bir doğrulama adımı içermelidir.

Bu, güvenin kapalı bir döngüsünü oluşturur. Bir yapı başarılı olursa, imzalanır. İmzalanırsa, kayıt defteri kabul eder. Kayıt defteri kabul ederse, küme onu dağıtır. Bu emanet zinciri, saldırganın kötü amaçlı kod enjekte etmesini katlanarak zorlaştırır, çünkü güvenli imzalama anahtarına erişimleri olmadan kriptografik imzayı taklit edemezler.

Sonuç

SBOM'lar ve sanal imzalama uygulamak, sadece bir uyumluluk kutucuğu işaretlemek değil, yazılımınızın dayanıklılığına stratejik bir yatırımdır. Her yapıyı potansiyel bir tehdit ve her parçayı doğrulanabilir bir varlık olarak ele alarak, CI/CD pipeline'ınızı bir kaleye dönüştürürsünüz. Mevcut iş akışınıza bir SBOM oluşturucu ekleyerek küçük başlayın, ardından Cosign gibi araçlarla imzalama katmanlarını ekleyin. Bu süreçleri geliştirdikçe, SLSA (Güvenlik ve Denetim için Yazılım Defteri) çerçeve hedeflerine daha da yaklaşacak ve yazılımınızın sadece güvenli bir şekilde inşa edildiğini değil, aynı zamanda güvenilir olduğu kanıtlandığını sağlayacaksınız.

Share: