Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 40

Kriptografik Protokol Değerlendirmesi: Sapma ve Mantık Hataları

Recommended resources

Harika bir ilerleme kaydettik. Önceki dersimizde, dağıtık sistemlerde anahtar yönetimi gibi karmaşık ve standartlaştırılmış protokollerin (JWKS, Refresh Token Rotation vb.) inceliklerini ve bu standartlara uyulmadığında ortaya çıkan sistemik riskleri analiz ettik. Bu standartların varoluş nedenini anladık: Kriptografi, hatalara karşı son derece hassas bir alandır ve denenmiş, test edilmiş, kamuya açık olarak incelenmiş çözümler kullanmak neredeyse her zaman en doğru yoldur.

Ancak, bazen geliştiriciler çeşitli nedenlerle bu standart yollardan sapar ve "tekerleği yeniden icat etmeye" kalkışır. Bu derste, bir kod denetçisinin en tehlikeli bulgularından bazılarını barındıran bu özel alana, yani ev yapımı kriptografik protokollere odaklanacağız. Bu dersin sonunda, özel kriptografik protokol implementasyonlarını değerlendirerek yerleşik standartlardan sapmaları ve mantık hatalarını belirleme yetkinliğini kazanacaksınız. Bu, yalnızca bilinen zafiyetleri değil, daha önce hiç görülmemiş, mantığa dayalı kusurları tespit etme yeteneği olan "uzman gözünü" geliştirme hedefinizle doğrudan örtüşmektedir.

Kriptografinin Birinci Kuralı: Kendi Kriptonuzu Yazmayın

Bu kuralın ardındaki felsefeyi anlamak için, kriptografinin temel taşı olan Kerckhoffs Prensibi'ni hatırlamamız gerekir. Bu prensip, bir kripto sisteminin güvenliğinin, algoritmanın gizliliğine değil, yalnızca anahtarın gizliliğine dayanması gerektiğini söyler.

Kriptografinin Temellerinden TLS Zafiyetlerine – 1: Giriş

Bu makale, Kerckhoffs Prensibi'nin neden modern kriptografinin temel direği olduğunu açıklıyor. Özel veya gizli algoritmaların neden doğası gereği şüpheli olduğunu anlamak, standart dışı implementasyonları değerlendirirken size kritik bir bakış açısı kazandıracaktır.

Makalede, Kerckhoffs'un ilkeleri bölümünü okuyun. Özellikle "sistemin bilinirliğinin sorun oluşturmaması gerektiği" vurgusuna dikkat edin. Algoritma ne kadar çok incelenirse o kadar güvenilir hale gelir. Gizli bir algoritma ise "belirsizlik yoluyla güvenlik" yanılgısına dayanır ve sadece onu tasarlayan ekibin hatalarına ve niyetine bağlıdır.

Bu prensibi ihlal eden herhangi bir kod parçası, kırmızı bayrak olarak değerlendirilmelidir. Geliştirici, AES veya SHA-256 gibi standart bir algoritma yerine, veriyi XOR'lama, kaydırma (shifting) ve yer değiştirme (substitution) gibi işlemlerle "şifrelediğini" iddia ediyorsa, büyük olasılıkla kırılması çok kolay bir sistem yaratmıştır. Sizin göreviniz, bu tür "cargo cult" kriptografilerini tanımak ve standart, denenmiş alternatifleri önermektir.


Standartlardan Sapmalar: Yaygın Hatalar

Geliştiriciler her zaman sıfırdan bir algoritma yazmazlar. Bazen daha tehlikelisi, standart algoritmaları yanlış veya güvensiz konfigürasyonlarla kullanmalarıdır.

1. Güvensiz veya Eskimiş Algoritmaların Kullanımı

Bu, en sık karşılaşılan sapmadır. SAST araçlarının da genellikle iyi tespit ettiği bir durumdur, ancak manuel denetimde neden güvensiz olduklarını bilmek önemlidir. DES, 3DES, RC4, MD5, SHA-1 gibi algoritmalar artık modern güvenlik gereksinimlerini karşılamamaktadır.

