หลังจาก Project Zero รายงานถึงการโจมตีของมัลแวร์ Pegasus ในขั้นแรกคือการส่งไฟล์ PDF เพื่อให้ iOS พยายามเรนเดอร์ภาพ แล้วอาศัยกระบวนการถอดรหัสภาพกลายเป็นตัวรันโค้ด วันนี้ Project Zero ก็ออกรายงานตอนที่สองว่าโค้ดที่รันอยู่ในตัวถอดรหัสภาพนั้นเจาะโทรศัพท์มือถือได้อย่างไร
จากการวิเคราะห์การทำงานของตัวถอดรหัสภาพ Project Zero พบว่ามันทำหน่วยความจำรั่วบางส่วน และเมื่อวิเคราะห์ดูแล้วพบว่าตัวถอดรหัสภาพ JBIG2 ใน Core Graphic นั้นสามารถเข้าถึงฟังก์ชั่นใน Core Data ได้จำนวนหนึ่ง โดยตัวสำคัญคือ NSFunctionExpression ที่เอาไว้ประมวลผล array โดยแต่เดิมนั้นฟังก์ชั่นนี้ทำได้เพียงระบบง่ายๆ คือ sum, count, min, max, และ average แต่ใน OS X 10.5 ขึ้นมาก็สามารถเรียกฟังก์ชั่นใดๆ ก็ได้ และใน iOS มีช่องโหว่ฟังก์ชั่น isa ไม่ตรวจสอบ pointer ก่อนใช้งาน
Pegasus สร้างออปเจกด์ Objective-C ในโค้ดที่รันบนตัวถอดรหัส JBIG2 แล้วเรียกฟังก์ชั่น isa ทำให้ ทำให้รันโค้ดได้ จากนั้นเจาะทะลุออกนอกตัวแอปพลิเคชั่นผ่าน NSXPC แล้วตัวมัลแวร์จะพยายามโหลดมัลแวร์ขั้นที่สอง โดยแจ้งรุ่นโทรศัพท์, เวอร์ชั่นเฟิร์มแวร์, หมายเลขสุ่ม หากเงื่อนไขครบจะได้ไฟล์ไบนารีที่เข้ารหัส AES128 กลับมา และตัวมัลแวร์จะเจาะทะลุ sandbox ออกไปได้และ Project Zero ไม่สามารถติดตามกระบวนการทำงานต่อไปได้แล้ว
แอปเปิลแก้ช่องโหว่ที่ Pegasus ใช้งาน โดยจำกัดฟีเจอร์ของ NSExpressions ลงอย่างมากใน iOS 15.1 เพื่อป้องกันการโจมตีแบบเดียวกันในอนาคต
ทาง Project Zero สรุปบทเรียนจากมัลแวร์ตัวนี้ ว่ากระบวนการ remote procedure call ควรจำกัดและตรวจสอบการทำงานเป็นอย่างดี เพราะเป็นจุดสำคัญที่ทำให้แฮกเกอร์เจาะทะลุ sandbox สำหรับระดับซีพียูเองชุดคำสั่ง Memory Tagging Extensions (MTE) จะเริ่มใช้งานเป็นวงกว้างช่วงปีนี้น่าจะจำกัดการโจมตีได้มากขึ้น
ที่มา - Project Zero