Bu eğitim, güvenli yazılım geliştirmekle ilgilidir. Güvenli kodlama pratiklerini, yaygın güvenlik hatalarının anlaşılabilir parçalar halinde sınıflandırılması suretiyle anlatmaya çalışağız. Bu çerçeve içinde eğitim, geliştiriciler ve yazılım analistleri için daha faydalı olacaktır.
Güvenlik, herhangi bir yazılım üretim metodolojisinin ve uygulamasının ayrılmaz bir parçası olmalıdır. Bununla birlikte, geliştirme karmaşık bir süreçtir ve bir yazılımı zaman geçtikçe güvende tutmak son derece zordur. Güvenli bir yazılım üretmek için kullanılacak çok sayıda güvenlik aracı, metodoloji ve doküman vardır. Ancak yine de birçok uygulama kritik güvenlik hataları içerir. Bu hataların çoğu, yazılım güvenliği anti-patern’ler olarak adlandırdığımız kötü kodlama kalıplarından, yani hatalardan kaynaklanır.
Bir anti-patern, genellikle etkisiz, daha da kötüsü risk taşıyan, tekrar eden bir soruna verilen yaygın bir tepkidir. Daha basit bir deyişle, anti-patern’ler genellikle sorunlara karşı tekrar tekrar icat edilen kötü çözümlerdir.
Örneğin, yazılım geliştirmedeki popüler anti-patern’lerdan biri Spaghetti Code‘dur. Kodlamayı yeni öğrenirken yani henüz tecrübeli değilken, genellikle modülerliğin önemine aşina olmayız veya önce tasarım yapmak için çok az zamanımız olur. Bu nedenle, son derece karmaşık, modüler olmayan yazılımlar üretme eğiliminde oluruz. Bu kodlama yöntemi Spagetti Kodu üretir ve bu şekilde bile olsa, yazılan ürün yine de production’a çıkabilir. Ancak yeni değişikliklere uyum sağlamak son derece zordur. Çünkü kod modüler veya yapılandırılmış olmadığı için yeni özellikler eklemek kolay olmaz. Ayrıca, koddaki herhangi bir değişiklik, diğer akışları öngörülemeyen bir şekilde etkiler. Kodun karmaşık formu, yeni geliştiricilerin adaptasyonlarında hayatlarını zorlaştıracağından bakım bile yapılamaz hale gelir.
Benzer şekilde, tekrarlayan güvenlik hatalarına yol açan kötü tasarım veya kodlama seçimleri vardır. Bilgisayar korsanlarının kurbanı olmamak için bu yazılım güvenliği hatalarının farkında olmak önemlidir. Eğitim, dokuz farklı temel hata içermektedir. Bu hatalardan bazıları diğerlerinden daha yaygın olabilir ancak yazılımlar için hepsi ölümcül riskler içermektedir.
Her derste, önce belirli anti-patern’in ne ile ilgili olduğunu açıklamaya çalışacağız. Ardından, bu hata yapıldığında neyin yanlış gidebileceğine dair bir veya daha fazla demo göstererek hatayı pekiştireceğiz. Her dersin sonunda, güvenli olmayan tasarım veya kodlama seçimlerine karşı yaygın olarak kabul görmüş çözümlere bakacağız.
Eğitmen Hakkında
Bedirhan Urgun, 15 yılı aşkın süredir yazılım güvenliği alanında çalışmaktadır. Bu süre zarfında hem bilgi güvenlik uzmanı hem de geliştirici olarak, kamu kurumlarında ve özel sektörlerde görevler aldı. Yazılım güvenliği, eğitimleri ve statik kod analizi kariyerinin temelini oluştururken, zafiyet yönetimi ve güvenlik sızma testleri alanlarında da sorumluluklar almıştır.
Yüz yüze uygulamalı eğitim portföyü; web/mobil uygulama penetrasyon testleri, web servisleri güvenliği ve ağırlıklı olarak güvenli kod yazma eğitimlerinde oluşmaktadır. Bugüne kadar 2000’nin üzerinde geliştiriciye teorik ama daha çok pratik ağırlıklı .NET ve JAVA güvenli yazılım geliştirme eğitimleri verme şansı bulmuştur.
İstanbul’da yaşamaktadır ve SourceFlake adında butik bir güvenli yazılım şirketine sahiptir.
Neler Öğreneceğiz?
- Geliştiricilerin düştüğü yinelenen güvenlik tuzakları
- Birçok ünlü yazılım zafiyetlerinin yönetilebilir ve pratik kök nedenleri
- Güvenlik hatalarını yazılımlarımızdaki belirli kodlama modelleriyle eşleştirme yeteneği
- Girdi doğrulamanın güvenli ve güvenli olmayan yolları
- Kodlama sırasında refleksif olarak sorulması gereken güvenlik soruları
- Ünlü güvenlik hatalarına aşinalık; XXE, Session Puzzling, Mass Assignment, XSS, Directory Traversal, IDOR and more