Bölüm 13: Güvenlik

Bölüm 13: Güvenlik · Çalışma Soruları
CIA ve tehditlerKriptografiKoruma ve izinlerBiçimsel modellerKimlik doğrulamaYazılım açıklarıKötü amaçlı yazılımYalıtım ve önyükleme
Sercan KÜLCÜ

Çoktan Seçmeli · CIA Üçlüsü

Soru 1: Hangi Hedef Çiğnendi?

Bir hastanenin dosya sunucusundaki hasta kayıtları fidye yazılımıyla şifrelendi. Kayıtlar dışarı sızdırılmadı ve içerikleri değiştirilmedi, ama doktorlar dosyalara saatlerce ulaşamadı. CIA üçlüsünün hangi bileşeni doğrudan ihlal edildi?

C: veri okunmadı ve değiştirilmedi; ama hizmet kullanılamaz hâle geldi. Fidye yazılımı ve DoS saldırıları erişilebilirliği hedefler. Sızıntı gizlilik, kayıt tahrifatı bütünlük ihlali olurdu; inkâr edilemezlik imza ve denetim kaydıyla ilgilidir.

Hesaplama Sorusu · Gizli Anahtarlı Şifreleme

Soru 2: Yerine Koyma Şifresi

Tek alfabeli yerine koyma şifresinin anahtarı tablodadır. (a) SALDIRI sözcüğünün şifreli hâli nedir? (b) Şifreli LTEXKOZN neyi gizler? (c) Anahtar uzayı 26! olduğu hâlde bu şifre neden kolayca kırılır?

açıkABCDEFGHIJKLMNOPQRSTUVWXYZ
şifreliQWERTYUIOPASDFGHJKLZXCVBNM
Cevabı göster

(a) S → L, A → Q, L → S, D → R, I → O, R → K, I → O: LQSROKO.

(b) Ters tabloyla L → S, T → E, E → C, X → U, K → R, O → I, Z → T, N → Y: SECURITY.

(c) 26! ≈ 4 × 10²⁶ anahtar kaba kuvvetle denenemez; ama her harf hep aynı harfe gider. (a)’daki iki I’nın ikisi de O oldu: harf sıklıkları şifreli metinde aynen kalır. Birkaç satırlık metinde en sık harfler (Türkçede A, E, İ) eşlenerek anahtar çıkarılır. Bugünkü simetrik şifreler (AES-GCM, ChaCha20) bu yüzden blok ya da akış yapısıyla sıklığı gizler.

Çoktan Seçmeli · Özet ve İmza

Soru 3: Dijital İmza

Ali bir sözleşmeyi Ayşe’ye gönderiyor; metnin yolda değişmediği ve Ali’den geldiği kanıtlanabilmeli, ama metnin gizli olması gerekmiyor. Doğru düzen hangisidir?

D: imzayı yalnız özel anahtarın sahibi üretebilir, herkes açık anahtarla doğrular; Ali sonradan inkâr edemez. A anahtarları ters kullanır. B gizlilik sağlar ama gönderenin kim olduğunu kanıtlamaz. C’deki paylaşılan anahtarı Ayşe de bildiği için imzayı Ayşe de üretebilirdi: inkâr edilemezlik olmaz.

Hesaplama Sorusu · İzin Bitleri

Soru 4: Sekizli ve Sembolik İzin

(a) chmod 754 yedekle.sh komutundan sonra ls -l izin sütununu nasıl gösterir? Grup üyeleri ve “diğerleri” bu betikle ne yapabilir? (b) rw-r-x--x izninin sekizli karşılığı nedir? (c) chmod 640 sonrası?

Cevabı göster

Her rakam üç bittir: r = 4, w = 2, x = 1.

sahipgrupdiğer
(a) 7547 = 111 → rwx5 = 101 → r-x4 = 100 → r--
(b)rw- = 110 → 6r-x = 101 → 5--x = 001 → 1
(c) 640rw-r-----

