Slide 1

Slide 1 text

Güvenli Yazılım Geliştirme Ahmet Pirimoğlu 29 Kasım 2024

Slide 2

Slide 2 text

Ajanda • Kavramlar • Güvenli Yazılım Geliştirme Süreçleri • Sık Karşılaşılan Güvenlik Açıkları • Güvenlik Standartları ve En İyi Uygulamalar • Kod İnceleme ve Güvenlik Testleri • Sonuç ve Öneriler

Slide 3

Slide 3 text

Güvenlik Nedir? Farkındalık + Koruma

Slide 4

Slide 4 text

Güvenli Yazılım Saldırı altında doğru çalışan yazılımdır

Slide 5

Slide 5 text

%100 Güvenlik Yoktur "The only secure computer is one that's unplugged, locked in a safe, and buried 20 feet under the ground in a secret location... and I'm not even too sure about that one" -- Dennis Huges, FBI

Slide 6

Slide 6 text

Ne Kadar Güvenliğe İhtiyacım Var? • Gereksinimleri çıkarma, hedeflerle • İhtiyaç olan kadarını tam olarak yapma • Yeniden gözden geçirme periyotları

Slide 7

Slide 7 text

Güvenli Yazılım Geliştirme Süreçleri

Slide 8

Slide 8 text

Geleneksel Yaklaşım ile Koruma • Firewall’lar ile sistemlerimizi koruruz • “Saldırganları uzak tutalım” • Kriptografi kullanımı yazılımın güvenliğini sağlar • “Tüm verilerimizi şifreli saklıyoruz” • Yazılım ürünlerinin bittiğinde test edilmesi • Saldır ve yamala (penetrate and patch) • Güvenlik özellikleri yazılımlarımızı güvenli kılar • “Biz SSL kullanıyoruz” • Proje hedefleri içerisinde güvenliğin konu edilmemesi • “Güvenlik konusunu bir sonraki sürümde ele alacağız”

Slide 9

Slide 9 text

Modern Yaklaşım • Güvenlik “risk yönetimi”dir • Güvenlik konusunun geliştirme sürecinin entegre bir parçası olması zorunludur

Slide 10

Slide 10 text

SDLC vs Secure-SDLC

Slide 11

Slide 11 text

DevSecOps

Slide 12

Slide 12 text

Tehdit Modelleme •Yazılımınıza yönelik tehditleri bilmeden güvenli bir yazılım üretemezsiniz •Tehdit modellemesi yazılım geliştirmeden önce yapılmalıdır

Slide 13

Slide 13 text

Tehdit Modelleme • Modelleme Süreci • Sistemi Anlamak • Tehditleri Belirlemek • Risk Değerlendirme • Önlemler Geliştirme • Araçlar, • Microsoft Threat Modeling Tool • OWASP Threat Dragon

Slide 14

Slide 14 text

Tehdit Modelleme • Bir e-ticaret sitesinde: • Hassas Veri: Kullanıcıların kredi kartı bilgileri • Tehdit: Veri aktarımı sırasında dinleme (man-in-the-middle saldırısı) • Çözüm: TLS/SSL kullanarak veri aktarımını şifrelemek • Bu yöntem, yazılımın daha güvenli hale gelmesini sağlamak için proaktif bir yaklaşımdır.

Slide 15

Slide 15 text

Sık Karşılaşılan Güvenlik Açıkları

Slide 16

Slide 16 text

SQL Injection

Slide 17

Slide 17 text

SQL Injection

Slide 18

Slide 18 text

Cross-Site Scripting (XSS)

Slide 19

Slide 19 text

Directory Traversal

Slide 20

Slide 20 text

OWASP Top 10 https://owasp.org/www-project-top-ten/

Slide 21

Slide 21 text

Güvenlik Standartları ve En İyi Uygulamalar

Slide 22

Slide 22 text

ISO/IEC 27001 1.Bilgi Güvenliği Politikaları 2.Risk Yönetimi 3.Kontrol Listesi 4.Sürekli İyileştirme

Slide 23

Slide 23 text

Şifreleme (AES-256)

Slide 24

Slide 24 text

Şifreleme (bcrypt)

Slide 25

Slide 25 text

