APIC/มหากาพย์! ชิป Intel รั่วไหลความลับแม้แต่เคอร์เนลก็ไม่ควรเห็น... PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

APIC/มหากาพย์! ชิป Intel รั่วไหลเป็นความลับ แม้แต่เคอร์เนลก็ไม่ควรเห็น...

นี่คือ BWAIN ของสัปดาห์นี้ คำศัพท์เกี่ยวกับ a . ของเรา ข้อผิดพลาดด้วยชื่อที่น่าประทับใจ.

BWAIN เป็นรางวัลที่เรามอบให้เมื่อข้อบกพร่องด้านความปลอดภัยในโลกไซเบอร์ใหม่ไม่เพียงแต่กลายเป็นสิ่งที่น่าสนใจและมีความสำคัญเท่านั้น แต่ยังปรากฏโลโก้ ชื่อโดเมน และเว็บไซต์ของตัวเองอีกด้วย

อันนี้ถูกขนานนามว่า ÆPIC รั่ว, ปุนในคำ APIC และ มหากาพย์.

อดีตนั้นย่อมาจาก ตัวควบคุมการขัดจังหวะที่ตั้งโปรแกรมได้ขั้นสูงและหลังเป็นเพียงคำว่า "มหากาพย์" เช่นเดียวกับใน ยักษ์, มาก, สุดโต่ง, เมกะ, มีมนุษยธรรม.

ไม่มีการใช้ตัวอักษร Æ ในการเขียนภาษาอังกฤษตั้งแต่สมัยชาวแซกซอน ชื่อของมันคือ อักษรศาสตร์เด่นชัด เถ้า (เหมือนในต้นไม้) และค่อนข้างจะแทนเสียงของ A ในคำว่า ASH สมัยใหม่ แต่เราคิดว่าคุณควรจะออกเสียงคำว่า PIC ที่นี่ ไม่ว่าจะเป็น “APIC-slash-EPIC” หรือ “ah!-eh?-PIC”

มันเกี่ยวกับอะไร?

ทั้งหมดนี้ทำให้เกิดคำถามที่น่าสนใจห้าข้อ:

  • APIC . คืออะไรและทำไมฉันถึงต้องการมัน
  • คุณมีข้อมูลได้อย่างไร แม้แต่เคอร์เนล ไม่สามารถมองที่?
  • อะไรทำให้เกิดความล้มเหลวครั้งยิ่งใหญ่นี้ ใน APIC?
  • ไม่ ÆPIC รั่ว ส่งผลกระทบต่อฉัน?
  • สิ่งที่ต้องทำ เกี่ยวกับมัน?

APIC คืออะไร?

ย้อนกลับไปในปี 1981 เมื่อ IBM PC ปรากฏตัวครั้งแรก

พีซีรวมชิปที่เรียกว่า Intel 8259A โปรแกรมควบคุมการขัดจังหวะหรือ PIC (รุ่นต่อมา ตั้งแต่ PC AT เป็นต้นไป มี PIC สองตัวที่เชื่อมโยงเข้าด้วยกัน เพื่อรองรับเหตุการณ์ที่ขัดจังหวะมากขึ้น)

วัตถุประสงค์ของ PIC นั้นค่อนข้างจะขัดจังหวะโปรแกรมที่ทำงานบนโปรเซสเซอร์กลาง (CPU) ของ PC เมื่อใดก็ตามที่เกิดเหตุการณ์ที่สำคัญด้านเวลาซึ่งจำเป็นต้องให้ความสนใจทันที

การขัดจังหวะของฮาร์ดแวร์เหล่านี้รวมถึงเหตุการณ์ต่างๆ เช่น: แป้นพิมพ์ได้รับการกดแป้นพิมพ์ พอร์ตอนุกรมที่ได้รับอักขระ และตัวจับเวลาฮาร์ดแวร์ซ้ำแล้วซ้ำอีก

