แจ้งเตือนช่องโหว่ตระกูล SACK Panic ยิง FreeBSD และลินุกซ์ดับดิ้นได้จากระยะไกล

เมื่อวันที่ 17 มิถุนายน 2019 ที่ผ่านมา ทีม Security Engineer จาก Netflix ได้มีการเปิดเผย 4 ช่องโหว่ใหญ่ในส่วนของโปรแกรมซึ่งอิมพลีเมนต์โปรโตคอล TCP ในระบบ FreeBSD และลินุกซ์ ซึ่งส่งผลให้ด้วยการส่งแพ็คเกตที่มีลักษณะเฉพาะบางประการ แฮกเกอร์สามารถล่มระบบใดก็ได้ได้จากระยะไกล

ทีม Intelligent Response จาก บริษัทไอ-ซีเคียว จำกัด จะมาติดตามรายละเอียดของช่องโหว่นี้ พร้อมทั้งอธิบายที่มา การตรวจจับและการป้องกันการโจมตีช่องโหว่นี้ในโพสต์นี้กันครับ

รายละเอียดของช่องโหว่โดยย่อ

ช่องโหว่ในตระกูล SACK Panic นี้มีทั้งหมด 4 ช่องโหว่ ได้แก่

  1. ช่องโหว่ SACK Panic รหัส CVE-2019-11477 คะแนน CVSSv3 7.5
  2. ช่องโหว่ SACK Slowness รหัส CVE-2019-11478 คะแนน CVSSv3 5.3
  3. ช่องโหว่ SACK Slowness รหัส CVE-2019-5599 ยังไม่มีการระบุคะแนน CVSS
  4. ช่องโหว่ไม่มีชื่อเฉพาะ รหัส CVE-2019-11479 คะแนน CVSSv3 5.3

ที่มาของช่องโหว่

อ้างอิงจาก Security Advisories ของ Netflix ช่องโหว่ทั้ง 4 ช่องโหว่นี้เป็นช่องโหว่ที่เกิดขึ้นในส่วนของโค้ดซึ่งอยู่ในแกนกลางของระบบปฏิบัติการ FreeBSD และเคอร์เนลของระบบปฏิบัติการลินุกซ์ซึ่งทำหน้าที่เกี่ยวข้องกับโปรโตคอล TCP โดยช่องโหว่เหล่านี้นั้นเกี่ยวข้องกับการกำหนดค่า minimum segment size (MSS) และค่า TCP Selective Acknowledgement (SACK) ซึ่งทั้งสองค่าเป็นการตั้งค่าของโปรโตคอล TCP

สำหรับช่องโหว่แรกคือ SACK PANIC (CVE-2019-11477) นั้นเป็นช่องโหว่ซึ่งเกิดขึ้นเมื่อผู้โจมตีมีการสร้างลำดับของแพ็คเกต TCP ซึ่งมีลำดับของค่า SACK เฉพาะ โดยเมื่อส่งไปยังเป้าหมายซึ่งมีช่องโหว่แล้ว จะทำให้เกิดการเงื่อนไข integer overflow ซึ่งนำไปสู่เงื่อนไขการทำงานที่ผิดพลาดของเคอร์เนล (Kernel panic) และทำให้เกิดเงื่อนไข DoS ได้

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

ช่องโหว่ที่สามหรือช่องโหว่ SACK Slowness (CVE-2019-5599) เป็นช่องโหว่ที่เกิดขึ้นในลักษณะที่คล้ายกับ SACK Slowness (CVE-2019-11478) จากความเหมือนกันในประเด็นเรื่องของผลกระทบและรูปแบบการโจมตี แต่แตกต่างในส่วนของคอมโพเนนต์และระบบปฏิบัติการที่ได้รับผลกระทบ

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

การโจมตีช่องโหว่

ยังไม่มีการปรากฎของโค้ดหรือ PoC ที่ใช้สำหรับโจมตีช่องโหว่ในขณะนี้

