Kara liste: "kötü olanı tanı" — bilinen zararlıyı listele, geri kalanına izin ver.
Beyaz liste: "iyi olanı tanı" — bilinen iyiyi listele, geri kalan her şeyden şüphelen.
Bütünlük izleme, beyaz listenin dosya düzeyindeki biçimidir.
Sistem iyiyken her dosyanın özeti bir manifeste yazılır, sonra düzenli karşılaştırılır.
CEN429 Güvenli Programlama · Hafta 2
Soru — hangi tür, hangi katman?
E-posta ekindeki "fatura.pdf.exe" açılınca çalışıp adres defterindeki herkese kendini yolluyor.
Soru: Bu hangi tür zararlı? İlk yakalayacak katman ne olurdu?
Cevap: Solucan/truva karışımı — kullanıcı açar (truva atı gibi başlar), sonra kendi kendine yayılır (solucan gibi). İlk yakalayacak katman: imza/desen (bilinen bir örnekse) ya da sezgisel (yeniyse).
CEN429 Güvenli Programlama · Hafta 2
Soru — tedarik zinciri saldırısı
Bir yazılımın resmî güncellemesine, derleme sırasında arka kapı ekleniyor (SUNBURST benzeri).
Soru: İmza tabanlı tespit ve izin listesi (whitelisting) bunu yakalar mı?
Cevap:Hayır, ikisi de başarısız olur. Dosya geçerli imzalıdır ve izin listesinde zaten vardır (güncelleme resmî kaynaktan geliyor). Tedarik zinciri saldırısının korkutucu yanı tam budur: güvendiğiniz kaynağın kendisi ele geçirilmiştir.
CHANGED library.bin 5ab02b71... -> 12c5803f... (48->62 B)
DELETED data.txt (in the manifest, not in the folder)
NEW hidden.bin (not in the baseline)
-- attacker rewrites the manifest --
RESULT: integrity preserved <- monitor FOOLED
SEAL INVALID -> DO NOT TRUST the manifest
✅ Özet değişikliği yakalar · ⚠️ beklenen değerler de korunmalı (HMAC/imza, anahtar ayrı yerde)
Tarif 12.2: CRC32 → SHA-256/HMAC · 6. haftada çalışma zamanı bütünlük denetimi
CEN429 Güvenli Programlama · Hafta 2
Değerlendirici: bütünlük denetimini nasıl kırar?
İki adımlı test:
Önce izlenen bir dosyayı değiştirir → tespit edildi mi?
Sonra beklenen değerleri (manifest, gömülü özet) de değiştirmeye çalışır.
İkinci test geçilemiyorsa denetim yalnız kazaya karşı korur, saldırgana karşı değil.
CEN429 Güvenli Programlama · Hafta 2
Sabit zamanlı karşılaştırma
İki özeti karşılaştırırken ilk farklı bayta kadar mı, yoksa hep aynı sürede mi bakılıyor?
Süre farkı, doğru baytların sayısını sızdırabilir (zamanlama yan kanalı).
Bütünlük ve HMAC karşılaştırmaları sabit zamanlı yapılmalı.
Demo 08'in HMAC mührü bu yüzden özel bir karşılaştırma kullanır.
CEN429 Güvenli Programlama · Hafta 2
Neden CRC32 yeterli değil?
CRC32 hata tespiti için tasarlandı, saldırgana karşı değil.
Aynı CRC32 değerini veren farklı içerik bulmak kolaydır (çakışma ucuz).
Saldırgan dosyayı değiştirip CRC'yi eski değere döndürebilir.
Bu yüzden bütünlük denetiminde kriptografik özet (SHA-256) ya da imza gerekir.
SQL çözümleme hizmeti, tek UDP paketi (CVE-2002-0649)
CWE-121
Blaster (2003)
RPC/DCOM taşması (CVE-2003-0352)
CWE-120
Conficker (2008)
Server hizmeti yol işleme (CVE-2008-4250) · zayıf parola
CWE-119 · 521
WannaCry (2017)
SMBv1 (CVE-2017-0144) · yama 2 ay önce çıkmıştı
bellek güvenliği
NotPetya (2017)
güncelleme sunucusu üzerinden dağıtım
CWE-494
SUNBURST (2020)
derleme ortamına arka kapı
tedarik zinciri
CEN429 Güvenli Programlama · Hafta 2
Olay incelemelerinin iskeleti — şema
CEN429 Güvenli Programlama · Hafta 2
Olaylardan programcıya dersler
Sınır denetimi: 1988–2008 salgınlarının çoğu tek bir arabellek taşması (1. ve 4. hafta)
Sürümde hata ayıklama kodu bırakma (Morris / sendmail DEBUG)
Gereksiz hizmeti açma: her port bir saldırı yüzeyi (Slammer, Blaster)
İmzalı güncelleme + istemcide doğrulama (NotPetya) — 3. ve 10. hafta
Derleme ortamı ve tedarik zinciri güvenliği (SUNBURST) — 5. hafta SBOM
Güncelleme mekanizması güvenlik özelliğidir: yama gecikmesi = açık kapı
CEN429 Güvenli Programlama · Hafta 2
Stuxnet (2010): devlet düzeyinde saldırı
Hedef: endüstriyel denetleyiciler (PLC) — bir uranyum zenginleştirme tesisi.
Giriş: bir kısayol (.lnk) dosyasının görüntülenmesiyle kod yükleme + dört sıfırıncı gün açığı.
Çalınmış sürücü imzaları kullanıldı — imzalı olduğu için güvenilir göründü.
Programcıya ders: görüntüleme sırasında kod çalıştırmayın; imza anahtarlarını donanımda (HSM) koruyun.
CEN429 Güvenli Programlama · Hafta 2
Eğilim: 1988–2008 vs 2017 sonrası
1988–2008: salgınların çoğu tek bir arabellek taşmasıyla yayıldı (Morris → Conficker).
2017 sonrası: giriş kapısı güncelleme ve derleme süreçlerine kaydı (NotPetya, SUNBURST).
Saldırgan artık kodu kırmak yerine, kodun size ulaştığı yolu ele geçiriyor.
İki savunma ucu: sınır denetimi (1., 4. hafta) + imzalı güncelleme/tedarik zinciri (3., 5., 10. hafta).
CEN429 Güvenli Programlama · Hafta 2
WannaCry: üç ders bir olayda
Konu
WannaCry'da ne oldu?
Bu haftaki bağlantı
Yayılma
SMB açığı (EternalBlue) ile kullanıcı hiçbir şey yapmadan solucan gibi yayıldı
Solucan tanımı, salgın modeli
Yük
Dosyaları şifreleyip fidye istedi
Entropi sıçraması (Demo 02)
Yama boşluğu
Yama saldırıdan haftalar önce çıkmıştı
Güncelleme = güvenlik özelliği
Tek bir olay, bu haftanın üç ana konusunu birleştiriyor.
CEN429 Güvenli Programlama · Hafta 2
Yama gecikmesi bir güvenlik açığıdır
WannaCry'ın açığının yaması, saldırıdan iki ay önce yayımlanmıştı.
Slammer'ınki de aylar önceden vardı.
Sonuç: güncelleme mekanizması güvenlik özelliğinin bir parçasıdır.
Güncellemesi zor/yavaş bir ürün, düzeltilmiş hataları bile aylarca açık tutar.
CEN429 Güvenli Programlama · Hafta 2
Tartışma: makrolar neden varsayılan kapalı?
Soru: Office, 2022'den beri internetten gelen belgelerdeki makroları varsayılan engelliyor. Bu, Melissa ve ILOVEYOU gibi eski salgınların hangi zayıflığını kapatıyor?
Cevap: Kullanıcının "makroları etkinleştir" tuzağına düşmesine dayanan yayılma yolunu kapatıyor. Varsayılan ayar, kullanıcı eğitiminden daha güçlüdür: eğitim her kullanıcıda işe yaramayabilir, ama güvenli varsayılan herkesi aynı anda korur.
CEN429 Güvenli Programlama · Hafta 2
Tedarik zinciri: SUNBURST'ten NotPetya'ya
NotPetya (2017): bir muhasebe yazılımının güncelleme sunucusu ele geçirildi, on binlerce makineye yayıldı.
SUNBURST (2020): bir izleme yazılımının derleme ortamına sızılıp imzalı kütüphaneye arka kapı eklendi.
Ortak nokta: saldırgan sizin güvendiğiniz kaynağı hedef alıyor, sizi değil.
Sınır denetimli okuma, hata ayıklama kodunu sürümde bırakmama
Code Red / Slammer / Blaster
Ağ girdisinin uzunluğunu doğrulama, gereksiz hizmeti kapatma
WannaCry
Ayrıştırıcıda sınır denetimi, eski protokolü kapatma, yamayı geciktirmeme
NotPetya
Güncellemeleri imzalama ve istemcide doğrulama
SUNBURST
Derleme ortamını koruma, tekrarlanabilir derleme
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "Her zararlı bir virüstür"
Yanılgı: Bulaşan her şeye "virüs" denir.
Gerçek: Virüs yalnız bir türdür — taşıyıcıya iliştirilir, taşıyıcı çalışınca çalışır. Solucan taşıyıcı gerektirmez; truva atı kendini kopyalamaz.
Türü yanlış koymak, yanlış savunmayı seçtirir: solucana karşı ağ yaması gerekirken truva atına karşı kullanıcı eğitimi gerekir.
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "İmza veritabanım güncel, güvendeyim"
Yanılgı: Güncel imza veritabanı yeterli korumadır.
Gerçek: İmza yalnız bilineni yakalar. Tek baytlık değişiklik özet imzasını, çözücüsü değişen polimorfik kopya desen imzasını atlatır (Demo 01).
İmza, savunmanın başlangıcıdır, bitmez.
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "Yüksek entropi = zararlı"
Yanılgı: Yüksek entropili her dosya şüphelidir.
Gerçek: Şifreli, sıkıştırılmış ve rastgele veri hep 8'e yakındır; .zip, .png, şifreli yedek de öyle.
Entropi yalnız beklenmedik yerde anlamlı bir ipucudur (Demo 02).
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: kum havuzu ve emülasyonun sınırı
"Kum havuzunda temiz çıktı, o hâlde temiz." Zararlı sanal ortamı sezip uyuyabilir; sonuç "bu koşullarda bir şey yapmadı" demektir, "zararsızdır" değil.
"Emülasyon metamorfik zararlıyı da çözer." Emülasyon şifreli gövdenin çözüldüğü anı yakalar; metamorfik kodda sabit bir gövde yoktur. Burada davranış tabanlı tespit gerekir.
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "%100 tespit eden ürün alırız"
Yanılgı: Doğru ürünü seçersek hiçbir zararlı kaçmaz.
Gerçek: Cohen'in (1984) kanıtladığı gibi, "bu program virüs mü?" sorusunu her durumda doğru yanıtlayan genel bir algoritma yoktur.
Her tespit yöntemi yanlış pozitif ile yanlış negatif arasında bir denge kurar.
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "Bütünlük izlemesini düz SHA-256 listesiyle yaptım"
Yanılgı: Bir dosya listesi + özetleri yeterli bütünlük denetimidir.
Gerçek: Saldırgan dosyayı değiştirdiği gibi listeyi de güncelleyebilir.
Beklenen değerler anahtarlı (HMAC) ya da imzalı olmalı ve saldırganın erişemeyeceği yerde durmalıdır (Demo 08).
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "Yama yayımlandı, iş bitti"
Yanılgı: Yama çıktığı an risk biter.
Gerçek: WannaCry'ın kullandığı açığın yaması saldırıdan yaklaşık iki ay önce çıkmıştı.
Yama uygulanana kadar risk sürer; yayımlanan yama saldırgana da yol gösterir.
CEN429 Güvenli Programlama · Hafta 2
Kontrol listesi — zararlı yazılım ve tespit
[ ] Virüs, solucan, truva atı, fidye, rootkit, bot, casus yazılım ve siliciyi yayılma ve amaç ile ayırabiliyorum.
[ ] Bir virüsün bulaştırıcı, tetikleyici, yük parçalarını bir senaryoda gösterebiliyorum.
En ucuz saldırı 2 → 8 birime çıktı; en zayıf nokta değişti.
Güvenlik yatırımını sayıyla gerekçelendirmenin yolu budur.
CEN429 Güvenli Programlama · Hafta 2
Saldırı ağacı: en ucuz yol (animasyon)
CEN429 Güvenli Programlama · Hafta 2
Saldırı ağacı — uç durum: kök tek bir yaprak
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "VE ile VEYA fark etmez"
Yanılgı: Saldırı ağacında düğüm türü önemli değil.
Gerçek:VEYA düğümünde en ucuz çocuk yeter; VE düğümünde çocukların toplamı gerekir.
Karıştırmak en ucuz yolu yanlış buldurur ve savunma parası yanlış dala gider.
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "En pahalı dalı güçlendirelim"
Yanılgı: Görünüşte en tehlikeli/karmaşık saldırı yolunu güçlendirmek en iyisidir.
Gerçek: Saldırgan her zaman en ucuz yolu seçer. Savunma köke giden en ucuz yolu pahalılaştırmıyorsa, en ucuz saldırının maliyeti hiç değişmez (Demo 04).
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "Önlem eklemek yeter"
Yanılgı: Ağaca bir savunma düğümü eklemek riski kapatır.
Gerçek: Her önlemin kendisi de atlatılabilir. Önlem düğümünün altına onu aşma yollarını (karşı-karşı önlem) yazmadan hesap iyimser çıkar.
CEN429 Güvenli Programlama · Hafta 2
Saldırı ağacı vs denetim kaydı: iki soru
Saldırı ağacı: "Saldırgan nereden gelir?" — önceden, planlama sorusu.
Her kayıttan sonra anahtar tek yönlü bir fonksiyonla değişir; eski anahtar silinir.
Saldırgan makineyi ele geçirdiğinde yalnız o anki anahtarı bulur.
O andan geriye, önceki kayıtları mühürleyen anahtarlara dönemez.
Sonuç: ele geçirmeden önceki kayıtlar korunur (Schneier–Kelsey, 1999).
CEN429 Güvenli Programlama · Hafta 2
Soru — sondan kesme yakalanır mı?
Demo 11'in ürettiği zincirden son üç satırı silin.
Soru: Doğrulayıcı bunu fark eder mi? Neden?
Cevap: Yalnızca zincirin son değeri ya da kayıt sayısı ayrıca (uzak bir sunucuda) tutuluyorsa fark eder. Zincirin kendisi yalnız dosyada tutulursa, sondan kesme iç tutarlılığı bozmaz — çünkü silinen kayıtlardan sonra gelen hiçbir kayıt yoktur ki tutarsızlık göstersin.
CEN429 Güvenli Programlama · Hafta 2
Kural (özet): denetim kaydı
Kullanıcı verisini kaçışlayarak ve sınırlayarak yazın.
Sırları (parola, anahtar) asla yazmayın.
Günlüğü anahtarlı bir zincirle mühürleyin; anahtarı her kayıtta evriltin.
Doğrulama anahtarını günlüğün bulunduğu makinede tutmayın.
Mümkünse kayıtları anında ayrı bir sunucuya gönderin.
CEN429 Güvenli Programlama · Hafta 2
Sahada nasıl uygulanır? — mobil günlük
Mobil uygulamalarda cihaz üzerindeki günlük en az tutulur, hassas alan içermez.
Güvenlik olayları (bütünlük hatası, hata ayıklayıcı algılama) sunucuya raporlanır.
Bu, 6. haftada göreceğimiz RASP önlemlerinin "raporlama" ayağıdır.
Cihazdaki günlük saldırganın elindedir; asıl kanıt uzaktaki kopyadır.
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "Denetim kaydına her şeyi yazalım"
Yanılgı: Daha çok bilgi, daha iyi kanıt demektir.
Gerçek: Parola, PIN, anahtar ve tam kart numarası kayda asla girmez (CWE-532).
Kayıt, olayı yeniden kurmaya yetecek kadar bilgi taşır: kim, ne, ne zaman, nerede, sonuç.
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "Kullanıcı adını olduğu gibi yazdım"
Yanılgı: Kullanıcıdan gelen alan doğrudan günlüğe yazılabilir.
Gerçek: İçinde satır sonu olan bir girdi sahte kayıt satırı üretir (CWE-117, Demo 10).
Denetim karakterleri kaçışlanmalı ya da yapılandırılmış (alan alan) kayıt kullanılmalıdır.
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "Kayıt sonuna özet ekledim, kurcalama anlaşılır"
Yanılgı: Dosyanın sonuna bir özet eklemek yeterli korumadır.
Gerçek: Anahtarsız özeti saldırgan yeniden hesaplar.
HMAC zinciri araya ekleme/değiştirmeyi yakalar; sondan kesmeyi yakalamak için son zincir değeri ayrıca (uzak sunucuda) tutulmalıdır (Demo 11).
CEN429 Güvenli Programlama · Hafta 2
Kontrol listesi — saldırı ağacı ve denetim kaydı
[ ] Bir saldırı ağacını VE/VEYA kurallarıyla aşağıdan yukarı çözüp en ucuz yolu bulabiliyorum.
[ ] Bir savunmanın en ucuz yolu nasıl değiştirdiğini sayıyla gösterebiliyorum (Demo 04).
[ ] Bir denetim kaydı satırında olması ve olmaması gerekenleri sayabiliyorum.
[ ] Günlük enjeksiyonunun (CWE-117) nasıl önlendiğini açıklayabiliyorum.
UNSAFE (lstat first, then fopen):
>>> ATTACK SUCCEEDED: write redirected to secret_target.txt!
SAFE (O_NOFOLLOW, one step):
rejected: the target is a symbolic link
Denetim ile kullanım arasındaki boşluk bir yarıştır. Çözüm: tek atomik adım (O_NOFOLLOW, O_EXCL), fd üzerinden çalış.
CEN429 Güvenli Programlama · Hafta 2
TOCTOU yarışı: denetim ile kullanım arasındaki pencere (animasyon)
ASSIGN carl TELLER SSD(TELLER,APPROVER) -> DENY
SESSION dana TELLER,AUDITOR DSD(TELLER,AUDITOR) -> DENY
SESSION dana AUDITOR -> OK
dana IVP: expected 20250, found 20250
SSD: çelişen iki role atanamaz · DSD: aynı oturumda ikisi etkin olamaz
CDI'ya yalnız sertifikalı TP dokunur; büyük havale → ikinci kişi onayı
Uzaktan + kimliksiz en yüksek; kapsam değişince 10.0.
⚠️ Temel puan bağlamı bilmez: 4.0'lık açık tam sizin varlığınızı vuruyorsa sizin için 9.8'den önemli olabilir.
CEN429 Güvenli Programlama · Hafta 2
CVSS v3.1 taban puan hesabı (animasyon)
CEN429 Güvenli Programlama · Hafta 2
CVSS — uç durum: hiç etki yok
CEN429 Güvenli Programlama · Hafta 2
CVSS puanı → ciddiyet bandı
Puan
Bant
0.0
Yok
0.1–3.9
Düşük
4.0–6.9
Orta
7.0–8.9
Yüksek
9.0–10.0
Kritik
Aynı etki (C:H/I:H/A:H) olsa bile uzaktan + kimliksiz açık, yerel + yetkili açıktan daha yüksek bant alır.
CEN429 Güvenli Programlama · Hafta 2
CVSS v4.0 kısaca
2023'te geldi; v3.1'in bazı zayıflıklarını giderir.
Temel puan artık CVSS-B olarak anılır.
Kapsam (S) metriği kaldırıldı; yerine ayrı Zafiyet Etkisi (VC/VI/VA) ve Sonraki Sistem Etkisi (SC/SI/SA).
Sömürü olgunluğu (E) ve tehdit/çevre metrikleriyle CVSS-BTE hesaplanabiliyor.
Bu derste hesap makinesi v3.1 için yazıldı; sahada hâlâ en yaygın odur.
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "v3.1 vektörünü v4.0'a girerim"
Yanılgı: CVSS v3.1 vektörü, v4.0 hesap makinesinde de doğrudan çalışır.
Gerçek: v4.0'da Kapsam (S) yoktur; AT, VC/VI/VA, SC/SI/SA metrikleri vardır ve UI üç değer alır (N/P/A).
Vektörler birbirine çevrilmez, yeniden kurulur.
CEN429 Güvenli Programlama · Hafta 2
CVSS'in sık yapılan hatası
Yanılgı: "CVSS 9.8, hemen yamalayalım; 4.0, beklesin."
Temel puan bağlamı bilmez: açığın kendi özelliklerini ölçer.
4.0'lık bir açık, tam sizin en değerli varlığınızın kapısıysa sizin için 9.8'den önemli olabilir.
Bunun için Çevresel metrikler ve varlık tablonuz (S5) vardır.
Puan önceliklendirmeye başlangıçtır, son söz değildir.
CEN429 Güvenli Programlama · Hafta 2
Değerlendirici: bulgudan puana
Bir bulguyu tekrarlanabilir biçimde derecelendirmenin somut soruları:
Saldırgan bunu ağdan mı, yoksa yalnız cihaz elindeyken mi kullanabiliyor (AV)?
Önceden bir yetki ya da kullanıcı etkileşimi gerekiyor mu (PR, UI)?
Etki açığın olduğu bileşende mi kalıyor, dışına mı taşıyor (S)?
Bu dersin bağlamında (program saldırganın cihazında) çoğu bulgu yerel (AV:L) çıkar; puan düşse de risk düşmez.
CEN429 Güvenli Programlama · Hafta 2
CVSS'in ötesi: EPSS
EPSS (Exploit Prediction Scoring System): bir açığın 30 gün içinde istismar edilme olasılığı (0–1 arası).
CVSS ciddiyeti ölçer, EPSS olasılığı ölçer — ikisi farklı sorulara cevap verir.
"EPSS yüksek, o hâlde CVSS de yüksektir" yanlıştır; ikisi birbirinden bağımsız ölçülür.
İkisi birlikte okunduğunda öncelik sırası netleşir.
CEN429 Güvenli Programlama · Hafta 2
CVSS'in ötesi: KEV
KEV (Known Exploited Vulnerabilities): kanıtlanmış biçimde istismar edilen açıkların kataloğu.
Her kayıt: CVE kimliği, istismar kanıtı, açık düzeltme yönergesi.
"KEV'de yoksa istismar edilmiyordur" yanlıştır — listede olmamak güvenlik kanıtı değildir.
KEV'deki bir açık, düşük CVSS puanı alsa bile öncelikli ele alınmalıdır.
CEN429 Güvenli Programlama · Hafta 2
SSVC: karar noktaları
Bir bulguyu karara çeviren beş soru:
İstismar var mı? · Otomatikleştirilebilir mi?
Teknik etki nedir? · Görev ne kadar yaygın etkilenir?
Kamu esenliği nasıl etkilenir?
Sonuç dört karardan biri: Track / Track* / Attend / Act
CEN429 Güvenli Programlama · Hafta 2
Örnek: beş bulgu, iki sıralama
No
Bulgu
Sistem
EPSS
KEV
B1
Ayrıştırıcıda uzunluk denetimi yok, uzaktan kod çalıştırma
İnternete açık
0,62
Evet
B5
Sürücüde yerel yetki yükseltme
Çalışan bilgisayarları
0,41
Evet
B4
Çerezde Secure bayrağı yok
İnternete açık
0,08
Hayır
Yalnız CVSS'e göre sıralama ile EPSS+KEV eklenmiş sıralama farklı çıkabilir; B5, CVSS'te ortalarda kalsa da KEV'de olduğu için öne çıkar.
CEN429 Güvenli Programlama · Hafta 2
Yanılgı: "Cihazdaki açıklar düşük puan alıyor, önemsiz"
Yanılgı:AV:L (yerel erişim) çıkan bir açık, düşük puanlıysa göz ardı edilebilir.
Gerçek: Bu dersin saldırgan modelinde cihaz zaten saldırganın elindedir (beyaz kutu).
Puan düşse bile risk azalmaz; puanın yanına saldırı potansiyeli (süre, uzmanlık, ekipman) de yazılmalıdır.
CEN429 Güvenli Programlama · Hafta 2
Pratik: vektörü siz kurun
Soru: Bir saldırgan ağdan, kimlik doğrulamadan, kullanıcı etkileşimi olmadan bir sistemi tamamen ele geçiriyor (gizlilik, bütünlük, erişilebilirlik hepsi tam bozuluyor). CVSS v3.1 vektörü ve puanı nedir?
Cevap:AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H → 9.8 (Kritik). Kapsam da değişseydi (S:C) puan 10.0'a çıkardı.
CEN429 Güvenli Programlama · Hafta 2
Zafiyet yaşam döngüsü
Zero-day: satıcının bilmediği/yamasının olmadığı açık.
Sorumlu ifşa: önce satıcıya bildir, ~90 gün bekle, sonra açıkla.
Yama boşluğu: yama çıkınca açık kamuya açılır; güncellemeyen savunmasız (WannaCry).
CEN429 Güvenli Programlama · Hafta 2
Yaşam döngüsü: dört aşama
Keşif: açık bulunur (araştırmacı, saldırgan ya da satıcı).
Bildirim: araştırmacı satıcıya bildirir (ya da saldırgan sessizce kullanır).
Her ok arasında geçen süre, saldırgana verilen zaman penceresidir.
CEN429 Güvenli Programlama · Hafta 2
Açığın yaşam çizgisi — şema
CEN429 Güvenli Programlama · Hafta 2
Sorumlu ifşa vs tam ifşa
Sorumlu ifşa (coordinated)
Tam ifşa (full)
Kim önce bilir?
Satıcı
Herkes aynı anda
Bekleme
~90 gün (yama için)
Yok
Amaç
Kullanıcıyı korurken satıcıyı harekete geçirmek
Satıcıyı zorlamak
Risk
Düşük (yama varken açıklanır)
Yüksek (yama yokken açık bilinir)
Sektörde tartışmalı olan tam ifşadır.
CEN429 Güvenli Programlama · Hafta 2
Hata ödül programları (bug bounty)
Şirketlerin, açığı sorumlu biçimde bildiren araştırmacılara ödül verdiği programlar.
Amaç: araştırmacıyı tam ifşa yerine sorumlu ifşaya yönlendirmek.
Araştırmacı için kazanç; şirket için erken uyarı.
Büyük teknoloji şirketlerinin çoğunda artık standart bir uygulamadır.
CEN429 Güvenli Programlama · Hafta 2
Sahada süreç: bir açık bildirilirse ne olur?
Bir ürün ekibi için yaşam döngüsü bir süreçtir:
Bildirim kanalı:security.txt, güvenlik e-postası.
Bir sorumlu kişi/ekip.
Yama SLA'sı: ne kadar sürede düzeltilecek?
Sürüm/yama duyuru mekanizması.
Bir değerlendirme yalnız kodu değil, bu süreci de sorar.
CEN429 Güvenli Programlama · Hafta 2
Tam ifşa neden tartışmalı?
Soru: Tam ifşa (full disclosure) neden riskli kabul edilir?
Cevap: Açık, yama yokken herkese duyurulur. Satıcıyı harekete geçirmeye zorlar, ama aynı zamanda saldırganlara da hazır bir yol haritası verir — kullanıcılar savunmasızken.
CEN429 Güvenli Programlama · Hafta 2
Kontrol listesi — zafiyet sınıflandırma
[ ] CWE'nin soyutlama düzeylerini (pillar, class, base, variant) ve "en somut girdi" kuralını biliyorum.
[ ] CWE, CVE ve CVSS'i birer cümleyle ayırabiliyorum.
[ ] Bir bulguya CVSS v3.1 vektörü kurup puanı elle hesaplayabiliyorum.
[ ] EPSS, KEV ve CVSS'in farklı sorulara cevap verdiğini açıklayabiliyorum.
[ ] Zafiyet yaşam döngüsünü, sıfırıncı gün, yama boşluğu ve sorumlu ifşayı anlatabiliyorum.
CEN429 Güvenli Programlama · Hafta 2
Dönem projesi: bu hafta (S4)
[ ] S4 saldırı/tehdit tablonuzdaki her satıra bir CWE ekleyin.
[ ] En kritik varlığa bir saldırı ağacı (Demo 04 biçimi); en ucuz yol + en etkili önlem.
Kod okuma turnuvası: dört koda CWE, saldırı ve düzeltme yaz
Olay otopsisi: Heartbleed/WannaCry/Log4Shell için CVE-CWE-CVSS-tarih doldur
CEN429 Güvenli Programlama · Hafta 2
Kendini sınama (seçme)
Virüs, solucan, truva atı farkı?
Polimorfizm ≠ metamorfizm: fark?
Yüksek entropi zararlıyı kanıtlar mı?
BLP iki kuralı ve neyi korur?
Biba, BLP'den nasıl ayrılır?
DAC ile MAC farkı?
CWE ile CVE farkı?
CVSS Temel puan neyi ölçmez?
CEN429 Güvenli Programlama · Hafta 2
Kendini sınama — cevaplar (1–4)
Virüs başka programa bulaşır; solucan kendi başına ağdan kopyalar; truva atı faydalı görünüp gizli zararlı taşır.
Polimorfik her kopyada kendini farklı şifreler; metamorfik kodunu yeniden yazar.
Hayır. Yüksek entropi bir ipucudur (şifreli/paketli); tek başına zararlıyı kanıtlamaz (meşru sıkıştırma da yüksek entropili).
BLP: yukarı okuma yok + aşağı yazma yok → gizliliği korur.
CEN429 Güvenli Programlama · Hafta 2
Kendini sınama — cevaplar (5–8)
Biba BLP'nin tersidir: aşağı okuma yok + yukarı yazma yok → bütünlüğü korur.
DAC izinleri sahibi belirler (esnek, sızıntıya açık); MAC sistemin zorunlu etiketli kuralları (katı).
CWE zayıflık türü (ör. CWE-416); CVE belirli bir üründeki somut açık.
CVSS Temel puan olabilirliği/etkiyi ölçer ama istismarın sahada gerçekleşme olasılığını (tehdit/ortam) tek başına ölçmez.
CEN429 Güvenli Programlama · Hafta 2
Kendini sınama (devam)
İmza ve sezgisel tespitin güçlü/zayıf yanı?
Günlük enjeksiyonu (CWE-117) nasıl önlenir?
Sorumlu ifşa nedir?
CEN429 Güvenli Programlama · Hafta 2
Kendini sınama — cevaplar (9–11)
İmza hızlı ama yeniyi kaçırır; sezgisel yeniyi bulur ama yanlış alarm üretir.
Günlüğe yazılan kullanıcı verisindeki satır sonu/kontrol karakterlerini temizle/kaçır; yapılandırılmış
günlük kullan.
Açığı önce üreticiye bildirip yama için süre tanımak, sonra kamuya açıklamak.
CEN429 Güvenli Programlama · Hafta 2
Sözlük
Terim
Anlam
Polimorfik
Her kopyada farklı şifreli
İmza/sezgisel
Bilinen iz / şüpheli davranış
Entropi
Rastgelelik ölçüsü
DAC/MAC/RBAC
Erişim denetim modelleri
BLP/Biba
Gizlilik / bütünlük modeli
CWE/CVE/CVSS
Tür / somut açık / puan
CEN429 Güvenli Programlama · Hafta 2
Sözlük (devam)
Terim
Anlam
EPSS
Açığın 30 gün içinde istismar edilme olasılığı
KEV
Kanıtlanmış istismar edilen açıklar kataloğu
SSVC
İstismar/etki/yaygınlık ile Track–Act kararı
Sorumlu / tam ifşa
Önce satıcıya bildirme / hemen kamuya açma
Kimlik doğrulama / yetkilendirme
"Sen kimsin?" / "Bunu yapabilir misin?"
Güvenli varsayılan
Politika belirsizse cevap ret (fail-closed)
CEN429 Güvenli Programlama · Hafta 2
Bir sonraki hafta
3. hafta — Veri Güvenliği: Aktarımda, Beklemede, Kullanımda
Bu hafta zararlı yazılımı tespit ederken kullandığımız entropi ölçütünü, gelecek hafta kriptografik rastgele
sayı üretecinin (CSPRNG) girdisindeki düzensizliği değerlendirmek için yeniden kullanacağız. 3. haftada
şifreleme temellerini, TLS 1.3 ve sertifika sabitlemeyi, AES-GCM ile yerel şifrelemeyi ve güvenli silmeyi
işleyeceğiz (Kaynak: Viega & Messier, Tarif 9.1–9.3, 10.7–10.9, 4.9–4.11, 13.2).
Bu haftanın özeti: tehdidi sınıflandır, erişimi modelle, açığı kataloglarla (CWE/CVE) izle ve
ciddiyetini (CVSS) ölç. Bu çerçeve, sonraki haftalardaki teknik korumaların zeminidir.
Bu hafta CWE ve CVSS ile önceliklendirdiğimiz zafiyet dili, 12. haftada sızma testi planlamasının girdisi
olarak yeniden karşımıza çıkacak.
Konuşma notu: Geçen hafta güvenliğin dilini kurduk (varlık, tehdit, STRIDE, saldırı ağacı). Bu hafta üç sütunu dolduruyoruz: tehdit (zararlı yazılım), savunma (güvenlik modelleri), ortak dil (CWE/CVE/CVSS). Altı demo var; laboratuvarı WSL veya Visual Studio'da açık tutun.
Konuşma notu: Demoları önceden bir kez derleyin (code/ içinde build.ps1 ya da build.sh). Derste bekleme olmasın diye ilk üç demoyu açık bırakın.
Konuşma notu: Öğrencilere sorun: "Telefonunuza bulaşan bir şey duyduğunuzda ona ne dersiniz?" Çoğu "virüs" der. Bu haftadan sonra doğru terimi kullanacaklar.
Konuşma notu: Tarihleri doğru verin. WannaCry, yama çıktıktan SONRA güncellememiş makinelere yayıldı; bu "yama boşluğu"na dersin sonunda döneceğiz.
Konuşma notu: "Makroları etkinleştir" uyarısı hâlâ bir saldırı yoludur. Öğrencilere hiç tanımadıkları bir belgede makro etkinleştirmemelerini söyleyin.
Konuşma notu: Önce formülü sözle anlatın: her enfekte makine rastgele adres tarar, duyarlıya denk gelirse bulaştırır. Sonra Code Red ve Slammer sayılarını verin.
Konuşma notu: Önce harfleri tahtaya yazın: S, I, N. Sonra "her enfekte makine ne yapar?" diye sorun; cevap bu slaytta.
Konuşma notu: beta değerini yarıya indirip yeniden çalıştırın; doygunluk süresinin nasıl uzadığını gösterin. Asıl nokta: ilk bulaşmayı mümkün kılan tek bir taşma hatası.
Konuşma notu: SI fark denklemini her adımda hesaplayın; büyümenin %50 dolayında en hızlı olduğunu, sonra kalan hedef azaldıkça yavaşladığını gösterin.
Konuşma notu: Saldırgan açılış evresini bir hitlist ile atlarsa doygunluğa çok daha hızlı ulaşılır; savunmacının fırsat penceresi neredeyse hiç yok.
Konuşma notu: poly_1 ve poly_2 aynı algoritma (xs32) farklı tohum; poly_3 farklı algoritma (lcg8) + cop komut. Desen imzasi ALGO=xs32'yi ariyordu, poly_3'te yok.
Konuşma notu: Hash'in tek baytta nasıl atlatıldığını, desenin çözücüyü nasıl yakaladığını, emülasyonun neden hepsini yakaladığını sırayla gösterin.
Konuşma notu: Desen eşleştirme son olası konumda da doğru çalışmalı; sınır (off-by-one) hataları burada ortaya çıkar.
Konuşma notu: Histogramın her pencerede nasıl biriktiğini, H = -Σ p(b) log2 p(b) formülünün adım adım nasıl hesaplandığını gösterin.
Konuşma notu: Son pencerenin boyutu diğerlerinden farklı olduğunda hesaplamanın hâlâ doğru çalıştığını gösterin.
Konuşma notu: Dar kural kaçırır, geniş kural yanlış alarm verir. Kural yalnız bilineni yakalar; bu yüzden sezgisel ve davranış tabanlı yöntemlerle birlikte kullanılır.
Konuşma notu: expr() -> and_expr() -> not_expr() -> primary(), her önceliğe bir gramer seviyesi. and/or'un HER ZAMAN iki tarafı da değerlendirdiğini vurgulayın -- kısa devre yok.
Konuşma notu: "$a and"ın sağ tarafı yok -- ayrıştırıcı bunu tespit edip -1 (CONDITION ERROR) döndürür, asla çökmez ya da sessizce eşleşmez.
Konuşma notu: Tripwire, AppLocker/WDAC ve kod imzalama denetimleri hep bu fikre dayanır.
Konuşma notu: Değerlendirici önce dosyayı, sonra beklenen değeri değiştirir. İkinci test geçilemiyorsa denetim yalnız kazaya karşı korur.
Konuşma notu: Tabloyu zararlının ne yaptığıyla değil, içeri nasıl girdiğiyle okuyun. 1988-2008 çoğunlukla tek bir taşma; 2017 sonrası güncelleme ve derleme süreçleri.
Konuşma notu: Tartışma sorusu: Office'in 2022'den beri internetten gelen belgelerde makroları varsayılan engellemesi hangi eski salgınların kapısını kapattı?
Konuşma notu: VE dugumleri saldirgani birden cok katmani birlikte kirmaya zorlar; derinlemesine savunmanin niceliksel hali.
Konuşma notu: Her VE/VEYA düğümünün maliyetinin aşağıdan yukarı nasıl hesaplandığını gösterin; en ucuz dalı bulun.
Konuşma notu: Dallanma olmayan en basit ağaçta bile hesaplamanın doğru çalıştığını gösterin.
Konuşma notu: Kullanıcı adına gömülü tek bir satır sonu, hiç yaşanmamış bir yönetici girişini günlüğe yazdırdı. Biçim dizgesi tuzağını 4. haftaya köprü olarak anın.
Konuşma notu: Kaçışlama döngüsünün her baytı nasıl işlediğini, satır sonunun neden tek satır olarak kaldığını gösterin.
Konuşma notu: Ekranı silen ESC dizisinin de aynı kaçışlama ile zararsız hale geldiğini gösterin.
Konuşma notu: Schneier–Kelsey 1999. Doğrulayıcı başlangıç anahtarını çevrimdışı tutar. En güçlü kanıt, saldırganın ulaşamadığı uzak kopyadır.
Konuşma notu: Her kaydın özetinin bir öncekinin özetini nasıl içerdiğini gösterin; bir kaydın mesajını değiştirmenin yalnız o kaydın kendi kontrolünü nasıl bozduğunu vurgulayın — sonraki kayıtlar kendi değişmemiş saklanan özetlerine karşı yine doğrulanır.
Konuşma notu: Aynı saldırı, statik anahtarla neden yakalanmadan geçtiğini gösterin — ileriye güvenliğin (forward security) neden önemli olduğunu buraya bağlayın.
Konuşma notu: Askeri kokenli (1973). "Asagi yazma yok" ilk bakista tuhaf gelir; amac cok gizli bilgiyi memurun gorebilecegi bir yere yazmayi engellemek.
Konuşma notu: dominates() fonksiyonunun BLP ve Biba için aynı karşılaştırmayı ters yönde kullandığını gösterin.
Konuşma notu: İki taraf da aynı seviyedeyse hem BLP hem Biba'nın neden her zaman izin verdiğini gösterin.
Konuşma notu: Saldırganın sembolik bağı tam olarak lstat() ile fopen() arasında nasıl değiştirdiğini zaman çizelgesinde gösterin.
Konuşma notu: Saldırgan olmadığında SAFE sürümün normal şekilde çalıştığını, ekstra maliyet getirmediğini gösterin.
Konuşma notu: 1a ve 1b'de ACE'ler aynı, yalnız sıra farklı. Son adımda icacls ile demonun kendi dosyasının gerçek ACL'ini gösterin.
Konuşma notu: Her ACE'nin belirteçteki SID'lerle nasıl karşılaştırıldığını, ilk eşleşen DENY'nin listeyi neden hemen durdurduğunu gösterin.
Konuşma notu: Kurallı sırada DENY'nin listenin başında olmasının neden en güvenli düzen olduğunu gösterin.
Konuşma notu: Benzetimdir; gerçek setuid dosyası oluşturulmaz, sudo gerekmez. Sistemdeki setuid programlar yalnız listelenir.
Konuşma notu: root/owner/group/other sınıfının nasıl seçildiğini, istenen & ~umask bit işlemini adım adım gösterin.
Konuşma notu: umask 000 ile açılan bir dosyanın neden herkese yazılabilir hale geldiğini gösterin.
Konuşma notu: E1-E4 kapılarını sırayla gösterin: rol var mı, TP sertifikalı mı, oturum açık mı, CDI yalnız TP ile mi değişiyor.
Konuşma notu: E3 kimlik doğrulama kapısının, rol/TP kapılarından önce geldiğini ve isteği en baştan durdurduğunu gösterin.
Konuşma notu: Sahada karşılığı: dört göz ilkesi, bölünmüş bilgi ve çift denetim, günlük mutabakat.
Konuşma notu: Impact ve Exploitability alt puanlarının sekiz metrikten nasıl hesaplandığını, kapsam değişince formülün nasıl değiştiğini gösterin.
Konuşma notu: C/I/A hepsi None ise Impact alt puanının 0 çıktığını ve taban puanın da 0.0 olduğunu gösterin.
Konuşma notu: Grupları 3-4 kişi yapın; süre notu için ders notundaki etkinlik kutularına bakın.
Konuşma notu: önce sordur, sonra iki cevap slaytını aç.