อ่าน 2 นาที
ฮีปล้น
ฮี ปโอเวอร์โฟลว์ (Heap overflow) , ฮีปโอเวอร์รัน (Heap overrun) หรือ ฮีปสแมชชิ่ง (Heap smashing) เป็นประเภทหนึ่งของ บัฟเฟอร์โอเวอร์โฟล ว์ ที่เกิดขึ้นใน พื้นที่ข้อมูล ฮีป...
ฮีปล้น
ฮีปโอเวอร์โฟลว์ (Heap overflow) , ฮีปโอเวอร์รัน (Heap overrun)หรือฮีปสแมชชิ่ง (Heap smashing)เป็นประเภทหนึ่งของบัฟเฟอร์โอเวอร์โฟล ว์ ที่เกิดขึ้นใน พื้นที่ข้อมูล ฮีปการโจมตีฮีปโอเวอร์โฟลว์นั้นใช้วิธีที่แตกต่างจากการ โจมตี โอเวอร์โฟลว์บนสแต็ก หน่วยความจำบนฮีปจะถูกจัดสรรแบบไดนามิกในระหว่างการทำงานของโปรแกรม และโดยทั่วไปจะประกอบด้วยข้อมูลของโปรแกรม การโจมตีทำได้โดยการทำให้ข้อมูลนี้เสียหายในลักษณะเฉพาะ เพื่อทำให้แอปพลิเคชันเขียนทับโครงสร้างภายใน เช่นพอยเตอร์ของรายการเชื่อมโยง เทคนิคการโอเวอร์โฟลว์ฮีปแบบดั้งเดิมจะเขียนทับการเชื่อมโยงการจัดสรรหน่วยความจำแบบไดนามิก (เช่นเมตาเดตา) และใช้การแลกเปลี่ยนพอยเตอร์ที่เกิดขึ้นเพื่อเขียนทับพอยเตอร์ฟังก์ชันของโปรแกรม malloc
ตัวอย่างเช่น ในLinux เวอร์ชันเก่า การจัดสรรบัฟเฟอร์สองตัวที่อยู่ติดกันบนฮีปอาจทำให้บัฟเฟอร์ตัวแรกเขียนทับข้อมูลเมตาของบัฟเฟอร์ตัวที่สองได้ โดยการตั้งค่าบิตใช้งานของบัฟเฟอร์ตัวที่สองเป็นศูนย์ และตั้งค่าความยาวเป็นค่าลบเล็กๆ ที่อนุญาตให้คัดลอกไบต์ว่างได้ เมื่อโปรแกรมเรียกfree()ใช้บัฟเฟอร์ตัวแรก มันจะพยายามรวมบัฟเฟอร์ทั้งสองเข้าเป็นบัฟเฟอร์เดียว เมื่อเกิดเหตุการณ์นี้ บัฟเฟอร์ที่คาดว่าจะถูกปล่อยให้ว่างจะเก็บพอยเตอร์ สองตัว คือ FD และ BK ใน 8 ไบต์แรกของบัฟเฟอร์ที่เคยจัดสรรไว้ BK จะถูกเขียนลงใน FD และสามารถใช้เพื่อเขียนทับพอยเตอร์ได้
ผลที่ตามมา
การเกิดหน่วยความจำล้นโดยไม่ตั้งใจอาจส่งผลให้ข้อมูลเสียหายหรือเกิดพฤติกรรมที่ไม่คาดคิดกับกระบวนการใดๆ ที่เข้าถึงพื้นที่หน่วยความจำที่ได้รับผลกระทบ ในระบบปฏิบัติการที่ไม่มีการป้องกันหน่วยความจำกระบวนการใดๆ ก็ได้ในระบบอาจได้รับผลกระทบ
ตัวอย่างเช่น ช่องโหว่บัฟเฟอร์โอเวอร์โฟลว์ ของ Microsoft JPEG GDI+อาจอนุญาตให้เรียกใช้โค้ดจากระยะไกลบนเครื่องที่ได้รับผลกระทบ[ 1 ]
การเจลเบรก iOSมักใช้ช่องโหว่ฮีปโอเวอร์โฟลว์เพื่อเข้าถึง ระบบ และ เรียกใช้โค้ดโดยพลการ
การตรวจจับและการป้องกัน
เช่นเดียวกับบัฟเฟอร์โอเวอร์โฟลว์ การป้องกันฮีปโอเวอร์โฟลว์มีอยู่ 3 วิธีหลัก ๆระบบปฏิบัติการ สมัยใหม่หลายระบบ เช่น Windows และLinuxมีการใช้งานทั้งสามวิธีนี้ในรูปแบบใดรูปแบบหนึ่ง
- ป้องกันการเรียกใช้เพย์โหลดโดยการแยกโค้ดและข้อมูลออกจากกัน ซึ่งโดยทั่วไปจะใช้คุณสมบัติทางฮาร์ดแวร์ เช่นNX-bit
- ใช้การสุ่มเพื่อให้ฮีปไม่ได้อยู่ที่ตำแหน่งคงที่ โดยทั่วไปจะใช้ คุณสมบัติ ของเคอร์เนลเช่น ASLR ( Address Space Layout Randomization )
- เพิ่มการตรวจสอบความถูกต้องเข้าไปในตัวจัดการฮีป
ตั้งแต่เวอร์ชัน 2.3.6 ไลบรารีGNU libcมีการป้องกันที่สามารถตรวจจับการล้นฮีปได้หลังจากนั้น ตัวอย่างเช่น โดยการตรวจสอบ ความสอดคล้อง ของตัวชี้เมื่อเรียกใช้unlinkอย่างไรก็ตาม การป้องกันการโจมตีก่อนหน้านี้ก็ถูกแสดงให้เห็นเกือบจะในทันทีว่าสามารถถูกโจมตีได้เช่นกัน[ 2 ] [ 3 ]นอกจากนี้ Linux ยังรองรับASLRมาตั้งแต่ปี 2005 แม้ว่าPaXจะนำเสนอการใช้งานที่ดีกว่ามาหลายปีก่อนหน้านั้นก็ตาม และ Linux ยังรองรับ NX-bit มาตั้งแต่ปี 2004 อีกด้วย
ไมโครซอฟต์ได้รวมการป้องกันการล้นบัฟเฟอร์ที่อยู่ภายในฮีปตั้งแต่เดือนเมษายน พ.ศ. 2546 ในWindows Server 2003และเดือนสิงหาคม พ.ศ. 2547 ในWindows XPพร้อมService Pack 2มาตรการบรรเทาเหล่านี้ได้แก่ การยกเลิกการเชื่อมโยงที่ปลอดภัยและคุกกี้ส่วนหัวของรายการฮีป เวอร์ชันต่อมาของ Windows เช่นVista , Server 2008 และWindows 7ประกอบด้วย: การลบโครงสร้างข้อมูลที่มักถูกโจมตี การสุ่มเมตาเดต้าของรายการฮีป บทบาทที่ขยายมากขึ้นของคุกกี้ส่วนหัวฮีป ที่อยู่ฐานฮี ปแบบสุ่ม การเข้ารหัส ตัวชี้ฟังก์ชัน การยุติความเสียหายของฮีป และการเปลี่ยนแปลงอัลกอริทึม การป้องกันการดำเนินการข้อมูลปกติ (DEP) และ ASLR ยังช่วยบรรเทาการโจมตีนี้ด้วย[ 4 ]
วิธีการตรวจจับการล้นฮีปที่พบบ่อยที่สุดคือการวิเคราะห์แบบไดนามิกออนไลน์ วิธีนี้จะสังเกตการทำงานของโปรแกรมในขณะรันไทม์เพื่อระบุช่องโหว่ผ่านการตรวจจับการละเมิดความปลอดภัย[ 5 ]
ดูเพิ่มเติม
ลิงก์ภายนอก
- เทคนิคการใช้ malloc ของ Vudo
- บทความเกี่ยวกับปัญหา Heap Overflow ที่ Heise Security
- การเอาชนะการป้องกันฮีปและการบายพาส DEP ของ Microsoft Windows XP SP2 เก็บถาวรเมื่อ 2013-11-01 ที่Wayback Machine
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ฮีปล้น
ฮี ปโอเวอร์โฟลว์ (Heap overflow) , ฮีปโอเวอร์รัน (Heap overrun) หรือ ฮีปสแมชชิ่ง (Heap smashing) เป็นประเภทหนึ่งของ บัฟเฟอร์โอเวอร์โฟล ว์ ที่เกิดขึ้นใน พื้นที่ข้อมูล ฮีป...
ผลที่ตามมา
การเกิดหน่วยความจำล้นโดยไม่ตั้งใจอาจส่งผลให้ ข้อมูลเสียหาย หรือเกิดพฤติกรรมที่ไม่คาดคิดกับกระบวนการใดๆ ที่เข้าถึงพื้นที่หน่วยความจำที่ได้รับผลกระทบ ใน ระบบปฏิบัติการ ที่ไม่มี การป้องกันหน่วยความจำ กระบวนการใดๆ ก็ได้ในระบบอาจได้รับผลกระทบ
การตรวจจับและการป้องกัน
เช่นเดียวกับบัฟเฟอร์โอเวอร์โฟลว์ การป้องกันฮีปโอเวอร์โฟลว์มีอยู่ 3 วิธีหลัก ๆ ระบบปฏิบัติการ สมัยใหม่หลายระบบ เช่น Windows และ Linux มีการใช้งานทั้งสามวิธีนี้ในรูปแบบใดรูปแบบหนึ่ง
ดูเพิ่มเติม
บัฟเฟอร์ล้น การพ่นกอง บัฟเฟอร์สแต็กโอเวอร์โฟลว์ การโจมตี เชลล์โค้ด