Anàlisi de DNS
L’analitzador DNS correlaciona les consultes amb les seves respostes i mesura la latència de resolució.
Correlació de consulta/resposta
lippycat associa les consultes DNS amb les seves respostes utilitzant l’identificador de transacció (un identificador de 16 bits a la capçalera DNS). Quan es correlaciona una resposta, el camp QueryResponseTimeMs mostra el temps d’anada i tornada en mil·lisegons.
sequenceDiagram
participant Client
participant Resolver
Client->>Resolver: Query (TxID: 0xA1B2, A record for example.com)
Resolver-->>Client: Response (TxID: 0xA1B2, 93.184.216.34, TTL=3600)
Note right of Client: RTT measured
Iniciar la captura DNS:
sudo lc sniff dns -i eth0
Filtrar per domini:
Per a un domini exacte:
sudo lc sniff dns -i eth0 --domain example.com
Per a coincidències amb comodins:
sudo lc sniff dns -i eth0 --domain "*.example.com"
Carregar patrons de domini d’un fitxer per al monitoratge massiu:
sudo lc sniff dns -i eth0 --domains-file watchlist.txt
Camps de metadades DNS
Cada paquet DNS inclou metadades estructurades:
| Camp | Descripció | Camí JSON |
|---|---|---|
| Identificador de transacció | Correlacionador de consulta/resposta | .DNSData.TransactionID |
| Nom de consulta | Domini consultat | .DNSData.QueryName |
| Tipus de consulta | Tipus de registre (A, AAAA, MX, etc.) | .DNSData.QueryType |
| Codi de resposta | NOERROR, NXDOMAIN, SERVFAIL, etc. | .DNSData.ResponseCode |
| Respostes | Matriu de registres de resposta | .DNSData.Answers[] |
| RTT | Latència de consulta a resposta (ms) | .DNSData.QueryResponseTimeMs |
| Puntuació de túnel | Probabilitat de túnel DNS (0,0–1,0) | .DNSData.TunnelingScore |
Investigacions DNS habituals
Trobar resolucions DNS lentes:
sudo lc sniff dns -i eth0 2>/dev/null | \
jq -r 'select(.DNSData.IsResponse and .DNSData.QueryResponseTimeMs > 100) |
[.Timestamp, .DNSData.QueryName, (.DNSData.QueryResponseTimeMs|tostring) + "ms"] |
@tsv'
Supervisar respostes NXDOMAIN (dominis inexistents):
sudo lc sniff dns -i eth0 2>/dev/null | \
jq -r 'select(.DNSData.ResponseCode == "NXDOMAIN") |
[.Timestamp, .SrcIP, .DNSData.QueryName] | @tsv'
Seguir tipus de registre concrets:
Per a consultes de registres MX (descobriment de servidors de correu):
sudo lc sniff dns -i eth0 2>/dev/null | \
jq -r 'select(.DNSData.QueryType == "MX") |
[.Timestamp, .DNSData.QueryName, (.DNSData.Answers[]?.Data // "pending")] |
@tsv'
Per a registres TXT, que sovint s’utilitzen per a SPF, DKIM i verificació de dominis:
sudo lc sniff dns -i eth0 2>/dev/null | \
jq 'select(.DNSData.QueryType == "TXT")'
Detecció de túnels DNS
lippycat inclou detecció de túnels DNS basada en entropia. Els túnels codifiquen dades en consultes DNS, generant noms de domini amb una entropia (aleatorietat) inusualment alta. L’analitzador puntua cada consulta de 0,0 (normal) a 1,0 (molt sospitosa):
Marcar possibles túnels DNS:
sudo lc sniff dns -i eth0 --detect-tunneling 2>/dev/null | \
jq -r 'select(.DNSData.TunnelingScore > 0.7) |
[.Timestamp, .SrcIP, .DNSData.QueryName,
"score=" + (.DNSData.TunnelingScore|tostring)] | @tsv'
Les consultes d’alta entropia (subdominis llargs i aparentment aleatoris) combinades amb un gran volum de consultes a un sol domini són indicadors forts de túnels DNS o exfiltració de dades.