อ่าน 3 นาที
อ่านนอกขอบเขต
ในด้าน ความปลอดภัย และการเขียนโปรแกรมคอมพิวเตอร์การอ่านนอกขอบเขตถือเป็นความผิดปกติของซอฟต์แวร์ที่โปรแกรม อ่าน ข้อมูลจากบัฟเฟอร์แต่กลับอ่าน ข้อมูล...
อ่านนอกขอบเขต
ในด้าน ความปลอดภัย และการเขียนโปรแกรมคอมพิวเตอร์การอ่านนอกขอบเขต[ 1 ]ถือเป็นความผิดปกติของซอฟต์แวร์ที่โปรแกรม อ่าน ข้อมูลจากบัฟเฟอร์แต่กลับอ่าน ข้อมูล จากหน่วยความจำที่อยู่ติดกันนอกขอบเขตของบัฟเฟอร์ นี่เป็นกรณีพิเศษของการละเมิดความปลอดภัยของหน่วยความจำและเป็นรูปแบบหนึ่งของ การละเมิด ความลับของข้อมูล (ดูCIA triad ) การอ่านเกินบัฟเฟอร์[ 2 ] [ 3 ]และการอ่านต่ำกว่าบัฟเฟอร์เป็นกรณีพิเศษของการอ่านนอกขอบเขต[ 1 ]
การอ่านข้อมูลนอกขอบเขตเป็นพื้นฐานของช่องโหว่ซอฟต์แวร์ หลายอย่าง ในบางกรณี อาจถูกใช้ประโยชน์ ในทางที่ผิด เพื่อเข้าถึงข้อมูลที่มีสิทธิ์[ 4 ]ตัวอย่างเช่น บางครั้งอาจถูกกระตุ้น เช่นใน บั๊ก Heartbleedโดยอินพุตที่สร้างขึ้นในทางที่ผิดซึ่งออกแบบมาเพื่อใช้ประโยชน์จากการขาดการตรวจสอบขอบเขตเพื่ออ่านส่วนของหน่วยความจำที่ไม่สามารถเข้าถึงได้
ในบางครั้ง การอ่านที่อยู่นอกขอบเขตอาจส่งผลให้เกิดพฤติกรรมโปรแกรมที่ผิดปกติอื่นๆ รวมถึง ข้อผิดพลาดในการเข้าถึง หน่วยความจำ (รวมถึงข้อผิดพลาดเพจที่ไม่ถูกต้อง ) ผลลัพธ์ที่ไม่ถูกต้อง หรือการหยุดทำงานตัวอย่างเช่นการหยุดชะงักของระบบไอทีที่เกิดขึ้นเป็นวงกว้างในปี 2024เกิดจากข้อผิดพลาดหน่วยความจำที่อยู่นอกขอบเขตในซอฟต์แวร์ความปลอดภัยทางไซเบอร์ที่พัฒนาโดย CrowdStrike [ 5 ]
ภาษาโปรแกรมที่มักเกี่ยวข้องกับการอ่านข้อมูลเกินขอบเขต ได้แก่CและC++ซึ่งไม่มีกลไกป้องกันในตัวสำหรับการใช้พอยเตอร์ในการเข้าถึงข้อมูลในส่วนใดส่วนหนึ่งของหน่วยความจำเสมือนและไม่ได้ตรวจสอบโดยอัตโนมัติว่าการอ่านข้อมูลจากบล็อกหน่วยความจำนั้นปลอดภัย ตัวอย่างเช่น การพยายามอ่านองค์ประกอบมากกว่าจำนวนที่มีอยู่ในอาร์เรย์ หรือการไม่เพิ่มตัวจบ สตริงที่ลงท้ายด้วย ค่า ว่าง
การตรวจสอบขอบเขต , การแซนด์บ็อกซ์ , การวิเคราะห์แบบคงที่ , การใช้ ภาษาการเขียนโปรแกรม ที่ปลอดภัยต่อหน่วยความจำและการตรวจสอบโปรแกรมสามารถป้องกันการอ่านบัฟเฟอร์เกิน[ 6 ]ในขณะที่เทคนิคต่างๆ เช่นการทดสอบแบบฟัซซ์สามารถช่วยตรวจจับสิ่งเหล่านี้ได้
ตัวอย่างของการอ่านข้อมูลนอกขอบเขต
ตัวอย่างสำคัญทางประวัติศาสตร์ของการอ่านที่อยู่นอกขอบเขต ได้แก่:
- Heartbleed (2012) เป็นบั๊กสำคัญในOpenSSLที่อนุญาตให้ไคลเอนต์อ่านจากหน่วยความจำตามอำเภอใจ[ 7 ]
- ในปี 2556 มีรายงานการโจมตีแบบปฏิเสธการให้บริการ ในภาษาการเขียนโปรแกรม PHPซึ่งเกิดจากการอ่านบัฟเฟอร์เกินเมื่อสร้างวัตถุ DateInterval [ 8 ] [ 9 ]
- การหยุดชะงักของระบบไอทีที่เกี่ยวข้องกับ CrowdStrike ในปี 2024เกิดจากการอ่านหน่วยความจำที่อยู่นอกขอบเขตซึ่งนำไปสู่ข้อผิดพลาดของเพจ[ 10 ]
การจัดหมวดหมู่
บริษัท Mitre Corporation (MITRE) จัดประเภทการอ่านนอกขอบเขตภายใต้Common Weakness Enumeration CWE-125 [ 1 ]โดยมีหมวดหมู่ย่อย CWE-126 (การอ่านเกินบัฟเฟอร์) [ 2 ]และ CWE-127 (การอ่านต่ำกว่าบัฟเฟอร์) [ 11 ]
MITRE ระบุรูปแบบการโจมตี ที่สอดคล้องกัน ภายใต้การแจงนับและการจำแนกประเภทรูปแบบการโจมตีทั่วไป "CAPEC-540: บัฟเฟอร์ที่อ่านเกิน" [ 12 ]การโจมตีนี้ถูกระบุว่ามีโอกาสเกิดการโจมตีต่ำ แต่มีความรุนแรงโดยทั่วไปสูงหากเกิดการโจมตีขึ้น
การบรรเทา
MITRE แนะนำว่าการอ่านบัฟเฟอร์เกินสามารถตรวจจับได้อย่างมีประสิทธิภาพด้วยการวิเคราะห์แบบคงที่ (โดยเฉพาะการทดสอบความปลอดภัยของแอปพลิเคชันแบบคงที่ ) และแนะนำว่าการวิเคราะห์แบบไดนามิก (เช่นAddressSanitizer ) มีประสิทธิภาพในการตรวจจับในระดับปานกลาง[ 2 ]
สำหรับจุดอ่อนหลักคือการอ่านข้อมูลนอกขอบเขต (CWE-125) MITRE แนะนำให้ตรวจสอบความถูกต้องของข้อมูล (เช่น ตรวจสอบว่าข้อมูลอยู่ในขอบเขต) รวมถึงการเลือกภาษาด้วย: "ใช้ภาษาที่ให้การจัดการหน่วยความจำที่เหมาะสม" [ 1 ]ดูเพิ่มเติมที่รายชื่อภาษาโปรแกรมตามประเภท#ภาษาตามประเภทการจัดการหน่วยความจำ การทดสอบแบบฟัซซิ่งยังถูกระบุว่าเป็นวิธีการตรวจจับที่มีประสิทธิภาพสูงอีกด้วย[ 1 ]
ดูเพิ่มเติม
ลิงก์ภายนอก
- เลือดออกในหัวใจ
- บั๊ก PHP #66060: การอ่านบัฟเฟอร์ฮีปเกินใน DateInterval
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ อ่านนอกขอบเขต
ในด้าน ความปลอดภัย และการเขียนโปรแกรมคอมพิวเตอร์การอ่านนอกขอบเขตถือเป็นความผิดปกติของซอฟต์แวร์ที่โปรแกรม อ่าน ข้อมูลจากบัฟเฟอร์แต่กลับอ่าน ข้อมูล...
ตัวอย่างของการอ่านข้อมูลนอกขอบเขต
ตัวอย่างสำคัญทางประวัติศาสตร์ของการอ่านที่อยู่นอกขอบเขต ได้แก่:
การจัดหมวดหมู่
บริษัท Mitre Corporation (MITRE) จัดประเภทการอ่านนอกขอบเขตภายใต้ Common Weakness Enumeration CWE-125 [ 1 ] โดยมีหมวดหมู่ย่อย CWE-126 (การอ่านเกินบัฟเฟอร์) [ 2 ] และ CWE-127 (การอ่านต่ำกว่าบัฟเฟอร์) [ 11 ]
การบรรเทา
MITRE แนะนำว่าการอ่านบัฟเฟอร์เกินสามารถตรวจจับได้อย่างมีประสิทธิภาพด้วย การวิเคราะห์แบบคงที่ (โดยเฉพาะ การทดสอบความปลอดภัยของแอปพลิเคชันแบบคงที่ ) และแนะนำว่า การวิเคราะห์แบบไดนามิก (เช่น AddressSanitizer ) มีประสิทธิภาพในการตรวจจับในระดับปานกลาง [ 2 ]