Bu şema, Triple DES (3DES) algoritmasının çalışma prensibini göstermektedir. Düz metin (PlainText), üç farklı anahtar (k1, k2, k3) ile art arda üç DES işleminden geçirilir. Her ne kadar tekli DES'ten daha güçlü olsa da, 3DES'in 64-bit'lik küçük blok boyutu ve "ortada buluşma saldırısı" (meet-in-the-middle attack) gibi zafiyetleri, onu AES gibi modern standartlara kıyasla güvensiz kılar.

Aşağıdaki kaynak, 3DES kullanımının pratikte nasıl göründüğüne dair somut bir örnek sunuyor.

Kriptografinin Temellerinden TLS Zafiyetlerine – 1: Giriş

Bu kaynak, gerçek bir kod örneği üzerinden eski bir algoritmanın (3DES) nasıl tespit edileceğini ve neden güvensiz kabul edildiğini açıklıyor.

Lütfen gerçek dünya örneği bölümünü inceleyin. Java kodunda KeyProperties.KEY_ALGORITHM_3DES kullanımına dikkat edin. Metin, 3DES'in neden 168 bit anahtara rağmen efektif olarak 112 bit güvenlik sağladığını ve 64 bit blok boyutunun getirdiği riskleri açıklıyor. Bu, sadece "3DES kullanılmış" demekten öte, neden bunun bir zafiyet olduğunu anlamanızı sağlar.

2. Güvensiz Blok Şifreleme Modları: ECB'nin Tehlikesi

AES gibi modern bir algoritma kullanmak bile tek başına yeterli değildir. Bu algoritmanın veriyi nasıl bloklara ayırıp işleyeceği, yani "blok şifreleme modu" (block cipher mode) en az algoritmanın kendisi kadar kritiktir. En yaygın hata, Elektronik Kod Defteri (ECB) modunun kullanılmasıdır.

ECB modu, her veri bloğunu diğerlerinden tamamen bağımsız olarak aynı anahtarla şifreler. Bu, aynı olan düz metin bloklarının, şifreli metinde de aynı olacağı anlamına gelir. Bu durum, şifrelenmiş verideki desenleri korur ve verinin içeriği hakkında ciddi ipuçları verir.

Mehmet İnce'nin aşağıdaki videosu, bu konuyu mükemmel bir şekilde görselleştiriyor ve ECB modunun neden felaketle sonuçlanabileceğini pratik bir saldırı senaryosu üzerinden anlatıyor.

ChatGPT vs Hacker ! SonarSource Kaynak Kod Analizi ile Zafiyet Tespiti Challenge'ı

Bu video, blok şifreleme modlarının güvenlik üzerindeki etkisini, özellikle de ECB modunun zayıflıklarını ve CBC modunun nasıl daha güvenli bir alternatif olduğunu harika bir şekilde açıklıyor. Bir kod denetçisi olarak AES/ECB/NoPadding gibi bir konfigürasyon gördüğünüzde alarm zillerinin neden çalması gerektiğini bu bölümden sonra çok daha iyi anlayacaksınız.

Videoda bu bölümü dikkatle izleyin. Konuşmacı, ECB modunun veriyi nasıl bloklara ayırdığını ve her bloğu bağımsız şifrelediğini anlatıyor. Bu durumun, şifreli metin üzerinde bit-flipping (bit çevirme) saldırılarına nasıl olanak tanıdığını, yani saldırganın şifreli metni manipüle ederek deşifre edilecek metni öngörülebilir bir şekilde değiştirebileceğini bir örnek üzerinden gösteriyor. Özellikle paylaştığı makale ve şifrelenmiş penguen görseli, ECB'nin desenleri nasıl koruduğunun unutulmaz bir kanıtıdır. CBC (Cipher Block Chaining) modunun ise bir önceki bloğun şifreli çıktısını sonraki bloğun şifrelenmesine dahil ederek bu sorunu nasıl çözdüğünü "fermuar gibi" benzetmesiyle açıklıyor.

3. Yetersiz Entropi ve Tahmin Edilebilirlik

