การได้สิทธิ์รันโค้ดในเคอร์เนลบน Pixel 8 ที่เปิดใช้ MTE
(github.blog)- CVE-2023-6241 เป็นบั๊กเชิงตรรกะในหน่วยจัดการหน่วยความจำของ Arm Mali GPU ที่ทำให้แอป Android อันตรายสามารถไปถึงการรันโค้ดในเคอร์เนลตามอำเภอใจและได้สิทธิ์ root แม้บน Pixel 8 ที่เปิดใช้ kernel MTE
- อุปกรณ์ที่ได้รับผลกระทบคืออุปกรณ์ Arm Mali GPU รุ่นใหม่ที่ใช้ Command Stream Frontend(CSF) โดยรวมถึง Google Pixel 7 และ Pixel 8
- ช่องโหว่นี้ทำงานโดยอาศัยช่วงเวลาสั้น ๆ ระหว่างการขยายหน่วยความจำ JIT ที่มีการปลดล็อก ทำให้เกิดความไม่สอดคล้องกันระหว่าง GPU mapping กับอาร์เรย์ backing page
- เอ็กซ์พลอยต์ใช้ GPU mapping ที่ยังคงอยู่ของ backing page ที่ถูกปล่อยแล้ว จากนั้นทำให้เพจนั้นถูกนำกลับมาใช้เป็น PGD ของ GPU context แล้วแมปหน่วยความจำเคอร์เนลและโค้ดเคอร์เนล
- MTE สามารถตรวจจับความไม่ตรงกันของแท็กระหว่าง pointer กับหน่วยความจำได้ แต่ลำดับการโจมตีนี้เกิดขึ้น นอกขอบเขตการป้องกันของ MTE เพราะ GPU เข้าถึง physical address โดยตรง
ขอบเขตของช่องโหว่และสถานะแพตช์
- CVE-2023-6241 เป็นช่องโหว่ของ Arm Mali GPU ที่ทำให้แอป Android อันตรายสามารถรันโค้ดในเคอร์เนลตามอำเภอใจและได้สิทธิ์ root บนอุปกรณ์
- มีการรายงานให้ Arm ทราบเมื่อวันที่ 15 พฤศจิกายน 2023 และได้รับการแก้ไขใน Arm Mali driver r47p0 ที่เผยแพร่เมื่อวันที่ 14 ธันวาคม 2023
- การแก้ไขฝั่ง Android รวมอยู่ใน อัปเดตความปลอดภัยเดือนมีนาคม 2024
- อุปกรณ์ที่ได้รับผลกระทบคืออุปกรณ์ Arm Mali GPU รุ่นใหม่ที่ใช้ฟีเจอร์ CSF(Command Stream Frontend) โดยยก Google Pixel 7 และ Pixel 8 เป็นตัวอย่าง
- ยืนยันแล้วว่าเอ็กซ์พลอยต์ทำงานได้แม้ใน Pixel 8 ที่เปิดใช้ kernel MTE
โมเดลการป้องกันของ Arm64 MTE
- MTE(Memory Tagging Extension) เป็นฟีเจอร์ฮาร์ดแวร์ของโปรเซสเซอร์ Arm รุ่นใหม่ที่เปรียบเทียบแท็กของ pointer กับบล็อกหน่วยความจำเพื่อตรวจจับ memory corruption
- pointer ของ Arm64 มีขนาด 64 บิต แต่ address space ของแอปพลิเคชันจริงมักใช้ไม่เกิน 52 บิต จึงสามารถนำบิตส่วนบนบางส่วนมาใช้เก็บแท็กได้
- ในกรณี linear overflow แท็กของบล็อกหน่วยความจำข้างเคียงอาจไม่ตรงกับแท็กของ pointer และในกรณี use-after-free ก็อาจเกิดความไม่ตรงกันได้จากการเปลี่ยนแท็กระหว่างการปล่อยและจัดสรรใหม่
- ต่างจากมาตรการบรรเทาปลายทางอย่าง kCFI, MTE เป็น มาตรการบรรเทาระยะต้น ที่พยายามตรวจจับตั้งแต่จุดที่ memory corruption เกิดขึ้นครั้งแรก
- เนื่องจากจำนวนบิตของแท็กมีจำกัด จึงหลีกเลี่ยงการชนกันไม่ได้ แต่แม้ใช้แท็ก 4 บิตก็ยังลดโอกาสสำเร็จแบบสุ่มลงเหลือ 1/16
- หากมีการรั่วไหลของค่า pointer และบล็อกหน่วยความจำผ่าน side-channel attack อย่าง Spectre ก็อาจเดาแท็กที่ถูกต้องเพื่อหลบ MTE ได้ แต่การรั่วไหลดังกล่าวมักทำได้โดยผู้โจมตีภายในเครื่อง
- ปัจจุบันมีเพียง Google Pixel 8 ที่อนุญาตให้เปิดใช้ MTE ผ่าน developer options และ MTE ถูกปิดไว้เป็นค่าเริ่มต้น
- การเปิดใช้ MTE ในเคอร์เนลต้องมีขั้นตอนเพิ่มเติม
race ที่เกิดขึ้นในหน่วยความจำ JIT ของ Mali
- แอปผู้ใช้ที่ใช้ไดรเวอร์ Mali GPU จะเปิดไฟล์ไดรเวอร์และสร้าง/เริ่มต้นออบเจ็กต์เคอร์เนล
kbase_contextผ่านการเรียกioctl kbase_contextจัดการหน่วยความจำหลายประเภทที่ใช้ร่วมกันระหว่างอุปกรณ์ GPU กับแอปพลิเคชันใน user space- พื้นที่หน่วยความจำของ Mali GPU ถูกแทนด้วย
kbase_va_regionโดยnr_pagesหมายถึงขนาดเสมือน และgpu_alloc->nentsหมายถึงจำนวน backing page จริง - หน่วยความจำ JIT เป็น native memory ที่เคอร์เนลไดรเวอร์จัดการอายุการใช้งาน โดยแอปสามารถจัดสรรหรือปล่อยหน่วยความจำ JIT ผ่านคำสั่ง GPU
- บน CSF GPU คำสั่งซอฟต์แวร์และคำสั่งฮาร์ดแวร์จะอยู่คนละคิว
- สามารถสร้าง
kbase_kcpu_command_queueได้ด้วยKBASE_IOCTL_KCPU_QUEUE_CREATE - สามารถใส่คำสั่งเข้าคิวได้ด้วย
KBASE_IOCTL_KCPU_QUEUE_ENQUEUE BASE_KCPU_COMMAND_TYPE_JIT_ALLOCและBASE_KCPU_COMMAND_TYPE_JIT_FREEใช้สำหรับจัดสรร/ปล่อย JIT
- สามารถสร้าง
kbase_jit_allocateจะค้นหาพื้นที่ที่นำกลับมาใช้ได้จากพูลหน่วยความจำ JIT ที่ถูกปล่อยแล้ว และถ้าขนาดทางกายภาพไม่พอจะเพิ่ม backing page ด้วยkbase_jit_growkbase_jit_growอาจปลดkctx->reg_lockและkctx->mem_partials_lockชั่วคราวระหว่างการเรียกkbase_mem_pool_growkctx->reg_lockใช้ป้องกันการเข้าถึงพร้อมกันของพื้นที่หน่วยความจำ ดังนั้นช่วงที่ปลดล็อกจึงกลายเป็นหน้าต่าง race
ลำดับการ trigger ของ CVE-2023-6241
- หาก GPU เข้าถึงที่อยู่ของพื้นที่หน่วยความจำที่ยังไม่มี backing เป็น physical page จะเกิด GPU memory access fault
kbase_mmu_page_fault_workerสามารถตรวจสอบได้ว่าพื้นที่นั้นขยายได้หรือไม่ แล้วจัดสรรและแมป backing page ที่ต้องใช้ได้ทันที- เมื่อสร้างพื้นที่ JIT จะตรงตามเงื่อนไข GROWABLE_FLAGS_REQUIRED ซึ่งรวม
KBASE_REG_PF_GROWและKBASE_REG_GPU_WR - แฟลก
KBASE_REG_DONT_NEEDที่ถูกใส่ตอนปล่อยพื้นที่ JIT จะถูกลบออกในkbase_mem_evictable_unmakeช่วงต้นของkbase_jit_grow - ผลคือหากทำให้เกิด GPU page fault กับพื้นที่ JIT เดิมในหน้าต่าง race ระหว่างที่
kbase_mem_pool_growกำลังทำงาน fault handler จะสามารถขยายพื้นที่นั้นได้ - หาก fault handler เปลี่ยนค่า
reg->gpu_alloc->nentsค่าold_sizeและdeltaที่kbase_jit_growบันทึกไว้ก่อนหน้าจะไม่ตรงกับสถานะจริง - หลังจากนั้น
kbase_alloc_phy_pages_helper_lockedและkbase_mem_grow_gpu_mappingจะจัดสรร backing page และทำ GPU mapping ด้วยค่าที่ stale ทำให้เกิดความไม่สอดคล้องกันระหว่าง GPU mapping กับอาร์เรย์pages - race นี้ชนะได้ง่ายเพราะ
kbase_mem_pool_growมีการจัดสรรหน่วยความจำขนาดใหญ่รวมอยู่ด้วย
วิธีโจมตีที่เปลี่ยนไปหลังแพตช์ GHSL-2023-005
- ในช่องโหว่ก่อนหน้า GHSL-2023-005 เธรดอื่นสามารถย่อพื้นที่ JIT ด้วย
KBASE_IOCTL_MEM_COMMITทำให้old_sizeและdeltaใช้ไม่ได้ - หลังแพตช์ GHSL-2023-005 จะไม่สามารถเปลี่ยนขนาดหน่วยความจำ JIT ผ่าน
KBASE_IOCTL_MEM_COMMIT ioctlได้อีก - ใน CVE-2023-6241 จึงไม่สามารถย่อพื้นที่ในหน้าต่าง race ได้ และทำได้เพียง ขยายเท่านั้น
- ถ้าขยายอย่างเดียว เพียงแต่ backing page บางส่วนท้ายสุดจะไม่ถูกแมปบน GPU โดยรูปแบบการแมปแบบต่อเนื่องตั้งแต่ต้นยังคงอยู่ จึงยังไม่ก่อปัญหาทันที
- เอ็กซ์พลอยต์จะสร้างแมปใหม่หลัง unmapped gap ด้วย GPU fault เพิ่มเติม แล้วค่อยใช้การปล่อย JIT เพื่อจัดตำแหน่ง shrink ให้ตกอยู่ใน gap นั้นจนเกิดสภาพที่นำไปใช้โจมตีได้
สมมติฐานที่เปราะบางในการยกเลิก GPU mapping
kbase_mmu_teardown_pgd_pagesจะไล่ดู GPU page table แล้วทำเครื่องหมายเอนทรีเป็น invalid เพื่อลบ GPU address mapping- ฟังก์ชันนี้ตั้งสมมติฐานว่า ถ้า PTE ระดับสูงเป็น invalid แปลว่าช่วง address ขนาดใหญ่ทั้งหมดที่เอนทรีนั้นครอบอยู่ถูก unmap ไปแล้ว จึงข้ามได้
- PTE ระดับ 2 หนึ่งตัวครอบคลุมช่วง 512 เพจ
- ใน
kbase_va_regionปกติ virtual address ที่ถูกแมปจะต่อเนื่องตั้งแต่ต้นพื้นที่เสมอและไม่มี gap ตรงกลาง ดังนั้นพฤติกรรมการข้ามนี้จึงปลอดภัย - เอ็กซ์พลอยต์ของ CVE-2023-6241 สร้าง unmapped gap ระหว่างการแมป แล้ววางจุดเริ่ม shrink ไว้ใน gap นั้น
kbase_mmu_teardown_pgd_pagesจะพบ PTE ระดับ 2 ที่ invalid แล้วข้ามไป 512 เพจ แต่ address บางส่วนหลังจากนั้นอาจยังถูกแมปอยู่จริง- GPU address ที่ถูกข้ามผิดพลาดจะยังคงเข้าถึง physical page เดิมได้แม้ backing page จะถูกปล่อยไปแล้ว
ลำดับที่นำไปสู่การรันโค้ดในเคอร์เนล
- เมื่อปล่อยพื้นที่ JIT backing page จะถูกคืนกลับ แต่ GPU mapping ที่ค้างอยู่อย่างผิดพลาดยังเข้าถึงเพจที่ถูกปล่อยแล้วได้ต่อไป
- backing page ที่ถูกปล่อยแล้วอาจถูกนำกลับมาใช้เป็นหน้าเคอร์เนลอื่นในภายหลัง
- หนึ่งในเทคนิคที่ใช้คือทำให้ backing page ที่ถูกปล่อยแล้วถูกนำกลับมาใช้เป็น PGD(page table global directory) ของ GPU
kbase_context - การจัดสรร backing page ของไดรเวอร์ Mali ทำแบบเป็นลำดับชั้น
- ขั้นแรกจะดึงเพจจาก
kbase_mem_poolของkbase_contextปัจจุบัน - ถ้าไม่พอจะใช้
pool->next_pool - ถ้ายังไม่พอจะจัดสรรเพจโดยตรงผ่าน kernel buddy allocator
- ขั้นแรกจะดึงเพจจาก
pool->next_poolเป็นพูลหน่วยความจำที่ไดรเวอร์ Mali จัดการและใช้ร่วมกันโดยทุกkbase_contextรวมถึงใช้จัดสรร PGD ของ GPU context ด้วย- ถ้าเพจที่ถูกปล่อยแล้วถูกนำกลับมาใช้เป็น PGD ก็จะสามารถเขียน PGD นั้นจาก GPU ได้อีกครั้งผ่าน GPU address ที่ยังคงอยู่
- เมื่อเขียน PGD ใหม่ ก็จะสามารถแมปหน่วยความจำเคอร์เนลและโค้ดเคอร์เนลตามอำเภอใจให้ GPU เห็นได้
- ในสภาวะนี้จึงสามารถเขียนทับโค้ดเคอร์เนลเพื่อรันโค้ดในเคอร์เนลตามอำเภอใจ และอ่าน/เขียนข้อมูลเคอร์เนลเพื่อเปลี่ยน credential ของโปรเซสและปิด SELinux ได้ด้วย
- เอ็กซ์พลอยต์สำหรับ Pixel 8 และบันทึกการตั้งค่าเผยแพร่อยู่ใน GitHub Security Lab repository
เหตุผลที่สามารถ bypass MTE ได้
- ลำดับเอ็กซ์พลอยต์นี้ไม่ต้องมีขั้นตอน bypass MTE โดยเฉพาะแยกต่างหาก
- MTE เป็นฟังก์ชันที่ตรวจว่าหน่วยความจำบล็อกที่ pointer อ้างถึงมีแท็กตรงกันหรือไม่ เพื่อจับการ dereference ที่ไม่ถูกต้อง
- ตอน trigger CVE-2023-6241 จะเกิดความไม่สอดคล้องกันระหว่างอาร์เรย์
pagesกับ GPU mapping แต่หากมองแยกกันแต่ละส่วนก็ไม่ได้มี invalid entry อยู่ - เมื่อ
kbase_mmu_teardown_pgd_pagesข้ามการลบ GPU mapping physical address ของเพจหน่วยความจำที่ถูกปล่อยแล้วจะยังคงอยู่ใน GPU page table - ตอนที่ GPU เข้าถึงเพจที่ถูกปล่อยแล้วนี้ จะเป็นการเข้าถึง physical address โดยตรง จึงไม่ผ่านการตรวจ dereference ของ pointer
- ผลกระทบของ MTE ต่อการเข้าถึงหน่วยความจำของ GPU เองก็ยังไม่ชัดเจน
- สรุปคือบั๊กนี้ bypass การป้องกันของ MTE ได้โดยอาศัยเส้นทางที่ coprocessor อย่าง GPU เข้าถึง physical memory โดยตรง
พื้นที่โจมตีที่ยังคงอยู่แม้มี MTE
- CVE-2023-6241 แสดงให้เห็นว่าแม้บน Pixel 8 ที่เปิดใช้ kernel MTE ก็ยังสามารถไปถึงการรันโค้ดในเคอร์เนลตามอำเภอใจได้ด้วยบั๊กเดียว
- MTE เป็นความก้าวหน้าสำคัญในการบรรเทา memory corruption และอาจทำให้ช่องโหว่ประเภทนี้จำนวนมากนำไปใช้โจมตีไม่ได้ แต่ไม่ใช่มาตรการป้องกันสารพัดนึก
- ในกรณีนี้มีการ bypass MTE โดยอาศัยวิธีที่ GPU เข้าถึง physical memory โดยตรง
- ยิ่งมีมาตรการบรรเทาทั้งฮาร์ดแวร์และซอฟต์แวร์ฝั่ง CPU มากขึ้นเท่าไร coprocessor และเคอร์เนลไดรเวอร์ของมันก็ยิ่งอาจยังเป็นพื้นผิวการโจมตีที่ทรงพลังต่อไป
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ประเด็นสำคัญตรงนี้คือ GPU เป็นตัวปัญหาของ Android มานานแล้ว
GPU มีสิทธิ์เข้าถึง AP ที่สูงมาก จึงสามารถเลี่ยงมาตรการบรรเทาที่วางไว้ก่อนหน้าได้แทบทั้งหมด บั๊กในโค้ดแมปปิงของไดรเวอร์นำไปสู่ primitive สำหรับการโจมตีที่ทรงพลัง และก็ถูกนำไปใช้ซ้ำ ๆ ใน exploit ที่ใช้โจมตีจริงมาโดยตลอด สุดท้ายแล้ว ถ้ายังไม่ออกแบบสถาปัตยกรรมใหม่ ก็คงยากที่จะเปลี่ยนแปลงได้มาก
สิ่งที่น่าสนใจในช่องโหว่นี้คือเป็น บั๊กเชิงตรรกะ ในหน่วยจัดการหน่วยความจำของ Arm Mali GPU และสามารถบายพาส Memory Tagging Extension ได้
แต่ส่วนที่เหลือของบทความกลับดูเหมือนอธิบายว่าต้นเหตุจริง ๆ คือ race condition และ use-after-free เป็นผลที่ตามมา
เครื่องที่ติดตั้ง GrapheneOS ก่อนอัปเดตเดือนมีนาคมได้รับผลกระทบด้วยหรือเปล่า?
บางครั้งยังใช้ระดับแพตช์ความปลอดภัยของ AOSP ก่อนวันออกจริง หรือแบ็กพอร์ตการแก้ไขด้านความปลอดภัยจาก AOSP หรือซอร์สเคอร์เนลที่ยังไม่เปิดเผยด้วย
แก้ไข: ข้ามความเห็นนี้ได้เลย ผมสับสนกับโพสต์ล่าสุดในบล็อกของ GrapheneOS เรื่อง “พบปัญหาที่ MTE ถูกนำไปใช้กับแอประบบทั้งหมดด้วย” GrapheneOS นำ “ระดับแพตช์ความปลอดภัย 2024-03-05 แบบครบถ้วน” มาใช้ในรีลีส 2024030600 ดังนั้นแพตช์นี้ก็น่าจะรวมอยู่ด้วย
ความปลอดภัยของหน่วยความจำ Arm MTE แบบความน่าจะเป็นเป็นก้าวสำคัญไปสู่ฮาร์ดแวร์ CHERI แบบกำหนดแน่นอน, https://saaramar.github.io/memory_safety_blogpost_2022/ และ https://news.ycombinator.com/item?id=39668053
มาตรการบรรเทาที่ถูกต้องควรมุ่งไปที่ primitive ของการโจมตีขั้นต้น กล่าวคือสาเหตุรากของบั๊กเอง ทางแก้ฝั่งฮาร์ดแวร์มี CHERI (Morello, CheriIoT), MTE และมาตรการบรรเทาฝั่งซอฟต์แวร์มี kalloc_type+dataPAC, AUTOSLAB, Firebloom, GuardedMemcpy, CastGuard, การลดพื้นผิวการโจมตี ส่วนภาษาการเขียนโปรแกรมที่ปลอดภัยมี Rust และ Swift MTE และ CHERI ทำงานสอดประสานกันได้ดี ช่วยกำจัดบั๊กในลักษณะนี้จากสาเหตุรากได้ MSR, MSRC, Azure Silicon ได้ผลักดันการย่อ CHERI ลงไปจนถึงสเปกคอร์ RISC-V ที่เล็กที่สุดอย่าง RISC-V32E
Microsoft Research ได้เปิดซอร์สสแตกฮาร์ดแวร์/ซอฟต์แวร์ CHERI สำหรับอุปกรณ์ IoT, https://msrc.microsoft.com/blog/2023/02/first-steps-in-cheri...
ไมโครคอนโทรลเลอร์ที่อิง CHERI มีเป้าหมายเพื่อให้ได้หลักประกันด้านความปลอดภัยที่แข็งแกร่งมาก โดยออกแบบสถาปัตยกรรมชุดคำสั่ง (ISA), application binary interface (ABI), โมเดลการแยกกักกัน และแกนกลางของซอฟต์แวร์สแตกไปพร้อมกัน ไมโครคอนโทรลเลอร์นี้บรรลุการบรรเทาแบบกำหนดแน่นอนของความปลอดภัยเชิงพื้นที่ผ่านความสามารถของ CHERI-ISA, การบรรเทาแบบกำหนดแน่นอนของความปลอดภัยเชิงเวลาสำหรับฮีปและสแตกข้าม compartment ผ่าน load barrier, zeroing, revocation และการควบคุมการไหลของข้อมูล 1 บิต รวมถึงการแยก compartment อย่างละเอียดผ่านความสามารถ CHERI-ISA เพิ่มเติมและมอนิเตอร์ขนาดเล็ก
David Chisnall, U of Cambridge, https://lobste.rs/s/gnjx2n/c_can_be_memory_safe#c_9ohzku via https://eclypsium.com/blog/a-faster-path-to-memory-safety-ch...
“มีโค้ด C/C++ โอเพนซอร์สอยู่ราว 1.3 หมื่นล้านบรรทัดในฐานคอมพิวติ้งที่เชื่อถือได้หลายแห่ง และถ้ารวมโค้ดปิดเข้าไปก็จะมากกว่านี้ ต่อให้ทุกคนหยุดเขียน C/C++ ตอนนี้ และวิศวกรซอฟต์แวร์ทุกคนหันไปโฟกัสที่การเขียนโค้ดเก่าขึ้นใหม่ด้วยภาษาที่ปลอดภัย ก็น่าจะยังใช้เวลา 5–10 ปีกว่าจะทดแทนทั้งหมดได้ และยังมีโอกาสสูงที่จะเกิดบั๊กเชิงตรรกะจำนวนมากจากการแทนที่โค้ดที่ผ่านการพิสูจน์มาอย่างยาวนานด้วยโค้ดใหม่ที่ต้องใช้อัลกอริทึมและโครงสร้างข้อมูลอื่นเพื่อให้เข้ากับรูปแบบที่ภาษาปลอดภัยอนุญาต”
“ถ้าไม่เขียนขึ้นใหม่ แค่หยุดเขียน C/C++ อย่างเดียว ด้วยอัตราการเปลี่ยนโค้ดตามปกติ ฐานคอมพิวติ้งที่เชื่อถือได้จะใช้เวลาราว 50 ปีกว่าจะปลอดภัยทั้งหมด หากทุกคนไม่สามารถตกลงกันได้ว่าจะเลิก C/C++ อย่างน้อยก็ 100 ปี”
“ในทางกลับกัน ถ้าผู้ผลิต CPU รายใหญ่เริ่มออก CHERI CPU ภายใน 5 ปี เครื่องส่วนใหญ่ โดยเฉพาะเครื่องที่มีมูลค่าสูง จะมีความปลอดภัยของหน่วยความจำภายใน 15 ปีนับจากวันนี้ โดยที่โปรแกรมเมอร์ไม่ต้องเปลี่ยนพฤติกรรมเลย”
ตัวแรกคือระบบ Sonata: https://github.com/lowRISC/sonata-system ประกอบด้วย FPGA และ PCB เฉพาะทางที่มีอุปกรณ์ต่อพ่วงและเฮดเดอร์ต่าง ๆ ตอนนี้การออกแบบ PCB เสร็จแล้ว และน่าจะหาซื้อได้ผ่าน Mouser อีกทั้งยังโอเพนซอร์สถึงระดับเลย์เอาต์บอร์ด จึงประกอบเองได้หากต้องการ ขณะนี้กำลังทำ RTL สำหรับ FPGA อยู่ เมื่อเสร็จแล้วก็จะได้ระบบลักษณะไมโครคอนโทรลเลอร์ที่อิง CHERIoT พร้อมเอกสารและเครื่องมือครบ
นอกจากนี้ยังมีการพัฒนาระบบ Symphony ที่รวม Sonata เข้ากับ OpenTitan Earl Grey root of trust: https://github.com/lowRISC/symphony-system
อีกอย่าง เท่าที่จำได้ครั้งล่าสุด CHERI ยังไม่ sound แม้ใช้อยู่บนมันก็ยังเขียนเมมโมรีบั๊กได้ เรื่องนั้นแก้แล้วหรือยัง?
แค่เถียงกันเรื่องโรงจอดจักรยานก็น่าจะกินเวลาเท่านั้นแล้ว
เอ็กซ์พลอยต์นี้น่าจะเขียนได้ด้วยภาษาส่วนใหญ่ รวมถึง Rust ด้วย
ฮาร์ดแวร์มันแย่ได้ขนาดนั้นเลยเหรอ? โอ้โห...
ที่ทำแบบนี้ได้เพราะ GPU ไม่เปิดให้เข้าถึงฮาร์ดแวร์แบบตรง ๆ มากนักเหมือน CPU
เป็นงานวิจัยและบทความที่ยอดเยี่ยม แต่ก็ทั้งน่าแปลกใจและน่ายินดีเล็กน้อยที่มันไปลงบนบล็อกของ GitHub
มีใครรู้ไหมว่า “เหตุผลทางธุรกิจ” ของ GitHub ในการทำวิจัยแบบนี้คืออะไร? ไม่ได้หมายความว่าจำเป็นต้องมีเหตุผลทางธุรกิจเสมอไป แต่พอมาเห็นที่นี่แล้วก็ค่อนข้างแปลกใจ
ความสามารถด้านการวิจัยนั้นต่อยอดมาเป็น GitHub Security Lab โดย Semmle เป็นผู้สร้าง CodeQL และตอนนี้ GitHub เป็นผู้ให้บริการ (https://docs.github.com/en/code-security/code-scanning/intro...). GitHub และ Microsoft ต้องการเชื่อม CodeQL เข้ากับ “ข้อมูลเชิงลึกด้านความปลอดภัยระดับลึก” (https://www.microsoft.com/en-us/security/blog/2023/11/02/ann...)
ดังนั้นพวกเขาจึงยังคงให้ทุนกับงานวิจัยความปลอดภัยที่แปลกใหม่แบบนี้ต่อไป และผู้ปฏิบัติงานด้านความปลอดภัยในอุตสาหกรรมก็ซาบซึ้งกับเรื่องนี้
GitHub ก็มีแอปอยู่ด้วย และความปลอดภัยของแอปนั้นก็ไม่ใช่เรื่องที่อยู่นอกขอบเขตของ GitHub หากผู้โจมตีสามารถติดตั้งแอปที่ซ่อนตัวอยู่ในโทรศัพท์ได้ ก็อาจทำหลายอย่างได้ราวกับเป็นผู้ใช้เอง หากเป็นคนที่มีอิทธิพลบน GitHub ความเสียหายก็อาจมากพอสมควร ดังนั้นการค้นหาช่องโหว่แบบนี้จึงเป็นประโยชน์กับ GitHub เช่นกัน
ดังนั้นจึงอาจสนใจตรวจสอบและยืนยันฟีเจอร์ความปลอดภัยของฮาร์ดแวร์ Arm เพื่อทำ sandboxing โดยใช้ MTE
หากมองแบบตรงไปตรงมา ในฐานะผลิตภัณฑ์แล้ว GitHub อาจไม่ได้จำเป็นต้องมีผู้เชี่ยวชาญด้านความปลอดภัย Android โดยตรง แต่ในระยะยาวก็มีประโยชน์ที่เป็นไปได้
[0]: https://en.wikipedia.org/wiki/Basic_research
น่าแปลกใจที่จนถึงตอนนี้ยังไม่มีใครทำ CPU และโทรศัพท์ที่แทบไม่มี GPU หรือไม่มีเลย แล้วเรียกมันว่า โทรศัพท์ธุรกิจ
มันดูมีข้อดีที่ชัดเจนทั้งในแง่ความปลอดภัย ต้นทุน และการใช้พลังงาน