อธิบายรายละเอียด 4 ช่องโหว่ใหม่ในซีพียู Intel อ่านข้อมูลได้ไม่จำกัดขอบเขต

ในช่วงสัปดาห์ที่ผ่านมาถือว่าเป็นสัปดาห์ที่มีการเกิดขึ้นของหลายช่องโหว่ที่น่าสนใจ เช่น ไล่ไปตั้งแต่ช่องโหว่บนฟีเจอร์ RDP ในระบบปฏิบัติการวินโดวส์ที่ได้คะแนน CVSSv3 ไปถึง 9.8 คะแนน, ช่องโหว่ในโค้ดที่เกี่ยวข้องกับฟีเจอร์ VoIP ของ WhatsApp ที่ติดตั้งมัลแวร์ได้จากระยะไกล, ความปลอดภัยของ SHA1 และสี่ช่องโหว่บนซีพียูของ Intel นี้

สำหรับในบล็อกนี้นั้น ทีมตอบสนองการโจมตีและภัยคุกคาม (Intelligent Response) จากบริษัท ไอ-ซีเคียว จำกัด จะมาสรุปถึงการค้นพบสี่ช่องโหว่ใหม่ในฟังก์ชันการทำงานของซีพียู Intel ซึ่งผลลัพธ์ที่เป็นไปได้กรณีหนึ่งเมื่อมีการโจมตีช่องโหว่นี้นั้น คือทำให้ผู้โจมตีสามารถเข้าถึงข้อมูลที่กำลังถูกประมวลผลโดยซีพียูแบบไม่มีขอบเขต และการป้องกันนั้นอาจทำให้ประสิทธิภาพการทำงานของซีพียูได้รับผลกระทบ โดยจากการตรวจสอบในเบื้องต้นนั้น ซีพียู Intel ตั้งแต่ปี 2011 จนถึงปัจจุบันจะได้รับผลกระทบจากช่องโหว่ทั้งหมด

เนื่องจากเนื้อหาที่อาจมีเป็นจำนวนมาก ทีมตอบสนองการโจมตีและภัยคุกคามจะขอสรุปเนื้อหาไว้ในรูปแบบของการตั้งคำถามและให้คำตอบเกี่ยวกับช่องโหว่แต่ละรายการไป หากใครมีคำถามเกี่ยวกับช่องโหว่เหล่านี้เพิ่มเติมสามารถส่งคำถามมาได้ที่เพจ i-secure Co., Ltd. ครับ

สรุปย่อ

ในช่วงปี 2018 นักวิจัยด้านความปลอดภัยจากหลายสังกัดได้มีการค้นพบช่องโหว่ที่เกิดจากฟีเจอร์ Speculative execution ด้วยการโจมตีแบบ side-channel attack ในรูปแบบที่แตกต่างกันออกไปกับซีพียูของ Intel บางส่วนเกิดจากสิ่งที่รอยเท้าที่ช่องโหว่ Spectre, Meltdown และ Forshadow เคยสร้างขึ้น

