Nuclei, ProjectDiscovery tarafından geliştirilen şablon tabanlı bir güvenlik tarayıcısıdır. Binlerce hazır şablonla bilinen zafiyetleri, yanlış yapılandırmaları ve bilgi sızıntılarını denetleyebilir; asıl değerini ise kurumun kendi uygulamasına özgü kontrolleri küçük, sürümlenebilir YAML şablonlarına dönüştürdüğünde gösterir.

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şenGörevGüvenlik notu
TargetTest edilecek varlıkYazılı kapsam olmadan eklenmemeli
Templateİstek ve doğrulama mantığıKaynağı ve sürümü incelenmeli
MatcherBulguyu doğrulayan koşulTek zayıf kelimeye dayanmamalı
ExtractorYanıttan bağlam çıkarırSecret veya kişisel veri yazdırmamalı
Rate limitTrafik hızını sınırlarÜretim kapasitesine göre düşük başlamalı
OutputBulguyu kaydederHassas 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.test


Wildcard 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.json


ProjectDiscovery 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: and


Bu 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 -debug


Debug çı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şamaKapsamBeklenen süre
Pull requestDeğişen servise özel güvenli kontrollerDakikalar
Test ortamı dağıtımıKimlik doğrulamalı özel template setiOnlarca dakika
Gece taramasıGeniş CVE ve misconfiguration setiKontrollü pencere
Haftalık doğrulamaHeadless/OAST gibi onaylı ağır testlerBakı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


  1. Template sürümünü ve kaynak commit'i kaydedin.
  2. Matcher'ın hangi yanıt parçasında eşleştiğini görün.
  3. CDN/WAF hata sayfasının ürün yanıtı sanılmadığını doğrulayın.
  4. Sürüm karşılaştırmasının semantik olduğundan emin olun.
  5. Bulguyu zararsız bağımsız kontrolle yeniden üretin.
  6. Riskin varlık bağlamında gerçek etkisini belirleyin.
  7. 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

TR Siber Ekibi Yazar · X
Kaynak bağlantısı ← Ana sayfaya dön