ฉันเคยได้ยินเกี่ยวกับช่องโหว่ใหม่ชื่อ Stack Clash ซึ่งเห็นได้ชัดว่ามีผลกระทบต่อระบบเหมือน Unix หลายระบบ (ไม่ใช่แค่ Linux แต่เป็น BSDs, Solaris ด้วย)
- มันคืออะไร? ข้อผิดพลาดหลายระบบปฏิบัติการเกิดขึ้นได้อย่างไร
- ฉันจะปกป้องระบบของฉันได้อย่างไร
ฉันเคยได้ยินเกี่ยวกับช่องโหว่ใหม่ชื่อ Stack Clash ซึ่งเห็นได้ชัดว่ามีผลกระทบต่อระบบเหมือน Unix หลายระบบ (ไม่ใช่แค่ Linux แต่เป็น BSDs, Solaris ด้วย)
คำตอบ:
Stack Clash เป็นช่องโหว่บนพื้นฐานของเทคนิคที่ค่อนข้างเก่า หน่วยความจำที่ใช้โดยกระบวนการที่ถูกแบ่งออกเป็นสองภูมิภาค - กองและกอง โดยทั่วไปแล้วจะนึกภาพกองขึ้นลงและกองขึ้นเมื่อเติบโตขึ้น จะเกิดอะไรขึ้นเมื่อคนทั้งสองโตพอที่จะปะทะกับอีกฝ่ายได้? โดยทั่วไปแล้วจะเกิดอะไรขึ้นเมื่อสแต็กโตพอที่จะบุกรุกเข้าไปในพื้นที่หน่วยความจำที่ไม่เกี่ยวข้อง ช่องโหว่เดิมคืออายุ 12 ปีและนักพัฒนาลินุกซ์คงได้ชั่วคราวโดยใช้หน้ายาม อย่างไรก็ตามนักวิจัยของ Qualys สามารถใช้ประโยชน์จากสิ่งนี้ได้แม้จะอยู่ในหน้ายาม
ช่องโหว่ Stack Clash ได้รับความสนใจอย่างกว้างขวางช้าๆเป็นครั้งแรกในปี 2548 กับการค้นพบของนักวิจัยด้านความปลอดภัยGaël Delalleauและอีกห้าปีต่อมาเมื่อมีการเปิดตัวช่องโหว่ Linuxโดยนักวิจัย Rafal Wojtczuk นักพัฒนา Linux นำเสนอการป้องกันที่มีจุดประสงค์เพื่อป้องกันการปะทะกันของกองซ้อน แต่การวิจัยในวันนี้แสดงให้เห็นว่าผู้โจมตีสามารถหลบเลี่ยงมาตรการได้ง่าย
CVE-2017-1000364 การโจมตีที่พิสูจน์แนวคิดหลักที่พัฒนาโดย Qualys หาช่องโหว่ที่จัดทำดัชนีเป็น CVE-2017-1000364 นักวิจัย Qualys ยังพัฒนาการโจมตีที่ใช้ Stack Clash เพื่อหาช่องโหว่แยกจากกันรวมถึง CVE-2017-1000365 และ CVE-2017-1000367 ตัวอย่างเช่นเมื่อรวมกับ CVE-2017-1000367 ข้อบกพร่องที่คงที่เมื่อเร็ว ๆ นี้ใน Sudo ก็ถูกค้นพบโดย Qualys ผู้ใช้ในท้องถิ่นสามารถใช้ประโยชน์จาก Sudo เพื่อรับสิทธิพิเศษแบบเต็มในช่วงกว้างของระบบปฏิบัติการ Qualys ไม่สามารถใช้ประโยชน์จากการเรียกใช้โค้ดจากระยะไกลได้ แอปพลิเคชั่นระยะไกลที่พวกเขาทำการตรวจสอบคือเซิร์ฟเวอร์อีเมล Exim ซึ่งบังเอิญพบว่าไม่สามารถใช้ประโยชน์ได้ Qualys กล่าวว่าไม่สามารถแยกแยะความเป็นไปได้ที่มีการใช้ประโยชน์จากการเรียกใช้รหัสจากระยะไกล Qualys กล่าวว่าจะเปิดตัวการหาข้อพิสูจน์เชิงแนวคิดในภายหลัง
[ ... ] ข้อมูลอื่น ๆ อีกมากมายที่มีอยู่ในที่ปรึกษาทางเทคนิคนี้มีรายละเอียดจาก Qualysและการวิเคราะห์ทางเทคนิคนี้จาก grsecurity
การอ้างถึงบทความ LWNเกี่ยวกับการแก้ไขต้นฉบับจาก 2010:
เนื่องจาก Linux ไม่ได้แยกกระบวนการสแต็กและเพจฮีปการเขียนทับหน้าสแต็กลงในหน้าฮีปที่อยู่ติดกันจึงเป็นไปได้ นั่นหมายความว่าสแต็กที่ลึกพอ (จากการเรียกซ้ำแบบซ้ำ) อาจจบลงด้วยการใช้หน่วยความจำในฮีป โปรแกรมที่สามารถเขียนไปยังหน้าฮีปนั้น (เช่นไคลเอนต์ X) สามารถจัดการที่อยู่ผู้ส่งของการโทรหนึ่งเพื่อข้ามไปยังสถานที่ที่เลือก นั่นหมายความว่าลูกค้าสามารถทำให้เซิร์ฟเวอร์เรียกใช้รหัสที่เลือก - การใช้รหัสโดยอำเภอใจ - ซึ่งสามารถยกระดับให้ได้รับสิทธิ์รูต
คำอธิบายข้างต้นนำไปใช้กับเมล็ดเหมือน Unix ต่างๆ
ในขณะที่ Ars Technica บันทึกการแก้ปัญหาชั่วคราวที่กล่าวถึงในรายงาน Qualys ("ตั้งค่า RLIMIT STACK และ RLIMIT_AS ของ ผู้ใช้ในพื้นที่ และ บริการระยะไกลให้ มีค่าต่ำ") ควรสังเกตว่าสิ่งนี้ไม่จำเป็นต้องป้องกันการเอารัดเอาเปรียบนี้ ทางออกที่ปลอดภัยในปัจจุบันคือการอัพเกรด ตามการวิเคราะห์ความมั่นคง:
ควรชัดเจนว่าการพยายามใช้เคอร์เนลอย่างเดียวเพื่อแก้ไขปัญหานี้มักจะไม่สมบูรณ์เสมอไปเนื่องจากปัญหาจริงอยู่ที่การขาดการตรวจสอบสแต็ก เนื่องจากโซลูชันที่เป็นทางเลือกจริงขึ้นอยู่กับการสร้างผู้ใช้ทั้งหมดขึ้นใหม่จึงน่าจะเป็นทางออกเดียวที่เป็นไปได้สำหรับอนาคตอันใกล้นี้
การใช้ประโยชน์ในปี 2010 ใช้เซิร์ฟเวอร์ X ตัวนี้ใช้ sudo อีกอันหนึ่งอาจเป็นหนึ่งในโปรแกรมผู้ใช้มากมายที่บางครั้งใช้งานภายใต้สิทธิ์ที่ได้รับการยกระดับ
Qualys ยังไม่ได้เผยแพร่รหัสการพิสูจน์แนวคิดใด ๆ สำหรับการหาประโยชน์ในขณะที่ (พวกเขาวางแผนที่จะทำในภายหลัง)
มีคำเตือนเกี่ยวกับความปลอดภัยของ Ubuntu หลายตัวที่เชื่อมโยงกับ CVE-2017-1000364:
นอกจากนี้โปรดทราบว่าตัวติดตาม CVEแสดงรายการชุดการเปิด / เคอร์เนลหลายชุดเป็นการแก้ไขที่ค้าง
โดยทั่วไปการแก้ไขที่ง่ายที่สุดคือการอัปเดตระบบของคุณเป็นแพ็คเกจเคอร์เนลล่าสุดโดยเร็ว
รุ่นเคอร์เนลที่เกี่ยวข้องจาก USNs (คัดโดยใช้for i in {24..35}; curl -s https://www.ubuntu.com/usn/usn-33$i-1/ | pup 'dl:nth-last-of-type(1)'
):
ข้อผิดพลาด sudo ดังกล่าวครอบคลุมโดยUSN-3304-1ตั้งแต่วันที่ 30 พฤษภาคม 2017:
ข้อผิดพลาดหลายระบบปฏิบัติการเกิดขึ้นได้อย่างไร
หากต้องการระบุส่วนนี้ของคำถามของคุณโดยเฉพาะ:
ปัญหานี้เกิดขึ้นเนื่องจากการใช้พื้นที่ที่อยู่ที่ใช้ร่วมกันสำหรับฮีป (ซึ่งเติบโตขึ้นไป) และสแต็ก (ซึ่งเติบโตลง)
การออกแบบนี้เป็นสิ่งที่พบได้ทั่วไปในหลาย ๆ ระบบดังนั้นทำไมหลาย ๆ ระบบจึงมีช่องโหว่ต่อช่องโหว่ประเภทเดียวกัน