ทั้ง 4 ช่องโหว่ใหม่นี้ได้รับการจับกลุ่มและเรียกรวมกันว่าเป็นช่องโหว่กลุ่ม Microarchitectural Data Sampling (MDS) โดยคำว่า sampling ในที่นี้นั้นเป็นการพูดถึงการที่ผู้โจมตีสามารถทำการ "สุ่มตัวอย่าง" ของข้อมูลที่ซีพียูกำลังประมวลผลอยู่จากแต่ละคอมโพเนนต์ที่เกี่ยวข้องกับการทำงานของซีพียู (microarchitectural buffers) โดยแต่ละช่องโหว่ก็คือแต่ละรูปแบบ (variants) ที่โจมตี ได้แก่

  1. ช่องโหว่ ZOMBIELOAD (CVE-2018-12130) เป็นช่องโหว่ที่พุ่งเป้าไปที่ส่วน Fill Buffer ของซีพียูที่มีการทำ speculative execution ทำให้ถูกเรียกว่า Microarchitectural Fill Buffer Data Sampling หรือ MFBDS
  2. ช่องโหว่ RIDL มีสองรูปแบบคือ
    1. CVE-2018-12127 ที่พุ่งเป้าไปที่ส่วน Load Port ของซีพียูที่มีการทำ speculative execution ทำให้ถูกเรียกว่า Microarchitectural Load Port Data Sampling หรือ MLPDS
    2. CVE-2019-11091 ที่พุ่งเป้าไปที่ส่วน Uncacheable Memory ของซีพียูที่มีการทำ speculative execution ทำให้ถูกเรียกว่า Microarchitectural Data Sampling Uncacheable Memory หรือ MDSUM
  3. ช่องโหว่ Fallout (CVE-2018-12126) เป็นช่องโหว่ที่พุ่งเป้าไปที่ส่วน Store Buffer ของซีพียูที่มีการทำ speculative execution ทำให้ถูกเรียกว่า Microarchitectural Store Buffer Data Sampling หรือ MSBDS
  4. ช่องโหว่ Store-to-Leak Forwarding เป็นลักษณะของช่องโหว่ที่มีความคล้ายกับ Meltdown โดยมีเป้าหมายเป็น Store Buffer เช่นเดียวกับ Fallout

ที่มาของช่องโหว่

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

ตัวอย่างที่ง่ายที่สุดในการอธิบาย Speculative execution คือเงื่อนไขแบบ Conditional jump โปรแกรมโดยส่วนใหญ่มักถูกออกแบบมาให้มีทางเลือกมากกว่า 1 ทางเลือก โดยการเลือกทางเลือกใดทางเลือกหนึ่งนั้นขึ้นอยู่กับเงื่อนไขการตัดสินใจเลือก ณ เวลานั้น

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

คำสั่งที่ถูกประมวลผลด้วยวิธีการ "ทำนาย" หรือ "ทำงานไปแล้วหน้า" (out-of-order instruction) แล้วผลลัพธ์ไม่ถูกเก็บใน architectural state จะถูกเรียกว่า transient instruction และการ execute ของ transient instruction จะถูกเรียกว่า transient execution

แม้ว่าโดยส่วนใหญ่ผลลัพธ์ของ transient execution จะถูกลบหรือล้างจนหายไปในระดับ architectural state ซึ่งตรวจสอบได้จากรีจิสเตอร์ แต่ side effect บางอย่างจากการดำเนินการก็อาจยังหลงเหลืออยู่ใน microarchitectural state ซึ่งอยู่ลึกลงไปกว่านั้น การโจมตีไปที่ side effect เหล่านั้นจึงถูกเรียกว่า transient execution attacks

เมื่อ CPU ต้องทำการ transient execution นั้น CPU จะทำการใช้ค่าที่มีอยู่แล้วในจุดที่ใกล้ที่สุดเช่นใน cache มาใช้งานก่อน อย่างไรก็ตามในบางกรณีที่ CPU ไม่สามารถใช้ค่าจาก cache ที่ใกล้ที่สุดได้ CPU อาจมีการใช้ค่าจากส่วนประกอบอื่นๆ ใน microarchitecture ซึ่งอาจมีข้อมูลที่หน่วยประมวลผลอื่นใช้งานอยู่หรือไม่เกี่ยวข้องใดๆ กับการทำงาน จนทำให้เกิดการรั่วไหลของข้อมูลได้ เช่น ที่จุด Fill Buffer ในกรณีของช่องโหว่ ZombieLoad