Şifreleme (Karşılaştırma) Özellik AES-256 bcrypt Tür Simetrik Şifreleme Hashing Algoritması Anahtar Şifreleme ve şifre çözme için aynı anahtar gerekir. Tek yönlü (geri dönüş yok) Amaç Veri şifreleme Parola koruma Kullanım Alanı Dosya şifreleme, veri aktarımı Parola hashleme, kimlik doğrulama

Slide 26

Slide 26 text

JSON Web Tokens (JWT)

Slide 27

Slide 27 text

Yazılım Çalışma Ortamı Güvenliği Uygulama Konteyneri (Application Container) Kullanımı

Slide 28

Slide 28 text

Yazılım Çalışma Ortamı Güvenliği Mikroservis Mimarisi ile Yazılımların Geliştirilmesi

Slide 29

Slide 29 text

Kod İnceleme ve Güvenlik Testleri

Slide 30

Slide 30 text

Statik Güvenlik Testleri (SAST)

Slide 31

Slide 31 text

Dinamik Güvenlik Testleri (DAST)

Slide 32

Slide 32 text

SAST vs DAST Özellik SAST (Statik) DAST (Dinamik) Test Edilen Alan Kaynak kod Çalışan uygulama Zamanlama Geliştirme aşamasında Çalışan yazılım üzerinde Yetenek Mantıksal hataları tespit eder Çalışma zamanındaki açıkları tespit eder Avantaj Erken tespit Çalışma ortamına uygun Dezavantaj Çalışma zamanındaki açıkları tespit edemez Geliştirme sırasında tespit yapamaz

Slide 33

Slide 33 text

Araçlar SAST • Sonarqube • Fortify SCA • Checkmarx • Veracode Static Analysis DAST • OWASP ZAP • Burp Suite • Netsparker

Slide 34

Slide 34 text

Penetrasyon Testleri • Metasploit • Nmap • Burp Suite • Wireshark • Aircrack-ng

Slide 35

Slide 35 text

Sonuç ve Öneriler

Slide 36

Slide 36 text

İhtiyaçlar • Güvenlik eğitimi ve farkındalık • Kod tarama ve test araçlarının entegrasyonu • Yazılımın güncel tutulması • Siber tehditlere karşı proaktif yaklaşımlar

Slide 37

Slide 37 text

Beklenmeyenleri beklemek Suçu gerçekleşmeden önlemek Kullanıcı gözüyle bakmak Keskin kenarları düşünmek

Slide 38

Slide 38 text

Kullanıcılara asla güvenme

Slide 39

Slide 39 text

Girdilerin Sınanması: Neden? • Güvenilmez kaynaklardan gelen tüm girdiler işleme tabi tutulmadan önce sınanmalıdır • Uygunsuz girdiler ile bir sürecin işleyişini değiştirmek mümkündür • Neye güvenilebileceği her uygulama ve her kuruluş için farklı olabilir • Kullanıcılardan, ağ üzerinden • Sistem üzerindeki diğer süreçlerden • Library den (.so, .dll vb.) • İşletim sisteminden • Uygulama içerisindeki diğer fonksiyonlardan gelen verilerin sınanması gerekli olabilir

Slide 40

Slide 40 text

Girdilerin Sınanması: Nasıl? • Geçerli olan girdiler tanımlanmalı ve bunun dışındaki veriler kabul edilmemelidir • Tersi yapılmamalıdır: Geçersiz verileri/sembolleri tanımlama ve diğerlerinin tümünü kabul etme • Veriler için maksimum uzunluk/büyüklük tanımlanmalı ve daha büyük girdi kabul edilmemelidir

Slide 41

Slide 41 text

Güvenli Yazılım Tasarımı Önerileri • Güvenlik gereksinimleri uygulama yaşam döngüsündeki her bir aşamada tam olarak tanımlanmalı ve sürekli bir biçimde analiz edilmelidir. • Gözden geçirme sürecinin bu döngüye eklenmesi gerekmektedir.

Slide 42

Slide 42 text

