Bu Help Net Security röportajında Endor Labs’ın CISO’su Karl Mattson, güvenli yazılım geliştirmeyi geliştirmeye yönelik stratejileri tartışıyor.
Mattson, geliştiricilerin karmaşık sistemlerdeki güvenlik açıklarını nasıl giderebileceklerini, kuruluşların güvenli kodlama uygulamalarını daha iyi destekleyebilecekleri yolları ve güvenli geliştirmede dillerin ve çerçevelerin rolünü ele alıyor.
Modern yazılım sistemleri giderek daha karmaşık hale geliyor. Geliştiriciler bu karmaşıklıktan kaynaklanan gizli güvenlik açıklarını gidermek için hangi stratejileri benimseyebilir?
Geliştiriciler bugün, kaynak kodu güvenliğini önemli ölçüde daha iyi ele alan ve ölçek ve karmaşıklığın üstesinden gelme yolundaki eski engelleri ortadan kaldıran bir dizi oldukça yeni stratejiden yararlanabilirler. Kaldırılması gereken basit ama önemli bir engel bağlam değiştirmedir. Öncelikle geliştiricilere halihazırda kullanmakta oldukları geliştirici araçları (örneğin, IDE’ler ve kod depoları) içinde güvenlik yetenekleri vererek başlayın ve geliştiricilere, kaynak kodu oluşturma ve yönetmeye yönelik yerel iş akışları dahilinde güvenlik bilgileriyle etkileşimde bulunma yetkisi verin.
Daha sonra, geliştiricilere dağlar kadar yanlış pozitif güvenlik açığı sunmayı kesinlikle bırakmamız ve bunun yerine gerçekten pozitif olan ve yükseltme seçeneklerinin spesifik etki analiziyle birlikte gelen bulgular sunmamız gerekiyor. Bu tür bir karar desteği, geliştiricinin bir dizi kararı hızlı ve doğru bir şekilde, zaman ve çaba harcamadan gerçekleştirmesine olanak tanır. O günler geride kaldı.
Bu teknik geliştirmeler, kaynak kodundaki güvenlik açıklarını düzeltmek için harcanan zamanı/çabayı %99 oranında azaltabilir. Bu sürtüşme ve çaba ortadan kalktığında, ürün stratejilerimizin işlevleri olarak adres ölçeğine ve karmaşıklığa odaklanarak karmaşıklığın üstesinden gelme konusunda çok daha büyük bir kapasiteye sahibiz.
Neden bazı geliştirme ekipleri güvenli kodlama yönergelerine uyma konusunda yardıma ihtiyaç duyuyor ve kuruluşlar ekiplerini nasıl daha iyi destekleyebilir?
Hiçbir geliştirici bir sorunu aynı şekilde çözemez veya bir yazılım ürünü geliştiremez. Bazıları kariyerlerine resmi üniversite eğitimi yoluyla ulaşırken, diğerleri kendi kendini yetiştiriyor ve minimum düzeyde mentorluk alıyor. Stiller ve deneyimler çılgınca farklılık gösterir. Aynı şekilde, güvenli kodlama uygulamalarını ve yönergelerini de benzer düşünce çeşitliliğiyle dikkate almalarını beklemeliyiz.
Kuruluşlar, güvenli geliştirme uygulamalarında (eğitim, yönergeler, standartlar) bu geniş çeşitliliği hesaba katmalıdır. Bunlar son derece yetkin bir geliştirici için bile yabancı kavramlar olabilir ve geliştiricilerimize, güvenli bir kodlama yeterliliği geliştirmeleri için yeterli zamanın yanı sıra öğrenmeleri ve soru sormaları için zaman ve alan vermemiz gerekir. Yeterliliğin nihai durumu için bir beklenti belirleyebiliriz, ancak geliştiricilere birdenbire işaret etmek, amaçlanan etkinin tam tersini yaratacaktır; onların dikkatlerini ve katılımlarını kaybedeceğiz. Güvenli kodlama bir yolculuktur ve kuruluşlarımız zaman içindeki ilerlemeyi desteklemeye ve ölçmeye odaklanmalıdır.
Kuruluşlar, merkezi olmayan veya uzak bir çalışma ortamında güvenli kodlama ilkelerini tutarlı bir şekilde uygulamak için ne gibi önlemler alabilir?
Sınıfının en iyisi kuruluşlar, yüksek vasıflı geliştiricilerin, kurumsal bilginin yayılması amacıyla güvenli kodlama bilgisi ve en iyi uygulamalar için ekip düzeyinde bir kaynak olma yetkisine sahip olduğu ‘güvenlik şampiyonları’ programları oluşturmuştur. Bu, özellikle güvenlik ekiplerinin tanıdık olmayan veya güvenilmeyen yüzler olabileceği uzak ortamlarda önemlidir ve dahili geliştirme ekibi liderlerinin, güvenlik zihniyetini benimseme ve güvenlik ilkelerini uygulama tarzını ve yönünü belirleme konusunda çok daha önemli olduğu söylenebilir. Geliştirme ekipleri, güvenlik hackathon’u gibi bir etkinliği uzaktan ekip oluşturma egzersizi olarak kullanabilir ve ekiplerin üretken bir şekilde bağ kurmasını ve gelişmesini güçlendirebilir.
Güvenli geliştirme için daha uygun belirli programlama dilleri veya çerçeveleri var mı? Eğer öyleyse, neden?
Evet, Rust ve Go gibi daha yeni dillerin bellek güvenliği gibi önceliği güvenlik olan birkaç ilkesi vardır. Django çerçevesi, yıllardır web uygulaması güvenliğini sıkıntıya sokan SQL enjeksiyonuna ve siteler arası komut dosyası çalıştırmaya karşı yerleşik korumalara sahiptir. Bunlar önemli geliştirmelerdir, ancak sonuçta dil ve çerçeve seçiminin, son yazılım ürününün temel güvenliği üzerinde oldukça küçük bir etkisi vardır.
Dillerin yıllar içinde tekrar tekrar ortaya çıkan bir yönü, temeldeki destek topluluğudur; bir dilin ve çerçevenin bakımı ve kalitesine adanmış topluluklar, yeni güvenlik özelliklerini güvenilir bir şekilde eklemeye devam etmektedir. Bu arada, güçlü topluluklara sahip olmayan çerçeveler ve diller zamanla körelme eğiliminde oluyor ve bu da daha önemli güvenlik sorunlarına yol açıyor.