หากไม่มีระบบขัดจังหวะด้วยฮาร์ดแวร์ประเภทนี้ ระบบปฏิบัติการจะต้องถูกทิ้งร้างด้วยการเรียกใช้ฟังก์ชันเพื่อตรวจสอบการกดแป้นพิมพ์ที่เข้ามาเป็นประจำ ซึ่งจะเป็นการสิ้นเปลืองพลังงาน CPU เมื่อไม่มีใครพิมพ์ แต่จะไม่ตอบสนอง เพียงพอเมื่อพวกเขาทำ

อย่างที่คุณจินตนาการได้ ในไม่ช้า PIC ก็ถูกตามด้วยชิปที่ได้รับการอัพเกรดชื่อ the APIC, สูง ประเภทของ PIC ที่สร้างขึ้นใน CPU เอง

ทุกวันนี้ APIC ให้มากกว่าแค่คำติชมจากแป้นพิมพ์ พอร์ตอนุกรม และตัวจับเวลาระบบ

เหตุการณ์ APIC ถูกทริกเกอร์โดย (และให้ข้อมูลแบบเรียลไทม์เกี่ยวกับ) เหตุการณ์ เช่น ความร้อนสูงเกินไป และอนุญาตให้มีการโต้ตอบกับฮาร์ดแวร์ระหว่างคอร์ต่างๆ ในโปรเซสเซอร์มัลติคอร์ร่วมสมัย

และชิปของ Intel ในปัจจุบันนี้ หากเราอาจทำแบบง่าย ๆ ได้มาก โดยทั่วไปสามารถกำหนดค่าให้ทำงานได้สองวิธีที่เรียกว่า โหมด xAPIC และ โหมด x2APIC.

ที่นี่ xAPIC เป็นวิธี "ดั้งเดิม" ในการดึงข้อมูลจากตัวควบคุมการขัดจังหวะและ x2APIC เป็นวิธีที่ทันสมัยกว่า

ทำให้ง่ายขึ้นไปอีก xAPIC อาศัยสิ่งที่เรียกว่า เอ็มมิโอ, ย่อจาก อินพุต/เอาต์พุตที่แมปหน่วยความจำสำหรับการอ่านข้อมูลออกจาก APIC เมื่อลงทะเบียนเหตุการณ์ที่น่าสนใจ

ในโหมด MMIO คุณสามารถค้นหาสิ่งที่ทริกเกอร์เหตุการณ์ APIC โดยการอ่านจากพื้นที่หน่วยความจำ (RAM) เฉพาะ ซึ่งสะท้อนการลงทะเบียนอินพุต/เอาต์พุตของชิป APIC เอง

ข้อมูล xAPIC นี้ถูกแมปลงในบล็อกหน่วยความจำขนาด 4096 ไบต์ที่ใดที่หนึ่งใน RAM จริงของคอมพิวเตอร์

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

ในทางตรงกันข้าม x2APIC ต้องการให้คุณ อ่านข้อมูล APIC โดยตรง จากตัวชิปเองโดยใช้สิ่งที่เรียกว่า ทะเบียนเฉพาะรุ่น (MSR).

ตามที่ Intel หลีกเลี่ยงส่วน MMIO ของกระบวนการ “ให้ความสามารถในการระบุที่อยู่ของโปรเซสเซอร์เพิ่มขึ้นอย่างมากและการปรับปรุงบางอย่างในการส่งมอบแบบขัดจังหวะ”

โดยเฉพาะอย่างยิ่ง การดึงข้อมูล APIC โดยตรงจากการลงทะเบียนบนชิปหมายความว่าจำนวนข้อมูลทั้งหมดที่รองรับ และจำนวนแกนประมวลผล CPU สูงสุดที่สามารถจัดการได้ในเวลาเดียวกัน ไม่จำกัดเพียง 4096 ไบต์ที่มีอยู่ในโหมด MMIO