(a) -rwxr-xr--: grup okuyup çalıştırabilir, diğerleri yalnız okuyabilir (okuyan, betiği kopyalayıp kendi adına çalıştırabilir). (b) 651. (c) -rw-r-----.

Çoktan Seçmeli · İzin Bitleri

Soru 5: Dizinde x Biti

/home/ali dizininin izni drwx--x--x, içindeki plan.txt dosyasının izni -rw-r--r--. Ali dışındaki sıradan bir kullanıcı için hangisi doğrudur?

B: dizinde r girdileri listelemeyi, w girdi eklemeyi/silmeyi, x içine girip ad aramayı sağlar. Diğerlerinde yalnız x var: ad bilinirse yol çözülür ve dosyanın kendi r biti okumaya izin verir. ls başarısız olur; dosya oluşturmak için dizinde w gerekirdi.

Klasik Soru · Erişim Matrisi

Soru 6: Matristen ACL ve Yeteneğe

Koruma matrisi tabloda. (a) rapor nesnesinin erişim denetim listesini (ACL), (b) D2 etki alanının yetenek listesini (C-list) yazın. (c) D3’ün rapor erişimini hemen kaldırmak hangi gösterimde kolaydır? (d) D2’nin yazıcı hakkını D3’e devretmek hangisinde kolaydır?

raporderle.shyazıcı
D1RWRX—
D2R—W
D3RXW
Cevabı göster
  • (a) ACL = matrisin sütunu, nesnenin yanında saklanır: rapor → {D1: RW, D2: R, D3: R}.
  • (b) C-list = matrisin satırı, etki alanına aittir: D2 → {rapor: R, yazıcı: W}.
  • (c) ACL: rapor’un listesinden D3 girdisi silinir. Yetenek gösteriminde D3’ün (ve kopyaladığı herkesin) yeteneklerini bulup geri almak gerekir.
  • (d) Yetenek: D2 yeteneğin bir kopyasını D3’e verir; nesnenin listesine dokunulmaz. UNIX’te açık bir dosya tanımlayıcısını başka sürece göndermek de böyledir.

Adım Adım Çalıştırma · setuid

Soru 7: setuid Programda Kimlikler

Veli (uid 1001) root’a ait setuid bitli programı çalıştırıyor. Çıktı nedir? Son setresuid başarılı olur mu?

gerçek (r)1001etkin (e)0saklı (s)0açık dosyalarfd 3 yokuid 0 = root

setuid biti: execve etkin ve saklı kimliği dosya sahibine (0) çevirir; gerçek kimlik Veli’dir.

gerçek (r)1001etkin (e)0saklı (s)0açık dosyalarfd 3 yokuid 0 = root

getuid gerçek kimliği (1001), geteuid etkin kimliği (0) döndürür.

gerçek (r)1001etkin (e)0saklı (s)0açık dosyalarfd 3 → loguid 0 = root

İzin etkin kimliğe göre denetlenir: euid 0, yalnız root’un yazabildiği günlük açılır.

gerçek (r)1001etkin (e)1001saklı (s)1001açık dosyalarfd 3 → loguid 0 = root

Ayrıcalık kalıcı olarak bırakılır: üç kimlik de 1001. Kalan koddaki bir hata artık root vermez.

gerçek (r)1001etkin (e)1001saklı (s)1001açık dosyalarfd 3 → loguid 0 = root

İkinci satır: 1001 1001.

gerçek (r)1001etkin (e)1001saklı (s)1001açık dosyalarfd 3 → loguid 0 = root

Ayrıcalıksız süreç yalnız r, e ya da s değerine geçebilir; üçü de 1001: EPERM, −1.

gerçek (r)1001etkin (e)1001saklı (s)1001açık dosyalarfd 3 → loguid 0 = root

Geri dönüş yok; ama fd 3 hâlâ yazılabilir: açık tanımlayıcı yetenek gibidir, izin yeniden denetlenmez.