ระบบที่ได้รับผลกระทบ

  1. ช่องโหว่ SACK Panic (CVE-2019-11477) ส่งผลกระทบกับลินุกซ์เคอร์เนลตั้งแต่เวอร์ชัน 2.6.29 เป็นต้นไป
  2. ช่องโหว่ SACK Slowness (CVE-2019-11478) ส่งผลกระทบกับลินุกซ์เคอร์เนลรุ่น 4.15 หรือต่ำกว่า
  3. ช่องโหว่ SACK Slowness (CVE-2019-5599) ส่งผลกระทบกับ FreeBSD รุ่น 12 ที่ใช้ RACK TCP Stack
  4. ช่องโหว่ CVE-2019-11479 ส่งผลกระทบกับลินุกซ์ทุกเวอร์ชัน

การตรวจจับการโจมตี

ช่องโหว่ทั้งหมดนั้นมี Attack vector เป็นเน็ตเวิร์กซึ่งส่งผลให้อุปกรณ์เน็ตเวิร์กที่สามารถตรวจสอบคุณลักษณะของแพ็คเกตได้นั้นสามารถใช้เพื่อตรวจจับการโจมตีได้ อย่างไรก็ตามเรายังไม่พบการประกาศ Signature หรือแพทเทิร์นในการตรวจจับการโจมตีในขณะนี้ โดยจะทำการอัปเดตหากมีความคืบหน้า

และเนื่องจากผลลัพธ์ของช่องโหว่นั้นส่งผลให้เกิดการทำงานของผิดพลาดของเคอร์เนลและทรัพยากรของระบบที่ถูกใช้ไปอย่างมากขึ้น การตรวจสอบการโจมตีบน Endpoint ก็ยังมีความเป็นไปได้อยู่ในการดำเนินการเพื่อระบุหาความผิดปกติของระบบ ผ่านทางการตรวจสอบสถานะของระบบ (Health check) เป็นต้น

การป้องกันการโจมตี

  1. ทำการอัปเดตแพตช์เฉพาะของช่องโหว่หากยังไม่มีการอัปเดตจากโครงการของเคอร์เนล โดยให้ดำเนินการดังนี้
    1. สำหรับช่องโหว่ SACK Panic (CVE-2019-11477) ให้ทำการอัปเดตแพตช์ PATCH_net_1_4.patch ในกรณีที่ลินุกซ์เคอร์เนลเป็นเวอร์ชัน 4.14 หรือใหม่กว่า ให้ทำการอัปเดตแพตช์ PATCH_net_1a.patch ไปพร้อมกันด้วย
    2. สำหรับช่องโหว่ SACK Slowness (CVE-2019-11478) ให้ทำการอัปเดตแพช์ PATCH_net_2_4.patch กับเคอร์เนล
    3. สำหรับช่องโหว่ SACK Slowness (CVE-2019-5599) ให้ทำการอัปเดตแพตช์ split_limit.patch และกำหนดการตั้งค่าของเคอร์เนลสำหรับ net.inet.tcp.rack.split_limit ให้เป็นค่าที่เหมาะสม ผู้ใช้งานสามารถเลือกไม่ใช้งาน RACK TCP stack ทั้งหมดแทนการอัปเดตแพตช์ได้
    4. สำหรับช่องโหว่ CVE-2019-11479 ให้ทำการอัปเดตแพตช์  PATCH_net_3_4.patch และ PATCH_net_4_4.patch รวมไปถึงกำหนดค่า MSS ที่ต่ำที่สุดที่ระบบจะรับได้ผ่านทางเคอร์เนลที่ net.ipv4.tcp_min_snd_mss
  2. ติดตามการอัปเดตแพตช์จากเคอร์เนลของแต่ละดิสโทรและทำการอัปเดตทันทีหากมีแพตช์ ตัวอย่างเช่น Amazon Linux
  3. ทำการบล็อคการเชื่อมต่อที่มีค่า MSS ที่ต่ำผิดปกติขึ้นอยู่กับลักษณะของ network filter ที่ใช้งาน เช่น iptables ให้ใช้โมดูล tcpmss เพื่อตรวจสอบแพ็คเกต TCP SYN ที่มีค่า MSS ต่ำผิดปกติตามตัวอย่างนี้
  4. ปิดการใช้งานการประมวลผล SACK ที่เคอร์เนลโดยกำหนดค่าที่ไฟล์ /proc/sys/net/ipv4/tcp_sack เป็น 0

References