Stack Clash คืออะไรและฉันสามารถทำอะไรได้บ้าง


27

ฉันเคยได้ยินเกี่ยวกับช่องโหว่ใหม่ชื่อ Stack Clash ซึ่งเห็นได้ชัดว่ามีผลกระทบต่อระบบเหมือน Unix หลายระบบ (ไม่ใช่แค่ Linux แต่เป็น BSDs, Solaris ด้วย)

  • มันคืออะไร? ข้อผิดพลาดหลายระบบปฏิบัติการเกิดขึ้นได้อย่างไร
  • ฉันจะปกป้องระบบของฉันได้อย่างไร

คำตอบ:


29

Stack Clash เป็นช่องโหว่บนพื้นฐานของเทคนิคที่ค่อนข้างเก่า หน่วยความจำที่ใช้โดยกระบวนการที่ถูกแบ่งออกเป็นสองภูมิภาค - กองและกอง โดยทั่วไปแล้วจะนึกภาพกองขึ้นลงและกองขึ้นเมื่อเติบโตขึ้น จะเกิดอะไรขึ้นเมื่อคนทั้งสองโตพอที่จะปะทะกับอีกฝ่ายได้? โดยทั่วไปแล้วจะเกิดอะไรขึ้นเมื่อสแต็กโตพอที่จะบุกรุกเข้าไปในพื้นที่หน่วยความจำที่ไม่เกี่ยวข้อง ช่องโหว่เดิมคืออายุ 12 ปีและนักพัฒนาลินุกซ์คงได้ชั่วคราวโดยใช้หน้ายาม อย่างไรก็ตามนักวิจัยของ Qualys สามารถใช้ประโยชน์จากสิ่งนี้ได้แม้จะอยู่ในหน้ายาม

รายงาน Ars Technica :

ช่องโหว่ 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)'):