/* arsiv: -rwsr-xr-x, sahibi root */
int main(void) {   /* Veli (uid 1001) çalıştırır */
    printf("%d %d\n", getuid(), geteuid());
    int fd = open("/var/arsiv/log", O_WRONLY);
    uid_t me = getuid();
    setresuid(me, me, me);
    printf("%d %d\n", getuid(), geteuid());
    int r = setresuid(0, 0, 0);
    printf("%d %d\n", r, geteuid());
    return 0;
}

Çoktan Seçmeli · Bell-LaPadula

Soru 8: Bell-LaPadula Kuralı

Düzeyler: Çok Gizli > Gizli > Hizmete Özel > Tasnif Dışı. Bell-LaPadula modelinde Gizli düzeyde çalışan bir süreç için hangi işleme izin verilir?

A: BLP gizliliği korur: yukarı okuma yok (basit güvenlik özelliği), aşağı yazma yok (* özelliği). Aşağı okumak serbesttir. C ve D aşağı yazmadır: Gizli bilgi daha düşük düzeye sızardı. B yukarı okumadır.

Klasik Soru · Bell-LaPadula ve Biba

Soru 9: İki Model Birlikte

Süreç “Orta” düzeyde. Dört işlem için BLP (düzeyler gizlilik) ve Biba (düzeyler güvenilirlik) izin mi ret mi verir? İki model birlikte uygulanırsa süreç neye erişebilir?
(1) Yüksek’i okumak (2) Yüksek’e yazmak (3) Düşük’ü okumak (4) Düşük’e yazmak

Cevabı göster
işlemBLPBiba
(1) yukarı okumaretizin
(2) yukarı yazmaizinret
(3) aşağı okumaizinret
(4) aşağı yazmaretizin

Her satırda modellerden biri reddediyor: ikisi birlikte uygulanırsa süreç yalnız kendi düzeyindeki nesneleri okuyup yazabilir. BLP bilginin aşağı sızmasını, Biba kirli verinin yukarı bulaşmasını engeller; hedefler çatışır.

Adım Adım Çalıştırma · Gizli Kanal

Soru 10: Dosya Kilidiyle Gizli Kanal

Sunucu her 10 ms’de F’yi kilitleyerek ya da bırakarak bir bit iletiyor. İşbirlikçi ne alır? Kanal hızı nedir, 256 bitlik anahtar ne kadar sürede sızar?

010203040506070F’nin durumu her 10 ms’de bir okunur; alıcı kilitleyemezse 1

İki süreç önceden anlaşmıştır. F’nin içeriği hiç okunmaz, yazılmaz: BLP’nin denetlediği hiçbir işlem yok.

açık0010203040506070F’nin durumu her 10 ms’de bir okunur; alıcı kilitleyemezse 1

7. bit (0–10 ms): birak(F): işbirlikçi kilitleyebilir → 0.

açık00kilit110203040506070F’nin durumu her 10 ms’de bir okunur; alıcı kilitleyemezse 1

6. bit (10–20 ms): kilitle(F): işbirlikçinin denemesi başarısız → 1.

açık00kilit110açık0203040506070F’nin durumu her 10 ms’de bir okunur; alıcı kilitleyemezse 1

5. bit (20–30 ms): birak(F): işbirlikçi kilitleyebilir → 0.

açık00kilit110açık020açık03040506070F’nin durumu her 10 ms’de bir okunur; alıcı kilitleyemezse 1

4. bit (30–40 ms): birak(F): işbirlikçi kilitleyebilir → 0.

açık00kilit110açık020açık030kilit140506070F’nin durumu her 10 ms’de bir okunur; alıcı kilitleyemezse 1

3. bit (40–50 ms): kilitle(F): işbirlikçinin denemesi başarısız → 1.

açık00kilit110açık020açık030kilit140açık0506070F’nin durumu her 10 ms’de bir okunur; alıcı kilitleyemezse 1

