Terminal ekranındaki o parlak kırmızı satırlar, gece saat iki sularında insanın gözünü normalden daha fazla alıyor. OpsVault (kurgusal şirket) için hazırladığımız yeni mikroservis tam yayına çıkacakken Jenkins pipeline'ı (iş hattı) çat diye durdu. Sebep: Kritik bir zafiyet. Kahve soğumuş, gözler yanıyor ama o zafiyet oradaysa, o kod o sunucuya gitmeyecek. İşte tam o an, elimdeki en keskin bıçaklardan birine, Trivy’ye güveniyorum. Bu araç, modern siber güvenlik dünyasında, özellikle de DevSecOps tarafına kayanlar için tam bir 'isviçre çakısı' kıvamında.
Trivy, Aqua Security tarafından geliştirilen açık kaynaklı bir zafiyet tarayıcısı (vulnerability scanner). Eh, biraz kaba bir tanım olacak ama; kendisi projenizin içine sızmış, kütüphanelerin arasına saklanmış veya Docker imajınızın derinliklerine gömülmüş 'patlamaya hazır bombaları' bulup çıkaran bir dedektif gibi. Sadece container imajlarını değil; dosya sistemlerini, Git depolarını, Kubernetes cluster'larını ve IaC (Altyapı olarak kod) dosyalarını da tarayabiliyor. Kurulumu ise o kadar zahmetsiz ki, bazen 'Acaba bir şeyi yanlış mı yaptım?' diye düşündürtüyor. Sadece bir binary dosyasını indirip çalıştırıyorsunuz, hepsi bu.
Kullanımı genellikle şu basit komutla başlıyor:
trivy image python:3.9-slim
Veya bir Terraform dosyasındaki yanlış yapılandırmaları (misconfigurations) bulmak isterseniz:
trivy config ./infrastructure/
Tabii gerçek hayatta bu işler terminalde tek satır yazmakla bitmiyor. OpsVault (kurgusal şirket) tarafındaki senaryoda, bir geliştiricimiz farkında olmadan çok eski bir Debian tabanlı imaj kullanmış. İmajın içinde libssl kütüphanesinin milattan kalma bir versiyonu vardı. Ben sızma testi (penetration testing) yaparken bu tarz zayıflıkları sömürmeyi (exploit) çok severim ama DevSecOps şapkamı taktığımda, o imajın kapıdan içeri girmesi demek, potansiyel bir veri sızıntısına (data breach) davetiye çıkarmak demek. Trivy, saniyeler içinde imajın katmanlarını (layers) soyup dökerek karşımıza CVE-2023-XXXX gibi bir kod çıkardı.
Neyse, o gece o imajı alpine tabanlı daha hafif ve güvenli bir versiyonla değiştirdik de operasyon kazasız belasız tamamlandı.
Trivy’nin en sevdiğim yanı hızı. Bazı kurumsal araçlar gibi imajı alıp uzak bir sunucuya yükleyip, orada dakikalarca analiz edip sonra rapor dönmesini beklemiyorsunuz. Her şey lokalde, veritabanı anlık güncellenerek halloluyor. Ayrıca çıktı formatları çok esnek; JSON, Table veya GitLab/GitHub güvenlik sekmelerine uygun formatlarda rapor alabiliyorsunuz. Ama her güzelin bir kusuru var. Trivy bazen çok 'titiz' davranabiliyor. Özellikle 'false positive' dediğimiz, aslında o sistemde sömürülemeyecek ama sadece versiyon numarası eski olduğu için 'kritik' diye işaretlenen zafiyetlerle başınız ağrıyabilir. Bu durum, özellikle junior arkadaşlarımızda panik havası yaratabiliyor. Senior tayfa ise zaten .trivyignore dosyasını nasıl etkili kullanacağını bilir.
Bir diğer eksiği ise, statik analiz (SAST) tarafında çok derinlere inememesi. Evet, konfigürasyon hatalarını buluyor ama kodun içindeki mantıksal hataları yakalamak için hala Snyk veya Checkmarx gibi devlere ihtiyaç duyabiliyorsunuz. Fakat 'Shift Left' (güvenliği erkene çekme) felsefesi için, yani geliştiricinin kendi bilgisayarında daha kodu push etmeden yapacağı bir tarama için Trivy’den daha pratiği yok sanırım.
Alternatiflerden bahsetmek gerekirse; Grype (Anchore tarafından geliştirilen) ciddi bir rakip. Hatta bazı senaryolarda daha hızlı olduğunu söyleyebilirim. Eğer tamamen bulut tabanlı ve yönetilen bir servis istiyorsanız Snyk bir adım önde, ancak maliyet ve açık kaynak esnekliği devreye girince Trivy benim için hep bir tık daha yukarıda kalıyor. Özellikle Kubernetes tarafında çalışıyorsanız, bir 'admission controller' olarak Trivy’yi kullanıp, zafiyet barındıran imajların cluster'a (küme) girmesini en baştan engelleyebiliyorsunuz.
Kendi deneyimlerimden yola çıkarak şunu söyleyebilirim; ilk sızma testimde bu tarz otomatize araçlara çok mesafeliydim. 'Ben manuel bulurum, araçlar hata yapar' diyordum. Ama bugün geldiğimiz noktada, binlerce container'ın uçuştuğu bir ortamda manuel kontrol imkansız. Önemli olan araca güvenmek değil, aracın sunduğu veriyi yorumlayabilmek. Trivy size bir liste verir, o listedeki hangi zafiyetin gerçek bir risk oluşturduğunu, hangisinin ise sadece 'gürültü' olduğunu anlamak için hala o sızma testçisi refleksine ihtiyacınız var.
Ekranda kırmızı satırlar bitti, yerini yeşil 'Success' yazısına bıraktı. OpsVault (kurgusal şirket) için bir gece daha sakin kapanıyor gibi. Terminali kapatmadan önce son bir kez trivy --version yazıp versiyonun güncelliğine bakıyorum. Güvenlik asla bitmeyen bir süreç, ama doğru araçlarla en azından uykunuzu biraz daha az bölebilirsiniz. Saate bakıyorum, 03:15. Belki bir kahve daha değil, ama bir bardak su iyi gider.