Güvenli Yazılım Tasarımı Önerileri • Uygulama veritabanında kişisel veri içeren birincil anahtar (kimlik no, e-posta adresi vb.) şifrelenerek saklanmalıdır. • Kişisel veriler üzerinde işlem yapılması ana amaç olmayan durumlarda uygulama kişisel verileri maskeleyerek görüntülemeli, aktarmalı veya işlemelidir. • Uygulamanın geliştirme, test ve eğitim ortamlarında kişisel veri olmamalı, anonimleştirilmiş veriler kullanılmalıdır. • Kişisel veri içeren uygulama veritabanı yedekleri şifreli olarak saklanmalıdır. • Uygulama, kişisel veriler için saklama sürelerini takip edebilmeli ve saklama süresi sona eren verilerin silinebilmesini / yok edilebilmesini sağlamalıdır.

Slide 43

Slide 43 text

Güvenli Yazılım Tasarımı Önerileri • Uygulamadaki bileşenler hata durumlarında varsayılan olarak güvenli durumlara geçmelidir • Uygulamaya yapılan tüm erişim istekleri hem istek hem de yanıt zamanında yetkilendirmeye tabi tutulmalıdır. • Geçersiz olmuş, potansiyel olarak tehlikeli işlevlerin bulunduğu kütüphane ve modüller tasarımda ve uygulamada yer almamalıdır.

Slide 44

Slide 44 text

Güvenli Yazılım Tasarımı Önerileri • Kimlik doğrulaması, özellikle herkese açık olan sayfa ve kaynaklar dışındaki tüm sayfa ve kaynaklara erişim için önkoşul olmalıdır. • Tüm parola alanlarında kullanıcı giriş yaparken kullanıcının parolası maskelenmeli ve açık olarak görünmemelidir. • Parola giriş alanları uzun ve karmaşık bir parola girilmesini engellememeli, deyimsel parola kullanımına izin vermeli ya da teşvik etmelidir. Örneğin, parolaların en az 15 karakter uzunluğunda girilebilmesine olanak tanıması, en az bir büyük, bir küçük harf, bir özel karakter ve bir sayı kullanılması, son 5 parolayla aynı parolanın kullanılmaması vb.

Slide 45

Slide 45 text

Güvenli Yazılım Tasarımı Önerileri • Kimlik bilgileri uygun şifreli bir bağlantı kullanılarak iletilmeli ve kimlik bilgilerinin girilmesi için kullanıcıya gereken tüm sayfalar / işlevler şifreli bir bağlantı kullanılarak yapılmalıdır. • Unutulan parola işlevi ve diğer kurtarma yolları geçerli parolayı açığa çıkarmamalı ve yeni parola kullanıcıya düz metin olarak gönderilmemelidir.

Slide 46

Slide 46 text

Güvenli Yazılım Tasarımı Önerileri • Değişen parola işlevselliği eski parolayı, yeni parolayı ve bir parola onayını kapsamalıdır. • Tüm şüpheli kimlik doğrulama kararları için özet veri içerecek şekilde log kaydı oluşturulmalıdır. • Hesaplara ilişkin parolaları korumak için yeterince güçlü kriptografik yöntemler (şifreleme, özet alma) kullanılmalı ve bu kriptografik yöntemlerin kaba kuvvet saldırılarına karşı güçlü olmalıdır.

Slide 47

Slide 47 text

Güvenli Yazılım Tasarımı Önerileri • Kaba kuvvet saldırıları ya da servis dışı bırakma saldırıları gibi otomatik yapılan yaygın kimlik doğrulama saldırılarını önlemek için istekler azaltılmalıdır. (rate limiting, throttling)

Slide 48

Slide 48 text

Güvenli Yazılım Tasarımı Önerileri • Oturum açma, parola sıfırlama ya da hesap unutma gibi işlevler sıralı denemelerle bilgi edinmeye olanak vermemelidir.

Slide 49

Slide 49 text

Güvenli Yazılım Tasarımı Önerileri • Hassas işlevler gerçekleştirilmeden önce, yeniden kimlik doğrulama, daha güçlü bir mekanizmayla kimlik doğrulama, ikinci faktör veya işlem imzalama gibi yöntemler uygulanmalıdır. • Uygulama kullanıcının son başarılı oturum açma tarih ve saatini görüntülemelidir. • Unutulan parola ve diğer kurtarma yolları kısa ileti, e-posta onayı, mobil onay, çevrimdışı onay vb. yöntemleri kullanmalıdır. • Hesaplar geçici veya kalıcı olarak kilitlenebilmelidir. Kalıcı olarak kilitlenen hesaplar eğer üzerindeki geçici kilit kaldırılsa da kilitli kalmalıdır.

