Aller au contenu principal

Mode domaine - Scanner TLS/SSL

S'applique à :
TLS 1.2 / TLS 1.3Certificate Chain ExtractionCipher Suite & Key Exchange DetectionSubdomain Discovery (WhoisXML API)PQ Key Exchange Detectionv1.0.0
Statut

Implémenté - Disponible en v1.0.0. Développé en Rust avec rustls (avec le backend ring) pour le handshake TLS et x509-parser pour l'analyse des certificats.

Vue d'ensemble​

Le mode domaine effectue une analyse TLS active des points de terminaison distants. Il se connecte à un hôte cible, effectue un handshake TLS via rustls et extrait la chaîne de certificats complète (certificat serveur, intermédiaires et racine). Il détecte également la suite de chiffrement et l'algorithme d'échange de clés négociés. Le mode domaine prend en charge la découverte de sous-domaines via l'API WhoisXML et la détection facultative de l'échange de clés post-quantique (X25519MLKEM768, Kyber768) par capture de paquets.

Fonctionnement​

Flux du mode domaine

1

Connexion TCP

Se connecte à l'hôte et au port cibles (par défaut : 443)

2

Handshake TLS

Effectue le handshake TLS via rustls (TLS 1.2/1.3, backend ring)

3

Extraction de la chaîne

Extrait la chaîne de certificats complète : serveur + intermédiaires + racine

4

Détection du chiffrement

Identifie la suite de chiffrement et la méthode d'échange de clés négociées

5

Analyse cryptographique

Analyse les algorithmes, les tailles de clés et la vulnérabilité quantique

6

Notation des risques

Calcule les scores de risque quantique pour chaque certificat

Fonctionnalités​

1 Prise en charge de TLS 1.2 et 1.3

Se connecte avec rustls et le backend ring, prenant en charge les handshakes TLS 1.2 et TLS 1.3

2 Chaîne de certificats complète

Extrait la chaîne complète : certificat feuille (serveur), autorités de certification intermédiaires et autorité de certification racine

3 Suite de chiffrement et échange de clés

Détecte la suite de chiffrement et l'algorithme d'échange de clés négociés lors du handshake

4 Découverte de sous-domaines

Découvre les sous-domaines via l'API WhoisXML pour une couverture de scan plus large (maximum configurable)

5 Détection de l'échange de clés PQ

Capture de paquets facultative pour détecter les échanges de clés post-quantiques (X25519MLKEM768, Kyber768)

6 Formats de sortie multiples

Résultats au format JSON, YAML, terminal ou HTML

Utilisation​

Analyse de base​

# Scan a single domain on default port 443
dke-scanner-agent domain --target example.com

# Scan with custom port
dke-scanner-agent domain --target api.example.com --port 8443

# Scan with output to file
dke-scanner-agent domain --target example.com --output scan-results.json

Options en ligne de commande​

IndicateurDescriptionDéfautRequis
--target <HOST>Nom d'hôte ou adresse IP cibleAucunOui
--port <PORT>Numéro de port cible443Non
--timeout <SECS>Délai d'expiration de la connexion en secondes10Non
--discover-subdomainsActive la découverte de sous-domaines via l'API WhoisXMLfalseNon
--subdomain-api-key <KEY>Clé d'API WhoisXML pour la découverte de sous-domainesAucunNon (requis si --discover-subdomains)
--max-subdomains <N>Nombre maximal de sous-domaines à analyser10Non
--detect-pq-kexActive la détection de l'échange de clés PQ par capture de paquetsfalseNon
--interface <NAME>Interface réseau pour la capture de paquets (utilisée avec --detect-pq-kex)Détection automatiqueNon
--output <FILE>Chemin du fichier de sortiestdoutNon
--format <FMT>Format de sortie : json, yaml, terminal ou htmljsonNon

Exemples avancés​

Architecture​

Le mode domaine utilise rustls avec le backend cryptographique ring pour un handshake TLS purement en Rust, sans dépendance à OpenSSL :

  1. Construit un client rustls (backend ring, TLS 1.2/1.3).
  2. Se connecte à l'hôte et effectue le handshake TLS.
  3. Extrait la chaîne de certificats complète (serveur, intermédiaires, racine).
  4. Enregistre la suite de chiffrement, l'échange de clés et la version de protocole négociés.
  5. Détecte facultativement l'échange de clés post-quantique (par ex. X25519MLKEM768) par capture de paquets lorsque --detect-pq-kex est défini.
  6. Découvre facultativement les sous-domaines via l'API WhoisXML et analyse chacun d'eux.

Exemple de sortie​

{
"scan_metadata": {
"scanner_version": "1.0.0",
"scan_mode": "domain",
"scan_date": "2025-01-30T16:20:15Z"
},
"target": {
"hostname": "api.example.com",
"port": 443,
"ip_address": "93.184.216.34"
},
"tls_info": {
"protocol_version": "TLS 1.3",
"cipher_suite": "TLS_AES_256_GCM_SHA384",
"key_exchange": "X25519"
},
"certificates": [
{
"position": 0,
"type": "leaf",
"subject": "CN=api.example.com",
"issuer": "CN=DigiCert TLS RSA SHA256 2020 CA1",
"serial": "0A1B2C3D4E5F6789",
"not_before": "2024-01-01T00:00:00Z",
"not_after": "2025-12-31T23:59:59Z",
"algorithm": "RSA",
"key_size": 2048,
"signature_algorithm": "SHA256WithRSA",
"is_self_signed": false,
"is_ca": false,
"quantum_vulnerable": true,
"risk_assessment": {
"quantum_risk_score": 8.2,
"priority": "P1",
"severity": "HIGH"
}
},
{
"position": 1,
"type": "intermediate",
"subject": "CN=DigiCert TLS RSA SHA256 2020 CA1",
"issuer": "CN=DigiCert Global Root CA",
"algorithm": "RSA",
"key_size": 2048,
"is_ca": true,
"quantum_vulnerable": true
},
{
"position": 2,
"type": "root",
"subject": "CN=DigiCert Global Root CA",
"issuer": "CN=DigiCert Global Root CA",
"algorithm": "RSA",
"key_size": 2048,
"is_self_signed": true,
"is_ca": true,
"quantum_vulnerable": true
}
]
}

Limitations principales​

X25519 vs X25519MLKEM768

La bibliothèque TLS rustls ne peut pas nativement distinguer les échanges de clés X25519 et X25519MLKEM768. Les deux apparaissent comme X25519 au niveau de l'API rustls. Pour détecter précisément les échanges de clés post-quantiques, utilisez l'indicateur --detect-pq-kex, qui active l'analyse par capture de paquets sur l'interface réseau spécifiée.

La découverte de sous-domaines nécessite une clé d'API

La découverte de sous-domaines s'appuie sur l'API WhoisXML. Vous devez fournir une clé d'API valide via --subdomain-api-key lorsque vous utilisez --discover-subdomains. Le niveau gratuit prend en charge un nombre limité d'appels d'API par mois.

Dépannage​

Bonnes pratiques​