กูเกิลใช้เทคนิคจัดการหน่วยความจำ ช่วยให้ Flash ปลอดภัยจากการโจมตีมากขึ้น

by mk
19 July 2015 - 11:36

จากกรณีช่องโหว่ Flash ที่ค้นพบจากเอกสารของ Hacking Team จนสุดท้าย Adobe ต้องออก Flash เวอร์ชัน 18.0.0.209 มาแก้ไข ทางโครงการ Project Zero ของกูเกิลก็ออกมาอธิบายว่า Flash เวอร์ชันนี้ได้ปรับปรุงเทคนิคด้านหน่วยความจำหลายอย่าง ช่วยให้ Flash ปลอดภัยมากขึ้น

เทคนิคด้านหน่วยความจำเหล่านี้เป็นผลงานร่วมกันของกูเกิลกับ Adobe ทำให้มีเฉพาะ Chrome เท่านั้นที่ได้ประโยชน์จากเทคนิคเหล่านี้อย่างเต็มที่ (เพราะ Chrome ใช้ Flash เวอร์ชันพิเศษของตัวเอง) ส่วนเบราว์เซอร์ตัวอื่นๆ จะใช้ได้เฉพาะเทคนิคของฝั่ง Adobe บางอันเท่านั้น

หมายเหตุ: ข่าวนี้อ้างถึงหลักการด้านหน่วยความจำ ผู้อ่านควรมีพื้นเรื่อง data structure มาบ้างครับ

ช่องโหว่ของ Flash เรื่องหน่วยความจำ

กูเกิลอธิบายช่องโหว่ของ Flash ทั้งที่พบจากกรณีของ Hacking Team และพบในช่องโหว่อื่นๆ ว่ามักอยู่ในรูปการโจมตีแบบ Buffer overflow โดยผู้ประสงค์ร้ายจะนำวัตถุของตัวเองไปวางต่อท้ายหน่วยความจำ Heap ของ Flash แล้วพยายามให้ Flash เรียกหน่วยความจำเกินตำแหน่ง เพื่อรันโค้ดที่วางไว้

จากภาพด้านล่าง ผู้ประสงค์ร้ายจะวางวัตถุประเภท Vector ไปต่อท้าย Heap แล้วหาทางทำให้เกิด Buffer overflow ข้ามตำแหน่งไปยังวัตถุที่วางเอาไว้

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

เทคนิคนี้ใช้งานในช่องโหว่ของ Hacking Team

แนวทางลดความเสียหายจากช่องโหว่

กูเกิลใช้วิธี Heap partitioning เพื่อแยกวัตถุของแต่ละ Heap ออกจากกัน และคั่นกลางด้วยพื้นที่ว่างที่ไม่ใช้ประโยชน์อะไร (No man's land) ดังนั้นต่อให้แฮ็กเกอร์หาวิธีให้ Flash ทำ buffer overflow ได้ ก็จะเจอแต่ความว่างเปล่า

ตำแหน่งการวาง Heap ในหน่วยความจำจะเป็นแบบสุ่ม ดังนั้นถ้าเบราว์เซอร์ Chrome และ Flash คอมไพล์มาเป็น 64 บิตทั้งคู่ ก็จะสามารถอ้างตำแหน่งหน่วยความจำได้มากขึ้นมาก ช่วยให้เทคนิคการวาง Heap ได้ผลยิ่งขึ้นเพราะโอกาสที่จะสุ่มไปเจอ Heap ที่ต้องการนั้นลดลง

เทคนิคการ Heap partitioning ถูกใช้ในวงการเบราว์เซอร์มานานแล้ว และเพิ่งเริ่มนำมาใช้กับ Flash โดยตอนนี้ยังรองรับเฉพาะ Chrome เท่านั้น (Adobe มีแผนจะปรับใช้กับเบราว์เซอร์ตัวอื่นๆ ในเดือนสิงหาคม)

นอกจากเทคนิคของกูเกิลแล้ว ฝั่ง Adobe เองยังเริ่มใช้เทคนิคการตรวจสอบความยาวของวัตถุประเภท Vector โดยเก็บความยาวของหน่วยความจำไว้เป็นความลับ ถ้าหากแฮ็กเกอร์สามารถแก้ไขค่า length ของวัตถุได้ ก็จะต้องผ่านการเทียบขนาดอีกรอบอยู่ดี และถ้าขนาดไม่ตรงกัน Flash ก็จะไม่อนุญาตให้รันโค้ดส่วนนี้ตอนรันไทม์

ที่มา - Google Project Zero

Blognone Jobs Premium