คุณจะมีข้อมูลที่แม้แต่เคอร์เนลก็มองไม่เห็นได้อย่างไร

คุณอาจเดาได้แล้วว่าข้อมูลที่ลงเอยในพื้นที่หน่วยความจำ MMIO เมื่อคุณใช้โหมด xAPIC นั้นไม่ได้รับการจัดการอย่างระมัดระวังอย่างที่ควรจะเป็น...

…และด้วยเหตุนี้ "ข้อมูลรั่วไหล" บางประเภทในพื้นที่ MMIO นั้นเป็นหัวใจของปัญหานี้

แต่เนื่องจากคุณ ต้องการพลังระดับผู้ดูแลระบบอยู่แล้ว เพื่ออ่านข้อมูล MMIO ตั้งแต่แรก ดังนั้นคุณจึงสามารถรับข้อมูลใด ๆ ในหน่วยความจำได้เกือบแน่นอนอยู่แล้ว...

…ทำไมข้อมูลของคนอื่นจึงแสดงขึ้นโดยไม่ได้ตั้งใจในพื้นที่ข้อมูล APIC MMIO แทน an มหากาพย์ รั่ว?

มันอาจทำให้การขโมยข้อมูลหรือการโจมตี RAM-scraping บางประเภทง่ายขึ้นในทางปฏิบัติ แต่แน่นอนว่ามันจะไม่ให้ความสามารถในการสอดแนมหน่วยความจำมากกว่าที่คุณมีอยู่แล้วในทางทฤษฎี?

ขออภัย ข้อสันนิษฐานนั้นไม่เป็นความจริงหากซอฟต์แวร์ใดๆ ในระบบใช้ SGX ของ Intel ย่อมาจาก ส่วนขยาย Software Guard.


เรียนรู้เพิ่มเติมเกี่ยวกับ SGX


SGX ได้รับการสนับสนุนโดยซีพียู Intel รุ่นล่าสุดจำนวนมาก และให้วิธีการสำหรับเคอร์เนลของระบบปฏิบัติการในการ "ปิดผนึก" กลุ่มของโค้ดและข้อมูลลงในบล็อกที่มีอยู่จริงของ RAM เพื่อสร้างสิ่งที่เรียกว่าวงล้อม

สิ่งนี้ทำให้มันทำงานชั่วคราวเหมือนกับชิปความปลอดภัยพิเศษในโทรศัพท์มือถือที่ใช้ในการเก็บความลับเช่นคีย์ถอดรหัส

เมื่อตั้งค่า “ล็อค” SGX ของวงล้อมแล้ว เฉพาะรหัสโปรแกรมที่ทำงานอยู่ภายในพื้นที่หน่วยความจำที่ปิดสนิทเท่านั้นที่สามารถอ่านและเขียนเนื้อหาของ RAM นั้นได้

ด้วยเหตุนี้ รายละเอียดภายในของการคำนวณใดๆ ที่เกิดขึ้นหลังจากเปิดใช้งานวงล้อมนั้นจะไม่ปรากฏให้เห็นในโค้ด เธรด กระบวนการ หรือผู้ใช้อื่นๆ ในระบบ

รวมทั้งเคอร์เนลเองด้วย

มีวิธีเรียกรหัสที่ถูกผนึกไว้ในวงล้อม และวิธีที่จะส่งคืนผลลัพธ์ของการคำนวณที่อาจดำเนินการ แต่ไม่มีวิธีกู้คืน หรือสอดแนม หรือแก้ไขข้อบกพร่อง รหัสและ ข้อมูลที่เกี่ยวข้องในขณะที่ทำงาน

วงล้อมจะเปลี่ยนเป็นกล่องดำอย่างมีประสิทธิภาพซึ่งคุณสามารถป้อนอินพุตได้ เช่น ข้อมูลที่จะลงนามด้วยคีย์ส่วนตัว และแยกเอาต์พุต เช่น ลายเซ็นดิจิทัลที่สร้างขึ้น แต่คุณไม่สามารถกะพริบคีย์การเข้ารหัสได้ ใช้ในกระบวนการลงนาม

