Raspberry Pi เสี่ยงต่อการถูกโจมตีจาก Spectre หรือ Meltdown หรือไม่?


58

มีใหม่สองข้อบกพร่องด้านความปลอดภัยร้ายแรงค้นพบเป็นอสุรกายและล่มสลาย

Raspberry Pi มีความเสี่ยงต่อ Spectre และ / หรือ Meltdown หรือไม่?


1
ตามที่นักวิจัย: ในขณะนี้ยังไม่ชัดเจนว่า ARM และ AMD processor ได้รับผลกระทบจาก Meltdown หรือไม่
Janghou

1
มีตัวอย่างที่คุณสามารถขโมยรหัสผ่านด้วย Javascript ในเบราว์เซอร์ (Chrome / Firefox)
Janghou

4
@ alex2003super: อย่าประหลาดใจ แม้ว่าขนาดของอุปกรณ์ที่ได้รับผลกระทบจะตุปัดตุเป๋ แต่โอกาสของคุณที่ได้รับผลกระทบจากปัญหานี้ในทางที่เป็นจริงค่อนข้างต่ำ และแม้ว่าพวกเขาจะไม่ได้ออกนอกลู่นอกทางจะไม่ช่วย :)
Lightness Races กับโมนิก้า

1
ดูเหมือนว่าพวกเขาจะไม่เสี่ยงนี่เป็นบทความล่าสุดเกี่ยวกับเรื่องraspberrypi.org/blog/ …
Omar Elabd

5
คุณอาจพบว่าโพสต์นี้น่าสนใจ: raspberrypi.org/blog/…
pfm

คำตอบ:


61

ตามARMตัวเองแกนประมวลผลที่ใช้ในทุกรูปแบบก่อนที่จะ Pi 4 ไม่เสี่ยง

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

แกนประมวลผลที่ใช้โดย Pis ที่เก่ากว่าคือ:

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

ราสเบอร์รี่ Pi 4ใช้Cortex-A72ซึ่งถูกระบุว่าเป็นความเสี่ยงที่จะสายพันธุ์ 1, 2, 3a และ 4 ตามที่ระบุในคือราสเบอร์รี่ Pi 4 ความเสี่ยงที่จะหาประโยชน์ผี? Raspbian มีซอฟต์แวร์ที่ช่วยลดช่องโหว่เหล่านี้ดังนั้นความเสี่ยงในการถูกแสวงประโยชน์ควรอยู่ในระดับต่ำ ระบบปฏิบัติการอื่นอาจไม่มีการผ่อนปรนที่เหมาะสมและในขณะที่ARM แจ้งว่ามีการลดการปล่อยฮาร์ดแวร์สำหรับ Cortex-A72 มันก็ไม่มีความชัดเจนว่ามันถูกนำไปใช้กับ Pi 4 หรือไม่

หมายเหตุตัวแปรที่ 1 และ 2 (CVE-2017-5753 และ CVE-2017-5715) เป็นที่รู้จักกันเป็นอสุรกายและสายพันธุ์ที่ 3 (CVE-2017-5754) และ 3a (การโจมตีที่เกี่ยวข้องกับการตรวจสอบโดย ARM) จะเรียกว่าล่มสลาย ดังนั้นไม่มีอุปกรณ์ Raspberry Pi ใด ๆ ก่อน Pi 4 ที่เชื่อว่ามีความเสี่ยงต่อ Spectre หรือ Meltdown


ฉันสงสัยว่าการเปลี่ยนแปลงเคอร์เนล Linux ที่จำเป็นสำหรับสถาปัตยกรรมอื่น ๆ จะถูกผลักออกไปเป็นเวอร์ชันของ Linux ที่รันบน Raspberry Pi หรือไม่ สมมุติว่าการเปลี่ยนแปลงเหล่านี้จะทำให้ระบบช้าลงดังนั้นบางที RP อาจได้รับผลกระทบแม้ว่าจะไม่ต้องการแพตช์
Bobby Durrett

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

1
@BobbyDurrett การล่มสลายของเคอร์เนลกำลังนั่งอยู่ในส่วนที่เฉพาะเจาะจงของ x86 ของ codebase การเปลี่ยนแปลงที่เกี่ยวข้องกับ Spectre นั้นเกิดขึ้นทั่วสถานที่ แต่ส่วนใหญ่จะอยู่ในส่วนของโปรเซสเซอร์เฉพาะรหัสหรือจัดการโดยคอมไพเลอร์ บางบิตเช่นการเปลี่ยนแปลงโครงสร้างของรหัสเครือข่ายอาจรั่วไหลลงใน Pi แต่ส่วนใหญ่จะไม่
ทำเครื่องหมาย

ขอบคุณสำหรับความคิดเห็น เป็นที่น่าสนใจที่จะคิดว่าส่วนใดของรหัสเคอร์เนลของ Linux เป็นตัวประมวลผลเฉพาะ ฉันเดาด้วยระบบปฏิบัติการที่ทำงานบนซีพียูหลายประเภทคุณต้องทำงานแยกรหัสที่เฉพาะเจาะจงสำหรับโปรเซสเซอร์แต่ละตัวออกมา
Bobby Durrett

22

Pi (ทุกรุ่น) ไม่ได้มีช่องโหว่

