Ünite 4 / 11

Güvenlik Açığı Tarama: Yaygın Zafiyet Kalıpları ve Otomatik Analiz

Kazanimlar:

  • Reentrancy, erişim kontrolü, oracle manipülasyonu ve front-running gibi yaygın zafiyet kalıplarını tanıyıp statik analiz aracı + yapay zeka + insanla birlikte tarayabilme
  • Yapay zekanın araç çıktısını açıklama ve yanlış pozitif önceliklendirmede güçlü, MEV ve iş mantığında zayıf olduğunu ayırt edebilme
  • 'Temiz tarama'nın bir güvenlik sertifikası olmadığını, taramanın denetimin yalnızca bir katmanı olduğunu kavrayabilme

Bir önceki ünitede denetimin bütünsel disiplinini gördük. Bu ünitede daha teknik bir konuya odaklanıyoruz: güvenlik açığı tarama (vulnerability scanning — kodda bilinen zafiyet kalıplarını sistematik arama). Burada YZ'yi, statik analiz araçlarıyla birlikte, bilinen zafiyet kalıplarını tarayan ve açıklayan bir asistan olarak kullanacağız. Amaç: en sık zafiyetleri derinlemesine tanımak ve YZ'nin bunları taramada nerede güvenilir, nerede yetersiz olduğunu ayırt etmek.

Statik ve dinamik tarama

Tarama iki türdür. Statik analiz (static analysis — kodu çalıştırmadan inceleme): Slither, Mythril gibi araçlar sözleşme kodunu tarayıp bilinen kalıpları işaretler. Dinamik/sembolik analiz (kodu farklı girdilerle çalıştırıp veya matematiksel olarak keşfederek): fuzzing (rastgele girdi bombardımanı) ve sembolik yürütme (tüm olası yolları keşfetme) bu gruba girer.

YZ bu araçların yerine geçmez, onları tamamlar: araç bir uyarı verdiğinde YZ uyarıyı sade dille açıklar; araç bir kalıbı kaçırdığında YZ hatırlatabilir; ama YZ tek başına ne kadar taradığını garanti edemez. Doğru iş akışı: araç + YZ + insan.

İpucu: YZ'ye bir statik analiz aracının çıktısını (ör. Slither raporunu) verip "her uyarıyı sade dille açıkla, hangileri gerçek risk hangileri yanlış pozitif olabilir?" diye sorun. YZ, ham araç çıktısını insana anlaşılır ve önceliklendirilebilir hale getirmede çok değerlidir.

En sık zafiyet kalıpları

1. Reentrancy (yeniden giriş). Bir fonksiyon, durumunu güncellemeden harici bir sözleşmeyi çağırırsa, çağrılan sözleşme geri dönüp aynı fonksiyonu tekrar tetikleyebilir ve fonu defalarca çekebilir. Çözüm: checks-effects-interactions (önce kontrol et, sonra durumu güncelle, en son harici çağrı yap) sırası ve reentrancy guard.

2. Erişim kontrolü eksikliği. Kritik bir fonksiyonun (para çekme, basma, yükseltme) yanlışlıkla herkese açık olması. En sık ve en pahalı hatalardandır.

3. Oracle manipülasyonu. Sözleşmenin dış bir fiyat kaynağına (oracle) körü körüne güvenmesi. Saldırgan fiyatı anlık manipüle edip protokolü kandırır. Çözüm: zaman-ağırlıklı ortalama fiyat (TWAP), çoklu kaynak.

4. Tamsayı taşması/altına düşme. Bir sayının izin verilen en büyük değeri aşıp başa dönmesi. Modern Solidity çoğunu otomatik yakalar ama düşük seviye (assembly) kodda risk sürer.

5. Front-running (öne geçme). İşlemler onaylanmadan önce herkese açık havuzda (mempool) görünür; saldırgan sizin işleminizi görüp önüne kendi işlemini sokabilir. MEV (Maximal Extractable Value — işlem sıralamasından çıkarılan değer) bu konunun genel adıdır.

6. Denial of Service (DoS). Bir döngünün çok pahalı hale gelip fonksiyonu kullanılamaz kılması, ya da bir adrese bağımlılığın kilitlenmesi.

7. Yükseltme (upgrade) riskleri. Yükseltilebilir sözleşmelerde depolama çakışması (storage collision) ve yetki kötüye kullanımı.

Zafiyet

YZ tarama güveni

Neden

Reentrancy

Yüksek

İyi bilinen, net kalıp

Erişim kontrolü

Yüksek

Kalıp taranabilir

Tamsayı işlemleri

Yüksek

Standart kontrol

Oracle manipülasyonu

Orta

Bağlam gerektirir

Front-running/MEV

Orta-Düşük

Protokole özgü

İş mantığı hatası

Düşük

Özgün, bağlamsal

Zayıf prompt / Güclü prompt

Zayıf prompt:

Bu kodda açık var mı?

Güçlü prompt:

Rolün: güvenlik tarama asistanı. Aşağıdaki sözleşmeyi şu bilinenkalıplar için tara ve her biri için "risk var/yok/emin değilim"de: reentrancy, erişim kontrolü, tamsayı işlemleri, oraclebağımlılığı, front-running, DoS, upgrade güvenliği. Her tespitiilgili satıra bağla ve neden risk olduğunu açıkla. Bunlar birstatik analiz aracıyla ve denetçiyle DOĞRULANACAK hipotezlerdir.Yanlış pozitif olabileceğini de belirt.

Dört kopyalanabilir şablon

1) Araç çıktısı açıklama:

Aşağıda bir statik analiz aracının (Slither) raporu var. Heruyarıyı sade dille açıkla: ne anlama geliyor, gerçek risk miyoksa muhtemel yanlış pozitif mi, önceliği ne olmalı? Kesinkarar verme; denetçinin teyidi için önceliklendir.

2) Reentrancy odaklı tarama:

Bu sözleşmede harici çağrı yapan tüm fonksiyonları bul. Herbiri için checks-effects-interactions sırasına uyulmuş mu,reentrancy guard var mı incele. Riskli olanları satırla göster.Emin olmadığını işaretle; exploit kodu üretme.

3) Erişim kontrolü haritası:

Bu sözleşmedeki tüm dış (external/public) fonksiyonları listeleve her biri için "kim çağırabilir" (herkes / sahip / rol) çıkar.Kritik işlem (para çekme, basma, yükseltme) yapıp erişim kontrolüzayıf olanları işaretle. Tabloyla sun.

4) Yanlış pozitif eleme:

Bu tarama uyarısının neden GERÇEK bir risk olmayabileceğini(yanlış pozitif) değerlendir: hangi bağlam veya kod koşulu buuyarıyı geçersiz kılar? Ama "kesin sorun yok" deme; teyitgereken noktaları listele.

Üç mini vaka (sayılarla)

Vaka 1 — Araç + YZ verimi ikiye katladı. Bir ekip 12 sözleşmelik bir projede Slither çalıştırdı ve 140 uyarı aldı. YZ'ye uyarıları açıklatıp önceliklendirtince, 140 uyarının 95'inin yanlış pozitif olduğu anlaşıldı; ekip 45 gerçek adaya odaklandı. Triyaj süresi 2 güne değil 5 saate indi. Ders: YZ araç çıktısını insanileştirmede güçlü.

Vaka 2 — MEV'i YZ kaçırdı. Bir DEX (merkeziyetsiz borsa) sözleşmesinde YZ standart kalıpları temiz buldu ama bir front-running açığını göremedi; çünkü bu, protokolün işlem sıralamasına özgüydü. İnsan denetçi ve simülasyon yakaladı. Ders: MEV/front-running gibi protokole özgü riskler YZ'nin zayıf alanı.

Vaka 3 — Yanlış pozitife zaman harcanması önlendi. YZ, bir reentrancy uyarısının aslında yanlış pozitif olduğunu (fonksiyon zaten guard'lıydı) açıklayınca, ekip gereksiz bir yeniden yazımdan kurtuldu. Ama ekip yine de tek testle teyit etti. Ders: YZ önceliklendirir; teyit yine testle gelir.

Taramanın sınırları

Tarama, bilinen kalıpları bulur. Yeni, özgün ya da protokole özgü bir zafiyeti ne araç ne YZ garantili bulur. Bu yüzden tarama, denetimin bir parçasıdır; kendisi değil. "Tarama temiz çıktı, demek ki güvenli" düşüncesi, bu alandaki en tehlikeli yanılgılardandır. Tarama, düşük asılı meyveleri toplar; derin ve özgün riskler için insan uzmanlığı, test, fuzzing ve resmî denetim şarttır.

Dikkat: Bir tarama aracının veya YZ'nin "temiz" raporu, bir güvenlik sertifikası değildir. Onu öyle sunmak — özellikle yatırımcılara — yanıltıcı ve etik dışıdır.

Sık yapılan hatalar

  • Taramayı denetimin yerine koymak. Tarama bir katmandır, tümü değil.
  • YZ'yi araçsız kullanmak. Statik analiz + YZ + insan birlikte çalışır.
  • Yanlış pozitifleri teyitsiz elemek. Her eleme test/insanla doğrulanır.
  • Protokole özgü riskleri (MEV) YZ'ye güvenip atlamak. YZ'nin zayıf alanı.
  • "Temiz tarama" = "güvenli" sanmak. Bilinmeyeni bulamaz.
  • Exploit kodu ürettirmek. Yalnızca savunma amaçlı risk tarifi meşrudur.

Özetle

  • Güvenlik açığı tarama, bilinen zafiyet kalıplarını araç + YZ + insanla arar.
  • YZ, statik analiz araç çıktısını açıklama ve önceliklendirmede güçlüdür.
  • Reentrancy ve erişim kontrolü gibi net kalıplarda güvenilir; MEV ve iş mantığında zayıf.
  • Yanlış pozitif elemesi bile teyit gerektirir.
  • "Temiz tarama" güvenlik sertifikası değildir; denetimin yerine geçmez.

Uygulama görevi

Bir örnek sözleşme üzerinde (mümkünse) bir statik analiz aracı çalıştırın veya hazır bir Slither raporu bulun. YZ'ye "araç çıktısı açıklama" promptunu uygulayın. YZ'nin: (1) uyarıları doğru açıklayıp açıklamadığını, (2) yanlış pozitif ayrımını mantıklı yapıp yapmadığını, (3) protokole özgü bir riski atlayıp atlamadığını değerlendirin. Bir tabloda "araç buldu / YZ açıkladı / insan teyit etti" sütunlarını doldurun.

Kontrol listesi

  • [ ] Taramayı denetimin bir katmanı olarak konumlandırdım.
  • [ ] Statik analiz aracı + YZ + insanı birlikte kullandım.
  • [ ] Bilinen kalıpları kategori kategori taradım.
  • [ ] Yanlış pozitifleri teyitle eledim.
  • [ ] MEV/iş mantığı gibi zayıf alanlarda insana güvendim.
  • [ ] "Temiz tarama"yı güvence olarak sunmadım.
  • [ ] Yalnızca savunma amaçlı çalıştım; exploit üretmedim.