อย่างที่คุณจินตนาการได้ หากข้อมูลที่ควรจะปิดผนึกไว้ภายในวงล้อม SGX ควรถูกทำซ้ำโดยไม่ได้ตั้งใจใน MMIO RAM ที่ใช้เพื่อ "สะท้อน" ข้อมูล APIC เมื่อคุณใช้โหมด "memory-mapped" ของ xAPIC

…นั่นจะเป็นการละเมิดความปลอดภัยของ SGX ซึ่งบอกว่าไม่ควรมีข้อมูลใดออกมาจากวงล้อม SGX หลังจากที่สร้างมันขึ้นมา เว้นแต่จะถูกส่งออกโดยเจตนาโดยโค้ดที่รันอยู่ภายในวงล้อมนั้นเอง

อะไรเป็นสาเหตุของความล้มเหลวครั้งยิ่งใหญ่ใน APIC

นักวิจัยที่อยู่เบื้องหลัง Æกระดาษรั่ว PIC ค้นพบว่าโดยการจัดอ่านข้อมูล APIC ผ่านลำดับการเข้าถึงหน่วยความจำที่ชาญฉลาดและผิดปกติ…

…พวกเขาสามารถหลอกให้โปรเซสเซอร์เติมพื้นที่ APIC MMIO ไม่เพียงแต่กับข้อมูลที่เพิ่งได้รับใหม่จาก APIC เอง แต่ยังรวมถึงข้อมูลที่เพิ่งเกิดขึ้นโดย CPU เมื่อเร็ว ๆ นี้เพื่อวัตถุประสงค์อื่น

ลักษณะการทำงานนี้เป็นผลข้างเคียงจากข้อเท็จจริงที่ว่าแม้ว่าหน้าหน่วยความจำ APIC MMIO จะมีขนาด 4096 ไบต์ แต่ชิป APIC ในโหมด xAPIC ไม่ได้สร้างข้อมูลมูลค่า 4096 ไบต์จริง ๆ และ CPU ก็ไม่ได้ทำให้เป็นกลางอย่างถูกต้องเสมอไป ส่วนที่ไม่ได้ใช้ของภูมิภาค MMIO โดยเติมศูนย์ก่อน

ข้อมูลเก่าที่เหลืออยู่ในแคช CPU ถูกเขียนออกมาพร้อมกับข้อมูลใหม่ที่ได้รับจากชิป APIC แทน

ตามที่นักวิจัยกล่าว บั๊กเดือดลงไปถึงสิ่งที่เรียกว่า an อ่านหน่วยความจำที่ไม่ได้เริ่มต้นที่ซึ่งคุณใช้ข้อมูลที่เหลือของคนอื่นใน RAM ซ้ำโดยไม่ได้ตั้งใจ เพราะทั้งพวกเขาและคุณไม่ล้างข้อมูลความลับก่อนหน้านี้ก่อน

การรั่วไหลของ ÆPIC ส่งผลต่อฉันหรือไม่?

สำหรับรายการชิปทั้งหมดที่ได้รับผลกระทบ โปรดดูที่ คำแนะนำของ Intel เอง.

เท่าที่เราสามารถบอกได้ หากคุณมีโปรเซสเซอร์ Intel รุ่นที่ 10 หรือ 11 คุณอาจได้รับผลกระทบ

แต่ถ้าคุณมี CPU รุ่นที่ 12 ใหม่ล่าสุด (ล่าสุด ณ เวลาที่เขียน) ดูเหมือนว่าเฉพาะชิประดับเซิร์ฟเวอร์เท่านั้นที่ได้รับผลกระทบ