2. bit (50–60 ms): birak(F): işbirlikçi kilitleyebilir → 0.

açık00kilit110açık020açık030kilit140açık050kilit16070F’nin durumu her 10 ms’de bir okunur; alıcı kilitleyemezse 1

1. bit (60–70 ms): kilitle(F): işbirlikçinin denemesi başarısız → 1.

açık00kilit110açık020açık030kilit140açık050kilit160kilit170F’nin durumu her 10 ms’de bir okunur; alıcı kilitleyemezse 1

0. bit (70–80 ms): kilitle(F): işbirlikçinin denemesi başarısız → 1.

açık00kilit110açık020açık030kilit140açık050kilit160kilit170F’nin durumu her 10 ms’de bir okunur; alıcı kilitleyemezse 1

80 ms’de 8 bit: 01001011 = 0x4B = ‘K’. Hız 1000 / 10 = 100 bit/s; 256 bitlik anahtar 2,56 s’de sızar. Gürültü eklemek hızı düşürür ama kanalı kapatmaz.

/* sunucu (yüksek düzey), sir = 'K' */
for (int i = 7; i >= 0; i--) {
    if ((sir >> i) & 1) kilitle(F);
    else                birak(F);
    bekle(10);                      /* ms */
}
/* işbirlikçi, her aralıkta: */
bit = kilitlemeyi_dene(F) ? 0 : 1;

Hesaplama Sorusu · Parola Saklama

Soru 11: Kaba Kuvvet Süresi

Parolalar 8 küçük harften (26 harfli alfabe) oluşuyor; saldırgan sızan veritabanındaki tek bir kullanıcının özetini kırmak istiyor. (a) Kaç olası parola vardır? (b) Özet düz SHA-256 ise ve saniyede 1010 deneme yapılıyorsa en kötü durumda süre nedir? (c) Özet Argon2id ise ve saniyede yalnız 104 deneme yapılabiliyorsa? (d) Tuzun bu hesaptaki rolü nedir?

Cevabı göster

(a) 268 = 208.827.064.576 ≈ 2,09 × 1011.

(b) 2,09 × 1011 / 1010 ≈ 21 s.

(c) 2,09 × 1011 / 104 ≈ 2,09 × 107 s ≈ 242 gün. Yavaş özet her denemeyi 106 kat pahalılaştırır; uzun parola da uzayı üstel büyütür (10 karakter, 62 simge: milyonlarca yıl).

(d) Tuz tek bir kullanıcının süresini değiştirmez; ama aynı hesabın bütün kullanıcılara birden uygulanmasını ve önceden hesaplanmış tabloları engeller: iş kullanıcı sayısı kadar çoğalır. Tuz gizli değildir, özetin yanında saklanır.

Hesaplama Sorusu · MFA ve TOTP

Soru 12: TOTP Kod Penceresi

Telefondaki uygulama ile sunucu aynı gizli anahtarı paylaşır; kod, T = ⌊t / 30⌋ sayacından üretilir (t: Unix zamanı, saniye). (a) t = 1.700.000.000 iken T kaçtır, aynı kod hangi t aralığında geçerlidir? (b) Sunucu saat kayması için T − 1, T ve T + 1 kodlarını kabul ediyorsa bu anda girilen bir kod hangi t aralığında üretilmiş olabilir? (c) Parola + TOTP neden MFA sayılır, ama oltalamaya karşı neden yetmez?

Cevabı göster

(a) 1.700.000.000 / 30 = 56.666.666,67 → T = 56.666.666. Kod T · 30 = 1.699.999.980 ile 1.700.000.009 arasında (30 s) aynıdır.

(b) T − 1 ile T + 1 arası: 1.699.999.950 … 1.700.000.039, 90 saniyelik pencere.

(c) Parola bildiğin, telefondaki anahtar sahip olduğun şeydir: iki farklı kategori. Ama kullanıcı sahte siteye kodu da yazabilir; saldırgan onu pencere kapanmadan gerçek sitede kullanır. FIDO2 imzası ise sitenin kökenine bağlıdır.