Ubuntu 17.04:
linux-image-4.10.0-24-lowlatency 4.10.0-24.28
linux-image-generic-lpae 4.10.0.24.26
linux-image-generic 4.10.0.24.26
linux-image-4.10.0-24-generic-lpae 4.10.0-24.28
linux-image-4.10.0-24-generic 4.10.0-24.28
linux-image-lowlatency 4.10.0.24.26
Ubuntu 17.04:
linux-image-4.10.0-1008-raspi2 4.10.0-1008.11
linux-image-raspi2 4.10.0.1008.10
Ubuntu 16.10:
linux-image- powerpc -smp 4.8.0.56.69
linux-image-powerpc-e500mc 4.8.0.56.69
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61
linux-image-4.8.0-56-lowlatency 4.8.0-56.61
linux-image-generic 4.8.0.56.69
linux-image-4.8.0-56-generic 4.8.0-56.61
linux-image-powerpc64-emb 4.8.0.56.69
linux-image-virtual 4.8.0.56.69
linux-image-powerpc64-smp 4.8.0.56.69
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61
linux-image-generic-lpae 4.8.0.56.69
linux-image-lowlatency 4.8.0.56.69
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61
Ubuntu 16.10:
linux-image-4.8.0-1040-raspi2 4.8.0-1040.44
linux-image-raspi2 4.8.0.1040.44
Ubuntu 16.04 LTS:
linux-image-powerpc64-smp-lts-utopic 4.4.0.81.87
linux-image-generic-lts- wily 4.4.0.81.87
linux-image-generic-lts-utopic 4.4.0.81.87
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104
linux-image-powerpc64-emb-lts-vivid 4.4.0.81.87
linux-image-powerpc-e500mc 4.4.0.81.87
linux-image-generic-lpae-lts-xenial 4.4.0.81.87
linux-image-generic-lpae-lts-utopic 4.4.0.81.87
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104
linux-image-powerpc-e500mc-lts- wily 4.4.0.81.87
linux-image-4.4.0-81-powerpc-e500mc 4.4.0-81.104
linux-image-generic-lpae-lts- wily 4.4.0.81.87
linux-image-virtual-lts-vivid 4.4.0.81.87
linux-image-virtual-lts-utopic 4.4.0.81.87
linux-image-virtual 4.4.0.81.87
linux-image-powerpc64-emb-lts- wily 4.4.0.81.87
linux-image-lowlatency-lts-vivid 4.4.0.81.87
linux-image-powerpc-e500mc-lts-vivid 4.4.0.81.87
linux-image-powerpc64-emb 4.4.0.81.87
linux-image-powerpc-smp-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-generic 4.4.0-81.104
linux-image-powerpc64-smp-lts-vivid 4.4.0.81.87
linux-image-lowlatency-lts- wily 4.4.0.81.87
linux-image-4.4.0-81-lowlatency 4.4.0-81.104
linux-image-generic 4.4.0.81.87
linux-image-lowlatency-lts-xenial 4.4.0.81.87
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.87
linux-image-powerpc64-emb-lts-utopic 4.4.0.81.87
linux-image-generic-lts-xenial 4.4.0.81.87
linux-image-generic-lts-vivid 4.4.0.81.87
linux-image-powerpc-e500mc-lts-utopic 4.4.0.81.87
linux-image- powerpc -smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104
linux-image-generic-lpae-lts-vivid 4.4.0.81.87
linux-image-generic-lpae 4.4.0.81.87
linux-image-powerpc64-smp-lts- wily 4.4.0.81.87
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.87
linux-image-powerpc-smp-lts- wily 4.4.0.81.87
linux-image-virtual-lts- wily 4.4.0.81.87
linux-image-powerpc64-smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104
linux-image-powerpc-smp-lts-utopic 4.4.0.81.87
linux-image-powerpc-smp-lts-vivid 4.4.0.81.87
linux-image-lowlatency 4.4.0.81.87
linux-image-virtual-lts-xenial 4.4.0.81.87
linux-image-lowlatency-lts-utopic 4.4.0.81.87
Ubuntu 16.04 LTS:
linux-image-4.4.0-1016-gke 4.4.0-1016.16
Ubuntu 16.04 LTS:
linux-image-snapdragon 4.4.0.1061.54
linux-image-4.4.0-1061-snapdragon 4.4.0-1061.66
Ubuntu 16.04 LTS:
linux-image-4.4.0-1020-aws 4.4.0-1020.29
Ubuntu 16.04 LTS:
linux-image-raspi2 4.4.0.1059.60
linux-image-4.4.0-1059-raspi2 4.4.0-1059.67
Ubuntu 16.04 LTS:
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-lowlatency 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-generic 4.8.0-56.61 ~ 16.04.1
linux-image-generic-hwe-16.04 4.8.0.56.27
linux-image-lowlatency-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61 ~ 16.04.1
linux-image-virtual-hwe-16.04 4.8.0.56.27
linux-image-generic-lpae-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61 ~ 16.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-smp-lts-xenial 4.4.0.81.66
linux-image-lowlatency-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-powerpc-e500mc 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-lowlatency 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lpae-lts-xenial 4.4.0.81.66
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-generic 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lts-xenial 4.4.0.81.66
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.66
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.66
linux-image-virtual-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104 ~ 14.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-e500mc 3.13.0.121.131
linux-image-lowlatency-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-emb 3.13.0-121.170
linux-image-generic-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc-smp 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500mc 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500 3.13.0-121.170
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170
linux-image-generic-lts- quantal 3.13.0.121.131
linux-image-virtual 3.13.0.121.131
linux-image- powerpc -e500 3.13.0.121.131
linux-image-generic-lts-trusty 3.13.0.121.131
linux-image-3.13.0-121-generic 3.13.0-121.170
linux-image-omap 3.13.0.121.131
linux-image-powerpc64-emb 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-smp 3.13.0-121.170
linux-image-generic 3.13.0.121.131
linux-image- highbank 3.13.0.121.131
linux-image-generic-lts- saucy 3.13.0.121.131
linux-image- powerpc -smp 3.13.0.121.131
linux-image-3.13.0-121-lowlatency 3.13.0-121.170
linux-image-generic-lpae-lts- saucy 3.13.0.121.131
linux-image-generic-lts-raring 3.13.0.121.131
linux-image-powerpc64-smp 3.13.0.121.131
linux-image-generic-lpae-lts-trusty 3.13.0.121.131
linux-image-generic-lpae 3.13.0.121.131
linux-image-lowlatency 3.13.0.121.131
Ubuntu 12.04 ESM:
linux-image-powerpc-smp 3.2.0.128.142
linux-image-3.2.0-128-virtual 3.2.0-128.173
linux-image-3.2.0-128-generic-pae 3.2.0-128.173
linux-image-generic 3.2.0.128.142
linux-image-generic-pae 3.2.0.128.142
linux-image-highbank 3.2.0.128.142
linux-image-3.2.0-128- highbank 3.2.0-128.173
linux-image-3.2.0-128-powerpc-smp 3.2.0-128.173
linux-image-virtual 3.2.0.128.142
linux-image-powerpc64-smp 3.2.0.128.142
linux-image-3.2.0-128-omap 3.2.0-128.173
linux-image-3.2.0-128-powerpc64-smp 3.2.0-128.173
linux-image-omap 3.2.0.128.142
linux-image-3.2.0-128-generic 3.2.0-128.173
Ubuntu 12.04 LTS:
linux-image-3.13.0-121-generic 3.13.0-121.170 ~ precision1
linux-image-generic-lpae-lts-trusty 3.13.0.121.112
linux-image-generic-lts-trusty 3.13.0.121.112
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170 ~ precision1

