labs

Bu lab modernize edildi ama ucтan uca dogrulanmadi. Takilirsaniz bize bildirin.

Güvenlik Taraması

45 dkdockerGitHub'da gor
Bu sayfada

Güvenlik Taraması

Tarayıcılar, bir dosya sistemindeki veya container imajındaki ikili dosyaları inceleyip bilinen güvenlik açıklarını arar. Genellikle birden fazla veritabanı kullanarak ikili dosyanın hangi uygulamadan olduğunu, uygulamanın hangi sürümde olduğunu ve o sürüm için CVE (Common Vulnerabilities and Exposures) bulunup bulunmadığını belirler.

Container imajı taramak için birkaç araç var — Clair ve Snyk popüler seçenekler. Biz Trivy kullanacağız; ücretsiz, açık kaynak ve container içinde çalışıyor, dolayısıyla bir pipeline'a güzelce entegre edilebiliyor. Trivy container imajlarındaki ikili dosyaları tarayabildiği gibi Dockerfile ve Kubernetes manifestleri üzerinde statik analiz de yapabiliyor.

Kaynaklar

Trivy ile İmaj Taraması

Trivy bir komut satırı aracı, ama makinemize kurmamız gerekmiyor; Trivy'yi geliştiren Aqua Security'nin yayınladığı Docker imajını kullanabiliriz.

Bir Trivy container'ı çalıştırın — şu Docker Compose dosyası yerel repo klasörünüzü container dosya sistemine bağlıyor, böylece Trivy o dosyaları görebiliyor:

docker compose -f labs/scanning/docker-compose.yml run trivy

Trivy container'ına bağlandınız. Çalıştırabileceğiniz komutlara bakın, sonra Docker Hub'daki bir imajı tarayın:

trivy

trivy image sixeyed/whoami:24.07

İlk çalıştırmada Trivy güvenlik açığı veritabanını indirecek; bu bir iki dakika sürebilir

Bu imajda güvenlik açığı yok — çünkü FROM scratch ile derlenmiş ve içindeki tek ikili dosyalar uygulama ile birkaç bağımlılık.

📋 Docker Hub'daki python:3.4-alpine imajını tarayın. Nasıl görünüyor?

Takıldınız mı?

Şunu çalıştırın:

trivy image python:3.4-alpine

Burada bol miktarda sorun var; high ve critical seviyeler dahil. Bunlardan biri şu buffer over-read güvenlik açığı ve kulağa hiç iyi gelmiyor.

Bu resmi bir imaj, ama Python 3.4'ün desteği 2019'da bitti — imaj on yıllık. Resmi imajlar yeni sürümler çıktığında Docker Hub'dan kaldırılmıyor, çünkü bu insanların build'lerini bozardı; bağımlılıklarınızı güncel tutmak registry'nin değil sizin sorumluluğunuz.

Bu Trivy container'ı yerel Docker motorunuzla konuşacak şekilde kurulmuş; yani Docker Hub'daki imajların yanında kendi imajlarınızı da tarayabilirsiniz.

Başka bir terminal açın ve çok eski bir Nginx sürümü kullanan bu Dockerfile'dan bir web sitesi imajı derleyin:

docker build -t courselabs/web:nginx-1.7 ./labs/scanning/web

📋 Yeni derlediğiniz imajı Trivy ile tarayın. Yayına çıkmaya uygun mu?

Takıldınız mı?

Trivy yerel Docker motorunuzu kullanabiliyor, dolayısıyla imaj önbelleğinize erişebiliyor:

trivy image courselabs/web:nginx-1.7

Bol miktarda hata göreceksiniz — bendeki çalıştırmada o kadar çoktu ki terminal tamponunu aştı.

Yalnızca kritik sorunları yazdırmak için şunu deneyin:

trivy image -s CRITICAL courselabs/web:nginx-1.7

40'ın üzerinde kritik hata göreceksiniz...