Specter และ Meltdown ทั้งคู่ต้องการการดำเนินการที่ไม่เป็นไปตามคำสั่ง Cortex-A7ใช้ใน Pi 2 ต้นและที่Cortex A53ใช้ในภายหลัง Pi 2 และ 3 Pi เป็นสถาปัตยกรรมอย่างเคร่งครัดในการสั่งซื้อ ARM11ใช้ใน Pi 1 เป็นเพียงบางส่วนออกจากการสั่งซื้อ แต่ไม่ใช่ในลักษณะที่อนุญาตให้ผีหรือล่มสลายในการทำงาน

ARM ยืนยันสิ่งนี้ : มีเพียงชุดย่อยที่ จำกัด ของตัวประมวลผล ARM เท่านั้นที่มีฮาร์ดแวร์ที่ทำให้พวกเขามีความเสี่ยงต่อ Spectre ส่วนย่อยที่ จำกัด ยิ่งกว่านั้นก็มีความเสี่ยงต่อการล่มสลายและเชื่อว่าพวกเขาทุกคนอนุญาตให้บรรเทาภัยคุกคามได้


10

ฉันต้องการเสนอสิ่งที่แตกต่างให้กับฉัน

เกี่ยวกับ Meltdown มันเป็นช่องโหว่ที่เฉพาะเจาะจงมากในโปรเซสเซอร์บางตัวดังนั้นถ้า ARM บอกว่า CPU ใน Raspberry Pi นั้นไม่ได้มีช่องโหว่ดังนั้นจึงน่าเชื่อถือ

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

ฉันมั่นใจมากว่าซีพียูใน Raspberry Pi ทุกรุ่นนั้นคล้ายคลึงกับซีพียูอื่น ๆ ทั้งหมดในนั้นที่ตัวทำนายสาขาเป็นเพียงตัวนับจำนวน 2 บิตที่ค่อนข้างอิ่มตัว (ถ่ายอย่างรุนแรงถ่ายอย่างอ่อน ๆ ไม่ได้ถ่าย) ดัชนีของอาร์เรย์นี้เป็นบิตลำดับต่ำของที่อยู่คำสั่งสาขาและไม่มีแท็กและสถานะตัวทำนายนี้จะไม่ถูกลบทิ้ง

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

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

ดูคำถามนี้: https://security.stackexchange.com/questions/176678/is-branch-predictor-flush-instruction-a-complete-spectre-fixและเข้าใจความหมายของคำตอบ โค้ดจาวาสคริปต์ปลอมที่ทำงานในเบราว์เซอร์ของคุณอาจเป็นเพราะ Spectre สามารถวัดได้ว่าสาขาอื่น ๆ ในกระบวนการได้หายไปอย่างไร แม้แต่คำสั่งล้างตัวทำนายสาขาจะไม่แก้ไขปัญหา JavaScript อันธพาลนี้เว้นแต่เบราว์เซอร์จะล้างตัวทำนายสาขาอย่างแข็งขันก่อนที่จะเรียกใช้รหัสที่ไม่น่าเชื่อถือ

Spectre จะอยู่กับเราเป็นเวลานานมากเนื่องจากตัวพยากรณ์สาขาใช้ 14 บิตเนื่องจากดัชนีไม่ได้ติดแท็กส่วนที่เหลืออีก 18 บิตของพื้นที่ที่อยู่แบบ 32- บิตเพราะจะต้องใช้ 20 บิต (2 บิตอิ่มตัวเคาน์เตอร์ , 18 bits tag) แทนที่จะเป็น 2 bits นี่จะเพิ่มขนาดตัวทำนายสาขาเป็นสิบเท่า! ฉันคาดหวังว่าผู้ผลิตซีพียูจะเพิ่มคำสั่งล้างสาขาตัวทำนายที่ทำงานได้แม้ในพื้นที่ผู้ใช้ที่ไม่มีสิทธิ์พิเศษและเคอร์เนลที่จะใช้เมื่อสลับบริบทและพื้นที่ผู้ใช้ที่จะใช้เมื่อเรียกใช้รหัส JITed ที่ไม่น่าเชื่อถือ สิ่งนี้จะแก้ไขปัญหา Spectre ส่วนใหญ่ในทางปฏิบัติ แต่ในทางทฤษฎีไม่ใช่ปัญหาทั้งหมด


" ตอนนี้ถ้าสาขาสองแห่งมีสถานะผู้ทำนายเท่ากันคุณสามารถวัดได้ว่าสาขาใดได้ดำเนินการในอดีตที่ผ่านมาเร็ว ๆ นี้ " คุณจะทำเช่นนี้อย่างไรโดยไม่มีการเก็งกำไร?
ปีเตอร์เทย์เลอร์

@PeterTaylor ซีพียู ARM เหล่านี้มีตัวพยากรณ์สาขาและดังนั้นพวกเขาจึงมีการดำเนินการเก็งกำไร สิ่งที่ขาดหายไปคือการดำเนินการที่ไม่เป็นไปตามคำสั่ง
juhist

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

แม้การดึงข้อมูลเก็งกำไรอาจจะเพียงพอเนื่องจากจะมีความแตกต่างเล็กน้อย แต่สามารถวัดได้
juhist

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