Çoktan Seçmeli · FIDO2

Soru 13: Geçiş Anahtarı ve Oltalama

Sahte bir giriş sayfası kullanıcıdan parolayı ve TOTP kodunu kolayca alabilir. FIDO2/WebAuthn geçiş anahtarlarını bu saldırıya dayanıklı kılan temel özellik hangisidir?

B: tarayıcı imzalanacak sınamaya sitenin kökenini (origin) ekler; sahte siteye verilen yanıt gerçek sitede geçersizdir. Sunucu yalnız açık anahtarı saklar, paylaşılan sır yoktur (C yanlış). 30 saniyede değişen kod TOTP’dir ve oltalanabilir; uzunluk oltalamayı engellemez.

Adım Adım Çalıştırma · Tampon Taşması

Soru 14: Tampon Kaç Bayt Taşar?

64 bit bir makinede kopyala çağrılıyor. strcpy kaç bayt yazar, kaçı taşar, dönüş adresinin kaç baytı bozulur? Satır nasıl düzeltilmeli?

················ad[8]kayıtlı rbpdönüş adresidüşük adresyüksek adres

Çağrı çerçeveyi açar: dönüş adresi, kayıtlı çerçeve işaretçisi (rbp) ve 8 baytlık ad. Kanarya ve dolgu yok (-fno-stack-protector).

Giresun-················ad[8]kayıtlı rbpdönüş adresidüşük adresyüksek adres

strcpy kaynağın \0’ına kadar kopyalar, hedefin boyunu bilmez. “Giresun-” diziye tam sığar; \0 henüz gelmedi, kopyalama sürer.

Giresun-Ordu-Sam········ad[8]kayıtlı rbpdönüş adresidüşük adresyüksek adres

“Ordu-Sam” dizinin dışına, kayıtlı rbp’nin üzerine yazılır.

Giresun-Ordu-Samsun\0····ad[8]kayıtlı rbpdönüş adresidüşük adresyüksek adres‘\0’ dahil 4 bayt bozuldu

“sun” ve \0 dönüş adresinin düşük 4 baytına yazılır (küçük uçlu: 73 75 6e 00). Toplam 19 + 1 = 20 bayt, 20 − 8 = 12 bayt taştı.

Giresun-Ordu-Samsun\0····ad[8]kayıtlı rbpdönüş adresidüşük adresyüksek adres‘\0’ dahil 4 bayt bozulduret → 0x…006e7573: geçersiz adres

Fonksiyon dönerken CPU bozulmuş adrese atlar: burada çökme (SIGSEGV); girdiyi seçen saldırgan ise yürütmeyi istediği yere yönlendirir. Kanarya ad ile rbp arasında durur ve dönüşten önce bozulmayı yakalardı.

void kopyala(const char *in) {
    char ad[8];
    strcpy(ad, in);  /* sınır yok */
}                    /* ret */
/* main: */
kopyala("Giresun-Ordu-Samsun");

Klasik Soru · TOCTOU

Soru 15: Kontrol ile Kullanım Arasında

setuid root bir program bu kodu çalıştırıyor. Kod hangi açığı içeriyor? Saldırgan tam olarak hangi anda ne yapar? Nasıl düzeltilir?

/* setuid root yardımcı program */
if (access("/tmp/rapor", W_OK) == 0) {
    int fd = open("/tmp/rapor", O_WRONLY);
    write(fd, veri, n);
}
Cevabı göster
  • TOCTOU (kontrol zamanı ≠ kullanım zamanı) yarış durumu: access gerçek kullanıcıya göre denetler, open ise root yetkisiyle adı yeniden çözer.
  • İki çağrı arasındaki pencerede saldırgan /tmp/rapor’u silip yerine /etc/passwd’e sembolik bağ koyar; root programı korunan dosyaya yazar. Deneme çok kez tekrarlanarak pencere yakalanır.
  • Düzeltme: adı bir kez çözün. Ayrıcalığı düşürüp open(..., O_WRONLY | O_NOFOLLOW) ile açın, gerekirse aynı tanımlayıcı üzerinde fstat ile denetleyin; güvenli bir dizinde openat kullanın.