Slide 50

Slide 50 text

Güvenli Yazılım Tasarımı Önerileri • Kaynak kodunda veya kaynak kodu depolarında gizli bilgiler, API anahtarları ve parolalar mevcut olmamalıdır. • Yazılım altyapısında ya da herhangi bir bileşen için kullanılan teknolojide üzerinde varsayılan parolalar yer almamalıdır

Slide 51

Slide 51 text

Güvenli Yazılım Tasarımı Önerileri • Parolalar için bir en uzun geçerlilik süresi tanımlanmış olmalıdır. • Örneğin Seviye 3 güvenlik için 30 gün, Seviye 1 ve 2 güvenlik için 60 gün

Slide 52

Slide 52 text

Güvenli Yazılım Tasarımı Önerileri • URL yeniden yönlendirmelerinin sadece bilinen "beyaz liste" adreslerine yapılması, bilinmeyen adreslere yönlendirme gerekiyorsa kullanıcının uyarılarak onayının alınması sağlanmalıdır. • Karşı alanlar arası kaynak paylaşımında (Cross- domain Resource Sharing, CORS) güvenilmeyen veri kullanılmamalıdır

Slide 53

Slide 53 text

Güvenli Yazılım Tasarımı Önerileri • Uygulama tarafından etkin ve aynı zamanlı oturumların sayısı sınırlandırılabilmelidir. • Oturum sonlandığında oturum ile ilgili tüm geçici depolama alanları ve çerezler uygulama tarafından silinmelidir. • Web uygulamalarında oturum çerezlerinde HTTPOnly bayrağı etkin olmalıdır. Ayırca "Secure" olarak yapılandırılmalıdır.

Slide 54

Slide 54 text

Güvenli Yazılım Tasarımı Önerileri • Log kayıtlarında olayların zaman sıralamasına ilişkin araştırma yapılabilecek şekilde zaman bilgisi yer almalıdır. • Log kayıtlarını okuyan araçlarda istenilmeyen bir işlemi yapacak kayıt üretilmemelidir. • Uygulama tarafından üretilen log kayıtları hassas bilgi içermemelidir.

Slide 55

Slide 55 text

Güvenli Yazılım Tasarımı Önerileri • Uygulama hassas bilgileri formlarda bulunan gizli alanlarda saklamamalıdır. • Uygulama Cross-Site Request Forgery (CSRF)'dan kaynaklanan açıklıklardan korunma mekanizmasına sahip olmalıdır.

Slide 56

Slide 56 text

Güvenli Yazılım Tasarımı Önerileri • Bütün veritabanı sorguları, parametre olarak yapılmalı ve veritabanına erişimde kullanılan dile karşı (SQL, NoSQL vb.) enjeksiyon saldırılarını önleyebilecek denetimler yapılmalıdır.

Slide 57

Slide 57 text

Güvenli Yazılım Tasarımı Önerileri • Uygulama, web servisi ile gönderilen veride betik (script) içermeyecek şekilde tasarlanmalıdır. • Uygulama, web servislerinden şifreli olarak paylaşılan verileri yine şifreli olarak saklayacak şekilde tasarlanmalıdır • Uygulama, kişisel verileri şifreli olarak saklamalı ve bu verilerin taşınmasında korumalı iletişim kanallarını kullanmalıdır

Slide 58

Slide 58 text

Teşekkürler [email protected] https://www.pirimoglu.com https://twitter.com/ahmetpirimoglu https://www.linkedin.com/in/ahmetpirimoglu

Slide 59

Slide 59 text

Kaynaklar • https://siberakademi.bilgem.tubitak.gov.tr/plu ginfile.php/6115/mod_page/content/26/SGE- KLV-GuvenliYazilimGelistirmeKilavuzu_R1.1.pdf • https://www.slideshare.net/slideshow/gvenli- yazlm-gelitirmepptx/257878175 • https://www.youtube.com/watch?v=uJ7Smpki cPk&t=2s • ChatGPT