การโจมตี SAD DNS ใหม่เพื่อแทรกข้อมูลปลอมลงในแคช DNS

ทีมนักวิจัยจากมหาวิทยาลัยแคลิฟอร์เนีย ริเวอร์ไซด์ได้เผยแพร่รูปแบบใหม่ของการโจมตี SAD DNS (CVE-2021-20322) ซึ่งทำงานได้แม้จะมีการเพิ่มการป้องกันเมื่อปีที่แล้วเพื่อป้องกันช่องโหว่ CVE-2020-25705 โดยทั่วไปวิธีการใหม่นี้จะคล้ายกับช่องโหว่ของปีที่แล้ว และแตกต่างเฉพาะในการใช้แพ็กเก็ต ICMP ประเภทอื่นเพื่อตรวจสอบพอร์ต UDP ที่ใช้งานอยู่ การโจมตีที่นำเสนอช่วยให้สามารถทดแทนข้อมูลสมมติลงในแคชเซิร์ฟเวอร์ DNS ซึ่งสามารถใช้เพื่อแทนที่ที่อยู่ IP ของโดเมนที่กำหนดเองในแคชและเปลี่ยนเส้นทางคำขอไปยังโดเมนไปยังเซิร์ฟเวอร์ของผู้โจมตี

วิธีการที่นำเสนอใช้ได้เฉพาะในสแต็กเครือข่าย Linux เนื่องจากการเชื่อมต่อกับลักษณะเฉพาะของกลไกการประมวลผลแพ็กเก็ต ICMP ใน Linux ซึ่งทำหน้าที่เป็นแหล่งที่มาของการรั่วไหลของข้อมูลซึ่งทำให้การกำหนดหมายเลขพอร์ต UDP ที่ใช้โดยเซิร์ฟเวอร์เพื่อส่ง คำขอภายนอก การเปลี่ยนแปลงที่บล็อกการรั่วไหลของข้อมูลถูกนำมาใช้ในเคอร์เนล Linux เมื่อปลายเดือนสิงหาคม (การแก้ไขรวมอยู่ในเคอร์เนล 5.15 และการอัปเดตเดือนกันยายนสำหรับสาขา LTS ของเคอร์เนล) การแก้ไขเดือดลงเพื่อเปลี่ยนไปใช้อัลกอริธึมการแฮช SipHash ในแคชเครือข่ายแทน Jenkins Hash สถานะของการแก้ไขช่องโหว่ในการแจกแจงสามารถประเมินได้ในหน้าเหล่านี้: Debian, RHEL, Fedora, SUSE, Ubuntu

ตามที่นักวิจัยระบุปัญหา ประมาณ 38% ของรีโซลเวอร์แบบเปิดบนเครือข่ายมีช่องโหว่ รวมถึงบริการ DNS ยอดนิยม เช่น OpenDNS และ Quad9 (9.9.9.9) สำหรับซอฟต์แวร์เซิร์ฟเวอร์ การโจมตีสามารถทำได้โดยใช้แพ็คเกจเช่น BIND, Unbound และ dnsmasq บนเซิร์ฟเวอร์ Linux ปัญหาไม่ปรากฏบนเซิร์ฟเวอร์ DNS ที่ทำงานบนระบบ Windows และ BSD เพื่อให้การโจมตีสำเร็จจำเป็นต้องใช้การปลอมแปลง IP เช่น จำเป็นที่ ISP ของผู้โจมตีจะไม่บล็อกแพ็คเก็ตที่มีที่อยู่ IP ต้นทางปลอม

เพื่อเป็นการเตือนความจำ การโจมตี SAD DNS จะข้ามการป้องกันที่เพิ่มไปยังเซิร์ฟเวอร์ DNS เพื่อบล็อกวิธีการวางแคช DNS แบบคลาสสิกที่ Dan Kaminsky เสนอในปี 2008 วิธีการของ Kaminsky จัดการขนาดที่เล็กของฟิลด์ ID การสืบค้น DNS ซึ่งมีขนาดเพียง 16 บิต ในการเลือกตัวระบุธุรกรรม DNS ที่ถูกต้องซึ่งจำเป็นสำหรับการปลอมแปลงชื่อโฮสต์ การส่งคำขอประมาณ 7000 รายการและจำลองการตอบสนองปลอมประมาณ 140 รายการก็เพียงพอแล้ว การโจมตีเริ่มต้นที่การส่งแพ็กเก็ตจำนวนมากที่มีการผูก IP สมมติและมีตัวระบุธุรกรรม DNS ที่แตกต่างกันไปยังตัวแก้ไข DNS เพื่อป้องกันการแคชของการตอบกลับครั้งแรก การตอบกลับจำลองแต่ละรายการจะมีชื่อโดเมนที่มีการแก้ไขเล็กน้อย (1.example.com, 2.example.com, 3.example.com ฯลฯ)

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

วิธี SAD DNS ช่วยให้คุณกำหนดหมายเลขพอร์ตเครือข่ายได้ง่ายขึ้นอย่างมากและลดการโจมตีด้วยวิธี Kaminsky แบบคลาสสิก ผู้โจมตีสามารถตรวจจับการเข้าถึงพอร์ต UDP ที่ไม่ได้ใช้และใช้งานอยู่ได้ โดยใช้ประโยชน์จากข้อมูลที่รั่วไหลเกี่ยวกับกิจกรรมของพอร์ตเครือข่ายเมื่อประมวลผลแพ็กเก็ตตอบสนอง ICMP วิธีนี้ช่วยให้เราสามารถลดจำนวนตัวเลือกการค้นหาลงได้ 4 ลำดับความสำคัญ - 2^16+2^16 แทนที่จะเป็น 2^32 (131_072 แทนที่จะเป็น 4_294_967_296) การรั่วไหลของข้อมูลที่ช่วยให้คุณระบุพอร์ต UDP ที่ใช้งานได้อย่างรวดเร็วนั้นเกิดจากข้อบกพร่องในรหัสสำหรับการประมวลผลแพ็กเก็ต ICMP พร้อมคำขอการแยกส่วน (แฟล็ก ICMP Fragmentation Needed) หรือการเปลี่ยนเส้นทาง (แฟล็กการเปลี่ยนเส้นทาง ICMP) การส่งแพ็กเก็ตดังกล่าวจะเปลี่ยนสถานะของแคชในสแต็กเครือข่าย ซึ่งทำให้สามารถตรวจสอบได้โดยขึ้นอยู่กับการตอบสนองของเซิร์ฟเวอร์ว่าพอร์ต UDP ใดที่ใช้งานอยู่และพอร์ตใดที่ไม่ได้ใช้งาน

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

ที่มา: opennet.ru

เพิ่มความคิดเห็น