Güvenlik Taraması
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 trivyTrivy 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-alpineBurada 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.7Bol 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.740'ı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/kiamolUygulama 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/kubernetesBir 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 downBu komut yalnızca bu lab'in baslattigi container'lari kaldırır. Tamamen temiz bir başlangıç istiyorsanız
docker psile hâlâ çalışan varsa görebilirsiniz.