Çoktan Seçmeli · Savunmalar

Soru 16: Savunmaların Eşleşmesi

Tampon taşmasına karşı savunmalarla etkileri eşleştirilmiş. Hangi eşleştirme yanlıştır?

D: NX (DEP) yalnız veri sayfalarına enjekte edilen yeni kodun çalışmasını engeller. ROP ve return-to-libc zaten yürütülebilir olan kod parçalarını kullanır; bu yüzden ASLR, CFI ve gölge yığın birlikte kullanılır. Kökten çözüm bellek-güvenli dillerdir.

Çoktan Seçmeli · Giriş Sahtekârlığı

Soru 17: Ctrl+Alt+Del Neden?

Bir laboratuvarda oturum açmadan önce Ctrl+Alt+Del tuşlarına basmak zorunlu tutuluyor. Bu kural öncelikle hangi saldırıya karşıdır?

C: giriş sahtekârlığında (login spoofing) bir kullanıcı programı giriş ekranını taklit eder. Güvenli dikkat dizisi yalnız çekirdeğin gerçek giriş ekranını çağırır; hiçbir kullanıcı programı bu tuş birleşimini yakalayamaz. Mantık bombası ve arka kapıya karşı kod incelemesi ve yeniden üretilebilir derleme kullanılır.

Çoktan Seçmeli · Türler

Soru 18: Kendi Kendine Yayılan

Kullanıcının hiçbir dosyayı açmasına gerek kalmadan, ağdaki yamalanmamış bir hizmeti kullanarak makineden makineye kendini kopyalayan kötü amaçlı yazılım türü hangisidir?

A: solucan (worm) ağ üzerinden kendi kendine yayılır. Virüs başka bir programa eklenir ve o program çalıştırılınca bulaşır; Truva atı yararlı görünen bir programın içinde gelir; rootkit kendisini ve diğer zararlıları gizler.

Çoktan Seçmeli · SELinux ve AppArmor

Soru 19: DAC mı, MAC mı?

Bir web sunucusu ele geçirildi. Saldırgan, sunucunun kullanıcı hesabıyla kendine ait bir dosyanın iznini chmod ile rahatça değiştirebiliyor; ama izin bitleri izin verse bile /home altındaki dosyalara erişemiyor. Bu iki davranış sırasıyla hangi denetimden kaynaklanır?

B: DAC’de izni nesnenin sahibi belirler (rwx, ACL); sahip, zararlı da olsa, izni değiştirebilir. MAC’de politikayı sistem belirler ve süreç kendi kısıtını gevşetemez: SELinux/AppArmor profili ele geçirilen süreci izin verilen dosyalarla sınırlar.

Çoktan Seçmeli · Güvenli Önyükleme

Soru 20: Değiştirilmiş Önyükleyici

Güvenli önyükleme açık bir makinede bir önyükleme kiti (bootkit) diskteki önyükleyiciyi değiştirmiş. Makine yeniden başlatılınca ne olur?

D: güven zincirinde her katman bir sonrakinin imzasını doğrular; imzasız ya da değişmiş önyükleyici yürütülmez. TPM hiçbir şeyi onarmaz: ölçülen önyüklemede bileşenlerin özetini saklar ve beklenmeyen ölçümde anahtarı açmaz. C, güvenli önyükleme kapalıyken yalnız ölçülü önyüklemenin davranışıdır. Antivirüs çekirdekten sonra çalışır; ondan önce yerleşen kit onu kandırabilir.

Son

Bölüm 13: Güvenlik: Çalışma Soruları
Konu anlatımı: Güvenlik sunumu · Terim sözlüğü
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.