Bu rehber, Nuclei'yi yalnız size ait veya test izni verilmiş sistemlerde güvenli biçimde kullanmak için kapsam yönetimi, düşük hızlı tarama, özel template yazımı, matcher/extractor tasarımı, false positive azaltma ve CI/CD entegrasyonunu ele alır. İnternette rastgele hedef taramak hem etik hem hukuki risk taşır; teknik olarak mümkün olması yetki anlamına gelmez.
1. Nuclei nasıl çalışır?
Nuclei motoru hedef listesini ve seçilen template'leri alır, template içindeki protokol adımlarını çalıştırır, yanıtı matcher koşullarıyla değerlendirir ve gerektiğinde extractor alanlarını çıktıya ekler. HTTP dışında DNS, TCP, dosya ve başka protokoller de desteklenir.
| Bileşen | Görev | Güvenlik notu |
|---|---|---|
| Target | Test edilecek varlık | Yazılı kapsam olmadan eklenmemeli |
| Template | İstek ve doğrulama mantığı | Kaynağı ve sürümü incelenmeli |
| Matcher | Bulguyu doğrulayan koşul | Tek zayıf kelimeye dayanmamalı |
| Extractor | Yanıttan bağlam çıkarır | Secret veya kişisel veri yazdırmamalı |
| Rate limit | Trafik hızını sınırlar | Üretim kapasitesine göre düşük başlamalı |
| Output | Bulguyu kaydeder | Hassas yanıt gövdeleri korunmalı |
2. Önce kapsam dosyası
Tarama komutundan önce kapsamın sahibi, başlangıç/bitiş zamanı, izin verilen alan adları, portlar, kimlik doğrulama yöntemi ve yasaklanan test türleri belgelenmelidir. Otomatik keşif çıktısını doğrudan Nuclei'ye vermek, üçüncü taraf CDN veya SaaS uçlarını yanlışlıkla kapsama alabilir.
CODE TERMINAL
# scope.txt yalnız yetkili hedefleri içermeli
https://app.example.test
https://api.example.testWildcard izinleri bile sınırlandırılmalı. DNS'te aynı alan adı altında bulunan her host aynı iş birimine ait olmayabilir. Redirect sonrası hedefin kapsam dışına çıkması, kimlik doğrulamalı isteklerin başka origin'e taşınması ve paylaşımlı barındırma özellikle kontrol edilmelidir.
3. Güvenli ilk tarama
İlk çalıştırmada düşük eşzamanlılık, düşük istek hızı ve yalnız pasif/zararsız template grubu seçilmelidir. Aşağıdaki örnek belge amaçlı example.test alanını kullanır:
CODE TERMINAL
nuclei -list scope.txt \
-severity info,low,medium,high,critical \
-exclude-tags fuzz,dos,intrusive \
-rate-limit 5 \
-bulk-size 2 \
-concurrency 2 \
-json-export nuclei-results.jsonProjectDiscovery belgelerine göre -rate-limit toplam istek hızında üst sınırdır ve concurrency ile bulk-size değerlerinden önceliklidir. Üretimde varsayılan hızlara güvenmek yerine uygulamanın kapasitesi, WAF davranışı ve bakım penceresine göre küçük bir değerle başlayın.
4. Template yapısı
Bir template benzersiz id, bilgi/metadata bloğu, protokol isteği ve en az bir doğrulama mantığı taşır. Basit bir güvenlik başlığı kontrolü şöyle yazılabilir:
CODE TERMINAL
id: trsiber-hsts-check
info:
name: HSTS Header Control
author: security-team
severity: info
description: Authorized HTTPS endpoints without HSTS
tags: misconfig,headers,hsts
http:
- method: GET
path:
- "{{BaseURL}}/"
redirects: false
matchers:
- type: dsl
dsl:
- "status_code >= 200 && status_code < 400"
- "!contains(tolower(all_headers), 'strict-transport-security:')"
condition: andBu template bir zafiyeti sömürmez; HTTPS yanıtında HSTS başlığının bulunmadığını işaretler. severity: info seçimi bilinçlidir: başlık eksikliği bağlama göre risk oluşturur, tek başına kritik açık değildir.
5. Matcher kalitesi
False positive'lerin büyük kısmı zayıf matcher tasarımından doğar. Yalnız HTTP 200 görmek veya gövdede tek bir kelime aramak çoğu zaman yeterli değildir. Durum kodu, başlık, gövde yapısı ve gerekiyorsa sürüm koşulu birlikte doğrulanmalıdır.
- status matcher: Beklenen HTTP durumlarını sınırlar.
- word matcher: Belirli başlık veya gövde işaretlerini arar.
- regex matcher: Değişken metin örüntülerini yakalar; aşırı geniş desenlerden kaçınılır.
- dsl matcher: Birden fazla alanı mantıksal ifadeyle birleştirir.
- binary matcher: Dosya veya protokol imzasını bayt düzeyinde doğrular.
Matcher koşulunu "and" yapmak her zaman daha iyi değildir; ürünün farklı sürümlerinde değişen meşru yanıtlar kaçırılabilir. Gerçek pozitif, gerçek negatif ve hata sayfası örnekleriyle test matrisi oluşturun.
6. Extractor güvenliği
Extractor yanıt içinden sürüm, başlık veya kimlik gibi bağlam çıkarabilir. Fakat ham token, session cookie, parola sıfırlama bağlantısı veya kişisel veri çıktıya yazdırılmamalı. Dinamik akışta sonraki istekte kullanılacak değerler için resmî belgelerde internal: true önerilir.
CODE TERMINAL
extractors:
- type: regex
name: app_version
part: body
group: 1
regex:
- 'data-version="([0-9.]+)"'Gereksiz extractor eklemek raporu büyütür ve hassas veri riskini artırır. Bulguyu doğrulamak için gereken en az alanı çıkarın; çıktı dosyalarını erişim kontrollü ve süreli saklayın.
7. Template doğrulama ve test
Yeni template canlı hedefe gönderilmeden önce sözdizimi doğrulanmalı:
CODE TERMINAL
nuclei -validate -t templates/trsiber-hsts-check.yaml
nuclei -target https://app.example.test -t templates/trsiber-hsts-check.yaml -debugDebug çıktısı hassas header veya cookie içerebilir; ortak terminal kaydına veya CI loguna bırakılmamalı. Test ortamında pozitif/negatif fixture endpoint'leri kurmak, canlı sistemde deneme yanılmadan daha güvenlidir.
8. Template tedarik zinciri
Topluluk template'leri kod gibi değerlendirilmelidir. Bir YAML dosyası yalnız arama yapmıyor; istek gönderiyor, headless tarayıcı çalıştırabiliyor veya dış etkileşim servisi kullanabiliyor olabilir. Güncelleme öncesi değişiklikleri inceleyin, onaylı commit/sürümü sabitleyin ve kurum içi repository'de allowlist uygulayın.
- Template kaynağı ve commit kimliği kayıtlı mı?
- Fuzz, headless, code veya OAST adımı var mı?
- İstek gövdesi veri değiştiriyor mu?
- Redirect ve DNS çözümlemesi kapsam dışına çıkabilir mi?
- Harici etkileşim servisine hedef verisi gidiyor mu?
- Matcher gerçekten açığı mı, yalnız ürün varlığını mı doğruluyor?
Harici etkileşim gerekmeyen taramalarda -no-interactsh kullanmak beklenmeyen dış veri aktarımını önlemeye yardımcı olur.
9. Kimlik doğrulamalı tarama
Giriş sonrası yüzeyler çoğu kritik hatanın bulunduğu alandır; ancak test hesabı en az yetkili olmalı ve üretim verisine erişmemelidir. Nuclei kimlik doğrulama dosyaları secret sayılır. Repository'ye eklenmemeli, CI secret deposundan kısa ömürlü alınmalı ve loglarda maskelenmelidir.
Her rol için ayrı test hesabı kullanmak IDOR ve yetki sınırı kontrollerini kolaylaştırır. Yönetici token'ını bütün taramalara vermek hem bulgu kalitesini bozar hem sızıntı etkisini büyütür.
10. CI/CD entegrasyonu
Her committe bütün template kütüphanesini çalıştırmak yavaş ve gürültülüdür. Katmanlı model daha sürdürülebilir:
| Aşama | Kapsam | Beklenen süre |
|---|---|---|
| Pull request | Değişen servise özel güvenli kontroller | Dakikalar |
| Test ortamı dağıtımı | Kimlik doğrulamalı özel template seti | Onlarca dakika |
| Gece taraması | Geniş CVE ve misconfiguration seti | Kontrollü pencere |
| Haftalık doğrulama | Headless/OAST gibi onaylı ağır testler | Bakım penceresi |
Pipeline yalnız yüksek önem derecesine göre bloklanmamalı. Yeni bulgu, doğrulanmış matcher, varlık kritiklik etiketi ve mevcut istisna durumu birlikte değerlendirilmelidir. Bilinen eski bulgular baseline dosyasında tutulabilir; ama istisnaların sahibi ve son kullanma tarihi olmalıdır.
11. Çıktı ve SIEM entegrasyonu
JSON çıktı; template id, hedef, önem derecesi, matcher ve zaman alanlarıyla merkezi sisteme taşınabilir. Ham yanıt gövdesini toplamak yerine gerekli alanları normalize edin. Aynı kök nedenden gelen tekrarları template-id + host + matched-at bileşimiyle gruplayın.
Başarılı taramanın kendisi de izlenmeli: taranan hedef sayısı, template sürümü, hata oranı, timeout, istek hızı ve kapsam dışı engelleme sayısı kaydedilmelidir. Bir gecede sonuçların sıfıra düşmesi ortamın temiz olduğu değil, tarayıcının çalışmadığı anlamına gelebilir.
12. False positive triage
- Template sürümünü ve kaynak commit'i kaydedin.
- Matcher'ın hangi yanıt parçasında eşleştiğini görün.
- CDN/WAF hata sayfasının ürün yanıtı sanılmadığını doğrulayın.
- Sürüm karşılaştırmasının semantik olduğundan emin olun.
- Bulguyu zararsız bağımsız kontrolle yeniden üretin.
- Riskin varlık bağlamında gerçek etkisini belirleyin.
- Template'i düzeltin; yalnız bulguyu kalıcı dışlamayın.
13. Operasyon güvenlik kontrol listesi
- Yazılı kapsam ve bakım penceresi onaylı mı?
- Üçüncü taraf ve paylaşımlı altyapı dışlanmış mı?
- Rate limit düşük değerden başlayıp ölçümle mi artırıldı?
- Fuzz, DoS, intrusive, headless ve OAST template'leri ayrı onaya bağlı mı?
- Template kaynağı sürümlenmiş ve kod incelemesinden geçmiş mi?
- Kimlik bilgileri kısa ömürlü ve loglardan maskeli mi?
- Extractor'lar secret veya kişisel veri yazdırıyor mu?
- False positive ve istisna süreçlerinin sahibi var mı?
- Tarama başarısızlığı ayrıca alarm üretiyor mu?
Sonuç
Nuclei'nin gücü çok sayıda isteği hızlı göndermesinde değil, güvenlik bilgisini okunabilir ve tekrar üretilebilir template'lere dönüştürmesindedir. Dar kapsam, düşük hız, incelenmiş template, güçlü matcher, sınırlı extractor ve ölçülebilir CI/CD kapıları birlikte kullanıldığında Nuclei, gürültülü bir tarayıcıdan sürdürülebilir bir tespit kontrolüne dönüşür.
Resmî kaynaklar
- ProjectDiscovery: Running Nuclei
- Nuclei Template Structure
- Nuclei Matchers
- Nuclei Extractors
- Nuclei Authenticated Scans
TR Siber Ekibi