Mode domaine - Scanner TLS/SSL
Mode domaine - Scanner TLS/SSL
Analyse du handshake TLS avec extraction complète de la chaîne de certificats, détection de la suite de chiffrement et détection facultative de l'échange de clés PQ
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
Connexion TCP
Se connecte à l'hôte et au port cibles (par défaut : 443)
Handshake TLS
Effectue le handshake TLS via rustls (TLS 1.2/1.3, backend ring)
Extraction de la chaîne
Extrait la chaîne de certificats complète : serveur + intermédiaires + racine
Détection du chiffrement
Identifie la suite de chiffrement et la méthode d'échange de clés négociées
Analyse cryptographique
Analyse les algorithmes, les tailles de clés et la vulnérabilité quantique
Notation des risques
Calcule les scores de risque quantique pour chaque certificat
Fonctionnalités
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
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
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
Découverte de sous-domaines
Découvre les sous-domaines via l'API WhoisXML pour une couverture de scan plus large (maximum configurable)
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)
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
| Indicateur | Description | Défaut | Requis |
|---|---|---|---|
| --target <HOST> | Nom d'hôte ou adresse IP cible | Aucun | Oui |
| --port <PORT> | Numéro de port cible | 443 | Non |
| --timeout <SECS> | Délai d'expiration de la connexion en secondes | 10 | Non |
| --discover-subdomains | Active la découverte de sous-domaines via l'API WhoisXML | false | Non |
| --subdomain-api-key <KEY> | Clé d'API WhoisXML pour la découverte de sous-domaines | Aucun | Non (requis si --discover-subdomains) |
| --max-subdomains <N> | Nombre maximal de sous-domaines à analyser | 10 | Non |
| --detect-pq-kex | Active la détection de l'échange de clés PQ par capture de paquets | false | Non |
| --interface <NAME> | Interface réseau pour la capture de paquets (utilisée avec --detect-pq-kex) | Détection automatique | Non |
| --output <FILE> | Chemin du fichier de sortie | stdout | Non |
| --format <FMT> | Format de sortie : json, yaml, terminal ou html | json | Non |
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 :
- Construit un client
rustls(backend ring, TLS 1.2/1.3). - Se connecte à l'hôte et effectue le handshake TLS.
- Extrait la chaîne de certificats complète (serveur, intermédiaires, racine).
- Enregistre la suite de chiffrement, l'échange de clés et la version de protocole négociés.
- Détecte facultativement l'échange de clés post-quantique (par ex. X25519MLKEM768) par capture de paquets lorsque
--detect-pq-kexest défini. - 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
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 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.