พบช่องโหว่สามช่องใน Linux TCP stacks ซึ่งนำไปสู่การปฏิเสธบริการจากระยะไกล

ลินุกซ์ขัดข้อง

Recientemente เผยแพร่ข่าวเกี่ยวกับการระบุช่องโหว่ที่สำคัญหลายประการใน Linux TCP stacks และ FreeBSD นั้น อนุญาตให้ผู้โจมตีเริ่มต้นเคอร์เนลล้มเหลวจากระยะไกล หรือทำให้สิ้นเปลืองทรัพยากรมากเกินไปโดยการประมวลผลแพ็กเก็ต TCP ที่สร้างขึ้นเป็นพิเศษ (แพ็กเก็ตแห่งความตาย)

ปัญหาเกิดจากข้อผิดพลาดในส่วนจัดการของขนาดสูงสุดของบล็อกข้อมูล ในแพ็กเก็ต TCP (MSS, ขนาดเซ็กเมนต์สูงสุด) และกลไกสำหรับการจดจำการเชื่อมต่อแบบเลือก (SACK, Selective TCP recognition)

การจดจำแบบเลือกคืออะไร?

Selective TCP Recognition (SACK) เป็นกลไกที่ผู้รับข้อมูลสามารถแจ้งผู้ส่งเกี่ยวกับเซ็กเมนต์ทั้งหมดที่ยอมรับได้สำเร็จ

นี้ อนุญาตให้ผู้ส่งส่งส่วนสตรีมที่ขาดหายไปอีกครั้ง จากชุด 'ที่รู้จักกันดี' ของเขา เมื่อปิดใช้งาน TCP SACK จะต้องใช้ชุดการส่งข้อมูลซ้ำที่ใหญ่กว่ามากเพื่อส่งใหม่ทั้งลำดับ

ในเคอร์เนล Linux ปัญหาได้รับการแก้ไขในเวอร์ชัน 4.4.182, 4.9.182, 4.14.127, 4.19.52 และ 5.1.11 โซลูชันสำหรับ FreeBSD พร้อมใช้งานเป็นแพตช์

การอัปเดตแพคเกจเคอร์เนลจะเผยแพร่สำหรับ Debian, RHEL, SUSE / openSUSE, ALT, Ubuntu, Fedora และ Arch Linux

CVE-2019-11477 (กระสอบ Panic)

ปัญหา ปรากฏตัวในเคอร์เนลของลินุกซ์ ณ 2.6.29 และอนุญาตให้คุณหยุดเคอร์เนล (ตกใจ) เมื่อส่งชุดของแพ็กเก็ต SACK เนื่องจากจำนวนเต็มล้นในคอนโทรลเลอร์

สำหรับการโจมตีการตั้งค่า MSS เป็น 48 ไบต์สำหรับการเชื่อมต่อ TCP ก็เพียงพอแล้ว และส่งลำดับของแพ็คเก็ต SACK ที่จัดเรียงในลักษณะหนึ่ง

สาระสำคัญของปัญหาอยู่ที่โครงสร้าง tcp_skb_cb (ซ็อกเก็ตบัฟเฟอร์) ถูกออกแบบมาเพื่อจัดเก็บชิ้นส่วน 17 ชิ้น ("กำหนด MAX_SKB_FRAGS (65536 / PAGE_SIZE + 1) => 17")

ในกระบวนการส่งแพ็กเก็ตจะถูกวางไว้ในคิวการส่งและ tcp_skb_cb จะเก็บรายละเอียดเกี่ยวกับแพ็กเก็ตเช่นหมายเลขลำดับแฟล็กรวมถึงฟิลด์ "tcp_gso_segs" และ "tcp_gso_size" ซึ่งใช้ในการส่ง ข้อมูลการแบ่งกลุ่มไปยังคอนโทรลเลอร์ (TSO, การดาวน์โหลดเซ็กเมนต์กลุ่ม) เพื่อประมวลผลเซ็กเมนต์ทางด้านการ์ดเครือข่าย

