Bölüm 13: Güvenlik
Giriş
Öğrenme Çıktıları
Gizlilik, bütünlük ve erişilebilirlik hedeflerini; saldırı türlerini ve saldırgan profillerini ayırt etmek.
Simetrik ve asimetrik şifrelemeyi, özet fonksiyonlarını, dijital imzayı, sertifikaları ve TLS el sıkışmasını açıklamak.
Erişim matrisini ACL ve yetenek biçiminde okumak; en az ayrıcalığı, setuid ve Linux yeteneklerini uygulamak.
Bell-LaPadula ve Biba kurallarını uygulamak; gizli kanalların neden kapatılamadığını açıklamak.
Tuzlu yavaş parola özetlerini, MFA, TOTP ve FIDO2 geçiş anahtarlarını karşılaştırmak.
Bellek güvenliği hatalarını, TOCTOU’yu ve kötü amaçlı yazılımları; kanarya, NX, ASLR, CFI, kum havuzu ve güvenli önyüklemeyi tanımak.
Giriş
Güvenlik Hedefleri: CIA Üçlüsü
Eski sunumdaki “privacy” ve “accessibility” terimleri hatalıydı: doğru karşılıklar confidentiality (gizlilik) ve availability (erişilebilirlik/kullanılabilirlik). Bunlara sık eklenenler: özgünlük (authenticity) ve hesap verebilirlik (inkâr edilemezlik, denetim kaydı).
Giriş
Tehditler ve İhlal Kategorileri
| Kategori | Tanım | Örnek |
|---|---|---|
| Gizlilik ihlali | Verinin izinsiz okunması | Kredi kartı veritabanının sızdırılması |
| Bütünlük ihlali | Verinin izinsiz değiştirilmesi | Not sisteminde kayıt tahrifatı |
| Erişilebilirlik ihlali | Verinin/hizmetin yok edilmesi | Fidye yazılımının diski şifrelemesi |
| Hizmet hırsızlığı | Kaynakların izinsiz kullanımı | Ele geçirilen sunucuda kripto para kazma |
| Hizmet reddi (DoS/DDoS) | Meşru kullanımın engellenmesi | Botnet ile SYN seli |
| Kimlik değiştirme | Başkası gibi davranma (masquerading) | Oltalama ile çalınan parola |
| Ayrıcalık yükseltme | Hak edilenden fazla yetki kazanma | setuid programdaki hatadan root olma |
Giriş · Adım adım
Ağ Saldırıları: Dinleme, Tekrar, Ortadaki Adam
Alice ile Bob arasında normal iletişim. Kanal şifresiz ve kimlik doğrulamasızsa aşağıdaki saldırıların hepsi mümkündür.
Dinleme (eavesdropping): pasif saldırgan trafiği kopyalar → gizlilik ihlali. Çözüm: şifreleme (TLS).
Tekrar saldırısı (replay): şifreli ve imzalı mesaj bile yeniden gönderilebilir. Çözüm: tek kullanımlık sayı (nonce), zaman damgası, sıra numarası.
Ortadaki adam (MITM): saldırgan iki tarafa da karşı taraf gibi görünür. Çözüm: karşı tarafın kimliğini sertifika ile doğrulamak.
Oturum kaçırma (session hijacking): kimlik doğrulama sonrası verilen oturum belirteci çalınır. Çözüm: yalnız HTTPS, Secure/HttpOnly çerez, kısa ömür.
Giriş
Saldırganlar ve Kazayla Veri Kaybı
Teknik bilgisi az; başkasının e-postasına, dosyasına “bakmak”. Etik dışı, çoğu zaman yasa dışı.
Yetkisini kötüye kullanır: veri sızdırma, sabotaj, mantık bombası. En zor fark edilen grup.
Kâr amaçlı: fidye yazılımı, kimlik ve kart hırsızlığı, kiralık botnet. Bugün en yaygın tehdit.
Askerî ve ticari casusluk, kritik altyapı sabotajı; sıfırıncı gün açıkları ve tedarik zinciri saldırıları.
| Kazayla veri kaybı | Örnek | Önlem |
|---|---|---|
| Doğal olaylar | yangın, sel, deprem (ve bantları kemiren fareler) | coğrafi olarak ayrı yedek |
| Donanım/yazılım hatası | disk arızası, CPU hatası, yazılım hatası | RAID, sağlama toplamı, sürüm |
| İnsan hatası | yanlış komut, yanlış diski biçimleme, kayıp cihaz | 3-2-1 yedekleme, şifreli disk |
Kazayla kayıp, saldırılardan daha sık veri kaybettirir. 3-2-1: 3 kopya, 2 farklı ortam, 1 kopya başka yerde ve tercihen değiştirilemez (immutable) — fidye yazılımına karşı da işe yarar.
Giriş
Derinlemesine Savunma ve İyi Uygulamalar
- Yama: güvenlik güncellemelerini hızla uygula (çoğu saldırı bilinen açıkları kullanır).
- Güçlü kimlik doğrulama ve en az ayrıcalıkla erişim denetimi; günlük kaydı ve izleme.
- Düzenli sızma testi; kullanıcıların oltalamaya karşı eğitimi; sıfır güven (zero trust): ağın içi de güvenilir sayılmaz.
Giriş
Güvenilir Bilgi İşleme Tabanı (TCB)
Referans izleyici üç koşulu sağlamalı: her erişimde çağrılır (atlanamaz), kurcalanamaz, doğrulanabilecek kadar küçüktür. TCB ne kadar büyükse hata olasılığı o kadar yüksektir: mikroçekirdek ve seL4 gibi biçimsel doğrulanmış çekirdekler bu yüzden ilgi görür.
Kriptografi · Adım adım
Şifrelemenin Temelleri ve Gizli Anahtarlı Şifreleme
Simetrik (gizli anahtarlı) şifreleme: aynı K ile şifrele ve çöz. Kerckhoffs ilkesi: algoritma açık olabilir, güvenlik yalnızca anahtarın gizliliğine dayanmalı.
Tek alfabeli yerine koyma: her harf sabit bir harfe eşlenir; anahtar bu 26 harflik permütasyondur (26! ≈ 4×1026 olası anahtar).
M → D: tabloda M’nin altındaki harf D.
E → T
R → K
H → I
Sonuç: MERHABA → DTKIQWQ. Üç A da Q oldu: harf sıklıkları korunur.
Anahtar uzayı büyük olsa da sıklık analizi (Türkçede A, E, İ en sık) birkaç satırlık metinle şifreyi kırar. Bugün: AES-256-GCM, ChaCha20-Poly1305 (şifreleme + bütünlük birlikte).
Kriptografi
Açık Anahtarlı Şifreleme
| Simetrik | Asimetrik (açık anahtarlı) | |
|---|---|---|
| Anahtar | Tek, paylaşılan | Açık + özel çift |
| Hız | Çok hızlı (AES-NI) | 100–1000 kat yavaş |
| Kullanım | Toplu veri | Anahtar değişimi, imza |
| Örnek | AES, ChaCha20 | RSA, ECDH/X25519, Ed25519, ML-KEM |
Eski sunumdaki “11×11 kolay, √121 zor” benzetmesi yanlıştı (karekök de kolaydır). Doğru fikir tek yönlü tuzak kapılı fonksiyon: iki büyük asalı çarpmak kolay, çarpımı çarpanlarına ayırmak (RSA) ya da ayrık logaritma (ECC) zor. Kuantuma dayanıklı ML-KEM 2024’te standartlaştı (FIPS 203).
Kriptografi · Adım adım
Özet Fonksiyonları ve Dijital İmza
Gönderici D belgesini değiştirilmeden ve kendisinden geldiği kanıtlanarak iletmek istiyor (gizlilik şart değil).
Özet fonksiyonu (SHA-256, SHA-3) her boydaki girdiden sabit 256 bitlik özet üretir: tek yönlü, çakışmaya dayanıklı; tek bit değişince özetin yarısı değişir. MD5 ve SHA-1 kırıktır.
Özet gönderenin özel anahtarıyla imzalanır (RSA-PSS, ECDSA, Ed25519). Bu adımı yalnız Priv_A sahibi yapabilir.
Belge, imza ve göndericinin açık anahtarını taşıyan sertifika birlikte gönderilir.
Alıcı özeti kendisi hesaplar ve imzayı Pub_A ile doğrular: eşleşirse belge bozulmamış ve Alice’ten gelmiştir (inkâr edilemez).
Yolda tek bayt değişirse (D′) özet tutmaz ve doğrulama başarısız olur. Saldırgan yeni geçerli imza üretemez, çünkü Priv_A onda yok.
Eski sunum “belge sıkıştırılarak hash hesaplanır, hash belgeyle gönderilir” diyordu: özet sıkıştırma değildir ve imzasız özet hiçbir şey kanıtlamaz (saldırgan belgeyle birlikte özeti de değiştirir).
Kriptografi
Sertifikalar ve Açık Anahtar Altyapısı (PKI)
Sertifika (X.509) = açık anahtar + kimlik (alan adı) + geçerlilik süresi + CA imzası. Açık anahtarın gerçekten o kişiye ait olduğu sorununu çözer. Let’s Encrypt (ACME) sayesinde sertifikalar ücretsiz ve 90 günlük; ömürlerin kademeli olarak 47 güne inmesi kararlaştırıldı.
Kriptografi · Adım adım
TLS 1.3 El Sıkışması (Basitleştirilmiş)
İstemci desteklediği algoritmaları ve geçici (ephemeral) Diffie-Hellman açık değerini ilk mesajda gönderir.
Sunucu birini seçer ve kendi DH açık değerini gönderir. Şimdiye kadarki her şey açıktır.
Her iki taraf da karşı tarafın açık değeri ile kendi gizli değerinden aynı ortak sırrı hesaplar; sır ağda hiç dolaşmaz.
Sunucu sertifikasını gönderir ve el sıkışmanın özetini özel anahtarıyla imzalar (CertificateVerify): MITM bu imzayı üretemez.
İstemci zinciri ve imzayı doğrular, Finished ile el sıkışmanın değiştirilmediğini onaylar. Yalnız 1 gidiş-dönüş (1-RTT).
Uygulama verisi simetrik, kimlik doğrulamalı şifreleme ile akar. Geçici anahtarlar sayesinde ileriye dönük gizlilik: özel anahtar sonradan çalınsa bile eski trafik çözülemez.
Koruma
Koruma Etki Alanları
- Etki alanı (domain): (nesne, haklar) çiftlerinden oluşan küme. Süreç her an bir etki alanında çalışır.
- UNIX/Linux: etki alanı = (UID, GID kümesi); ayrıca çekirdek ve kullanıcı kipi iki ayrı etki alanıdır.
- Etki alanı değiştirme:
setuidprogram çalıştırma, sistem çağrısıyla çekirdeğe geçiş.
Koruma
Koruma Matrisi
| Dosya1 | Dosya2 | Dosya3 | Dosya4 | Dosya5 | Yazıcı1 | D1 | D2 | D3 | |
|---|---|---|---|---|---|---|---|---|---|
| D1 | R | RW | Gir | ||||||
| D2 | R | RWX | RW | W | |||||
| D3 | W |
- Satır = etki alanı, sütun = nesne, hücre = haklar. Etki alanları da nesne olabilir: D1 → D2 hücresindeki Gir (enter), D1’deki sürecin D2’ye geçebileceğini söyler.
- Matris çok seyrek: binlerce kullanıcı × milyonlarca dosya. Tümü saklanmaz; ya sütunlar (ACL) ya satırlar (yetenekler) saklanır.
- Yetkili ve yetkisiz durum: matrisin her durumu güvenlik politikasıyla karşılaştırılır. Örneğin politikaya göre Eve’in bir dosyayı okuyamaması gerekirken bir komut dizisinden sonra hücrede R belirirse sistem yetkisiz duruma geçmiştir.
- Harrison-Ruzzo-Ullman (HRU, 1976): genel durumda “bir hak sızabilir mi?” sorusu karar verilemez; bu yüzden kısıtlı modeller (BLP, Biba) kullanılır.
Koruma · Adım adım
Aynı Matris İki Biçimde: ACL ve Yetenekler
“Koruma Etki Alanları” slaytındaki üç etki alanı ve sekiz nesne: aynı koruma matrisi.
Erişim kontrol listesi (ACL): matrisin bir sütunu; nesnenin yanında saklanır. Yazıcı1’in ACL’si: D2 yazabilir, D3 yazabilir.
Her nesnenin boş olmayan girdileri birer ACL olur. Erişimde çekirdek, nesnenin ACL’sinde sürecin kimliğini arar.
Yetenek listesi (capability, C-list): matrisin bir satırı; etki alanına (sürece) aittir. D2’nin yetenekleri: Dosya3:R, Dosya4:RWX, Dosya5:RW, Yazıcı1:W.
Karşılaştırma: ACL’de “bu nesneye kim erişebilir?” ve geri alma kolaydır; yetenekte devretme ve hızlı denetim kolaydır ama tüm kopyaları geri almak zordur.
Koruma
Erişim Kontrol Listeleri Uygulamada
$ ls -l rapor.txt -rw-r----- 1 ali muhasebe 4096 rapor.txt rw- sahip r-- grup --- diğer $ setfacl -m u:ayse:rw rapor.txt $ getfacl rapor.txt user::rw- user:ayse:rw- group::r-- mask::rw- other::---
| Grup | A | B | C | D |
|---|---|---|---|---|
| Grup 1 | R | RWX | — | — |
| Grup 2 | W | — | — | — |
| Grup 3 | — | — | X | R |
| Grup 4 | — | — | — | — |
| Yönetici | RWX | RWX | RWX | RWX |
- Artı: anlaşılır, nesne başına geri alma kolay.
- Eksi: büyük sistemlerde yönetim zor; her erişimde liste taraması (önbellekle hafifletilir).
- POSIX ACL, NFSv4 ACL ve NTFS ACL (izin/ret girdileri, kalıtım) birbirine tam eşlenmez.
Koruma
Yetenek Listeleri
Aynı nesne için yeni yetenek (devretme).
Yeni nesne ve ona ait yeni yetenek.
Listeden girdi silinir; nesne yerinde kalır.
Nesne ve yetenek kalıcı olarak silinir.
Yetenekler sahte üretilemez olmalı: ya çekirdekte tutulur (indeksle erişilir), ya etiketli donanımla korunur (CHERI), ya da şifreli imzalanır. Gündelik örnekler: UNIX dosya tanımlayıcıları (açıldıktan sonra yeniden izin denetimi yok), FreeBSD Capsicum, seL4, Fuchsia.
Koruma · Kodu adım adım çalıştır
En Az Ayrıcalık ve setuid
/* /usr/bin/passwd -rwsr-xr-x root */ int main(void) { uid_t me = getuid(); int fd = open("/etc/shadow", O_RDWR); update_own_entry(fd, me); close(fd); setresuid(me, me, me); /* ... kalan iş ... */ open("/etc/shadow", O_RDWR); }
Ali (uid 1000) passwd çalıştırır. Dosyanın sahibi root ve setuid biti (s) açık.
execve sırasında etkin kimlik dosya sahibine döner: euid = 0. Gerçek kimlik (ruid) hâlâ Ali.
getuid() gerçek kimliği döndürür: program kimin adına çalıştığını bilir ve yalnız onun satırını değiştirir.
Çekirdek erişimi etkin kimliğe göre denetler: euid 0, dosya açılır.
İş biter bitmez setresuid ile gerçek, etkin ve saklı kimliğin üçü de 1000 yapılır: en az ayrıcalık, geri dönüş yok.
Programın geri kalanında bir hata istismar edilse bile saldırgan artık root değildir. setuid root programlar, ayrıcalık yükseltme saldırılarının klasik hedefidir.
Koruma
Linux Yetenekleri ve Tasarım İlkeleri
$ sudo setcap cap_net_bind_service=+ep /usr/local/bin/websrv
$ getcap /usr/local/bin/websrv
/usr/local/bin/websrv cap_net_bind_service=ep # 80. kapıyı açabilir, başka hiçbir root hakkı yok- En az ayrıcalık (Saltzer & Schroeder, 1975): her bileşen işini yapmaya yetecek en küçük hak kümesiyle çalışmalı; ele geçirilirse zarar sınırlı kalır.
- Diğer ilkeler: güvenli varsayılan (açıkça izin verilmeyen yasak), tam aracılık (her erişim denetlenir), açık tasarım, ayrıcalıkların ayrılması, psikolojik kabul edilebilirlik.
- Uygulama: ayrıcalık ayrımı (OpenSSH: küçük root süreç + ayrıcalıksız çocuk),
systemdCapabilityBoundingSet=,NoNewPrivileges=.
Biçimsel Modeller · Adım adım
Bell-LaPadula: Yukarı Okuma Yok, Aşağı Yazma Yok
Askerî gizlilik düzeyleri; her süreç ve nesne bir düzeye sahip. Amaç: bilginin aşağı sızmaması (gizlilik).
Basit güvenlik özelliği: k düzeyindeki süreç yalnız ≤ k düzeyindeki nesneleri okuyabilir. Aşağı okuma serbest.
Yukarı okuma yok (no read up): Gizli yetkili süreç Çok Gizli belgeyi okuyamaz.
* özelliği: k düzeyindeki süreç yalnız ≥ k düzeyine yazabilir. Yukarı yazmak gizliliği bozmaz (genelde “kör” ekleme).
Aşağı yazma yok (no write down): aksi hâlde Gizli bilgi Hizmete Özel bir dosyaya kopyalanarak sızardı.
Kazanç: kullanıcının çalıştırdığı bir Truva atı bile bilgiyi aşağı aktaramaz, çünkü kural kullanıcının iyi niyetine değil sisteme bağlıdır (zorunlu erişim denetimi, MAC).
Biçimsel Modeller · Adım adım
Biba: Aşağı Okuma Yok, Yukarı Yazma Yok
Biba (1977) BLP’nin bütünlük için aynasıdır: düzeyler güvenilirliği gösterir. Amaç: güvenilmeyen verinin yukarı bulaşmaması.
Basit bütünlük özelliği: k düzeyindeki süreç yalnız ≤ k düzeyine yazabilir.
Yukarı yazma yok: kullanıcı süreci sistem dosyalarını değiştiremez.
Bütünlük * özelliği: süreç yalnız ≥ k düzeyinden okuyabilir; güvenilir veriyi okumak serbest.
Aşağı okuma yok: İnternetten gelen güvenilmeyen veriyi okuyup ona göre davranan süreç “kirlenirdi”.
Gerçek örnek: Windows zorunlu bütünlük denetimi (MIC). Tarayıcı ve korumalı kip süreçleri Düşük düzeyde çalışır, Orta düzeydeki belgelere yazamaz (yukarı yazma yok).
Biçimsel Modeller
Bell-LaPadula ve Biba Karşılaştırması
| Bell-LaPadula (1973) | Biba (1977) | |
|---|---|---|
| Korur | Gizlilik | Bütünlük |
| Okuma | Aşağı serbest, yukarı yok | Yukarı serbest, aşağı yok |
| Yazma | Yukarı serbest, aşağı yok | Aşağı serbest, yukarı yok |
| Engellenen | Bilginin aşağı sızması | Kirli verinin yukarı bulaşması |
| Bugün | SELinux MLS, askerî sistemler | Windows MIC, FreeBSD/Linux bütünlük politikaları |
- İki model birlikte kullanılırsa süreç neredeyse yalnızca kendi düzeyiyle konuşabilir: biri gizliliği, öteki bütünlüğü korur ve çatışırlar.
- Eski sunum her iki model için de “okuma yok ve yazma yok ilkesi” diyordu; doğrusu BLP için yukarı okuma yok, aşağı yazma yok, Biba için aşağı okuma yok, yukarı yazma yok.
- Her iki model de gizli kanalları engellemez: kurallar yalnız açık okuma/yazma işlemlerini denetler.
Biçimsel Modeller
Gizli Kanallar ve Steganografi
Paylaşılan bir durumun değişmesi: dosya var/yok, kilitli/açık, disk doluluğu.
Olayların zamanlaması: CPU’yu yoğun kullanma = 1, boşta kalma = 0; önbellek gecikmesi.
Paylaşılan kaynağın kullanımı: sayfa hatası oranı, ağ trafiği hacmi.
Gizli kanal: tasarımcının iletişim için öngörmediği, güvenlik politikasını atlayan bilgi yolu. Lampson’ın hapsetme problemi (1973): hepsini kapatmak pratikte imkânsızdır, ancak bant genişliği düşürülebilir. Steganografi: üç zebralı fotoğrafın piksellerinin son bitlerine bir metin (ör. Shakespeare oyunları) gizlenebilir; görüntü gözle değişmez.
Biçimsel Modeller · Adım adım
Dosya Kilidi ile Gizli Kanal
Sunucu ve işbirlikçi önceden anlaşır: her saat aralığında F dosyası kilitliyse 1, serbestse 0. Ortada ne okuma ne yazma var; F’nin içeriği hiç değişmez.
Sunucu t1’de F’yi kilitler; işbirlikçi kilitlemeyi dener, başarısız olur → 1.
Aynı yöntemle ilk dört bit: 1 0 1 1.
Sekiz aralıkta bir bayt: 10110010 (0xB2). Saniyede 100 aralıkla ≈ 100 bit/s; bir parola ya da anahtar birkaç saniyede sızar.
Önlemler: kilit durumunu başkasına göstermemek, gürültü ve gecikme eklemek, kaynakları düzeylere ayırmak. Bant genişliği azalır ama sıfırlanmaz.
Kimlik Doğrulama
Kimlik Doğrulama Etkenleri
Parola, PIN, güvenlik sorusu. Ucuz ama çalınabilir, tahmin edilebilir, yeniden kullanılır.
Telefon, akıllı kart, FIDO2 anahtarı, TOTP üreteci. Çalınabilir ama uzaktan kopyalanamaz.
Parmak izi, yüz, iris. Kolay ama değiştirilemez; sızarsa kalıcı olarak yanar.
Konum, IP, yazım ritmi, cihaz parmak izi. Genelde ek risk sinyali olarak kullanılır.
Soru-yanıt (challenge-response) doğrulamada kullanıcıya önceden kayıtlı sorular sorulur; ama “annenizin kızlık soyadı”, “ilk evcil hayvanınız” gibi yanıtlar sosyal medyadan bulunabildiği için bugün zayıf kabul edilir.
Kimlik Doğrulama · Kodu adım adım çalıştır
Parola Saklama: Tuz ve Yavaş Özet
# Kayıt / parola değiştirme salt = os.urandom(16) h = argon2(password, salt) store(user, salt, h) # Giriş denemesi salt, h = lookup(user) g = argon2(attempt, salt) if constant_eq(g, h): ok()
Parolalar asla açık saklanmaz. Üç kullanıcıdan ikisi aynı parolayı seçmiş (insanlar bunu sık yapar).
Düz (tuzsuz) özet yeterli değil: aynı parola aynı özeti verir; saldırgan tekrarları görür ve gökkuşağı tablosu ile hepsini birden kırar.
Tuz (salt): her kullanıcı için rastgele, gizli olmayan bir değer parolaya eklenir. Aynı parola artık farklı girdi; önceden hesaplama işe yaramaz.
Yavaş, bellek-yoğun özet: Argon2id (ya da scrypt, bcrypt). Tek doğrulama milisaniyeler; milyarlarca denemeyse yıllar sürer. Doğrulamada sabit zamanlı karşılaştırma zamanlama sızıntısını önler.
Asla düz SHA-256/MD5 kullanmayın: bunlar hızlıdır, tam da parola için istenmeyen şey. 1970’lerin UNIX’i 2 karakterlik tuz + yavaşlatılmış DES (crypt) kullanırdı; fikir aynı, parametreler bugün çok daha güçlü. Sızıntı olursa yine de parolalar sıfırlanmalı.
Kimlik Doğrulama
MFA ve Zaman Tabanlı Tek Kullanımlık Parola (TOTP)
Yaygın ama zayıf: SIM takası ve SS7 saldırılarıyla ele geçirilebilir. Hiç yoktan iyidir.
RFC 6238; çevrimdışı çalışır. Oltalamaya açıktır: kullanıcı sahte siteye kodu girebilir.
Kolay; ama “onay yorgunluğu” saldırısına açık. Numara eşleştirme ekler.
Kimlik Doğrulama
FIDO2, WebAuthn ve Geçiş Anahtarları
- FIDO2/WebAuthn ve geçiş anahtarları (passkeys): her site için bir açık/özel anahtar çifti. Özel anahtar cihazdan (TPM, Secure Enclave, güvenlik anahtarı) hiç çıkmaz.
- Sunucu yalnız açık anahtarı saklar: sızsa bile işe yaramaz. Paylaşılan sır yok, yeniden kullanılacak parola yok.
- İmza sayfanın origin’ine bağlıdır → oltalamaya dayanıklı. Geçiş anahtarları platformlar arası senkronlanabilir; parolanın yerini almak üzere tasarlandı.
Kimlik Doğrulama
Biyometrik Kimlik Doğrulama
| Ölçüt | Açıklama |
|---|---|
| Yanlış kabul (FAR) | Yabancıyı kabul etme oranı — güvenlik riski |
| Yanlış ret (FRR) | Gerçek kullanıcıyı reddetme oranı — kullanılabilirlik sorunu |
| Canlılık testi | Fotoğraf, maske, parmak kalıbına karşı (liveness) |
| İptal edilemezlik | Parmak izi sızarsa değiştirilemez; parola değiştirilebilir |
- Biyometri bir kimlik (identity) için iyidir, sır (secret) için kötüdür: yüzünüz ve parmak iziniz gizli değildir.
- Doğru kullanım: cihazda yerel olarak, güvenli donanıma erişimi açan etken (Face ID → Secure Enclave). Ham şablon cihazdan çıkmamalı.
- Tek başına uzaktan kimlik doğrulama için uygun değildir; genelde “sahip olduğun şey” ile birleştirilir.
Eski sunumdaki “parmak uzunluğu ölçen cihaz” tarihsel bir örnektir; bugünkü sistemler parmak izi çizgilerinin ayrıntı noktalarını (minutiae), 3B yüz ve iris deseni kullanır ve donanım destekli canlılık testi şarttır.
Kimlik Doğrulama
Saldırganlar Sisteme Nasıl Girer?
| Yol | Açıklama | Önlem |
|---|---|---|
| Oltalama (phishing) | Sahte giriş sayfasıyla parola toplama | FIDO2, kullanıcı eğitimi |
| Kimlik bilgisi doldurma | Sızan parolaları başka sitede deneme | Benzersiz parola, MFA |
| Kaba kuvvet / sözlük | Zayıf parolayı tahmin | Yavaş özet, hız sınırı, kilitleme |
| Yama yapılmamış açık | Bilinen zafiyeti kullanma | Hızlı yama yönetimi |
| Sosyal mühendislik | Yardım masasını kandırma | Süreç ve doğrulama |
| Varsayılan/zayıf kimlik | admin/admin, açık port | Sağlamlaştırma (hardening) |
Yazılım Açıkları · Kodu adım adım çalıştır
Yığın Tampon Taşması: Çerçeve Adım Adım
/* küçük, kasıtlı olarak hatalı örnek */ void A(char *in) { char buffer[8]; strcpy(buffer, in); // sınır denetimi YOK return; } A(argv[1]); // in: kullanıcı girdisi
Her fonksiyon çağrısı yığında bir çerçeve açar: yerel değişkenler, kayıtlı çerçeve işaretçisi ve dönüş adresi (fonksiyon bitince CPU’nun gideceği yer).
Girdi tampona sığdığı sürece sorun yok: strcpy sonlandırıcı \0 dahil en çok sekiz baytı buffer’a yazar.
Taşma: strcpy uzunluğu denetlemediği için fazla baytlar komşu hücrelere, en tehlikelisi dönüş adresinin üzerine taşar.
Fonksiyon return ettiğinde CPU bozulmuş adrese atlar. Saldırgan bunu seçebilirse yürütme akışını ele geçirir. Bu yüzden asla güvenilmeyen girdi sınır denetimi olmadan kopyalanmaz.
Yazılım Açıkları
Tampon Taşmasına Karşı Savunmalar
Dönüş adresinden önce rastgele bir değer; dönüşten önce bozulduysa program durdurulur (SSP).
Veri sayfaları yürütülemez işaretlenir; yığına enjekte edilen kod çalışamaz.
Yığın, öbek ve kütüphaneler rastgele adreslere; saldırgan hedef adresi bilemez. PIE ile birlikte.
Denetim akışı bütünlüğü: dolaylı atlamalar yalnız geçerli hedeflere izin verir.
Donanım destekli: dönüş adresinin ikinci, korumalı bir kopyası tutulur (Intel CET, ARM PAC/BTI).
Rust, Go, Java, C#: sınır ve ömür denetimi derleyici/çalışma zamanında. En köklü çözüm.
system() ya da küçük “gadget” dizileri) dönüş adreslerini zincirleyerek çalıştırır. CFI, gölge yığın ve ASLR bu saldırıları zorlaştırmak için birlikte kullanılır — tek bir savunma yeterli değildir.Yazılım Açıkları
Diğer Bellek ve Enjeksiyon Hataları
| Açık | Neden tehlikeli | Önlem |
|---|---|---|
| Biçim dizgisi | printf(user) — %n/%x ile belleği okur/yazar | printf("%s", user) |
| Tamsayı taşması | len = a + b sarması küçük ayırmaya yol açar | Denetimli aritmetik, boyut tipleri |
| Serbest sonrası kullanım | Serbest bırakılan belleğe erişim (UAF) | Sahiplik (Rust), smart pointer, karantina |
| Çifte serbest bırakma | Aynı blok iki kez free; öbek bozulur | free sonrası NULL; güçlendirilmiş ayırıcı |
| Sınır dışı okuma | Heartbleed gibi bellek sızıntısı | Sınır denetimi, fuzzing |
| Komut/SQL enjeksiyonu | Girdi koda/sorguya karışır | Parametreli sorgu, kaçış, allowlist |
Ortak kök neden: veri ile kodun/denetimin karışması ve güvenilmeyen girdinin denetimsiz kullanımı. Savunma: girdiyi doğrula, veriyi koddan ayır, bellek-güvenli diller ve fuzzing ile hataları erken yakala.
Yazılım Açıkları · Kodu adım adım çalıştır
TOCTOU Yarış Koşulu
/* TOCTOU: setuid root yardımcı */ if (access(path, W_OK) == 0) { // KONTROL fd = open(path, O_WRONLY); // KULLANIM write(fd, data, n); }
Program önce access() ile “ali bu dosyaya yazabilir mi?” diye kontrol eder: /tmp/f sıradan, izinli bir dosya. Sonuç olumlu.
Kontrol ile kullanım arasında küçük bir zaman penceresi var. Program tam burada CPU’yu bırakırsa...
Saldırgan /tmp/f’yi silip yerine /etc/passwd’e sembolik bağ koyar. Dosya adı aynı, hedef değişti.
open() artık adı değil yeni hedefi açar: root yetkisiyle /etc/passwd. Kontrol zamanı ≠ kullanım zamanı (TOCTOU).
Çözüm: adı iki kez çözme. Bir kez aç (open + O_NOFOLLOW), sonra aynı tanımlayıcı üzerinde fstat/faccessat ile denetle; ya da openat ve ayrıcalık düşürme kullan.
İçeriden Saldırılar
İçeriden Saldırılar: Mantık Bombası, Arka Kapı
Belirli koşulda (tarih, işten çıkarma) tetiklenen zararlı kod. Çoğu kez hoşnutsuz çalışan koyar.
Kimlik doğrulamayı atlayan gizli giriş. Tedarik zincirine de sokulabilir.
Sahte oturum açma ekranı kullanıcı adı/parolayı toplar, sonra gerçek ekrana devreder.
Giriş sahtekârlığına (login spoofing) karşı güvenli dikkat dizisi (secure attention key): Windows’ta Ctrl+Alt+Del yalnız gerçek çekirdek giriş ekranını çağırır; hiçbir kullanıcı programı onu taklit edemez. Arka kapılara karşı: kod incelemesi, en az iki kişi onayı, yeniden üretilebilir derleme (reproducible builds).
Kötü Amaçlı Yazılım
Kötü Amaçlı Yazılım Türleri
| Tür | Yayılma | Amaç / Davranış |
|---|---|---|
| Virüs | Başka programa kendini ekler; kullanıcı çalıştırınca bulaşır | Dosyaları bozar, yayılır |
| Solucan (worm) | Ağ üzerinden kendi kendine; kullanıcı gerekmez | Hızlı yayılır, kaynak tüketir |
| Truva atı | Yararlı görünen programın içinde | Arka kapı açar, veri çalar |
| Fidye yazılımı | Oltalama, açık, RDP | Dosyaları şifreler, fidye ister |
| Rootkit | Ayrıcalık kazandıktan sonra kurulur | Varlığını ve diğer zararlıları gizler |
| Casus yazılım | Truva atı, paket yazılım, sahte eklenti | Veri toplar, uzağa gönderir |
| Bot / botnet | Solucan + arka kapı | Uzaktan komutla DDoS, spam, kazım |
Sınırlar bulanıktır: modern zararlı genelde birkaç türü birleştirir (ör. solucan gibi yayılan, rootkit ile gizlenen, fidye yazılımı taşıyan bir bot). Casus yazılım tarayıcı ana sayfasını/arama motorunu değiştirebilir, araç çubuğu ekleyebilir ve durdurulamayan reklam akışı üretebilir.
Kötü Amaçlı Yazılım · Adım adım
Parazitik Virüsler
Temiz çalıştırılabilir dosya: baştan sona asıl program kodu.
Başta yerleşik virüs: virüs kodu başa eklenir, giriş noktası virüse çevrilir.
Sonda yerleşik virüs: virüs sona eklenir, başa ona atlayan bir komut konur (en yaygın).
Boşluklara yayılmış (cavity) virüs: programdaki kullanılmayan boşluklara dağılır; dosya boyutu değişmez, tespiti zorlaşır.
Diğer türler: eşlik eden virüs (aynı adlı .exe’den önce çalışan bir .com dosyası), bellekte yerleşik, önyükleme sektörü, aygıt sürücüsü, makro (belge içi) ve kaynak kodu virüsleri. Çoğu bugün tarihseldir; modern zararlı betik, bellek-içi (fileless) ve tedarik zinciri yollarını kullanır.
Kötü Amaçlı Yazılım · Adım adım
Fidye Yazılımı
İlk erişim genelde oltalama eki, açık bir hizmet ya da çalınan RDP kimliğiyle olur.
Zararlı çalışır ve ağda yanal hareket ederek olabildiğince çok makineye ulaşır.
Kurtarmayı engellemek için gölge kopyaları ve yedekleri siler (bu yüzden çevrimdışı/değiştirilemez yedek şart).
Dosyalar güçlü simetrik şifreyle kilitlenir; anahtar saldırganın sunucusuna gönderilir.
Fidye notu görüntülenir. Ödeme anahtarı garanti etmez ve yeni saldırıları teşvik eder. Savunma: 3-2-1 yedek, yama, MFA, segmentasyon, EDR.
Kötü Amaçlı Yazılım
Rootkit ve Gizlenme
Rootkit varlığını gizler: dosyaları, süreçleri, ağ bağlantılarını işletim sisteminden saklar. Ne kadar derin yerleşirse o kadar güçlü ama kurması da zordur. Çekirdek ve altı için savunma: imzalı sürücüler, güvenli önyükleme, ölçülü önyükleme (TPM) ve dışarıdan (çevrimdışı) tarama.
Kötü Amaçlı Yazılım · Adım adım
Antivirüs ve Kaçırma Teknikleri
Temiz program referans alınır.
İmza tarama: bilinen virüslerin bayt dizileri (imza) aranır. Hızlı ama yalnız bilineni yakalar.
Virüs kendini sıkıştırırsa imza görünmez; tarayıcı dosyayı açıp içini taramak zorundadır.
Şifreli virüs: gövde şifreli, yalnız küçük çözücü açıkta; tarayıcı çözücünün imzasını arar.
Çok şekilli virüs: çözücü de her kopyada değişir. İmza yetmez → sezgisel/davranışsal analiz, kum havuzunda çalıştırıp gözlemleme gerekir.
Bilinen desenler; hızlı, düşük yanlış alarm, yeniyi kaçırır.
Dosya özetlerini saklar, değişimi fark eder.
Şüpheli eylemleri (şifreleme, enjeksiyon) izler.
Şüpheliyi yalıtılmış ortamda çalıştırıp gözler.
Savunma ve Yalıtım · Adım adım
Kod İmzalama
Yayıncı programın özetini hesaplar (dijital imzanın aynısı, bu kez koda uygulanır).
Özet yayıncının özel anahtarıyla imzalanır; imza programla birlikte dağıtılır.
Kullanıcı programı ve imzayı alır; yayıncının sertifikası açık anahtarını taşır.
İşletim sistemi özeti yeniden hesaplar ve imzayı açık anahtarla doğrular; eşleşirse program değiştirilmemiş ve o yayıncıdandır.
App Store’lar, sürücü imzalama, apt/dnf paket imzaları ve platform “yalnız imzalı kod” ilkeleri bu temele dayanır.
Savunma ve Yalıtım
Kum Havuzu ve Hapsetme
Kum havuzu (sandboxing): güvenilmeyen kodu kısıtlı bir ortamda çalıştırıp verebileceği zararı sınırlar. Tarayıcı sekmeleri, mobil uygulamalar ve sunucu servisleri bugün kum havuzunda koşar. Linux’ta temel taşlar: seccomp, ad alanları (namespaces), cgroups ve zorunlu erişim denetimi.
Savunma ve Yalıtım
Konteynerler ve Yalıtım
| Konteyner | Sanal makine | |
|---|---|---|
| Yalıtım | Çekirdek özellikleri | Donanım + hipervizör |
| Ek yük | Düşük, saniyede başlar | Yüksek, ayrı çekirdek |
| Saldırı yüzeyi | Çekirdek açığı = kaçış riski | Daha güçlü sınır |
Savunma ve Yalıtım
Zorunlu Erişim Denetimi: SELinux ve AppArmor
Sahibin verdiği izinler (rwx, ACL). Kullanıcı kendi dosyasının iznini değiştirebilir; zararlı da değiştirebilir.
Politikayı sistem/yönetici belirler; süreç kendi kısıtını gevşetemez. BLP/Biba, SELinux, AppArmor.
Her özne ve nesneye etiket; tip zorlaması (type enforcement) ile ayrıntılı kurallar. Güçlü ama karmaşık.
Yol tabanlı profiller; uygulama başına izin listesi. Yazması ve anlaması daha kolay.
Zorunlu erişim denetimi (MAC), ele geçirilen bir süreci bile profilinin izin verdiği işlemlerle sınırlar: web sunucusu açığı kullanılsa bile saldırgan yalnız o profilin tanımladığı dosyalara erişebilir. Android bütünüyle SELinux zorunlu kipte çalışır.
Donanım ve Özet
Güvenli Önyükleme ve TPM
Güvenli önyükleme: her katman bir sonrakinin imzasını doğrular; donanımdaki kök güvenine dayanır. TPM (Güvenilir Platform Modülü) önyükleme bileşenlerinin özetlerini (PCR) saklar; ölçülü önyükleme ile disk şifreleme anahtarı yalnız sistem beklenen durumdaysa açılır (uzaktan kanıtlama, attestation). Rootkit ve önyükleme kiti (bootkit) bu zinciri kırmayı dener.
Donanım ve Özet
Spectre, Meltdown ve Yan Kanallar
Yan kanal (side channel): veriyi doğrudan değil, dolaylı fiziksel etkiden (zaman, güç, önbellek, ses) sızdırır. Meltdown ve Spectre (2018) CPU’ların spekülatif yürütmesini kötüye kullanır: iptal edilen işlemin önbellekte bıraktığı iz zamanlama ile okunur ve yalıtım aşılır. Önlemler: çekirdek sayfa tablosu yalıtımı (KPTI), mikrokod, derleyici bariyerleri — çoğu performans bedeliyle gelir.
Özet
Özet
| Konu | Ana fikir | Bugün |
|---|---|---|
| Hedefler | Gizlilik, bütünlük, erişilebilirlik | Sıfır güven, +özgünlük/hesap verebilirlik |
| Kriptografi | Simetrik + asimetrik + özet + imza | AES-GCM, X25519, Ed25519, TLS 1.3, ML-KEM |
| Erişim denetimi | Matris → ACL veya yetenek | En az ayrıcalık, Linux yetenekleri, MAC |
| Biçimsel modeller | BLP gizlilik, Biba bütünlük | SELinux MLS, Windows MIC |
| Kimlik doğrulama | Tuzlu yavaş özet + MFA | Argon2, FIDO2/geçiş anahtarı |
| Bellek güvenliği | Taşma dönüş adresini bozar | Kanarya+NX+ASLR+CFI, Rust |
| Yalıtım | Kum havuzu zararı sınırlar | seccomp, namespaces, konteyner |
| Donanım | Güven zinciri ve ölçüm | Güvenli önyükleme, TPM; yan kanallar |
Özet
Kontrol Soruları
- CIA üçlüsünün üç bileşenini, her birine birer ihlal örneğiyle açıklayın.
- Aynı erişim matrisinin ACL ve yetenek gösterimlerini karşılaştırın: geri alma ve devretme hangisinde kolaydır, neden?
- Bell-LaPadula ve Biba kurallarını (okuma/yazma yönleri) yazın. Hangisi gizliliği, hangisi bütünlüğü korur?
- Parolalar neden düz SHA-256 ile değil, tuzlu Argon2/bcrypt ile saklanmalı? Tuz ve yavaşlığın ayrı ayrı rolleri nedir?
- FIDO2/geçiş anahtarları parola + TOTP’ye göre oltalamaya neden dayanıklıdır?
- Yığın tampon taşmasında dönüş adresi nasıl ele geçirilir? ASLR, NX ve yığın kanaryası bunu hangi aşamada zorlaştırır?
- TOCTOU yarış koşulunu
access()/open()örneğiyle anlatın ve bir çözüm verin. - Gizli depolama kanalı ile zamanlama kanalını örnekle ayırın. Neden tümüyle kapatılamazlar?
- Güvenli önyükleme güven zincirini ve TPM’in rolünü açıklayın. Rootkit’i nerede durdurur?
- Konteyner ile sanal makine yalıtımı arasındaki temel fark nedir? Hangisinde çekirdek açığı daha tehlikelidir?
Cevaplar
- Gizlilik: yetkisiz okuma (veri sızıntısı); bütünlük: yetkisiz değişiklik (kayıt tahrifatı); erişilebilirlik: hizmetin engellenmesi (DoS, fidye).
- ACL sütundur, nesneyle durur: “kim erişebilir?” ve geri alma kolay. Yetenek satırdır, özneyle durur: devretme ve hızlı denetim kolay ama tüm kopyaları geri almak zor.
- BLP: yukarı okuma yok, aşağı yazma yok → gizlilik. Biba: aşağı okuma yok, yukarı yazma yok → bütünlük.
- Düz SHA-256 hızlıdır; saldırgan saniyede milyarlarca dener. Tuz, önceden hesaplama ve aynı özet tekrarını önler; yavaşlık (ve bellek-yoğunluk) her denemeyi pahalılaştırır.
- İmza sitenin origin’ine bağlıdır ve özel anahtar cihazdan çıkmaz; sahte siteye verilen yanıt gerçek sitede geçersizdir, paylaşılan sır yoktur.
- Taşan girdi dönüş adresinin üzerine yazar; fonksiyon dönünce CPU oraya atlar. Kanarya dönüşte bozulmayı yakalar; NX enjekte kodu çalıştırmaz; ASLR hedef adresi gizler.
- access() ile kontrol, open() ile kullanım arasında saldırgan dosyayı sembolik bağla değiştirir. Çözüm: bir kez açıp aynı tanımlayıcı üzerinde denetlemek (O_NOFOLLOW, fstat, openat).
- Depolama: dosya kilidi var/yok. Zamanlama: CPU’yu meşgul etme süresi. Paylaşılan her kaynak kanal olabildiği için tümünü kapatmak imkânsız; yalnız bant genişliği düşürülür.
- Her katman sonrakinin imzasını doğrular; TPM önyükleme ölçümlerini saklar ve anahtarları bunlara mühürler. İmzasız/değişmiş bir önyükleyici ya da çekirdek (bootkit) çalıştırılmaz.
- Konteyner çekirdeği paylaşır (hafif, zayıf sınır); VM ayrı çekirdek ve hipervizör kullanır (ağır, güçlü sınır). Çekirdek açığı konteynerde kaçışa yol açabilir, VM’de genelde açmaz.
Özet
Kaynaklar
- A. S. Tanenbaum, H. Bos, Modern Operating Systems, 4. baskı (2014) / 5. baskı (2022), Pearson — Bölüm 9: Security.
- A. Silberschatz, P. B. Galvin, G. Gagne, Operating System Concepts, 10. baskı, Wiley, 2018 — Bölüm 16: Security; Bölüm 17: Protection.
- R. H. Arpaci-Dusseau, A. C. Arpaci-Dusseau, Operating Systems: Three Easy Pieces (OSTEP), ostep.org — güvenlik bölümleri.
- R. Anderson, Security Engineering, 3. baskı, Wiley, 2020.
- J. H. Saltzer, M. D. Schroeder, “The Protection of Information in Computer Systems”, 1975 (en az ayrıcalık ve tasarım ilkeleri).
- D. E. Bell, L. J. LaPadula (1973); K. J. Biba (1977) — biçimsel güvenlik modelleri. B. W. Lampson, “A Note on the Confinement Problem”, 1973.
- RFC 8446 (TLS 1.3), RFC 6238 (TOTP), RFC 9106 (Argon2); FIDO2/WebAuthn (W3C); NIST FIPS 203 (ML-KEM).
- Aleph One, “Smashing the Stack for Fun and Profit”, Phrack 49, 1996; Kocher vd., “Spectre”; Lipp vd., “Meltdown”, 2018.