Kriptografik protokollerin güvenliği, genellikle tahmin edilemezliğe dayanır. Nonce (number used once), IV (initialization vector) ve salt gibi değerlerin gerçekten rastgele ve tek seferlik olması gerekir. Geliştiriciler özel bir protokol tasarlarken, kriptografik olarak güvenli olmayan rastgele sayı üreteçleri (random.randint, rand()) kullanma hatasına düşebilirler.

Bu görüntü, bir SAST aracının Python kodunda `random.randint` fonksiyonunun kriptografik olarak güvenli olmayan rastgele sayılar üretmesi nedeniyle parola "salt" değeri oluşturmada nasıl bir "Insecure Randomness" zafiyetine yol açtığını göstermektedir. Kriptografik amaçlar için `secrets` modülü gibi daha güçlü entropi kaynakları kullanılmalıdır.

Bir önceki modülde bu konuya değinmiştik, ancak özel protokollerde bu hata daha da kritik hale gelir. Örneğin, bir geliştirici akış şifrelemesi (stream cipher) benzeri bir yapı kurmaya çalışır ve anahtar akımını (keystream) time() gibi tahmin edilebilir bir tohum (seed) değeriyle başlatırsa, tüm şifreleme mekanizması çöker.


Mantık Hataları: Protokolün Kendisi Kırık Olduğunda

Bazen kullanılan kriptografik bileşenler (AES, SHA-256) sağlamdır, ancak bu bileşenlerin bir araya getiriliş şekli, yani protokolün mantığı hatalıdır. Bu tür zafiyetleri bulmak, en gelişmiş kod analizi yetkinliklerinden biridir ve genellikle otomatize araçların gözünden kaçar.

Şifre yöneticileri üzerine yapılan bir araştırma, bu tür mantık hatalarını mükemmel bir şekilde örneklendirir. Şifre yöneticileri, kullanıcı verilerini korumak için "sıfır bilgi" (zero-knowledge) iddiasıyla kendi özel kriptografik protokollerini uygularlar.

Şifre Yöneticileri Artık Güvenli Değil Mi?

Bu video, popüler şifre yöneticilerinde bulunan ve "sıfır bilgi" iddialarını yıkan çeşitli mantıksal zafiyetleri özetliyor. Bu, standart kriptografik araçların bile yanlış bir protokol mantığı içinde nasıl güvensiz hale gelebileceğinin harika bir vaka analizidir.

Öncelikle, tehdit modelini ve "sıfır bilgi" iddiasının ne anlama geldiğini anlamak için bu girişi izleyin. Buradaki kilit nokta, saldırıların kötü niyetli veya ele geçirilmiş bir sunucu varsayımına dayanmasıdır. Ardından, kritik bulguların özeti bölümünü dikkatle inceleyin. Burada listelenen zafiyetler, klasik mantık hatalarıdır: Anahtar Emaneti Zafiyeti (Key Escrow): Kurtarma anahtarının doğrulanmaması, saldırganın sahte bir anahtar enjekte etmesine olanak tanıyor. Kasa Bütünlüğü Eksikliği (Lack of Integrity): Kasanın bir bütün olarak değil, parçalar halinde şifrelenmesi ve bütünlük kontrolü olmaması, saldırganın şifreli verileri silmesine veya değiştirmesine imkan veriyor. Bu, daha önce tartıştığımız ECB modundaki bit-flipping saldırısının bir başka çeşididir. Paylaşım Mekanizmalarındaki Hatalar: Paylaşım yapılan kullanıcının açık anahtarının doğrulanmaması. Geriye Dönük Uyumluluk (Downgrade Attacks): Kötü niyetli bir sunucunun, istemciyi eski ve daha zayıf bir şifreleme algoritması kullanmaya zorlayabilmesi.

Bu örnekler, bir protokolü incelerken sormanız gereken soruları gösterir:

  • Bütünlük nasıl sağlanıyor? Veri, sadece şifreleniyor mu, yoksa HMAC veya AEAD (Authenticated Encryption with Associated Data - örn. AES-GCM) gibi bir mekanizma ile bütünlüğü de doğrulanıyor mu?
  • Anahtarlar nasıl doğrulanıyor ve dağıtılıyor? Bir anahtarın gerçekten iddia ettiği kişiye/servise ait olduğu nasıl garanti ediliyor?
  • Protokol, eski sürümlerle nasıl başa çıkıyor? Bir "downgrade" saldırısı mümkün mü?
  • Protokol, hata durumlarında nasıl davranıyor? Bir hata mesajı, saldırgana avantaj sağlayacak bilgi sızdırıyor mu?

