OPEN BETA
OPEN BETA
CDN BYPASS & ORIGIN-ERKENNUNG

🎯 Origin-IP-Hunting

Acht passive Erkennungsvektoren identifizieren die echte Server-IP hinter Cloudflare, AWS CloudFront und anderen CDN-/WAF-Providern — für Bypass-Verifikation, Angreifer-Perspektiven-Analyse und vollständige Attack-Surface-Abdeckung.

8Erkennungsvektoren
0–1.0Konfidenz-Score
PassivKein direkter Kontakt
BypassWAF-Umgehung prüfen

// Warum Origin-IP-Erkennung?

CDN- und WAF-Provider wie Cloudflare, Fastly oder AWS CloudFront proxyen eingehenden Traffic und verbergen die echte Server-IP. Für Angreifer — und für Sicherheitsteams, die Angreifer-Perspektiven simulieren — ist die Origin-IP der eigentliche Angriffsvektor. Direkter Zugriff auf die Origin umgeht alle WAF-Regeln, Rate-Limits und DDoS-Schutzmechanismen des CDN vollständig.

Bypass-Konsequenzen

  • Vollständige WAF-Umgehung (SQL-Injection, XSS ungeblockt)
  • Rate-Limiting und DDoS-Schutz inaktiv
  • Bot-Management und Challenge-Seiten übersprungen
  • TLS-Zertifikat zeigt echten Hostnamen / SAN
  • Direkter Zugriff auf Management-Ports (8080, 8443, 9090)

CDN-Provider im Scope

  • Cloudflare (AS13335) — häufigster Fall
  • AWS CloudFront (AS16509)
  • Fastly (AS54113)
  • Akamai (AS20940)
  • Imperva / Incapsula
  • Sucuri / GoDaddy WAF
  • Azure Front Door (AS8075)

// Die 8 Erkennungsvektoren

Der YADS Origin-IP-Scanner kombiniert acht passive Techniken, die ausschließlich öffentliche Quellen und eigene historische Daten nutzen. Kein direkter Kontakt zur Origin-IP findet statt, bis der Bypass-Verifikationsschritt explizit ausgelöst wird.

VektorMethodeKonfidenz-GewichtQuellen
Historische DNS-EinträgeDNS-History aus SecurityTrails, Netlas — A-Records vor CDN-Migration+0.20SecurityTrails API, Netlas
SSL/TLS-Zertifikat-Transparenzcrt.sh CT-Logs — SANs und Issuer-Ketten enthalten oft Origin-IPs+0.15 (cert match)crt.sh, Google CT
MX-/Mail-Server-KorrelationMX-Record → Mail-Server-IP häufig aus gleichem /24 wie Origin+0.20DNS-Resolver
SPF-Record-AnalyseSPF ip4:-Blöcke enthalten oft Origin-IP-Ranges+0.20TXT-DNS-Query
Subdomain-EnumerationNicht-CDN-geroutete Subdomains (staging, dev, mail, vpn) zeigen Origin+0.20YADS Subdomain-Scanner
Shodan / Censys Reverse-LookupHTTP-Response-Header-Fingerprint → passende IPs im Internet-Scan+0.20Shodan, Censys.io
BGP-Routing-AnalyseASN des CDN-Anbieters vs. Registrar-ASN — Nicht-CDN-IPs im gleichen AS+0.10BGPView, RIPE
HTTP-Header-LeakServer-, X-Powered-By-, Via-Header enthalten gelegentlich private IPs+0.15HTTP-Response (via CDN)

// Konfidenz-Scoring & Kandidaten-Aggregation

Jeder Erkennungsvektor liefert IP-Kandidaten mit einem Gewicht. Die Kandidaten werden dedupliziert, Gewichte über alle Vektoren summiert, und das Ergebnis auf [0.0, 1.0] normalisiert. Ein Konfidenz-Score ≥ 0.6 qualifiziert einen Kandidaten für die optionale Bypass-Verifikation.

async def score_origin_candidates(domain: str, vectors: list[VectorResult]) -> list[OriginCandidate]: scores: dict[str, float] = defaultdict(float) sources: dict[str, list[str]] = defaultdict(list) for vector in vectors: for ip, weight in vector.candidates: if not _is_cdn_ip(ip): # CDN-eigene IPs ausfiltern scores[ip] += weight sources[ip].append(vector.name) candidates = [] for ip, raw_score in scores.items(): confidence = min(raw_score, 1.0) # Cap auf 1.0 # Bonus: TLS-Zertifikat enthält Hostname-Match if _cert_matches_domain(ip, domain): confidence = min(confidence + 0.15, 1.0) candidates.append(OriginCandidate( ip=ip, confidence=confidence, sources=sources[ip], asn=_lookup_asn(ip), bypass_verified=False, # Erst nach aktivem Verify )) return sorted(candidates, key=lambda c: c.confidence, reverse=True)
Konfidenz-BereichBewertungYADS-Befund
0.0 – 0.29Niedrig — einzelner Vektor, unbestätigtInfo
0.30 – 0.59Mittel — mehrere Vektoren, nicht verifiziertLow
0.60 – 0.79Hoch — starke Übereinstimmung mehrerer QuellenMedium
0.80 – 0.99Sehr hoch — TLS-Match + mehrere VektorenHigh
1.0 (Bypass verified)Bestätigt — direkter HTTP-Request lieferte echten ResponseCritical

// Bypass-Verifikation

Nach der passiven Erkennung kann der Operator optional die Bypass-Verifikation aktivieren. YADS sendet dabei einen HTTP-Request direkt an die Kandidaten-IP mit dem Host:-Header der Zieldomain und vergleicht Response-Code, Content-Length und Body-Fragment mit der CDN-vermittelten Response. Eine Übereinstimmung beweist den erfolgreichen WAF-Bypass.

async def verify_bypass(candidate: OriginCandidate, domain: str) -> BypassResult: cdn_response = await _fetch_via_cdn(domain) # Direkter Request an Origin-IP mit Host-Header-Spoofing direct_response = await _fetch_direct( ip=candidate.ip, host_header=domain, timeout=10, verify_tls=False, # Self-signed cert auf Origin erwartet ) similarity = _compare_responses(cdn_response, direct_response) return BypassResult( ip=candidate.ip, bypass_confirmed=similarity >= 0.85, confidence=1.0 if similarity >= 0.85 else candidate.confidence, cdn_status=cdn_response.status, direct_status=direct_response.status, body_similarity=similarity, waf_bypassed=direct_response.status == cdn_response.status and similarity >= 0.85, )
EigenschaftWert
Modul-Nameorigin_ip_discovery (Add-On, Enterprise)
Bypass-VerifikationOpt-in — muss pro Scan explizit aktiviert werden
Max. Kandidaten10 pro Domain (konfigurierbar)
CDN-IP-AusschlusslisteAutomatisch aktualisiert aus AS-Routing-Daten (AS13335, AS16509, AS54113 u.a.)
Externe APIsSecurityTrails (API-Key), Shodan (API-Key), Censys (optional)
Befund-SchweregradCritical wenn Bypass verifiziert; High bei Konfidenz ≥ 0.8