ทีมนักวิจัยจากมหาวิทยาลัยชื่อดังในสหรัฐหลายแห่ง ค้นพบช่องโหว่ในชิปตระกูล Apple Silicon เปิดทางให้เข้าไปขโมยกุญแจเข้ารหัสจากซีพียูได้ ด้วยวิธี side channel attack
ช่องโหว่นี้ถูกตั้งชื่อว่า GoFetch อาศัยการทำงานของฟีเจอร์ซีพียูชื่อ data memory-dependent prefetcher (DMP) ใช้พยากรณ์ตำแหน่งหน่วยความจำที่จะถูกเรียกใช้ในอนาคต แล้วดึงข้อมูลตรงนั้นมารอในแคชเพื่อเร่งประสิทธิภาพในการประมวลผล
ฟีเจอร์นี้มีในซีพียูหลายตัว เช่น Intel Raptor Lake แต่วิธีการทำงานของ DMP ของแอปเปิลมีช่องโหว่ เพราะดึงข้อมูลมาใส่แคชโดยใช้โครงสร้างคล้าย pointer ทำให้คนที่สามารถเข้าถึงแคช สามารถอ่านข้อมูลและคาดเดาข้อมูลในแคชได้ (ทีมวิจัยลองกับฝั่ง Intel แล้วพบว่าเจาะไม่ได้)
ทีมวิจัยทดลองสร้างแอพตัวอย่างมาทดสอบช่องโหว่นี้ และประสบความสำเร็จในการดึงคีย์ที่เก็บอยู่ในแคช ด้วยระยะการรันแอพเวลาราว 1 ชั่วโมง ทีมวิจัยได้แจ้งข้อมูลนี้ไปยังแอปเปิลแล้วตั้งแต่เดือนธันวาคม 2023 และเมื่อเวลาผ่านมานานพอสมควรก็เปิดเผยช่องโหว่นี้สู่สาธารณะ ฝั่งของแอปเปิลยังไม่ได้ออกมาแถลงว่าจะมีมาตรการป้องกันปัญหานี้ได้อย่างไร
แอพทดสอบของ GoFetch ทดสอบการทำงานกับ Apple M1 แต่ทีมวิจัยก็บอกว่า Apple M2 และ M3 ใช้โครงสร้างแบบเดียวกัน น่าจะทำงานได้แบบเดียวกัน ฟีเจอร์ DMP นั้นสามารถปิดได้เฉพาะซีพียูบางรุ่นเท่านั้นคือ M3 แต่กรณีของ M1 และ M2 ไม่สามารถปิดได้
ที่มา - Ars Technica
Comments
เชื่อเลยว่า แอปเปิลจะไม่ทำอะไร จนกว่าจะมีคนเอาไปฟ้องร้องกลุ่ม เดี๋ยวไฟลนก้นก็คงยอมแก้เอง แต่ลดประสิทธิภาพลงนะ
แค่มนุษย์คนนึงที่อยากรู้เกี่ยวกับวงการไอที
เก่งมากนะ หาช่องโหว่ ได้
ทีมนักวิจัยจากมหาวิทยาลัยชื่อดังในสหรัฐ[หลายแห่ง]
ถ้าใช้คำนี้ แสดงว่าไม่ยากที่คนร้ายก็สามารถหาเจอได้งั้นแบบนี้ เรื่องใหญ่ละ
เขาทำงานกันเป็นทีมครับ อ่านรายชื่อได้จากลิงค์ GoFetch ก็บอกหมดว่าใครบ้างจากที่ไหนบ้าง
คิดว่านะครับ
ไม่ต้องหาตัวคนเจอช่องโหว่ กลุ่มคนร้ายก็มีฝีมือที่จะหาเองเจอครับ แค่ชี้ช่องก็พอแล้วชี้ทำไมล่ะ
ต้องคิดอีกต่อนึงว่าจริงๆแล้วคนร้ายเจอไปแล้วครับ ถ้าไม่เปิดเผยแบบนี้ Apple ก็อาจจะไม่ทำอะไรเลย ซึ่งคนร้ายก็จะใช้งานต่อไปได้เรื่อยๆ
เดี๋ยวก็ต้องออกpatchให้เครื่องช้าลง แรมน้อยอัพเพิ่มไม่ได้อายุการใช้งานสั้นกว่าที่ควรจะเป็น
ตื่นๆ ก่อนครับ
พึ่งนั่งฟังเอาอธิบายใน youtube คือ cpu เดาว่า pointer ที่ชี้ไปที่เมมตรงไหนที่มีโอกาสจะถูกใช้ ก็จะดึงมาใส่แคช แต่ไม่ได้เชคค่า pointer นั้นก่อน พอเอามาใส่แคชแบบไม่ถูกเลยเป็นช่องว่างให้คนโจมตีอ่านข้อมูลในแคชได้ทั้งหมด
เค้าสาทิตด้วยการไล่อ่านข้อมูลในแคชเพื่อค่าพวกค่ากุญแจเข้ารหัสต่างๆ
เข้าใจว่าเค้าแก้บั๊กสเปคตรัม กะเมลดาวของ cpu intel แหละ แต่พอแก้แล้วมันจะทำให้ perf ลด เลยไปจูนด้วยการอ่านค่ามาใส่แคชก่อน เลยมาเป็นบั๊กนี้
หมายถึง "สเปกเตอร์" รึเปล่าครับ
End user จ๋า ๆ แบบผมมีอะไรให้ต้องระวังมั้ยครับ คืออ่านแล้วพยามแล้วไม่เข้าใจเลย ซึ่งใช้ mba m1 อยู่ซะด้วย อย่างพวกเข้าเว็บไซต์ทำธุรกรรมทางการเงินอะไรแบบนี้เสียงสูงมั้ยครับ?
คำตอบมันไม่ชัดเจนเพราะทั้งสองถือว่าอยู่ได้ทั้งใกล้ตัว และไกลตัว แล้วแต่ "ดวง"
วิธีการนี้มีจุดอ่อนในตัวมันเอง คือมันทำนายและชักจูงให้อ่านเฉพาะค่าที่ต้องการ เช่น รหัสผ่าน ได้ยากมากเพราะแคชมันก็เหมือนกองเอกสารที่เอาทุกอย่างมาปน ๆ กันไว้ให้ใช้งานได้เร็ว ช่องโหว่นี้แฮกเกอร์เสมือนพยายามอ่านข้อมูลกองเอกสารจากช่องหน้าต่างเล็ก ๆ ว่ามีอะไรบ้าง ซึ่งก็ยากอยู่ดี อย่างไรก็ตาม ช่องโหว่นี้เข้าถึงได้ง่ายมากและใช้เวลาชดเชยปัญหาได้ เสมือนว่าแฮกเกอร์ใช้เวลากับช่องหน้าต่างให้นานขึ้นเพื่อเฟ้นหารหัสผ่านจากเครื่องของเรา ประมาณนี้แหละ ยิ่งถ้าเจาะจงเฉพาะการเจาะ "รหัสผ่าน" ถ้าผู้ใช้งานเลือกใช้ Passkey หรือ Password-less Authentication ที่มักใช้อุปกรณ์เสริมในการจัดการอีกทอดหนึ่ง (ใน Apple จะเป็น T2 Security Chip ในฮาร์ดแวร์ x86 ทั่วไปจะเป็น TPM) โอกาสที่รหัสผ่านหลุดจะน้อยลงมากถึงไม่มีเลยเพราะรหัสมันไม่มีให้ดูตั้งแต่แรกในเครื่อง ระบบพวกนี้ใช้ลายมืออิเล็กทรอนิกส์ (Digital Signature) เราจะได้เห็นเฉพาะลายมืออิเล็กทรอนิกส์สำเร็จที่เอาไว้พิสูจน์ตัวตนผู้เข้าถึงระบบเท่านั้น
อย่างไรก็ตาม ตัว Session Token (กุญแจชั่วคราวเพื่อการเข้าถึงระบบ) จะยังอยู่ในเครื่องปกติ ไม่ได้อยู่ในอุปกรณ์แยก ซึ่งตรงนี้แหละที่น่ากลัวเพราะถูกใช้งานบ่อย โอกาสที่จะอยู่ในแคชสูง และระดับความปลอดภัยที่ขึ้นอยู่กับผู้ออกแบบระบบนั้น ๆ อย่าง Discord นี่เน่าในแบบสุด ๆ ได้ Session Token ไปนี่แทบจะยึดบัญชีไปแล้ว ถ้ามีช่องโหว่ที่ถึงระดับอ่านแคชได้ ความเสี่ยงก็ย่อมสูงขึ้น
ทั้งนี้ทั้งนั้น การเก็บ "แคช" เองก็ใช่ว่ามันจะเก็บแบบ ABCDEFG... ต่อเนื่อง มันมีอะไรที่มากกว่านั้นเยอะ ขึ้นอยู่กับการทำงานของโค้ดโปรแกรมที่จัดการอยู่ ทำให้โอกาสที่เราจะเห็นกุญแจอะไรเทือกนั้นแบบเต็ม ๆ น้อยลงไปเยอะมาก และแฮกเกอร์ก็ต้องทำนายประเภทข้อมูลที่ได้จากแคชให้ถูกต้องด้วยเพราะข้อมูลมันเป็นไบนารีทั้งหมด (จะใช้ Hex Inspector หรืออะไรก็ว่ากันไป) และใช้เวลานานมากที่จะปะติดปะต่อทุกอย่างเข้าด้วยกัน ทำให้ตรงนี้กลายเป็นจุดแข็งที่ช่วยลดความพยายามในการโจมตีลงไปได้มาก และถ้าเว็บไหนขยันสร้าง Session Token ทุก ๆ การกระทำบนเว็บไซต์ โอกาสที่จะโดนโจมตีก็ยิ่งลดลงไปอีกเพราะข้อมูลใหม่มักไม่มีโอกาสจะไปอยู่ในแคช (แคชมักสงวนไว้สำหรับข้อมูลที่ต้องใช้บ่อย ๆ เช่น รหัสโปรแกรม)
สรุปแล้ว ถ้าคุณเป็นนักธุรกิจพันล้าน มีความคุ้มค่าที่จะโจมตีสูง มันก็ไม่ปลอดภัย แต่ถ้ากับคนบ้าน ๆ ไม่มีอะไรทำในชีวิตแบบผม เอาเวลาไปสอดเรื่องชาวบ้านต่อดีกว่า
คอมเม้นท์คุณภาพครับ
ผมเข้าใจว่าเคสนี้คนร้ายต้องเข้าถึงเครื่องด้วยนะ เพราะต้องจิ้มไปอ่านCPUแคชโดยตรง
ซึ่งถ้าเป็นเครื่องแบบ desktop/notebook แบบส่วนบุคคลการโจมตีจะไม่เท่าไหร่
แต่ถ้าเป็นพวก Server ที่รัน vz นี่ก็อีกเรื่องเลย เพราะมันโจมตีเครื่องใกล้เคียงบน h/w เดียวกันได้
ตัวอย่าง AWS มีให้เช่าเครื่อง Apple M1/M2 รันระบบอยู่เหมือนกัน
+
ผมลืมนึกถึงตรงนี้ เพราะถ้าหลอกล่อให้เปิดแคชได้ขนาดนี้ Hypervisor ก็ไม่ช่วย ถึงไม่ได้รู้ว่ารหัสเอาไปใช้กับอะไรอย่างน้อยก็เอาไปปั่น Rainbow Table ต่อได้
+1
จากคำแนะนำบนเว็ปไซต์ของคนเจอช่องโหว่
What can I do to protect myself against this attack?
For users, we recommend using the latest versions of software, as well as performing updates regularly. Developers of cryptographic libraries can either set the DOIT bit and DIT bit bits, which disable the DMP on some CPUs. Additionally, input blinding can help some cryptographic schemes avoid having attacker-controlled intermediate values, avoiding key-dependent DMP activation. Finally, preventing attackers from measuring DMP activation in the first place, for example by avoiding hardware sharing, can further enhance the security of cryptographic protocols.
1.แนะนำให้ผู้ใช้งานใช้ software เวอร์ชั่นล่าสุดเสมอ เพราะผู้พัฒนาอาจจะไปปิดคำสั่งที่ทำให้เกิดช่องโหว่นี้ให้โดยตรง แต่มันปิดไม่ได้ทุกรุ่นซีพียูอ่ะจิ อ้างอิงข้อมูลของคนที่เจอน่ะ เพราะนางอ้างว่าปิดไม่ได้ทุกรุ่น คำถามต่อมาปิดแล้วคุ้มค่าไหมก็ต้องรอแอปเปิ้ลออกมาแถลง ส่วนตัวคิดว่าแอปเปิ้ลไม่น่าจะเลือกทางนี้เป็นทางหลัก มันใช้ไม่ได้กับ cpu ทุกอันถ้าเป็นจริงตามที่คนเจอช่องโหว่ว่าไว้
blinding is a technique by which an agent can provide a service to (i.e., compute a function for) a client in an encoded form without knowing either the real input or the real output. Blinding techniques also have applications to preventing side-channel attacks on encryption devices.
"พยากรณ์ตำแหน่งหน่วยความจำที่จะถูกเรียกใช้ในอนาคต แล้วดึงข้อมูลตรงนั้นมารอในแคชเพื่อเร่งประสิทธิภาพในการประมวลผล"
ใช้ระบบทำนายก็ยิ่งโอกาสน้อยไปอีก แล้วต่อให้เอาแคชออกมาได้ อย่างคอมเม้นต์บนต้องวิเคราะห์ให้ได้ว่า user ใช้ประจำเป็นของอะไรเพื่อดึงมาไปใช้ได้ถูก application
มือใหม่!! ใหม่จริงๆนะ
passเดียวกันทุกแอดเค้า 🤣
คุณอาจเม้นท์เอาฮา แต่ผมใช้แบบนี้จริง ๆ นะ
จริงแหล่ะ T___T
มือใหม่!! ใหม่จริงๆนะ