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

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

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

รายละเอียดช่องโหว่โดยย่อ
ที่มาของช่องโหว่
การโจมตีช่องโหว่
ระบบที่ได้รับผลกระทบ
การตรวจจับการโจมตี
การป้องกันการโจมตี

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

ช่องโหว่ SACK Panic รหัส CVE-2019-11477 คะแนน CVSSv3 7.5
ช่องโหว่ SACK Slowness รหัส CVE-2019-11478 คะแนน CVSSv3 5.3
ช่องโหว่ SACK Slowness รหัส CVE-2019-5599 ยังไม่มีการระบุคะแนน CVSS
ช่องโหว่ไม่มีชื่อเฉพาะ รหัส 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 ที่ใช้สำหรับโจมตีช่องโหว่ในขณะนี้
ระบบที่ได้รับผลกระทบ

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

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

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

ทำการอัปเดตแพตช์เฉพาะของช่องโหว่หากยังไม่มีการอัปเดตจากโครงการของเคอร์เนล โดยให้ดำเนินการดังนี้

สำหรับช่องโหว่ SACK Panic (CVE-2019-11477) ให้ทำการอัปเดตแพตช์ PATCH_net_1_4.patch ในกรณีที่ลินุกซ์เคอร์เนลเป็นเวอร์ชัน 4.14 หรือใหม่กว่า ให้ทำการอัปเดตแพตช์ PATCH_net_1a.patch ไปพร้อมกันด้วย
สำหรับช่องโหว่ SACK Slowness (CVE-2019-11478) ให้ทำการอัปเดตแพช์ PATCH_net_2_4.patch กับเคอร์เนล
สำหรับช่องโหว่ SACK Slowness (CVE-2019-5599) ให้ทำการอัปเดตแพตช์ split_limit.