ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

เปิด DNSSEC ให้โดเมนเพื่อป้องกันการปลอมแปลง DNS
Home เปิด DNSSEC ให้โดเมนเพื่อป้องกันการปลอมแปลง DNS

เปิด DNSSEC ให้โดเมนเพื่อป้องกันการปลอมแปลง DNS

DNS ที่ใช้กันมาตั้งแต่ต้นไม่มีกลไกยืนยันว่าคำตอบที่ได้รับมาจากเจ้าของโดเมนจริง ผู้โจมตีที่อยู่ระหว่างทางจึงปลอมคำตอบให้ผู้ใช้ไปยังเซิร์ฟเวอร์ปลอมได้ ซึ่งเป็นเทคนิคที่ใช้ในการโจมตีแบบขโมยข้อมูล

DNSSEC แก้ปัญหานี้ด้วยการลงลายเซ็นดิจิทัลให้ทุกคำตอบ ทำให้ Resolver ตรวจสอบได้ว่าข้อมูลไม่ถูกแก้ไขระหว่างทาง

คำเตือนก่อนเริ่ม DNSSEC ที่ตั้งผิดทำให้โดเมนหายจากอินเทอร์เน็ตทั้งหมด ไม่ใช่แค่ช้าหรือเข้าบางที่ไม่ได้ เพราะ Resolver ที่ตรวจสอบลายเซ็นจะปฏิเสธคำตอบที่ลายเซ็นไม่ถูกต้อง ทำตามลำดับอย่างเคร่งครัด

สิ่งที่ต้องเตรียม

  • โดเมนที่ผู้รับจดทะเบียนรองรับ DNSSEC ซึ่ง .com .net และ .co.th รองรับแล้ว
  • ผู้ให้บริการ DNS ที่รองรับการลงลายเซ็น
  • สิทธิ์เข้าถึงทั้งหน้าจัดการ DNS และหน้าจัดการโดเมนที่ผู้รับจดทะเบียน

ขั้นตอนที่ 1: ตรวจสถานะปัจจุบัน

dig +dnssec example.com | grep -E 'flags:|RRSIG'
dig DS example.com +short
delv example.com

หากยังไม่ได้เปิด จะไม่เห็นระเบียน RRSIG และ DS คำสั่ง delv จะแสดง unsigned answer

ขั้นตอนที่ 2: เปิดการลงลายเซ็นที่ผู้ให้บริการ DNS

ขั้นตอนนี้ต้องทำก่อนส่ง DS Record เสมอ

ที่ Cloudflare ไปที่ DNS แล้ว Settings แล้ว DNSSEC กด Enable DNSSEC ระบบจะแสดงค่าที่ต้องนำไปใส่ที่ผู้รับจดทะเบียน

ที่ผู้ให้บริการอื่นมักอยู่ในหน้าจัดการ DNS ของโดเมนนั้น มองหาคำว่า DNSSEC หรือ Sign Zone

ตรวจว่าโซนถูกลงลายเซ็นแล้ว

dig DNSKEY example.com +short
dig +dnssec example.com SOA | grep RRSIG

ต้องเห็นระเบียน DNSKEY และ RRSIG ก่อนไปขั้นตอนถัดไป

ขั้นตอนที่ 3: เข้าใจค่าที่ต้องส่ง

DS Record คือค่าย่อของกุญแจสาธารณะที่ส่งไปเก็บไว้ที่ระดับโดเมนแม่ ประกอบด้วยสี่ส่วน

example.com.  IN  DS  12345 13 2 A1B2C3D4E5F6...
  • Key Tag เลขระบุกุญแจ ในตัวอย่างคือ 12345
  • Algorithm อัลกอริทึม ในตัวอย่างคือ 13 ซึ่งคือ ECDSA P-256 ที่แนะนำในปัจจุบัน
  • Digest Type ชนิดของค่าย่อ ในตัวอย่างคือ 2 ซึ่งคือ SHA-256
  • Digest ค่าย่อของกุญแจ

ผู้ให้บริการ DNS จะแสดงค่าทั้งสี่ให้ คัดลอกให้ครบทุกตัวโดยไม่ตกหล่น

ขั้นตอนที่ 4: ส่ง DS Record ไปยังผู้รับจดทะเบียน

เข้าหน้าจัดการโดเมนที่ผู้รับจดทะเบียน มองหาเมนู DNSSEC หรือ DS Records แล้วใส่ค่าทั้งสี่

บางรายให้ใส่แบบ DNSKEY แทน DS ซึ่งใช้ค่าจากระเบียน DNSKEY โดยตรง ผู้ให้บริการ DNS มักแสดงทั้งสองรูปแบบให้เลือก

สำหรับโดเมน .th ต้องติดต่อผู้รับจดทะเบียนโดยตรงในบางกรณี เพราะบางรายยังไม่มีหน้าจอให้จัดการเอง

ขั้นตอนที่ 5: ตรวจสอบว่าใช้งานได้จริง

รอ 15 นาทีถึงหลายชั่วโมงให้ข้อมูลเผยแพร่ แล้วตรวจ

# ต้องเห็นระเบียน DS
dig DS example.com +short

# ต้องเห็นธง ad ซึ่งหมายถึง authenticated data
dig +dnssec example.com @1.1.1.1 | grep 'flags:'

