TL; DR: Kulağa ne kadar tuhaf gelse de, bir güvenlik tarayıcısı tarafından bildirilen birkaç yanlış pozitif görmek muhtemelen iyiye işarettir ve kesinlikle hiçbirini görmemekten daha iyidir. Nedenini açıklayalım.
giriiş
Yanlış pozitifler, son yıllarda hayatımızda biraz beklenmedik bir şekilde ortaya çıktı. Tabii ki, virüsün yayılmasını kontrol etmek için büyük test kampanyaları gerektiren COVID-19 pandemisinden bahsediyorum. Kayıtlara göre, yanlış pozitif pozitif görünen bir sonuçtur (bizim durumumuzda COVID-19 için), burada aslında negatiftir (kişiye virüs bulaşmamıştır). Daha yaygın olarak, yanlış alarmlardan bahsediyoruz.
Bilgisayar güvenliğinde de sıklıkla yanlış pozitiflerle karşılaşırız. Herhangi bir SIEM’in arkasındaki güvenlik ekibine en büyük operasyonel zorluğunun ne olduğunu sorun ve büyük olasılıkla yanlış pozitiflerden bahsedilecektir. Yakın tarihli bir rapor, güvenlik uzmanları tarafından alınan tüm uyarıların %20’sinin yanlış pozitif olduğunu ve bu da onu büyük bir yorgunluk kaynağı yaptığını tahmin ediyor.
Yine de yanlış pozitiflerin arkasındaki hikaye, ilk bakışta göründüğü kadar basit değildir. Bu yazıda, bir analiz aracını değerlendirirken orta düzeyde yanlış pozitif görmenin oldukça iyi bir verimlilik işareti olduğunu savunacağız.
Tam olarak neden bahsediyoruz?
Uygulama güvenliğinde statik analiz ile öncelikli kaygımız tüm doğru kaynak kodunu analiz ederek güvenlik açıkları.
İşte statik analizin iki temel kavramı arasındaki farkı daha iyi kavramak için bir görselleştirme: kesinlik ve hatırlama. Büyüteç, tespit aracı tarafından tanımlanan veya seçilen örneği temsil eder. İstatistiksel bir sürecin performansını nasıl değerlendireceğiniz hakkında daha fazla bilgiyi buradan edinebilirsiniz.
Bunun mühendislik açısından ne anlama geldiğini görelim:
- yanlış pozitifleri azaltarak hassasiyeti iyileştiriyoruz (tespit edilen tüm güvenlik açıkları aslında bir güvenlik sorununu temsil ediyor).
- yanlış negatifleri azaltarak hatırlamayı iyileştiriyoruz (mevcut tüm güvenlik açıkları doğru bir şekilde tanımlanır).
- %100 geri çağırmada, algılama aracı bir güvenlik açığını asla gözden kaçırmaz.
- %100 hassasiyette, algılama aracı asla yanlış bir uyarı vermez.
Başka bir deyişle, bir güvenlik açığı tarayıcısının amacı, daireyi (büyüteçteki) sol dikdörtgene (ilgili öğeler) mümkün olduğunca yaklaştırmaktır.
Sorun, cevabın nadiren net olması, yani değiş tokuş yapılması gerektiğidir.
Peki, hangisi daha çok arzu edilir: kesinliği en üst düzeye çıkarmak mı yoksa geri çağırmak mı?
Hangisi daha kötü, çok fazla yanlış pozitif mi yoksa çok fazla yanlış negatif mi?
Nedenini anlamak için, her iki uç noktaya da götürelim: Bir algılama aracının, kullanıcılarını yalnızca belirli bir kod parçasının bir güvenlik açığı içerme olasılığı %99,999’dan daha yüksek olduğunda uyardığını hayal edin. Bu kadar yüksek bir eşik ile, bir uyarının gerçekten de gerçek bir pozitif olduğundan neredeyse emin olabilirsiniz. Ancak tarayıcı seçiciliği nedeniyle kaç güvenlik sorunu fark edilmeyecek? Çok fazla.
Şimdi, tam tersine, araç bir güvenlik açığını asla kaçırmamak (geri çağırmayı en üst düzeye çıkarmak) için ayarlansaydı ne olurdu? Tahmin ettiniz: Yakında yüzlerce hatta binlerce yanlış uyarıyla karşı karşıya kalacaksınız. Ve daha büyük bir tehlike var.
Ezop’un masalında bizi uyardığı gibi Kurt Ağlayan Çocuk, sadece yanlış iddiaları tekrarlayan herkes dinlenmeyecek. Modern dünyamızda, inançsızlık, güvenlik bildirimlerini devre dışı bırakmak ve barışı yeniden sağlamak için basit bir tıklama olarak gerçekleşir veya devre dışı bırakmaya izin verilmiyorsa onları görmezden gelirdi. Ancak sonuçlar en az masaldaki kadar dramatik olabilir.
Statik analizin bu kadar sık başarısız olmasının muhtemelen bir numaralı nedeninin alarm yorgunluğu olduğunu söylemek doğru olur. Yanlış alarmlar yalnızca tüm uygulama güvenlik programlarının başarısızlığının kaynağı olmakla kalmaz, aynı zamanda tükenmişlik ve katılım gibi çok daha ciddi hasarlara da neden olurlar.
Ve yine de, onlara atfedilen tüm kötülüklere rağmen, bir araç herhangi bir yanlış pozitif taşımıyorsa, o zaman bu soruna kesin bir cevap getirmesi gerektiğini düşünmekte yanılıyorsunuz.
Yanlış pozitifleri kabul etmeyi öğrenmek nasıl
Yanlış pozitifleri kabul etmek için, bizi genellikle erken sonuçlara götüren bu temel içgüdüye karşı çıkmak zorundayız. Başka bir düşünce deneyi bunu göstermemize yardımcı olabilir.
A ve B güvenlik tarayıcılarının performansını karşılaştırmakla görevlendirildiğinizi hayal edin.
Her iki aracı da karşılaştırma ölçütünüzde çalıştırdıktan sonra, sonuçlar aşağıdaki gibidir: tarayıcı A yalnızca geçerli güvenlik açıkları tespit ederken, B tarayıcısı hem geçerli hem de geçersiz güvenlik açıkları bildirdi. Bu noktada, kim erken bir sonuca varmak istemez ki? Karar vermeden önce daha fazla veri isteyecek kadar akıllı bir gözlemci olmanız gerekir. Veriler büyük ihtimalle bunu ortaya çıkaracaktır. B tarafından bildirilen bazı geçerli sırlar, A tarafından sessizce görmezden gelinmişti.
Artık bu makalenin arkasındaki temel fikri görebilirsiniz: herhangi bir araç, süreç veya şirket tamamen Bedava yanlış pozitiflerden şüpheli görünmelidir. Durum gerçekten böyle olsaydı, ilgili bazı unsurların sessizce atlanma olasılığı çok yüksek olurdu.
Kesinlik ve geri çağırma arasındaki dengeyi bulmak incelikli bir meseledir ve çok fazla ayarlama çabası gerektirir (GitGuardian mühendislerinin model hassasiyetini nasıl geliştirdiğini okuyabilirsiniz). Sadece bu değil, aynı zamanda ara sıra başarısız olduğunu görmek de kesinlikle normaldir. Bu nedenle, birkaç tane görmekten çok yanlış pozitiflerin olmaması konusunda endişelenmelisiniz.
Ancak yanlış pozitiflerin aslında ilginç bir sinyal olmasının başka bir nedeni daha var: güvenlik asla “tamamen beyaz veya tamamen siyah” değildir. Her zaman “bilmediğimiz” bir boşluk vardır ve
insan incelemesi ve triyajının gerekli hale geldiği yer.
“Yazdığımız yazılımın doğası gereği, bazen yanlış pozitifler alıyoruz. Bu olduğunda, geliştiricilerimiz bir form doldurup “Hey, bu yanlış bir pozitif. Bu bir test senaryosunun parçasıdır. Bunu görmezden gelebilirsiniz.” – Kaynak.
Daha derin bir gerçek var: Güvenlik asla “tamamen beyaz ya da tamamen siyah” değildir. Her zaman “bilmediğimiz” ve insan incelemesinin ve triyajın gerekli olduğu bir sınır vardır. Başka bir deyişle, bu sadece ham sayılarla ilgili değil, aynı zamanda nasıl kullanılacaklar. Yanlış pozitifler bu açıdan faydalıdır: bağlamın daha iyi anlaşılması ve dikkate alınması için araçları geliştirmeye ve algoritmaları iyileştirmeye yardımcı olurlar. Ancak bir asimptot gibi, mutlak 0’a asla ulaşılamaz.
Lanet gibi görünen bir şeyi erdemli bir döngüye dönüştürmek için gerekli bir koşul vardır. Yanlış pozitiflerin işaretlenebildiğinden ve son kullanıcılar için mümkün olduğunca kolay bir şekilde algılama algoritmasına dahil edildiğinden emin olmalısınız. Bunu başarmanın en yaygın yollarından biri, dosyaları, dizinleri veya depoları taranan çevreden hariç tutma olanağı sunmaktır.
GitGuardian’da sır tespitinde uzmanız. Herhangi bir bulguyu mümkün olduğunca fazla bağlamla geliştirme fikrini zorladık, bu da çok daha hızlı geri bildirim döngülerine yol açtı ve mümkün olduğunca çok çalışmayı hafifletti.
Bir geliştirici, ön taahhüt kancası olarak yüklenen istemci tarafı ggshield ile bir sır oluşturmaya çalışırsa, geliştirici bunu yoksayılacak bir sır olarak işaretlemediği sürece, taahhüt durdurulur. Oradan, sır yanlış bir pozitif olarak kabul edilir ve artık bir uyarıyı tetiklemez, yalnızca yerel iş istasyonunda tetikler. Yalnızca GitGuardian panosuna erişimi olan bir güvenlik ekibi üyesi, tüm ekip için yanlış bir pozitif işaretleyebilir (genel yoksay).
Sızan bir sır bildirilirse, güvenlik ekibinin bunları hızla göndermesine yardımcı olacak araçlar sağlarız. Örneğin, otomatik iyileştirme çalışma kitabı, sırrı işleyen geliştiriciye otomatik olarak bir posta gönderir. Başucu kitabı yapılandırmasına bağlı olarak, geliştiricilerin olayı kendilerinin çözmesine veya görmezden gelmesine izin verilebilir, bu da güvenlik ekibine kalan iş miktarını hafifletir.
Bunlar, tespit ve düzeltme süreçlerini, onları ortadan kaldırma saplantısı yerine yanlış pozitiflere göre uyarlamayı nasıl öğrendiğimize dair sadece birkaç örnek. İstatistiklerde, bu saplantının bir adı bile vardır: buna fazla uydurma denir ve bu, modelinizin belirli bir veri kümesine fazla bağımlı olduğu anlamına gelir. Gerçek dünya girdilerinden yoksun olan model, üretim ortamında kullanışlı olmaz.
Çözüm
Yanlış pozitifler alarm yorgunluğuna neden olur ve güvenlik programlarını o kadar sık sık raydan çıkarır ki, artık yaygın olarak saf kötülük olarak kabul edilirler. Bir algılama aracını değerlendirirken, mümkün olan en iyi hassasiyeti istediğiniz ve çok fazla yanlış pozitife sahip olmanın, ilk etapta herhangi bir araç kullanmamaktan daha fazla soruna neden olduğu doğrudur. Bununla birlikte, geri çağırma oranını asla gözden kaçırmayın.
GitGuardian’da geniş bir cephanelik tasarladık. genel sır algılama motorumuzun geri çağırma oranını iyileştirmek için algılama filtreleri.
Tamamen istatistiksel bir perspektiften bakıldığında, düşük oranda yanlış pozitif olması oldukça iyi bir işarettir, yani ağdan çok az hata geçer.
Kontroldeykenyanlış pozitifler o kötü. Hem analiz tarafında hem de iyileştirme tarafında iyileştirmelerin nerede yapılabileceğini gösterdikleri için avantajınız için bile kullanılabilirler.
Bir şeyin sistem tarafından neden “geçerli” kabul edildiğini anlamak ve buna uyum sağlamanın bir yolunu bulmak, uygulama güvenliğinizi geliştirmenin anahtarıdır. Güvenlik ve geliştirme ekipleri arasındaki işbirliğinin gerçekten parladığı alanlardan biri olduğuna da inanıyoruz.
Son bir not olarak şunu unutmayın: Bir algılama aracı rapor vermiyorsa hiç yanlış pozitifler, çalıştırın. Başın büyük belada.
Not — Bu makale GitGuardian’da teknik içerik yazarı olan Thomas Segura tarafından yazılmış ve katkıda bulunmuştur.