กระแทกแดกดันในชิปแล็ปท็อปรุ่นที่ 12 Intel ได้เลิกใช้ SGX ดังนั้นข้อผิดพลาดนี้จึงใช้ไม่ได้เพราะเป็นไปไม่ได้ที่จะมีวงล้อม SGX "ปิดผนึก" ที่อาจรั่วไหล

แน่นอน แม้แต่ชิปที่มีความเสี่ยง หากคุณไม่ได้พึ่งพาซอฟต์แวร์ใดๆ ที่ใช้ SGX บั๊กก็จะไม่มีผลเช่นกัน

และแมลงที่ถูกขนานนามว่า CVE-2022-21233, สามารถถูกโจมตีโดยผู้โจมตีที่มีสิทธิ์เข้าถึงระดับผู้ดูแลระบบ (รูท) ในเครื่องคอมพิวเตอร์ของคุณอยู่แล้ว

ผู้ใช้ทั่วไป ไม่สามารถเข้าถึงบล็อกข้อมูล APIC MMIO ได้ ดังนั้นจึงไม่มีทางแอบดูอะไรได้เลย นับประสาข้อมูลลับที่อาจรั่วไหลออกมาจากวงล้อม SGX

นอกจากนี้ เครื่องเสมือนแขก (VMs) ที่ทำงานภายใต้การควบคุมของระบบปฏิบัติการโฮสต์ในไฮเปอร์ไวเซอร์ เช่น HyperV, VMWare หรือ VirtualBox แทบจะไม่สามารถใช้เคล็ดลับนี้เพื่อขโมยความลับจากแขกคนอื่นหรือโฮสต์เองได้

นั่นเป็นเพราะว่า Guest VM ไม่สามารถเข้าถึงวงจร APIC จริงในโฮสต์โปรเซสเซอร์ได้ แขกแต่ละคนจะได้รับ APIC จำลองของตนเองซึ่งเป็นเอกลักษณ์ของ VM นั้นแทน

จะทำอย่างไร?

ไม่ต้องตกใจ.

บนแล็ปท็อปหรือคอมพิวเตอร์เดสก์ท็อป คุณอาจไม่มีความเสี่ยงเลย อาจเป็นเพราะคุณมีคอมพิวเตอร์รุ่นเก่า (หรือโชคดี ที่เป็นเครื่องใหม่!) หรือเพราะคุณไม่ได้พึ่งพา SGX อยู่แล้ว

และแม้ว่าคุณจะมีความเสี่ยงก็ตาม ใครก็ตามที่เข้าสู่แล็ปท็อปของคุณในฐานะผู้ดูแลระบบ/รูทอาจมีกำลังเพียงพอที่จะทำให้คุณตกอยู่ในโลกแห่งปัญหาอยู่แล้ว

หากคุณมีเซิร์ฟเวอร์ที่มีช่องโหว่ และคุณพึ่ง SGX ในการรักษาความปลอดภัยในการปฏิบัติงาน โปรดตรวจสอบ คำแนะนำด้านความปลอดภัยของ Intel อินเทล-SA-00657 สำหรับข้อมูลการป้องกันและบรรเทาสาธารณภัย

ตามที่นักวิจัยที่เขียนขึ้นนี้ “Intel [ได้] ออกไมโครโค้ดและอัพเดต SGX Software Development Kit เพื่อแก้ไขปัญหานี้”

ดูเหมือนว่าทีมเคอร์เนลของ Linux จะทำงานบนแพตช์ที่จะช่วยให้คุณสามารถกำหนดค่าระบบของคุณเพื่อใช้ x2APIC เสมอ (ซึ่งตามที่คุณจำได้ก่อนหน้านี้จะไม่ส่งข้อมูล APIC ผ่านหน่วยความจำที่แชร์) และจะป้องกันไม่ให้ระบบถูกบังคับให้กลับเข้าสู่โหมด xAPIC ได้อย่างสวยงามหลังจากบูทเครื่อง


ประทับเวลา:

เพิ่มเติมจาก ความปลอดภัยเปล่า