İçerik
Bu yazı, Trivy Container Scanner kullanarak Docker image’larınızı potansiyel güvenlik açıklarına karşı güvence altına almak için gerekli adımları kapsamaktadır.
Trivy Nedir?
Trivy, container’lar ve diğer artefact’lar için güvenlik açıklarını tarayan open-source bir güvenlik tarayıcısıdır. İçerisinde trivy-db adı verilen dahili bir veritabanı barındırır ve bu veritabanı farklı güvenlik açıkları hakkında bilgiler içerir. Trivy, AquaSecurity tarafından geliştirilmiştir ve bakımını AquaSecurity tarafından üstlenilmiştir.
Trivy’nin en dikkat çekici özelliklerinden biri, yalnızca güvenlik açıklarını taramakla kalmayıp, aynı zamanda bu sorunları çözmek için önerilerde bulunması ve daha fazla bilgi için güvenlik açıklarına yönelik bağlantılar sunmasıdır.
Trivy, farklı güvenlik açıkları veritabanlarından geniş bir yelpazede bilgiye erişebilir ve bu veritabanlarından elde edilen güvenlik açıkları verilerini kullanarak güvenlik sorunlarını tespit eder. Bu veritabanlarından bazıları, National Vulnerability Database (NVD), Red Hat Security Data ve Alpine SecDB‘dir.
Trivy tarama işlemi sırasında, dizin veya Docker image’larınızın yazılım paketlerini ve kütüphanelerini güvenlik açığı veritabanındaki bilgilerle karşılaştırır. Eğer bir eşleşme bulunursa, bu durumda container image’ınızdaki paket veya kütüphanede bir güvenlik açığı olduğu anlamına gelir. Trivy, bu güvenlik açıklarını tespit ettikten sonra, etkilenen sürümler, ciddiyet seviyesi ve çözüm önerileri gibi detaylı bilgilerle birlikte raporlar.
Trivy, veritabanını her 6 saatte bir günceller. Tarama başlatıldığında, Trivy veritabanlarını otomatik olarak günceller, böylece kullanıcıların veritabanı güncellemelerini takip etmeleri gerekmez.
Trivy’nin bir diğer önemli özelliği ise SBOM (Software Bill of Materials) oluşturabilmesidir. SBOM, yazılımda kullanılan tüm bileşenlerin detaylı bir envanterini sağlar; buna open-source ve üçüncü parti kütüphaneler de dahildir.
Daha fazla detay ve güvenlik açıkları hakkında kapsamlı bilgiye ulaşmak için Trivy’yi projelerinizde kullanmayı ihmal etmeyin. Özellikle Kubernetes, Docker ve container odaklı DevOps süreçlerinizde Trivy gibi güçlü araçlar, güvenlik standartlarınızı yükseltmek için büyük bir avantaj sağlar.
Trivy Kurulumu
Aşağıdaki adımları izleyerek Trivy’yi kurabilirsiniz.
Diğer platformlar için lütfen resmi kurulum sayfasını ziyaret edin.
Adım 1: Trivy için gerekli bağımlılıkları aşağıdaki komut ile yükleyin:
sudo apt-get install wget apt-transport-https gnupg lsb-release
Adım 2: Aşağıdaki komutları kullanarak public key ve Trivy reposunu indirin:
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
Adım 3: Repoyu güncellemek için aşağıdaki komutu çalıştırın:
sudo apt update -y
Adım 4: Trivy’yi aşağıdaki komut ile yükleyin:
sudo apt install trivy
Kurulumu doğrulamak ve mevcut tüm seçenekleri görmek için aşağıdaki trivy help
komutunu çalıştırın:
trivy -h
Aşağıdaki gibi bir çıktı almanız gerekir:
trivy -h
Scanner for vulnerabilities in container images, file systems, and Git repositories, as well as for configuration issues and hard-coded secrets
Usage:
trivy [global flags] command [flags] target
trivy [command]
Examples:
# Scan a container image
$ trivy image python:3.4-alpine
# Scan a container image from a tar archive
$ trivy image --input ruby-3.1.tar
# Scan local filesystem
$ trivy fs .
# Run in server mode
$ trivy server
Scanning Commands
aws [EXPERIMENTAL] Scan AWS account
config Scan config files for misconfigurations
filesystem Scan local filesystem
image Scan a container image
kubernetes [EXPERIMENTAL] Scan kubernetes cluster
repository Scan a remote repository
rootfs Scan rootfs
sbom Scan SBOM for vulnerabilities
vm [EXPERIMENTAL] Scan a virtual machine image
Management Commands
module Manage modules
plugin Manage plugins
Utility Commands
completion Generate the autocompletion script for the specified shell
convert Convert Trivy JSON report into a different format
help Help about any command
server Server mode
version Print the version
Flags:
--cache-dir string cache directory (default "/Users/bibinwilson/Library/Caches/trivy")
-c, --config string config path (default "trivy.yaml")
-d, --debug debug mode
-f, --format string version format (json)
--generate-default-config write the default config to trivy-default.yaml
-h, --help help for trivy
--insecure allow insecure server connections
-q, --quiet suppress progress bar and log output
--timeout duration timeout (default 5m0s)
-v, --version show version
Use "trivy [command] --help" for more information about a command.
Trivy Kullanarak Güvenlik Açıklarını Taramak
Trivy komutunu güvenlik açıklarını taramak için çalıştırdığınızda, Trivy öncelikle ilgili veritabanını indirir ve bu verileri mevcut veritabanındaki güvenlik açıkları ile karşılaştırır.
Trivy, güvenlik açığı risklerini critical, high, medium ve low olarak sınıflandırır:
- Critical – En ciddi güvenlik açığıdır ve sistem üzerinde yönetimsel kontrol sağlanmasına olanak verebilir. En kısa sürede düzeltilmesi gerekir.
- High – Veri sızıntısına neden olabilir.
- Medium – Sistemin kullanıcılar için erişilemez hale gelmesine yol açabilir.
- Low – Düzenli bakım sırasında çözülebilecek sorunlardır.
Trivy ile Tarama Yapılabilecek Hedefler:
- Container image’ları
- Dosya sistemi
- Uzak Git Repoları
Aşağıdaki görsel, high level component’leri ve container tarama flow chart’ını göstermektedir.
Trivy Kullanarak Container Image’larını Taramak
Docker image’larını Trivy kullanarak taramak oldukça kolaydır. Sadece taramak istediğiniz image adını belirterek aşağıdaki Trivy komutunu çalıştırmanız yeterlidir:
trivy image <image-name>
Örnek Kullanım
Örneğin, workspace’imde techiescamp/pet-clinic-app
adında bir image var. Bu, Java Spring Boot uygulaması içeren bir Docker image’ı.
Bu image’ı aşağıdaki komutla tarayabilirim. Trivy, image içindeki güvenlik açıklarının yanı sıra image’a dahil olan Java JAR dosyasındaki açıkları da tarar. Taramanın sonuçları, okunabilir bir formatta görüntülenir:
trivy image techiescamp/pet-clinic-app:1.0.0
Tarama, Docker image içindeki JAR dosyasında 2 adet yüksek güvenlik açığı olduğunu gösterdi.
Belirli Bir Seviyede Güvenlik Açığı Taraması
Trivy, çeşitli şekillerde kullanılabilir. İşte bazı gelişmiş kullanım örnekleri:
Trivy, belirli bir seviyedeki güvenlik açıklarını tarayabilir. Bunun için --severity <severity>
flag’ini kullanarak taramak istediğiniz güvenlik açığı seviyesini belirtebilirsiniz.
trivy image --severity CRITICAL techiescamp/pet-clinic-app:1.0.0
JSON Formatında Çıktı Alma
Trivy, sonuçları JSON formatında da verebilir. Bunun için --format json
flag’ini kullanarak tarama sonuçlarını JSON formatında görüntüleyebilirsiniz.
trivy image --format json techiescamp/pet-clinic-app:1.0.0
Düzeltilemeyen Güvenlik Açıklarını Yoksayma
Bazı güvenlik açıkları, paketler güncellense bile düzeltilemez (patch edilmemiş/açık kalmış). Trivy, bu tür güvenlik açıklarını yoksayarak image taraması yapabilir. Bunun için --ignore-unfixed
flag’ini kullanabilirsiniz.
trivy image --ignore-unfixed java:0.1
Docker Tar Formatındaki Image’ları Tarama
Docker image’larını tar formatında da saklayabilirsiniz. Bu durumda Trivy’yi, tar formatındaki image’ları taramak için kullanabilirsiniz.
trivy image --input petclinic-app.tar
Trivy Scanner ile Build Docker Image Pipeline Oluşturma Süreçleri
Trivy, Docker image inşası açısından CI/CD pipeline’ında kritik bir rol oynamaktadır. Şirketler, production’da depoloy edilen image’ın güvenliğini sağlamak için CI/CD pipeline’larında güvenlik açıklarını taramak üzere Trivy kullanabilmektedir.
CI/CD pipeline’ında kullanıldığında, eğer image’da herhangi bir güvenlik açığı bulunursa pipeline job’ını başarısız olması gerekmektedir. Bu durum, şirketin güvenlik önemleri ile alakalıdır. Örneğin, bazı şirketler yüksek (HIGH) ve kritik (CRITICAL) seviyeler için derlemenin başarısız olması konusunda katı yönergelere sahip olabilir.
Açık Bulduğunda Build’in Başarısız Olmasını Sağlama
Build’in başarısız olmasını sağlamak için exit kodları kullanılmalıdır. Bunun için Trivy komutuyla --severity
ve --exit-code 1
flag’lerini kullanabilirsiniz. Aşağıdaki örnekte olduğu gibi, belirlenen seviyeler için herhangi bir güvenlik açığı bulunursa Trivy’nin sıfır olmayan bir exit koduyla çıkmasını sağlayacaktır:
trivy image --severity HIGH,CRITICAL --exit-code 1 techiescamp/pet-clinic-app:1.0.0
Ayrıca, güvenlik açığı raporunu bir build başarısızlık bildirimi olarak developer’lara ve DevOps mühendislerine gönderebilirsiniz.
Trivy Konfigürasyon Dosyası Kullanma
Taramalar için varsayılan ayarları belirlemek üzere bir Trivy konfigürasyon dosyası kullanmanız önerilmektedir. Bu dosya, projenizin ihtiyaçlarına özel tarama gereksinimlerinizi karşılayacak şekilde kullanılabilir.
Örnek trivy.yaml
Dosyası
Aşağıda, örnek bir trivy.yaml
konfigürasyon dosyası verilmiştir:
timeout: 10m
format: json
dependency-tree: true
list-all-pkgs: true
exit-code: 1
output: result.json
severity:
- HIGH
- CRITICAL
scan:
skip-dirs:
- /lib64
- /lib
- /usr/lib
- /usr/include
security-checks:
- vuln
- secret
vulnerability:
type:
- os
- library
ignore-unfixed: true
db:
skip-update: false
Konfigürasyon Dosyasını Kullanma Syntax’ı
Konfigürasyon dosyasını kullanmak için aşağıdaki gibi bir komut kullanabilirsiniz:
trivy image --config path/to/trivy.yaml your-image-name:tag
Git Repository Tarama
Git repository’lerini taramak için kullanılan komut örneği aşağıdaki gibidir:
trivy repo <repo URL>
Eğer özel (private) bir repository kullanıyorsanız, kimlik doğrulaması için git token’ınızı sağlamanız gerekmektedir. Bunu yapmak için aşağıdaki komutu kullanabilirsiniz:
export GITHUB_TOKEN=<git token>
Ardından, aşağıdaki komutla repository’yi tarayabilirsiniz:
trivy repo <repo URL>
Bu komut, repository’yi tarar ve içindeki güvenlik açıklarını aşağıda gösterildiği gibi listeleyecektir.
Trivy Neleri Taramaktadır?
Trivy, Docker image’larındaki güvenlik açıklarını taramak için aşağıdaki ana bileşenleri gözden geçirir:
- Çeşitli Paket Yöneticileri: Trivy, apt, yum, apk ve npm gibi farklı paket yöneticilerindeki güvenlik açıklarını tarayabilir. Bu, Trivy’nin, çeşitli yazılım bağımlılıklarını kullanan image’larda güvenlik açıklarını tespit edebilmesini sağlar.
- Linux ve Windows Image’ları: Trivy, hem Linux hem de Windows image’larındaki güvenlik açıklarını tarayabilir. Bu sayede, Trivy’yi Linux veya Windows host’lar üzerinde çalışacak image’lar için kullanabilirsiniz.
- Farklı Formatlar: Trivy, Docker image’larının yanı sıra tar arşivleri ve dosya sistemleri gibi çeşitli formatlarda depolanan güvenlik açıklarını da tarar. Bu, Trivy’nin, farklı konumlarda saklanan image’ları tarayabilmesini sağlar.
- Farklı Ortamlar: Trivy, plain Docker container’ları ve Kubernetes pod’ları gibi çeşitli ortamlarda çalışan Docker image’larındaki güvenlik açıklarını tarayabilir. Böylece, Trivy’yi kullandığınız herhangi bir ortamda çalışan image’lar için kullanabilirsiniz.
Trivy Scanner’ın Avantajları
Aşağıdaki grafik, CVE veritabanındaki toplam güvenlik açıklarını göstermektedir. Gördüğünüz gibi, her yıl artış göstermektedir.
Güvenlik açıklarındaki artış göz önüne alındığında, Docker image’larını Trivy ile taramanın birçok avantajı bulunmaktadır.
- Güvenlik Açıklarını Belirleme: Trivy, Docker image’larınızda kullanılan paketlerdeki güvenlik açıklarını tespit edebilir. Bu, özellikle temel image’ların yamanması ve uygulama image’larının inşası sırasında faydalıdır.
- Güvenlik Durumunu İyileştirme: Image’larınızı güvenlik açıkları için tarayarak, organizasyonunuzun güvenlik durumunu geliştirebilirsiniz.
- Güvenlik Uyumluluğu: Birçok organizasyon, güvenlik uyumluluğu gereği Docker image’larını güvenlik açıkları açısından kontrol etmek zorundadır. Bu standartlara Trivy yardımıyla ulaşabilirsiniz.
Sonuç
Docker image güvenlik açığı taraması, hem geliştirme aşamasında hem de CI/CD sürecinde zorunludur. Bu, iyi DevSecOps ilkelerine uymanızı ve Docker tabanlı ortamlarınızda sağlam bir güvenlik sağlamak için en iyi uygulamaları hayata geçirmenizi garanti eder.
Ayrıca incelemek isterseniz nikto ile web zaafiyet taraması yazımı okuyabilirsiniz.