Ufukta: Sıfır Bilgi Kanıtları ve Yeni Nesil Hatalar

Matematik altyapınız ve karmaşıklık teorisine olan ilginiz göz önüne alındığında, kriptografik protokollerdeki en ileri sınırlardan birine kısaca değinmekte fayda var: Sıfır Bilgi Kanıtları (ZKP - Zero-Knowledge Proofs). Bu protokoller, bir ifadenin doğruluğunu, ifade hakkında hiçbir ek bilgi vermeden kanıtlamayı sağlar. Özellikle blokzincir ve gizlilik odaklı teknolojilerde hızla yaygınlaşmaktadır.

Ancak bu karmaşık matematiksel yapılar bile, basit implementasyon ve mantık hatalarından muaf değildir.

Neden Sıfır Bilgi Kanıtı Doğrulama Mantık Hataları Kripto ...

Bu makale, son teknoloji ZKP sistemlerinde bile temel mantık ve yapılandırma hatalarının nasıl milyonlarca dolarlık kayıplara yol açabildiğini gösteren bir özet niteliğindedir. Bu, bugün öğrendiğimiz prensiplerin en karmaşık sistemler için bile geçerli olduğunun bir kanıtıdır.

Makalenin başlıklarını hızlıca tarayarak konunun ana fikrini alabilirsiniz. Özellikle FOOMCASH vakası, hataların neden zor bulunduğu ve bilinen zayıflıklar gibi bölümler, en karmaşık kriptografik protokollerin bile temel güvenlik hijyenine (doğru yapılandırma, bilinen zayıflıklara karşı önlem) ne kadar bağımlı olduğunu göstermektedir.

Bu, bir denetçi olarak en karmaşık sistemlerde bile temel prensipleri (girdi doğrulama, konfigürasyon güvenliği, bütünlük kontrolü) aramanız gerektiğini hatırlatan güçlü bir örnektir.


Özet ve Sonraki Adımlar

Bu dersle birlikte, kriptografik implementasyon hatalarını analiz etme yeteneğimizi en üst seviyeye taşıdık.

Anahtar Çıkarımlar:

  • Kerckhoffs Prensibi Esastır: Güvenlik, algoritmanın gizliliğine değil, anahtarın gizliliğine dayanmalıdır. Gizli veya özel algoritmalar her zaman şüpheyle karşılanmalıdır.
  • Standartlardan Sapmalar Tehlikelidir: DES gibi eski algoritmaları veya AES-ECB gibi güvensiz modları kullanmak, standartların ruhunu ihlal etmektir ve ciddi zafiyetlere yol açar.
  • Mantık Hataları En Gizli Olanlardır: Protokolün kendisindeki mantıksal kusurlar (bütünlük eksikliği, doğrulama atlatma, downgrade saldırıları), genellikle en zor tespit edilen ama en yıkıcı etkiye sahip olan zafiyetlerdir.
  • Temel İlkeler Evrenseldir: İncelenen sistem ne kadar karmaşık olursa olsun (basit bir token mekanizmasından ZKP'ye kadar), bütünlük, kimlik doğrulama ve doğru yapılandırma gibi temel güvenlik prensipleri her zaman geçerlidir.

Bu modülde kriptografinin derinliklerine daldık. Artık odağımızı, dillerin kendisinden kaynaklanan güvenlik tuzaklarına çevireceğiz. Bir sonraki modülümüz Dinamik Dillerde Güvenlik Tuzakları: Python & JavaScript olacak. İlk dersimizde, JavaScript (Node.js) dünyasında sıkça karşılaşılan ve bir uygulamanın tamamını durma noktasına getirebilen düzenli ifade tabanlı hizmet reddi (ReDoS) zafiyetlerini nasıl tespit edeceğimizi öğreneceğiz.