อย่างไรก็ตามความยากของการโจมตีเหล่านี้นั้นมีผลเป็นอย่างมากจนทำให้ช่องโหว่เหล่านี้ไม่ถูกเรียกว่าเป็นช่องโหว่ "leaking data" แต่เป็น "sampling data" แทน เนื่องจากในความเป็นจริงนั้น การควบคุมให้ข้อมูลที่ต้องการเข้าถึงนั้นอยู่ในจุดที่สามารถดึงออกมาได้สามารถทำได้ยาก และส่วนประกอบ microarchitecture ก็อาจมีข้อมูลอื่นๆ จากการดำเนินการอื่นๆ เข้ามาผสมอยู่และไม่เกี่ยวข้องกัน ดังนั้นเพื่อให้ได้ข้อมูลที่สามารถใช้ได้จริง ผู้โจมตีจึงทำการ "สุ่มตัวอย่าง" ของข้อมูลที่ถูกประมวลผลมาหลายต่อหลายครั้งจนกว่าจะได้ข้อมูลที่ต้องการ

การสาธิตการโจมตีและตัวอย่าง POC

ZOMBIELOAD

นักวิจัยจากโครงการ ZombieLoad ได้ทำการทดสอบช่องโหว่นี้โดยการมอนิเตอร์ URL ที่ผู้ใช้งานเข้าถึงจาก Tor Browser ที่ทำงานอยู่ในระบบปฏิบัติการจำลอง Tails ผู้ที่ต้องการทดสอบช่องโหว่นี้สามารถดาวโหลด PoC ได้จาก IAIK/ZombieLoad

RIDL

นักวิจัยจากโครงการ RIDL ได้ทำการทดสอบช่องโหว่ RIDL ด้วยสามกรณีตัวอย่างได้แก่

  1. ทำการรั่วไหลข้อมูลจากไฟล์ /etc/shadow โดยใช้ช่องโหว่ RIDL ซึ่งจะต้องมีการเข้าถึงระบบเป็นระยะๆ เพื่อให้เกิดข้อมูลที่ต้องการในบัฟเฟอร์ การสาธิตนี้ใช้เวลาทั้งสิ้นประมาณ 24 ชั่วโมง
  2. ทำการรั่วไหลข้อมูลของเคอร์เนลโดยการอ่านค่า /proc/version (ดูเพิ่มเติม)
  3. อ่านค่าสตริงจากโปรเซสอื่นโดยใช้จาวาสคริปต์และ WebAssembly ในเอนจินของ SpiderMonkey (ดูเพิ่มเติม)

ทั้งนี้ไม่ปรากฎว่ามีการเผยแพร่ PoC สำหรับช่องโหว่

FALLOUT, STORE-TO-LEAK FORWARDING

ไม่ปรากฎว่ามีการสาธิตการโจมตีช่องโหว่หรือ POC

การตรวจจับการโจมตีและการป้องกัน

ในทุกๆ ช่องโหว่ประเภท Microarchitectural Data Sampling attack ทาง Intel ได้มีการออกคำแนะนำเพื่อลดผลกระทบของช่องโหว่ซึ่งประกอบด้วยการเรียกใช้คำสั่งของซีพียูอย่าง VERW หรือ L1D_FLUSH เพื่อล้างข้อมูลในบัฟเฟอร์ยกเว้นในกรณีที่ซีพียูรองรับฟังก์ชัน MD_CLEAR ซึ่งจะบังคับให้หน่วยประมวลผลมีการล้างข้อมูลในบัฟเฟอร์ออกไปโดยอัตโนมัติอยู่แล้ว

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

ZOMBIELOAD

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

RIDL/FALLOUT

อ้างอิงจากนักวิจัยผู้ค้นพบช่องโหว่ ผู้ใช้งานสามารถทำการดาวโหลดโปรแกรมเพื่อทำการตรวจสอบหากระบบที่ใช้งานอยู่มีช่องโหว่ได้จาก mdstattacks.com

STORE-TO-LEAK FORWARDING

ไม่มีการระบุถึงวิธีในการตรวจจับแต่สามารถใช้วิธีการป้องกันเดียวกับช่องโหว่ในกลุ่ม Microarchitectural Data Sampling อื่นๆ ได้

แหล่งอ้างอิง