İmaj taramasını, imajlar derlendikten sonra pipeline'ınıza dahil etmek iyi olur — işletim sistemi araçlarındaki sorunları da uygulamanızın kullandığı kütüphanelerdeki sorunları da bulur.

Kütüphane Taraması

Trivy kaynak kod klasörlerini de tarayabiliyor, ama kodunuzu analiz etmiyor (onu statik analiz lab'ında SonarQube yapıyor). Trivy kütüphane listelerini arıyor (örneğin Node.js uygulamaları için package-lock.json) ve her kütüphaneyi CVE'ler için tarıyor.

📋 /labs/scanning/python içindeki Python bağımlılıklarını taramayı deneyin.

Takıldınız mı?
trivy filesystem /labs/scanning/python/

Yine bol miktarda. Seçenekler farklı tarama tipleri için tutarlı, dolayısıyla kritik sorunlarla sınırlayabilirsiniz:

trivy filesystem -s CRITICAL /labs/scanning/python/

Herkese açık Git repolarını da tarayabilirsiniz. Bu, bol miktarda demo uygulaması içeren bir Kubernetes kitabı reposunu tarıyor:

trivy repository https://github.com/sixeyed/kiamol

Uygulama bağımlılıklarında bulgular göreceksiniz — hangileri olduğu ne zaman çalıştırdığınıza bağlı, çünkü Trivy'nin veritabanı sürekli güncelleniyor ve repo da değişiyor. Zaten asıl nokta bu: bir tarama, bugün bilinenlerin anlık görüntüsüdür.

Pipeline'ınız kütüphane taramasını — ve kullandığınız açık kaynak projeler için repo taramasını — build aşamasından önce içerebilir; böylece kritik bir sorun varsa build hızlıca başarısız olur ve düzeltilebilir.

Kod-olarak-Altyapı Taraması

Trivy'nin son özelliği, kod-olarak-altyapı yapılandırma dosyalarını taramak. Terraform ve CloudFormation yapılandırmalarını desteklediği gibi Dockerfile ve Kubernetes YAML dosyalarını da destekliyor.

📋 /labs/scanning/docker içindeki Dockerfile'ı ve /labs/scanning/kubernetes içindeki Kubernetes manifestini tarayın.

Takıldınız mı?

config komutu hatalı yapılandırmaları arıyor:

trivy config /labs/scanning/docker

trivy config /labs/scanning/kubernetes

Bir dizi öneri göreceksiniz — bunlar container imajlarınız ve dağıtım manifestleriniz için en iyi pratikler.

Lab

trivy komutlarını container içinde çalıştırıyorduk. Bu CI ile güzel çalışıyor, çünkü Trivy komut satırını build agent'ınıza kurup aynı komutları pipeline'ınızda kullanabilirsiniz.

Olumsuz tarafı, geliştiricilerin bu akışı kullanmayacak olması; dolayısıyla sorunlar yalnızca build çalıştığında bulunuyor. Alternatif olarak taramayı çok aşamalı bir Dockerfile'da ayrı bir aşama olarak ekleyebilirsiniz:

  • hello-world-cs/Dockerfile — uygulama imajını

    taramak için bir aşamayla .NET uygulaması derliyor; Trivy komutu HIGH önem derecesindeki sorunları arayacak ve varsa sıfır dışında bir çıkış kodu döndürecek şekilde ayarlanmış

Build'i çalıştırıp Trivy testinin koştuğunu doğrulayın. İmaj alabiliyor musunuz? Başarısızlıklar varsa işletim sistemi araçlarıyla ilgili olabilir — o durumda Dockerfile'da tek bir değişiklikle düzeltebilirsiniz.

Takıldınız mı? İpuçlarına bakın veya çözümü inceleyin.


Temizlik

Bu lab'ın container'larını kaldırın:

docker compose -f labs/scanning/docker-compose.yml down

Bu komut yalnızca bu lab'in baslattigi container'lari kaldırır. Tamamen temiz bir başlangıç istiyorsanız docker ps ile hâlâ çalışan varsa görebilirsiniz.