sudo

ข้อผิดพลาด sudo ดังกล่าวครอบคลุมโดยUSN-3304-1ตั้งแต่วันที่ 30 พฤษภาคม 2017:

Ubuntu 17.04:
sudo-ldap 1.8.19p1-1ubuntu1.1
sudo 1.8.19p1-1ubuntu1.1
Ubuntu 16.10:
sudo-ldap 1.8.16-0ubuntu3.2
sudo 1.8.16-0ubuntu3.2
Ubuntu 16.04 LTS:
sudo-ldap 1.8.16-0ubuntu1.4
sudo 1.8.16-0ubuntu1.4
Ubuntu 14.04 LTS:
sudo-ldap 1.8.9p5-1ubuntu1.4
sudo 1.8.9p5-1ubuntu1.4

ดังนั้นโดยสรุปแล้วมันควรจะได้รับการแก้ไขในอูบุนตูเกือบทุกรุ่นที่ยังคงรองรับอยู่เพียงแค่ต้องการอัพเดท
CJCombrink

@TheBadger no ตามที่บันทึกไว้โดยตัวติดตาม CVE ชุดค่าผสมบางอย่างจะยังคงแสดงเป็นรอการอนุมัติ ฉันสมมติว่า USNs อื่น ๆ จะได้รับการเผยแพร่เมื่อมีการแก้ไข
muru

4
แต่ใช่การอัปเดตควรเพียงพอการกำหนดค่าเพิ่มเติมไม่จำเป็น
muru

หากมันมีผลกระทบต่อวิธีการตรวจสอบ?
เดซี่

1
@immibis ตามบทความต่อไปนี้ แต่การใช้งานที่มีอยู่ไม่ทำงานอย่างถูกต้อง: คำอธิบายข้อผิดพลาด Stackguard โดย Qualys Research Labs
Igor B

1

ข้อผิดพลาดหลายระบบปฏิบัติการเกิดขึ้นได้อย่างไร

หากต้องการระบุส่วนนี้ของคำถามของคุณโดยเฉพาะ:

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

การออกแบบนี้เป็นสิ่งที่พบได้ทั่วไปในหลาย ๆ ระบบดังนั้นทำไมหลาย ๆ ระบบจึงมีช่องโหว่ต่อช่องโหว่ประเภทเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.