แฟรกเมนต์จะถูกบันทึกเมื่อแพ็กเก็ตสูญหายหรือความจำเป็นในการส่งแพ็กเก็ตแบบเลือกเกิดขึ้นหากเปิดใช้งาน SACK และไดรเวอร์รองรับ TSO

ในการป้องกันคุณสามารถปิดใช้งานการประมวลผล SACK หรือบล็อกการเชื่อมต่อด้วย MSS ขนาดเล็ก (ใช้ได้เฉพาะเมื่อคุณตั้งค่า sysctl net.ipv4.tcp_mtu_probing เป็น 0 และอาจทำให้ปกติบางส่วนเสียหาย) โดยใช้ MSS ต่ำ)

CVE-2019-11478 (SACK ช้า)

ความล้มเหลวนี้ ทำให้กลไก SACK หยุดชะงัก (เมื่อใช้เคอร์เนล Linux ใน 4.15) หรือใช้ทรัพยากรมากเกินไป

ปัญหาเกิดขึ้นเมื่อประมวลผลแพ็กเก็ต SACK ที่สร้างขึ้นเป็นพิเศษซึ่งสามารถใช้เพื่อแบ่งส่วนคิวการส่งข้อมูลซ้ำ (TCP retransmission) โซลูชันสำหรับการป้องกันจะคล้ายกับช่องโหว่ก่อนหน้านี้

CVE-2019-5599 (SACK ช้า)

อนุญาตให้ทำให้เกิดการแยกส่วนของแผนที่แพ็คเก็ตที่ส่งเมื่อประมวลผลลำดับ SACK ภายในการเชื่อมต่อ TCP เดียวและทำให้การดำเนินการค้นหารายการที่ใช้ทรัพยากรจำนวนมากทำงาน

ปัญหาปรากฏใน FreeBSD 12 พร้อมกับกลไกการตรวจจับการสูญหายของแพ็คเก็ต RACK เป็นวิธีแก้ปัญหาชั่วคราวคุณสามารถปิดใช้งานโมดูล RACK (ไม่ได้โหลดโดยค่าเริ่มต้นปิดใช้งานโดยระบุ sysctl net.inet.tcp.functions_default = freebsd)

CVE-2019-11479

ข้อบกพร่องช่วยให้ผู้โจมตีสามารถทำให้เคอร์เนล Linux แบ่งการตอบสนองออกเป็นส่วน TCP หลาย ๆ ส่วน ซึ่งแต่ละรายการมีข้อมูลเพียง 8 ไบต์ซึ่งอาจนำไปสู่การรับส่งข้อมูลเพิ่มขึ้นอย่างมากภาระ CPU ที่เพิ่มขึ้นและช่องทางการสื่อสารที่อุดตัน

นอกจากนี้ยังสิ้นเปลืองทรัพยากรเพิ่มเติม (กำลังประมวลผลและการ์ดเครือข่าย)

การโจมตีนี้ต้องใช้ความพยายามอย่างต่อเนื่องในส่วนของผู้โจมตีและการโจมตีจะสิ้นสุดลงในไม่ช้าหลังจากผู้โจมตีหยุดส่งการเข้าชม

ในขณะที่การโจมตีนี้กำลังดำเนินอยู่ระบบจะทำงานด้วยความสามารถที่ลดลงทำให้ผู้ใช้บางรายปฏิเสธการให้บริการ

ผู้ใช้ระยะไกลสามารถทริกเกอร์ปัญหานี้ได้โดยตั้งค่าขนาดเซ็กเมนต์สูงสุด (MSS) ของการเชื่อมต่อ TCP ที่ขีด จำกัด ต่ำสุด (48 ไบต์) และส่งลำดับของแพ็กเก็ต SACK ที่สร้างขึ้นเป็นพิเศษ

เพื่อเป็นการแก้ปัญหาเบื้องต้นขอแนะนำให้บล็อกการเชื่อมต่อที่มี MSS ต่ำ


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา