DNS Cache Poisoning Attack: Diagnosing and Fixing Wrong IP Resolution for grahamhancock.com


2 views

When running diagnostics across multiple DNS resolvers, we found inconsistent responses for grahamhancock.com:

# Correct resolution
dig +short www.grahamhancock.com @8.8.8.8
> 104.24.103.73

# Incorrect resolution (Amazon EC2 IP)
dig +short www.grahamhancock.com @173.84.127.88
> 54.221.192.101

To systematically diagnose the issue:

# Check DNS propagation globally
for resolver in $(cat public_dns_servers.txt); do
    echo "$resolver: $(dig +short @$resolver www.grahamhancock.com)"
done

# Verify DNSSEC validation
delv www.grahamhancock.com

# Traceroute to identify hijack points
mtr --report-wide 54.221.192.101

Key characteristics suggesting DNS cache poisoning:

  • Inconsistent TTL values across resolvers
  • Non-authoritative responses containing incorrect records
  • Geographically clustered incorrect resolutions

Immediate actions to regaining control:

# Force refresh cache on affected nameservers
curl -X POST https://api.cloudflare.com/client/v4/zones/:zone_id/dns_records/:id/purge_cache \
    -H "Authorization: Bearer API_TOKEN"

# Implement DNS monitoring script
import dns.resolver
import smtplib

def check_dns(domain, expected_ip):
    resolvers = ['8.8.8.8', '1.1.1.1', '9.9.9.9']
    for r in resolvers:
        answer = dns.resolver.resolve(domain, 'A', resolver=r)
        if answer[0].address != expected_ip:
            send_alert(f"DNS mismatch on {r}: {answer[0].address}")
  • Enable DNSSEC with ECDSA P-256 keys
  • Configure TSIG for zone transfers
  • Implement rate limiting on DNS queries
  • Set up DNS firewall rules blocking suspicious query patterns

Template for contacting providers with incorrect cached records:

Subject: Urgent: DNS Cache Poisoning Incident [Ticket #]

Body:
We've identified your resolver [IP] returning incorrect A records 
for grahamhancock.com (54.221.192.101 instead of 104.24.103.73).

Evidence:
1. dig +norecurse @[IP] www.grahamhancock.com
2. delv @[IP] www.grahamhancock.com

Request:
- Purge cache for grahamhancock.com
- Verify upstream resolver integrity
- Share investigation results

During routine monitoring, we discovered approximately 10% of global DNS resolvers return incorrect IP addresses for our domain (grahamhancock.com). These rogue responses point to an unauthorized Amazon EC2 instance hosting unrelated content, while 90% of resolvers correctly reflect our zone file.

# Example of incorrect resolution:
dig +short www.grahamhancock.com @173.84.127.88
203.0.113.45  # Fake EC2 IP

# Correct resolution from Cloudflare:
dig +short www.grahamhancock.com @1.1.1.1
192.0.2.67    # Our actual IP

The pattern suggests one of three scenarios:

  • Cache poisoning via Kaminsky attack
  • Compromised recursive resolvers
  • Man-in-the-middle DNS hijacking

We ran traceroutes to the rogue IP and found it belonged to an AWS region we've never utilized:

traceroute 203.0.113.45
 1  192.168.1.1 (192.168.1.1)  1.234 ms
 2  * * *
 3  ec2-203-0-113-45.ap-southeast-1.compute.amazonaws.com (203.0.113.45)

1. DNSSEC Enforcement:

dnssec-keygen -a RSASHA256 -b 2048 -n ZONE grahamhancock.com

2. TTL Reduction (temporary):

; BIND zone file adjustment
$TTL 300  ; Reduced from 86400

3. Authoritative Server Hardening:

# Unbound config snippet
server:
    harden-glue: yes
    harden-dnssec-stripped: yes
    use-caps-for-id: yes

DNS Monitoring Script (Python example):

import dns.resolver
import smtplib

SERVERS = ['1.1.1.1', '8.8.8.8', '173.84.127.88'] 
EXPECTED_IP = '192.0.2.67'

def check_dns():
    for server in SERVERS:
        resolver = dns.resolver.Resolver()
        resolver.nameservers = [server]
        try:
            answer = resolver.resolve('www.grahamhancock.com')
            if str(answer[0]) != EXPECTED_IP:
                send_alert(server, str(answer[0]))
        except Exception as e:
            log_error(server, e)

We contacted major DNS operators with evidence packets showing the discrepancies. Cloudflare and Google quickly flushed their caches after verifying our DNSSEC records. For problematic resolvers:

dig +trace +additional www.grahamhancock.com @209.222.18.222

This helped identify which hop introduced the incorrect record.

Since the rogue IP hosts fraudulent content, we:

  • Filed AWS abuse report (ARIN record: NET-203-0-113-0-1)
  • Submitted DMCA takedown for copyright infringement
  • Notified ICANN's SSAC about suspected cache poisoning