Memory Tagging อีกหนึ่งความลับที่ทำให้ iPhone 17 โคตรปลอดภัยกว่าเดิม
By Arnon Puitrakul - 20 พฤศจิกายน 2025
ตอน Apple ออก iPhone 17 และ 17 Pro ออกมา มี Feature ใหม่ ๆ น่าสนใจเยอะมาก แต่เชื่อมั้ยมี Feature นึงที่ไม่อยู่ในทั้ง Keynote และ Ads อะไรของ Apple อะไรทั้งสิ้น แต่เป็น Feature ที่น่าสนใจ และทำให้มาตรฐานความปลอดภัยบนอุปกรณ์สูงขึ้นมากไปอีก นั่นคือ Memory Tagging Extension (MTE)
Memory Safety เป็นเรื่องสำคัญกว่าที่คิด
เชื่อหรือไม่ว่า ประมาณ 2 ใน 3 ของช่องโหว่ที่เกิดขึ้นบน Software ในช่วง 20 ปีที่ผ่านมา เกิดจากปัญหาด้านการจัดการหน่วยความจำกันทั้งนั้น เริ่มตั้งแต่สมัยก่อนที่ภาษา Programming เน้นให้อิสระในการทำงานกับนักพัฒนาในการการจัดการหน่วยความจำเอง เช่น malloc() ใน ภาษา C และ C++ เป็นต้น ซึ่งยังไงมนุษย์เราย่อมมีข้อผิดพลาด อาจจะลืม หรือคาดไม่ถึงเคสประหลาด ๆ ที่อาจจะเกิดขึ้นใน Software นำไปสู่ช่องโหว่ได้
ตัวอย่างของการโจมตี โดยใช้ช่องโหว่บนเรื่องหน่วยความจำ เช่น Buffer Overflow คือ พยายามเขียนข้อมูลให้ยาวกว่าที่นักพัฒนากำหนดเอาไว้ แล้วให้มันเกยไปโดยโปรแกรมเป้าหมายที่อยู่ข้าง ๆ เพื่อให้โปรแกรมเปลี่ยนการทำงานไปในแบบที่เราต้องการ หรือจะเป็น Use-After-Free พยายามเรียกหน่วยความจำในส่วนที่คืนไปแล้ว ซึ่งตอนนั้น โปรแกรมเป้าหมายอาจจะเรียกใช้อยู่
ตัวอย่างนึงของการใช้ช่องโหว่ในการโจมตี และสอดส่องต่าง ๆ บน iOS คือ Pegasus Spyware ของ NSO Group ที่ใช้ช่องโหว่ Zero-Day หลายตัว เข้าแทรกผ่านหน่วยความจำ เพื่อดักเอาข้อมูลการสื่อสารต่าง ๆ ออกมา การโจมตีพวกนี้ ต้องยอมรับเลยว่า แมร่งเก่งจริง เพราะในปัจจุบัน Software ใหญ่ ๆ ที่เราใช้งานกัน มีมาตรการ การตรวจสอบคุณภาพที่ค่อนข้างโหดอยู่แล้ว ทำให้การจะเจอช่องโหว่ตัวเดียว แล้วแตกทั้งยวงนั้นยากมาก ๆ ส่วนใหญ่ เรามักจะเจอกับการใช้ ช่องโหว่เล็ก ๆ หลาย ๆ อัน ค่อย ๆ หยอดเข้าไปเป็น Attack Chain ซึ่ง Pegasus ก็ใช้หลักการนี้เช่นกัน
แน่นอนว่า มีความพยายามในการแก้อยู่หลายรูปแบบมาก ๆ ตั้งแต่การ Implement กลไกในการช่วยจัดการหน่วยความจำแบบต่าง ๆ เช่น Garbage Collection และ Ownership Concept แต่วิธีเหล่านี้ ก็เป็นเหมือนการแก้ปัญหาที่ฝั่งนักพัฒนา สิ่งที่วันนี้จะมาเล่า ก็เป็นอีกหนึ่งความพยายามของ Apple ที่จะเข้ามาแก้ปัญหาเรื่องนี้ด้วยการผสาน กลไกการป้องกันของ Hardware ใน Apple Silicon และ Software ที่เป็นระบบปิดของ Apple เอง
MTE คืออะไร ?
ปกติ เวลาเราเขียน Application สักตัว เราจะต้องมีการเรียกใช้งานหน่วยความจำ ซึ่งการจะใช้งานได้นั้น เราจะต้องมีการจองหน่วยความจำ (Memory Allocation) ซึ่งเป็นหน้าที่ของ OS ในการจัดการว่า จะต้องตรงไหน และจัดการพวก Virtual Addressing ที่เป็นกลไกนึงในการป้องกันหน่วยความจำของตัวเอง ซึ่งถ้าทุกคน จอง และ ใช้งานหน่วยความจำของตัวเอง ทุกปัญหามันก็จบ
แต่ปัญหามันไม่ได้จบง่ายขนาดนั้น เพราะในความเป็นจริง เราสามารถเขียนโปรแกรมเพื่อเรียกข้อมูลจากหน่วยความจำได้ค่อนข้างอิสระมาก ๆ ทำให้ เกิดปัญหาหลายอย่าง เช่น Use-After-Free และ Buffer Overflow เป็นต้น
MTE เข้ามาแก้ปัญหานี้ ด้วยการ สร้างรหัสลับ (Secret) ขึ้นมา ให้รู้แค่ระหว่าง Application ที่เป็นคนจองหน่วยความจำนี้แต่แรก และ ตัว Hardware ที่ใช้จัดการเอง และเมื่อ Application จะเรียก หรือ ใช้งานหน่วยความจำที่จองไว้ มันจะต้อง Tag เจ้า Secret เข้าไปด้วย เพื่อยืนยันตัวตน โดยคำตอบ หรือ Secret ที่ใช้ยืนยันตัวตนในฝั่ง Hardware เอง มันจะถูกเก็บไว้ใน Memory ในส่วนที่มีเพียงแค่ Hardware สำหรับการตรวจสอบ Secret จะเข้าถึงได้เท่านั้นแบบ Physically หาก Hardware ตรวจสอบแล้วถูกต้องก็จะสามารถเข้าใช้งานได้ แต่ถ้าไม่ ระบบ ก็จะปฏิเสธการเข้าถึง และ Log เก็บไว้ใน OS
ด้วยวิธีนี้ ทำให้นักพัฒนา และ ผู้ดูแลระบบสามารถตรวจสอบการทำงานของหน่วยความจำที่ผิดพลาดได้แบบ Real-time ง่าย ๆ คือ แค่ Monitor Log เอาไว้ หากมี Event ใหม่เกิดขึ้น เราก็จะรู้ได้ในทันทีเดี๋ยวนั้นเลย ถือว่าเป็นเครื่องมือที่ดีมาก ๆ ในการต่อสู้กับ ภัยคุกคามที่เข้าถึง และพยายามแก้ไขหน่วยความจำโดยไม่ได้รับอนุญาติ
Mode of MTE
ใน MTE มันจะมี 2 โหมดให้เลือกใช้งานคือ Synchronous (SYNC) และ Asynchronous (ASYNC) ง่าย ๆ ที่สุดคือ SYNC Mode จะเน้นเรื่องความปลอดภัย มากกว่า Performance เมื่อมันตรวจสอบพบ มันสามารถที่จะ Crash ปิดการทำงานของ Application ไปได้ก่อนที่จะแตก
แต่กลับกัน ASYNC Mode จะเน้นเรื่องประสิทธิภาพมากกว่า ความปลอดภัย คือ คนตรวจก็ตรวจไป เหมาะกับการตรวจสอบแบบไม่เข้มข้นมาก เมื่อเจอ Tag ที่ไม่ถูกต้อง โปรแกรมจะยังคงทำงานไปได้อีกระยะหนึ่ง จนถึงการเรียก System Call หรือ เจอ Interrupt โดยไม่มีการแจ้งข้อมูลโดยละเอียด เช่น Address ที่มีปัญหา
การจะเลือกใช้ Mode ไหน อยู่ที่ OS และ Application ด้วยว่า มีการเลือกใช้งานแบบไหน เช่น GraphineOS ที่บอกว่า แข็งแกร่งมาก ๆ เขาเปิดใช้งาน SYNC Mode บน Kernel และ App ที่ติดมากับเครื่องทั้งหมด ส่วน App ที่ติดตั้งเอง เขาจะใช้งานแบบ Hybrid ที่จะรันแบบ SYNC เมื่อเขียนข้อมูล และ ASYNC เมื่ออ่านข้อมูล ซึ่งแบบ Hybrid นี้ AOSP เรียกว่า Asymmetric Mode (ASYMM)
การนำมาใช้งานกับ Android และ iOS
ในฝั่งของ Android ก็มีการนำ MTE มาใช้งานแล้ว ตั้งแต่ช่วง Google Pixel 8 และในตัวของ Android บน AOSP เอง ก็มีการรองรับการทำงานของ MTE มานานแล้วเหมือนกัน โดยเมื่อเราเปิดการใช้งาน Advanced Device Protection มันจะเข้าไปเช็คว่า เครื่องโทรศัพท์ และ App สามารถใช้งาน MTE ได้หรือไม่ หากใช้งานได้ มันก็จะเปิดใช้เป็น App แต่ละตัวที่นักพัฒนาเขียนมารองรับไป
หรือถ้าอยากเห็นการใช้งาน MTE แบบ โคตรโหด แนะนำไปลองดู GrapheneOS อันนั้นคือ เปิดใช้งาน MTE เป็นค่าเริ่มต้นกับทั้งระบบ ตั้งแต่ Kernel, App ที่มากับเครื่อง, Web Browser หรือกระทั่งเปิดให้เราสามารถเข้าไป เปิดปิดการใช้งาน MTE ในระดับ App ได้เองด้วย
ส่วนฝั่งของ Apple ที่เรากำลังจะพูดถึงในวันนี้ เขาเลือกใช้ MTE ตัวใหม่ Version 4 ที่ ARM พัฒนาขึ้นมา ผนวกกับความ Software ของ Apple เข้าไป เรียกว่า Enhanced MTE (EMTE) ที่มีการเลือกใช้เครื่องมือ และ นโยบายการใช้งาน MTE ที่รัดกุมมากกว่า MTE แบบปกติมาก ๆ
Apple กับ MTE
เริ่มจาก การเลือกใช้งาน MTEแ SYNC Mode ทั้งหมดในทุก ๆ ส่วนของระบบ ทั้งใน Kernel Space, App Space และ User Space เพราะ Apple เชื่อว่า การปกป้องหน่วยความจำเป็นอะไรที่ควรจะเปิดใช้งานโดยพื้นฐาน และทำงานตลอดเวลา แต่อย่างที่บอกว่า SYNC Mode มันโฟกัสที่ การป้องกันมากกว่า ประสิทธิภาพการทำงาน นั่นแปลว่า หาก Apple ต้องการแบบนั้น มันก็จะกินเครื่องหนักกว่าที่ควรจะเป็นแน่ ๆ
ซึ่งเรื่องนี้ Apple แก้ปัญหาด้วยการใช้ส่วนของการตรวจสอบ Tag นี้เอาไว้ใน Hardware ด้วยการนำ Instructions จาก ARM มาใช้งานซะเลย พอมันเป็น Hardware Based แล้ว ผลกระทบต่อ Performance ก็จะลดลงอย่างมีนัยสำคัญมาก ๆ นอกจากนั้น ชุดคำสั่งทั้งหลายมันยังผูกกับระบบสำหรับการตรวจสอบ Secret ทำให้เรามั่นใจได้เลยว่า ไม่ว่าผู้โจมตี ทำยังไง ก็จะไม่สามารถ Bypass กระบวนการตรจสอบนี้ได้เลย เว้นแต่จะทำ CPU เลียนแบบออกมา เอาคำสั่งออกไป ซึ่งนั่นกำลังพูดถึงการลงทุนมหาศาลมาก ๆ และการเข้าถึงอุปกรณ์แบบ Physical ที่ต้องหายไปหลักหลายอาทิตย์ และไม่โดน Remote Wipe ก่อนด้วยอะนะ
Apple ยังบอกอีกว่า MTE ปกติ มันยังมีปัญหาในเรื่องของการพยายามเข้าถึงหน่วยความจำที่ไม่ได้ Tag Secret ลงไป เช่นพวก Global Variable นั่นแปลว่าคนโจมตีสามารถใช้ช่องทางนี้ในการแทรกข้อมูลลงไปได้ ทำให้ใน EMTE ที่ Apple ใช้บังคับว่า หากต้องการเข้าถึงหน่วยความจำที่ไม่ได้ Tag Secret เข้าไป จะต้องรู้ Tag ของส่วนนั้น ทำให้การเข้าถึงโดยไม่ได้รับอนุญาติยากมากกว่าเดิมมาก ๆ และสุดท้ายคือ Apple สร้าง Tag Confidentiality Enforcement ที่ป้องกันตัว Secret Tag อีกที จากการโจมตีด้วยเทคนิค Side-Channel และ Speculative-Execution อีกชั้น
MTE ทำให้เราปลอดภัยขึ้นได้อย่างไร ?
เอาจริง ๆ เราคิดว่า ด้วยตัว MTE เองโดด ๆ มันเป็นกลไกที่ดีมาก ๆ ในการช่วยจัดการกับช่องโหว่ในเรื่องของหน่วยความจำได้เป็นอย่างดี เพราะมันทำให้ เมื่อเกิดปัญหาขึ้น ผู้ใช้จะจับได้ทันทีจากการที่ OS มันสั่งให้ตัวเอง Panic ไปเลย เพราะที่ผ่านมา เราไม่มีทางรู้เลยว่า App ใด มีการเรียกหน่วยความจำในส่วนที่มันไม่ควรหรือไม่ กลายเป็นว่า พอผู้ใช้เห็น ปุ๊บ มันเท่ากับว่า มันก็เป็นอีกส่วนที่ต้องบีบให้นักพัฒนาแก้ไข และปัญหาพวกนี้ที่เกิดจากความผิดพลาดของนักพัฒนาก็จะน้อยลงไปด้วย ก็จะเหลือแต่อันที่ตั้งใจแล้วละ
แต่ ๆๆๆๆ ถามว่า MTE เป็น Silver Bullet ที่สามารถป้องกัน ช่องโหว่ได้ทั้งหมดเลยมั้ย คำตอบคือ "จะบ้าเรอะ!!!" เลยละ ตัวมันเองสามารถป้องกันช่องโหว่ที่เกิดจาก หน่วยความจำได้เท่านั้น ไม่สามารถป้องกันช่องโหว่ที่มาจากช่องทางอื่นได้ แต่อย่างที่บอกว่า ตอนนี้ การจะหาช่องโหว่อันเดียวที่เสียบเข้าระบบได้เลย มันไม่ง่ายมาก ๆ มันจะต้องอาศัยการโจมตีหลาย ๆ แบบค่อย ๆ เสียบเข้าไปเรื่อย ๆ เป็น Attack Chain ทีนี้พอการโจมตีเป็น Chain อันนี้มันไม่สำเร็จ ด้วยการติด MTE เท่ากับว่า ทั้ง Chain นี้ต้องรื้อใหม่หมดเลยนะ ไม่สามารถนำมาใช้ได้อีก เนื่องจากช่องโหว่นี้ถูกเจอแล้วนั่นเอง ทำให้ อัตราการโจมตีสำเร็จย่อมลดลงเป็นเงาตามตัว
ความเจ๋งอีกอย่างคือ Apple เลือก Policy ในการเปิดใช้งาน EMTE ในทุก ๆ ส่วนของระบบ นั่นแปลว่า หากรอดจาก App Space ออกไปได้ พยายามจะเข้ายึดเครื่องก็จะเจอ MTE ใน Kernel Space อีกดอก หรือกระทั่งกลไกในการป้องกันอื่น ๆ อย่าง Secured Memory Allocator kalloc() เก็บอีกดอก
ดังนั้น MTE ที่ Apple Implement ลงไปใน iPhone 17 Series และ iPhone Air เรียกว่า เป็นเหมือนการตอกฝาโลง เรื่องการจัดการ Memory Safety บน iOS ไปเลยละ และมันยกระดับของความปลอดภัยบนอุปกรณ์สำหรับคนทั่ว ๆ ไป สุด ๆ มันทำให้การโจมตีด้วยช่องโหว่ที่ใช้งานหน่วยความจำยากขึ้นแบบ ชิบหายการช่างเลยละ แต่ถามว่า มันเคยมีเคสที่ Bypass MTE ได้มั้ย คำตอบคือ มี ! แต่มันไม่ได้ง่ายขนาดนั้น หากเครื่องไม่ได้โดนขโมย และ คุณเป็น High-Profile Person จริง ๆ การจะเจาะผ่าน MTE ไม่คุ้มโคตร ๆ