# ตรวจห่วงโซ่ความเชื่อถือทั้งเส้น
delv example.com +rtrace

ผลที่ถูกต้องคือเห็น flags: qr rd ra ad โดยมีตัว ad อยู่ด้วย และ delv แสดงข้อความ fully validated

ใช้เครื่องมือตรวจสอบแบบเห็นภาพที่ dnsviz.net หรือ dnssec-analyzer ของ Verisign ซึ่งแสดงห่วงโซ่ทั้งหมดและชี้จุดที่ผิดพลาดได้ชัดเจน

ขั้นตอนที่ 6: ทดสอบว่าโดเมนยังเข้าถึงได้จากทุกที่

for r in 1.1.1.1 8.8.8.8 9.9.9.9 208.67.222.222; do
  printf '%-16s %s\n' "$r" "$(dig +short example.com @$r | head -1)"
done

ทุก Resolver ต้องตอบ IP เดียวกัน หากบางตัวไม่ตอบเลย แปลว่าลายเซ็นมีปัญหาและ Resolver นั้นปฏิเสธคำตอบ ต้องแก้ทันที

# ตรวจว่าเป็นปัญหาลายเซ็นหรือไม่
dig +cd example.com @9.9.9.9 +short

ตัวเลือก +cd คือปิดการตรวจสอบ หากคำสั่งนี้ตอบได้แต่คำสั่งปกติไม่ตอบ ยืนยันว่าเป็นปัญหาของ DNSSEC

ขั้นตอนที่ 7: ปิด DNSSEC อย่างปลอดภัย

จำเป็นเมื่อต้องย้าย DNS ไปผู้ให้บริการอื่น ลำดับสำคัญมากและตรงข้ามกับตอนเปิด

  1. ลบ DS Record ที่ผู้รับจดทะเบียนก่อน
  2. รอจนหมดอายุตาม TTL ซึ่งสำหรับ DS มักเป็น 24-48 ชั่วโมง ห้ามรีบ
  3. ตรวจว่า DS หายแล้วจริง
  4. จึงค่อยปิดการลงลายเซ็นที่ผู้ให้บริการ DNS
  5. จึงค่อยย้าย DNS
# ตรวจว่า DS หายแล้ว
dig DS example.com +short
# ต้องไม่มีผลลัพธ์ จึงจะปิดขั้นถัดไปได้

การปิดการลงลายเซ็นก่อนลบ DS ทำให้โดเมนหายจากอินเทอร์เน็ตทันที เพราะ Resolver ยังคาดหวังลายเซ็นแต่ไม่มีให้ตรวจ นี่คือความผิดพลาดที่ทำให้หลายองค์กรเว็บล่มข้ามคืน

ขั้นตอนที่ 8: เฝ้าดูต่อเนื่อง

ลายเซ็นมีวันหมดอายุ โดยปกติผู้ให้บริการต่ออายุให้อัตโนมัติ แต่ควรเฝ้าดูไว้

#!/bin/bash
# ตรวจว่า DNSSEC ยังทำงานปกติ
for d in example.com example.co.th; do
  if dig +dnssec "$d" @1.1.1.1 | grep -q 'flags:.* ad'; then
    echo "OK    $d"
  else
    echo "ปัญหา $d" | mail -s "DNSSEC ของ $d มีปัญหา" [email protected]
  fi
done

ตั้งรันทุกชั่วโมงด้วย systemd Timer และเพิ่มการตรวจสอบชนิด DNS ใน Uptime Kuma ด้วย

ปัญหาที่พบบ่อย

โดเมนเข้าไม่ได้จาก Resolver บางตัว

DS Record ไม่ตรงกับกุญแจที่ใช้ลงลายเซ็นจริง ตรวจด้วย dnsviz.net ซึ่งจะชี้ว่าขาดตรงไหน วิธีแก้เร็วที่สุดคือลบ DS ที่ผู้รับจดทะเบียนเพื่อให้โดเมนกลับมาใช้งานได้ แล้วค่อยตั้งใหม่ให้ถูก

ย้าย DNS แล้วโดเมนหาย

ลืมลบ DS ก่อนย้าย ผู้ให้บริการใหม่ลงลายเซ็นด้วยกุญแจคนละชุด ลบ DS ที่ผู้รับจดทะเบียนทันทีเพื่อกู้สถานการณ์ แล้วเริ่มกระบวนการใหม่ตามลำดับที่ถูกต้อง

ผู้รับจดทะเบียนไม่มีหน้าจอใส่ DS

ติดต่อฝ่ายสนับสนุนเพื่อขอให้ใส่ให้ หรือย้ายไปผู้รับจดทะเบียนที่รองรับ สำหรับโดเมน .th ควรสอบถามก่อนเริ่มกระบวนการ

ไม่แน่ใจว่าควรเปิดหรือไม่

DNSSEC มีประโยชน์ชัดเจนสำหรับโดเมนที่เกี่ยวข้องกับธุรกรรมทางการเงินหรือข้อมูลสำคัญ สำหรับเว็บทั่วไปให้ชั่งน้ำหนักระหว่างความปลอดภัยที่เพิ่มขึ้นกับความเสี่ยงจากการตั้งค่าผิด หากทีมไม่มีประสบการณ์ ควรทดลองกับโดเมนทดสอบก่อน

ต้องการที่ปรึกษาด้านความปลอดภัยของโดเมนและ DNS ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security