Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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:

CampDescripcióCamí JSON
Identificador de transaccióCorrelacionador de consulta/resposta.DNSData.TransactionID
Nom de consultaDomini consultat.DNSData.QueryName
Tipus de consultaTipus de registre (A, AAAA, MX, etc.).DNSData.QueryType
Codi de respostaNOERROR, NXDOMAIN, SERVFAIL, etc..DNSData.ResponseCode
RespostesMatriu de registres de resposta.DNSData.Answers[]
RTTLatència de consulta a resposta (ms).DNSData.QueryResponseTimeMs
Puntuació de túnelProbabilitat 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.