Bu Help Net Security röportajında Codean eş CEO’su Kevin Valk, yazılım güvenliği için yalnızca otomatik araçlara güvenmenin sonuçlarını tartışıyor. Bu araçların, yazılım güvenliği analizini geliştirmek için insan bilgisini nasıl tamamlayabileceğini açıklıyor ve güvenlik endüstrisinin insanlar ve makineler arasındaki simbiyotik ilişkiye öncelik verme ihtiyacını vurguluyor.
Güvenlik analizi ve testlerinin uygulama aşamasından sonra ertelenmesi neden sorunludur? Güvenlik açıklarını belirlemenin maliyetini ve etkinliğini nasıl etkiler?
Yazılım geliştirme, evler veya bazen karmaşık mega yapılar inşa etmekten pek farklı değildir. Herhangi bir şeyi inşa etmek için üzerine inşa edebileceğiniz bir temele ihtiyacınız vardır. Diyelim ki bir gökdelen inşa ediyorsunuz, fiziksel olarak inşa etmeye başlamadan önce çok sayıda çizime, kuvvet analizine ve hazırlığa ihtiyacınız var ve sonunda inşaata başlayabilirsiniz. Diyelim ki gökdeleniniz oldukça yüksek ve toplam yüksekliği 500 metre olması planlanıyor. Yaklaşık 400 m yükseklikte, temeldeki gözle görülür çatlaklar nedeniyle tüm çalışmalar aniden duruyor (ya da belki tüm katlardaki kullanılmış camlar güvensiz çıkıyor). Kesin soruna bağlı olarak sonuç ya tamamen yeniden yapılanmadır (temel 500 m’ye ulaşacak kadar güçlü değildi) ya da her pencerenin değiştirilmesi gerektiğinden pahalıdır. Bunun yerine, tasarım sırasında veya ilk birkaç katta buna bakılsaydı, çözülmesi kesinlikle çok daha ucuz olurdu. Yazılım güvenliği aslında o kadar da farklı değil, özellikle de yazılım geliştirmenin çevik olduğu ve hızla değiştiği günümüzde. Güvensiz bir temel üzerine veya güvensiz malzemelerle inşa etmediğinizden gerçekten emin olmak istiyorsunuz.
Otomatik araçlar için en uygun görevler hangileridir ve hangi görevler yazılım güvenliği konusunda insan uzmanlığı gerektirir?
Siber güvenlikteki en büyük sorun değer tahsisidir. Belirli bir işlevin veya verinin değerli olduğuna kim karar veriyor? Çoğu zaman buna, söz konusu yazılımın arkasındaki şirket tarafından karar verilir. Örneğin, bankacılık yazılımının her banka hesabının tüm işlem geçmişini tutması gerekir. Bu bilgi son derece gizlidir, aksi takdirde kimin ne kadar paraya sahip olduğunu anlayabilirsiniz. Tam tersine Bitcoin, tüm işlemlerin herkese açık olarak görünür ve doğrulanabilir olmasını gerektirir. Yani bu iki durum arasındaki işlemlerin gizliliği tamamen zıttır (Bitcoin söz konusu olduğunda gizliliğin ertelendiğini unutmayın, çünkü genel anahtar ile ona sahip olan taraf arasında hiçbir bağlantı olmamalıdır).
Şu anda tüm otomatik araçlar bu farkı anlayamıyor çünkü aracın bir şirketin tüm iş durumunu ve gelecek planlarını anlaması gerekiyor. Büyük Dil Modelleri (LLM’ler) işle ilgili bilgi sağlayarak bu boşluğu kapatabilir, ancak çoğu zaman bu bilgi yazılı değildir ve sadece beklentilerde veya insanların kafasında bulunur.
Benim gözümde yazılım güvenliği, neyin değerli olduğunu anlamak ve daha sonra yazılımı kötüye kullanarak/değiştirerek bu değeri elde etmenin yollarını bulmakla ilgilidir. Bu, şu anda (ve uzun bir süre boyunca öyle olmasını bekliyorum) insanlara ihtiyaç duyacaktır, çünkü bu bilgiler, bırakın kolayca sindirilebilir bir formatta kodlanmak şöyle dursun, şu anda yazılı değildir.
İnsanlar bilgi elde etme ve varsayımlarda bulunma konusunda çok iyi olsa da çoğumuz kafamızdaki karmaşık hesaplamaları yapma konusunda oldukça başarısızız. Yazılımın nasıl davrandığını anlamak için kaynak kodun analizi veya bir yazılım parçasındaki tüm farklı bileşenler arasındaki ilişkileri bulmak, bilgisayarların oldukça iyi olmaya başladığı bir şeydir. Bana göre otomatikleştirilmiş araçların odaklanması gereken alan tam olarak budur. Bir insan, bazı veri yapılarını veya kod parçalarını değerli olarak işaretleyebilir. Daha sonra bilgisayar, bir kod parçasının bu veri yapısına ulaşmanın yollarını bulmaya çalışabilir ve hatta buraya ulaşmak için atması gereken tüm adımları takip edebilir. Son olarak bir insan, bilgisayarın attığı tüm adımların anlamlı ve hatta uygulanabilir olup olmadığını doğrulayabilir. Bu nedenle güvenlik sektörünün insan ve makine arasındaki simbiyoza daha fazla odaklanması gerektiğini düşünüyorum. Tamamen otomatikleştirilmiş araçlara veya tamamen insan çabasına odaklanmadık.
Otomatik güvenlik araçlarının oluşturduğu yanlış pozitiflerle başa çıkmanın zorluğunu tartışabilir misiniz? Yalnızca otomatik araçlara güvenmenin sonuçları nelerdir?
Bu şu anda yapılmıyor ve çoğu zaman iş için doğru olmayan işlevsellik ve koda değer atayan araçlarla sonuçlanıyor. Bu da önemli miktarda yanlış pozitifliğe yol açar ve bu da dahil olan herkes için gürültü anlamına gelir. Bu “gürültü” aslında gerçek sorunları gizleyebilir çünkü artık tüm hatalı pozitiflerdeki bu birkaç kritik güvenlik açığını bulmanız gerekiyor. Ne yazık ki sonuçta biz de insanız ve çoğu zaman verileri tarayıp gerçek sorunları gözden kaçırırken uyuşuruz.
Öte yandan, otomatik araçların tüm sonuçlarını göründüğü gibi alıp hepsini düzeltmeye karar verirseniz, kötü bir sürprizle karşı karşıya kalırsınız. Geliştiriciler tüm sorunları çözmeye çalışırken önemli ölçüde zaman harcamakla kalmayacak. Muhtemelen artık sizi ciddiye almıyorlar çünkü iş açısından hiçbir değeri olmayan bir kod parçasındaki bazı sıradan sorunları çözmek zorunda kaldılar.
Artık iki büyük sorunla karşı karşıyayız; geliştiriciler artık güvenliği ciddiye almıyor ve yönetim, araçlar herhangi bir güvenlik sorunu bildirmediğinden ürünün tamamen güvenli olduğunu düşünüyor. Ne yazık ki, en büyük güvenlik sorunları tamamen mantıklıdır; genellikle yaratıcının tüm yan etkilerin tam olarak farkında olmadığı yarı gizli özelliklerdir. Muhtemelen birkaç yıl önce Log4j güvenlik açığının farkındasınızdır, bu tam olarak hiçbir otomatik aracın muhtemelen bulamayacağı bir durumdu.
Makine öğrenimine dayalı teknikler, yazılım güvenliği analizinde, özellikle statik analiz ve bulanıklaştırmada geleneksel yaklaşımları nasıl değiştirdi veya geliştirdi?
Şahsen şu anda herhangi bir büyük atılımın farkında değilim, ancak birçok şirketin bu atılımı yaptığından eminim. Daha önce de belirttiğimiz gibi yazılım güvenliğindeki en büyük sorun değer atamasıdır. Hangi parçaların korunması gerekiyor ve ne kadar iyi? Neyin değerli olup neyin değersiz olduğu konusunda yol gösterici araçlarda yüksek lisansların kesinlikle önemli rol oynadığını görüyorum. Bu hem statik analiz hem de bulanıklaştırma için geçerlidir. Statik analiz, belirli iş mantığına veya statik analizi yönlendirmek için kullanılabilecek kod ve verilere atama (iş) değerine odaklanmak üzere yönlendirilebilir. Aynı şey fuzzing için de geçerlidir, ancak yönlendirilmiş fuzzing’e ihtiyacınız olacaktır.
Doğal dil işleme teknikleri, özellikle doğal dilde yazıldığında, yazılım spesifikasyonlarının analizinde hangi rolleri oynar?
Bana göre çözülmemiş en büyük soru, birçok bilgi sağduyulu olduğundan veya yalnızca insanların kafasında mevcut olduğundan, AI/LLM’lere gerekli bilgiyi nasıl sağlayacağımızdır. Bankacılık sistemindeki işlemlerin gizliliğini bir kez daha göz önüne aldığımızda, bunu ve bankacılık sisteminin uyması gereken diğer gereklilikleri ve özellikleri içeren tek bir belgenin şu anda mevcut olduğundan şüpheliyim. Bir alternatif, Yüksek Lisans’ın şirketlerin tüm intranetini yok etmeye başlamasına izin vermektir, ancak şirketlerin bu fırsatı değerlendirmesini beklemiyorum.
Özellikle makine öğrenimi ve yapay zeka alanındaki gelişmelerle birlikte yazılım güvenliği analizi alanının nereye gittiğini görüyorsunuz?
Hem otomatik araçlarda hem de manuel işçilikte sınırlara ulaşıyoruz. Otomatik araçlar, yazılımı “iyi” bir güvenlik durumuna getirmek için yeterli kaliteyi sağlamaz. Öte yandan insanlar çok pahalı ve tüm gelişmelere ayak uydurabilecek yeterli sayıda güvenlik görevlisi yok.
Mantıklı bir çözüm, insan bilgisini ekleyerek araçların kalitesini artırmak ve hızı artırmak için insanlara araçlar eklemek olabilir. Şu anda insan ve makine arasındaki arayüz ciddi anlamda eksik ve bu konuda yeniliğe ihtiyacımız var. LLM’lere yönelik baskı kesinlikle yeniliğe neden oluyor ancak araçları daha insani hale getirmeye yönelik basit bir zihniyet değişikliği de önemli sonuçlar doğurabilir.