Go’da güvenli kodlama ve sık yapılan hatalar
Go programlarında sık görülen güvenlik hatalarını kendi lab’ındaki zayıf bir serviste bulur, düzeltir ve aynı hatanın geri gelmesini test ve analizle engellersin.
Seviye 401 · 19 ders · 18 pratik lab
Dersler
Girdi ve enjeksiyon
- Güvenilmeyen girdi: sınırlar, türler ve boyut
- SQL enjeksiyonu: fmt.Sprintf ile sorgu kurmamak
- Komut enjeksiyonu: exec.Command ve kabuk tuzağı
- Yol geçişi: filepath.Join yetmez, os.Root kullan
- Şablonlarda XSS: text/template ile html/template farkı
- Kısa görev: zayıf serviste üç enjeksiyon açığını kapat
Ağ ve kripto hataları
- SSRF: kullanıcının verdiği adrese istek atmak
- InsecureSkipVerify ve sertifika doğrulamayı kapatmanın bedeli
- Kripto hataları: math/rand, sabit anahtar, kendi şifren
- Zamanlama sızıntısı: subtle.ConstantTimeCompare
- Hizmet aksatma: sınırsız okuma, zip bombası, regex
- Kısa görev: belirteç üretimini ve doğrulamasını düzelt
Dile özgü tuzaklar ve araçlar
- Tamsayı dönüşümleri ve taşma
- Yarış durumu bir güvenlik açığı olduğunda
- Hata mesajı sızıntısı ve kontrolsüz panic
- govulncheck ile bağımlılık açıkları
- gosec ile statik güvenlik analizi
- Kısa görev: test hattına güvenlik kapısı ekle
Bitirme
- Bitirme görevi: zayıf dosya paylaşım servisini denetle, düzelt ve raporla
Pratik lablar
- Güvenilmeyen girdiye sınır koymak: Sınırsız gövde okuyan ve sayfa parametresini denetlemeyen işleyiciye boyut, tür ve aralık denetimleri ekle.
- Sprintf ile kurulan sorguları kapatmak: Filtre ve sıralama parametrelerini sorguya ekleyen rapor uç noktasını yer tutucular ve sütun izin listesiyle düzelt, regresyon testi ekle.
- Zayıf hizmetteki üç enjeksiyonu kapatmak: Kendi lab hizmetinde kabuk üzerinden komut çalıştıran, sorgu birleştiren ve text/template ile HTML basan üç yeri bul, düzelt ve her biri için test yaz.
- Kabuk üzerinden çalışan komutu ayırmak: sh -c ile çalışan tanılama komutunu argümanları ayrı veren exec.Command'a çevir ve ana makine adını doğrula.
- Dosya indirmede dizin dışına çıkışı engellemek: filepath.Join ile yetinen indirme işleyicisini os.Root kullanacak şekilde düzelt; üst dizin ve simgesel bağ denemelerinin reddedildiğini test et.
- Arşiv açmayı yol ve boyut sınırlarıyla sertleştirmek: Yüklenen zip dosyasını açan kodu hedef dışına yazmayı, aşırı şişen içeriği ve dosya sayısı patlamasını engelleyecek şekilde sertleştir.
- Belirteç üretimini crypto/rand'e taşımak: math/rand ile üretilen sıfırlama belirtecini crypto/rand ile değiştir ve yeterli uzunlukta, adres için güvenli kodlamayla döndür.
- Belirteç doğrulamasını sabit zamanlı yapmak: İmza karşılaştırmasını subtle.ConstantTimeCompare ile yap, koda gömülü anahtarı ortamdan al ve InsecureSkipVerify kullanımını kaldır.
- Web kancası adreslerinde SSRF'i kapatmak: Kullanıcının verdiği adrese istek atan web kancası göndericisinde iç ağ, döngü ve yönlendirme yoluyla erişimi bağlantı anında denetleyerek engelle.
- Tam sayı dönüşümünde kırpılmayı önlemek: Kullanıcıdan gelen 64 bitlik uzunluğu int32'ye çevirip tampon ayıran kodda aralık denetimi ekle ve negatif değeri reddet.
- Hata iletilerinden sızan ayrıntıyı kesmek: İstemciye SQL hatası ve dosya yolu döndüren işleyicilerde genel ileti ve istek kimliği kullan; ayrıntıyı yalnızca günlüğe yaz ve paniği yakala.
- Güvenlik açığına dönüşen yarışı kapatmak: Aynı kuponun eşzamanlı isteklerle iki kez kullanılabildiği kodda denetim ve işaretlemeyi tek atomik adıma indir; yüz eşzamanlı denemede tek başarı olmalı.
- Açıklı bağımlılığı govulncheck ile bulup yükseltmek: Çevrimdışı açık veritabanıyla govulncheck çalıştır; gerçekten çağrılan açıklı fonksiyonu bul ve modülü güvenli sürüme yükselt.
- Sınırsız okuma ve pahalı desenleri sınırlamak: io.ReadAll ile gövdeyi sınırsız okuyan ve her istekte desen derleyen işleyiciyi sınırla; bellek ve süre testlerini geç.
- Test hattına güvenlik kapısı eklemek: gosec ve govulncheck'i test betiğine ekle; yanlış alarmları gerekçeli olarak işaretle, gerçek bulguları düzelt ve kapının yeni bulguda kırıldığını göster.
- Statik güvenlik taraması bulgularını ayıklamak: Projeyi gosec ile tara; gerçek bulguları düzelt, yanlış alarmları gerekçesiyle işaretle ve taramanın temiz çıktığını göster.
- Girişten sonraki yönlendirme adresini doğrulamak: Giriş sonrası kullanıcıyı next parametresindeki adrese yollayan işleyiciyi yalnızca site içi göreli yolları kabul edecek şekilde düzelt; dış adreslerde ana sayfaya dönülsün.
- Yinelenen nonce kullanan şifrelemeyi düzeltmek: Sabit nonce ile AES-GCM kullanan belirteç şifreleme kodunu her iletide rastgele nonce üretecek şekilde düzelt, anahtarı ortamdan al ve değiştirilmiş iletilerin reddedildiğini testle göster.
Kurs hakkında
Go programlarında sık görülen güvenlik hatalarını kendi lab’ındaki zayıf bir serviste bulur, düzeltir ve aynı hatanın geri gelmesini test ve analizle engellersin.
Ne öğreneceksin
- Girdi ve enjeksiyon
- Ağ ve kripto hataları
- Dile özgü tuzaklar ve araçlar
- Bitirme
Ön koşullar
Aynı yolun 301 düzeyine kadar olan konularını uygulamış olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 401 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.