Ulaşılabilirlik analizi (Reachability Analysis), güvenlik açıklarını daha iyi anlamak ve önceliklendirmek için kullanılan bir yöntemdir. SAST (Statik Uygulama Güvenlik Testi) ve SCA (Yazılım Bileşen Analizi) gibi güvenlik tarama araçlarıyla birlikte kullanıldığında, uygulamanın hangi güvenlik açıklarının gerçekten risk oluşturduğunu belirler ve yönetimini kolaylaştırır. Bu sayede, geliştiriciler zamanlarını en kritik zafiyetleri çözmeye ayırabilir, gereksiz iş yükü azaltılarak güvenlik yönetimi daha verimli hale getirilir.
Bu yazıda, ulaşılabilirlik analizi konseptini uygulamalı olarak Sonatype Nexus Lifecycle uygulaması üzerinden inceleceğiz. Aşağıdaki kod, commons.io
kütüphanesinin zafiyetli bir versiyonunu içeriyor ve zafiyete sebep olan metot, vulnerableMethod
içinde çağırılıyor.
import com.google.common.collect.Lists;
import org.apache.commons.io.FilenameUtils;
public class App
{
public static void vulnerableMethod() {
// FilenameUtils.getPrefixLength("file.txt");
FilenameUtils.concat("", "");
}
public static void nonVulnerableMethod() {
Lists.newArrayList(1, 2);
}
public static void main(String[] args) {
vulnerableMethod();
nonVulnerableMethod();
}
}
Şimdi bu zafiyetli metodun çağırılıp, çağırılmadığını tespit edebilecek bir tarama yapalım. Nexus’un cli aracı üzerinden, ilgili projeyi c
parametresiyle taratıyoruz, c
burada callflow
‘u temsil ediyor.
Callflow, Java (veya herhangi bir JVM dili) ile yazılmış dosyalar üzerinde çalışacak şekilde tasarlanmıştır. Etkinleştirildiğinde, tarama süreci hem uygulama dosyalarını hem de bağımlılıkları analiz eder.
Eğer tarama sırasında bir zafiyet tespit edilirse ve uygulama bu zafiyetli yöntemi çağırıyorsa, bileşen Security-Reachable
olarak etiketlenir. Uygulama bu yöntemi çağırmazsa, bileşen bu şekilde etiketlenmez.
Security-Reachable
etiketi içeren bir politika oluşturup, tehdit seviyesini belirleyerek, bu kütüphaneler önceliklendirilebilinir.
~/java-appsec/appsec$ java -jar nexus-iq/nexus-iq-cli.jar -s https://8070-appsectr-appsec-2pcx95d5rfg.ws-us116.gitpod.io -a admin:admin123 -i sandbox-application -c ../projects/callflow-demo
[INFO] Sonatype IQ CLI version: 1.182.0-01 (eda224e42eac7036b4ad5260e31862e66efcc5bd)
[INFO] Java version: 17.0.4, Java Home: /nix/store/ca5zjmdcha9wa4gfvw7vhmz5wkr1ra66-openjdk-17.0.4+8/lib/openjdk
[INFO] Default locale: en_US, platform encoding: UTF-8
[INFO] OS name: Linux, version: 6.2.16, arch: amd64
[INFO] Validating IQ Server version https://8070-appsectr-appsec-2pcx95d5rfg.ws-us116.gitpod.io...
.
.
.
[INFO] Running call flow analysis...
[INFO] Creating workspace for call-flow analysis
İlk olarak zafiyetli kütüphaneler tespit ediliyor, daha sonra bu zafiyetlerin, uygulama içinde gerçekten tetiklenip tetiklenmediğini belirlemek için callflow taraması başlıyor.
[INFO] Discovered 1 entry-points
[INFO] Generating callflow; algorithm: RTA_PLUS
[INFO] Building RTA_PLUS callflow with 1 entry-points
[INFO] Inspecting methods
[INFO] Inspected 14 methods; 37 calls
[INFO] Callflow built; 571.9 ms
[INFO] Callflow generated; 27 methods
[INFO] Detecting callable vulnerable methods from 2 vulnerable components
[INFO] Found 1 callable vulnerable methods
.
.
.
[INFO] Number of components affected: 2 critical, 0 severe, 1 moderate
[INFO] Number of open policy violations: 2 critical, 1 severe, 2 moderate
[INFO] Number of legacy violations: 0
[INFO] Number of components: 9
Tarama logunu incelediğimizde, zafiyet içeren bileşenler üzerinden 2 tane fonksiyon çağırıldığını görebiliyoruz. Bunlardan sadece 1 tanesinin zafiyetli metot olduğu belirtilmiş.
Otomatik olarak arayüzde oluşan raporu incelediğimizde, Security-Reachable
etiketinin eklendiğini görüyoruz. Artık bu etiket üzerinden, yeni politikalar yazıp, gerçekten zafiyetli metotların tetiklendiği bileşenlerin iyileştirmesini önceliklendirebiliriz.
□