นักวิจัยของ Cisco Talos เปิดตัว ไม่กี่วันที่ผ่านมา ช่องโหว่ในเคอร์เนล Linux ที่สามารถใช้เพื่อขโมยข้อมูลได้ และยังใช้เป็นช่องทางในการยกระดับสิทธิ์และประนีประนอมระบบ
ช่องโหว่ อธิบายว่าเป็น 'ช่องโหว่ในการเปิดเผยข้อมูล ซึ่งอาจทำให้ผู้โจมตีเห็นหน่วยความจำของเคอร์เนลสแต็ก '
CVE-2020-28588 คือช่องโหว่ที่ ค้นพบในอุปกรณ์ ARM ฟังก์ชัน proc / pid / syscall อุปกรณ์ 32 บิตที่รันระบบปฏิบัติการ ตาม Cisco Talos พบปัญหาครั้งแรกในอุปกรณ์ที่ใช้ Azure Sphere
ช่องโหว่ในการเปิดเผยข้อมูลมีอยู่ในฟังก์ชัน / proc / pid / syscall ของ Linux Kernel 5.1 Stable และ 5.4.66 โดยเฉพาะอย่างยิ่งปัญหานี้ได้รับการแนะนำใน v5.1-rc4 (คอมมิต 631b7abacd02b88f4b0795c08b54ad4fc3e7c7c0) และยังคงมีอยู่ใน v5.10-rc4 ดังนั้นเวอร์ชันระดับกลางทั้งหมดจึงมีแนวโน้มที่จะได้รับผลกระทบ ผู้โจมตีสามารถอ่าน / proc / pid / syscall เพื่อเปิดใช้งานช่องโหว่นี้ทำให้เคอร์เนลสูญเสียเนื้อหาหน่วยความจำ
Proc เป็นระบบไฟล์หลอกพิเศษ บนระบบปฏิบัติการที่เหมือน Unix นั่นเอง ใช้เพื่อเข้าถึงข้อมูลกระบวนการแบบไดนามิก พบในเคอร์เนล นำเสนอข้อมูลกระบวนการและข้อมูลระบบอื่น ๆ ตามลำดับชั้นโครงสร้างเหมือนไฟล์
ตัวอย่างเช่นมีไดเร็กทอรีย่อย / proc / [pid] ซึ่งแต่ละไฟล์มีไฟล์และไดเร็กทอรีย่อยที่เปิดเผยข้อมูลเกี่ยวกับกระบวนการเฉพาะซึ่งสามารถอ่านได้โดยใช้ ID กระบวนการที่เกี่ยวข้อง ในกรณีของไฟล์ "syscall" เป็นไฟล์ระบบปฏิบัติการ Linux ที่ถูกต้องซึ่งมีบันทึกการเรียกระบบที่เคอร์เนลใช้
สำหรับ บริษัท ลแฮกเกอร์สามารถใช้ประโยชน์จากข้อบกพร่องและเข้าถึงระบบปฏิบัติการและไฟล์ syscall ผ่านระบบที่ใช้ในการโต้ตอบระหว่างโครงสร้างข้อมูลเคอร์เนล Proc รายการ syscall procfs สามารถใช้ประโยชน์ได้หากแฮกเกอร์ออกคำสั่งเพื่อสร้างหน่วยความจำฮีปที่ไม่ได้เริ่มต้น 24 ไบต์ซึ่งนำไปสู่การเลี่ยงการสุ่มเลย์เอาต์พื้นที่ที่อยู่เคอร์เนล (KASLR)
เมื่อมองไปที่ฟังก์ชันเฉพาะนี้ทุกอย่างดูดี แต่เป็นที่น่าสังเกตว่าไฟล์
args
พารามิเตอร์ที่ผ่านมาจากproc_pid_syscall
ฟังก์ชันและเป็นประเภทที่แท้จริง__u64 args
. ในระบบ ARM นิยามของฟังก์ชันจะแปลงขนาดของไฟล์arg
อาร์เรย์ในองค์ประกอบสี่ไบต์จากแปดไบต์ (ตั้งแต่unsigned long
ใน ARM คือ 4 ไบต์) ซึ่งส่งผลให้เป็นไฟล์memcpy
ถูกคัดลอกเป็น 20 ไบต์ (บวก 4 สำหรับargs[0]
).ในทำนองเดียวกันสำหรับ i386 โดยที่
unsigned long
มันคือ 4 ไบต์เพียงแค่args
24 ไบต์แรกของอาร์กิวเมนต์ถูกเขียนโดยปล่อยให้ 24 ไบต์ที่เหลือเหมือนเดิมในทั้งสองกรณีหากเรามองย้อนกลับไปที่ไฟล์
proc_pid_syscall
ฟังก์ชันในขณะที่อยู่ใน ARM 32 บิตและ i386 เราคัดลอกเพียง 24 ไบต์ลงในไฟล์
args
อาร์เรย์สตริงรูปแบบจะลงท้ายด้วยการอ่านไฟล์args
เมทริกซ์ตั้งแต่%llx
สตริงรูปแบบคือแปดไบต์บนระบบ 32 บิตและ 64 บิต ดังนั้นหน่วยความจำฮีปที่ไม่ได้เริ่มต้น 24 ไบต์จึงได้รับเอาต์พุตซึ่งอาจนำไปสู่การบายพาส KASLR
นักวิจัยระบุว่า การโจมตีนี้ "เป็นไปไม่ได้ที่จะตรวจจับจากระยะไกลบนเครือข่าย" เนื่องจากกำลังอ่านไฟล์ที่ถูกต้องจากระบบปฏิบัติการ Linux "หากใช้อย่างถูกต้องแฮ็กเกอร์อาจใช้ประโยชน์จากการรั่วไหลของข้อมูลนี้เพื่อใช้ประโยชน์จากช่องโหว่อื่น ๆ ของ Linux ที่ไม่ได้รับการแก้ไข" Cisco กล่าว
ในเรื่องนี้ Google เพิ่งกล่าวว่า:
“ ข้อบกพร่องด้านความปลอดภัยของหน่วยความจำมักคุกคามความปลอดภัยของอุปกรณ์โดยเฉพาะแอปพลิเคชันและระบบปฏิบัติการ ตัวอย่างเช่นในระบบปฏิบัติการมือถือ Android ที่เคอร์เนล Linux รองรับ Google กล่าวว่าพบว่ามากกว่าครึ่งหนึ่งของช่องโหว่ด้านความปลอดภัยที่ได้รับการแก้ไขในปี 2019 เป็นผลมาจากข้อบกพร่องด้านความปลอดภัยของหน่วยความจำ
สุดท้าย แต่ไม่ท้ายสุด ขอแนะนำให้อัปเดตเวอร์ชัน 5.10-rc4, 5.4.66, 5.9.8 ของเคอร์เนล Linux ตั้งแต่ ช่องโหว่นี้ได้รับการทดสอบและยืนยันแล้วว่าสามารถใช้ประโยชน์จากเคอร์เนล Linux เวอร์ชันต่อไปนี้ได้
ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติม เกี่ยวกับโพสต์คุณสามารถตรวจสอบรายละเอียดได้ในไฟล์ ลิงค์ต่อไปนี้