การโจมตีบัฟเฟอร์ล้นทำงานอย่างไร เบื้องหลังการทำงานในฐานะแฮ็กเกอร์

การโจมตีบัฟเฟอร์ล้นทำงานอย่างไร เบื้องหลังการทำงานในฐานะแฮ็กเกอร์
ผู้อ่านเช่นคุณช่วยสนับสนุน MUO เมื่อคุณทำการซื้อโดยใช้ลิงก์บนเว็บไซต์ของเรา เราอาจได้รับค่าคอมมิชชั่นจากพันธมิตร อ่านเพิ่มเติม.

แฮ็กเกอร์โจมตีระบบโดยใช้ไวรัสและมัลแวร์ได้อย่างไร บางครั้งอาจเป็นแรนซัมแวร์ บางครั้งอาจเป็นการโจมตีที่ใช้ความต้องการของระบบของคุณ บัฟเฟอร์ล้นเป็นวิธีการโจมตีวิธีหนึ่ง แต่จริง ๆ แล้วคืออะไร การโจมตีเหล่านี้ทำงานอย่างไร?





สร้างวิดีโอประจำวัน เลื่อนเพื่อดำเนินการต่อกับเนื้อหา

บัฟเฟอร์ล้นคืออะไร?

แล้วบัฟเฟอร์และสแต็คคืออะไร? บัฟเฟอร์คือฟิลด์ที่ข้อมูลอินพุตบางส่วนที่คุณป้อนให้กับคอมพิวเตอร์รอก่อนที่จะไปถึงหน่วยความจำ การเรียกคืนข้อมูลจากหน่วยความจำเป็นการดำเนินการที่เหนื่อยยากของระบบ ดังนั้นเมื่อมีพื้นที่เพียงพอในพื้นที่บัฟเฟอร์ คุณเรียกข้อมูลจากที่นี่ได้โดยตรง ซึ่งหมายถึงการเพิ่มประสิทธิภาพสำหรับอุปกรณ์ของคุณ แน่นอนว่าเมื่อพื้นที่ว่างสำหรับบัฟเฟอร์เต็ม ก็จำเป็นต้องเขียนลงในหน่วยความจำ





สแต็คเป็นโครงสร้างข้อมูลที่มีการดำเนินการพุช (เพิ่ม) และป๊อป (ลบ) ข้อมูล แนวคิดของบัฟเฟอร์และสแต็กค่อนข้างคล้ายกัน อย่างไรก็ตาม บัฟเฟอร์จะทำงานเหมือนสแตกที่เก็บข้อมูลขาเข้าไว้ชั่วคราว





บัฟเฟอร์ล้นอาจเป็นหัวข้อที่ท้าทาย แต่อย่างที่ชื่อบอก มันเกิดขึ้นเมื่อมีข้อมูลมากเกินไป เช่น ต้องการเข้าสู่ระบบ นักพัฒนาอาจจัดสรรพื้นที่ 250 ไบต์สำหรับชื่อผู้ใช้ หากคุณป้อนข้อมูล 300 ไบต์ บัฟเฟอร์จะล้น การล้นนี้อาจส่งผลต่อข้อมูลอื่นๆ ในหน่วยความจำ ทำให้เกิดอันตรายได้

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



เพื่อให้เข้าใจถึง buffer overflow หัวข้อหลักที่คุณต้องรู้คือ สถาปัตยกรรมภายในของ CPU การลงทะเบียนหน่วยความจำ และวิธีที่หน่วยความจำประมวลผลข้อมูล ต่อไปนี้เป็นคำศัพท์เกี่ยวกับ CPU ที่คุณต้องรู้





รหัสการประกอบ





ภาษาโปรแกรมระดับต่ำ เช่น ใกล้เคียงกับภาษาเครื่อง

กันชน

ขนาดคงที่ จัดสรรพื้นที่หน่วยความจำ .

รหัสไบต์

รูปแบบของโค้ดภาษากลางที่คอมไพล์ได้ซึ่งเขียนด้วยภาษาระดับสูง

คอมไพเลอร์

โปรแกรมที่แปลงภาษาโปรแกรมเป็นรหัสเครื่อง

กอง

พื้นที่หน่วยความจำแบบไดนามิกและแปรผัน

พื้นฐานของทฤษฎีความจำ

หากไม่เข้าใจทฤษฎีหน่วยความจำ การแก้ปัญหาบัฟเฟอร์ล้นในทางปฏิบัติอาจเป็นเรื่องยาก คุณสามารถคิดได้เหมือนกับการพยายามสร้างบ้านโดยไม่รู้วิธีสร้างกำแพง

ลองจินตนาการว่าคุณต้องการเรียกใช้บัฟเฟอร์ล้นจากมุมมองของแฮ็กเกอร์ คุณต้องจัดการหน่วยความจำและให้ CPU รันโค้ดของคุณ หากคุณเป็นคนที่มีเจตนาร้าย เป้าหมายของคุณที่นี่คือการโอเวอร์โหลดหน่วยความจำและจัดการพื้นที่หน่วยความจำที่อยู่ติดกันด้วย

  แผนภาพแสดงกองที่โตขึ้นและกองที่โตขึ้น

แต่ก่อนอื่น คุณต้องให้ความสำคัญกับแนวคิดของกองซ้อนและส่วนข้อความ

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

ในทางกลับกัน หน่วยความจำสแต็กทำงานแบบไดนามิกและไม่จำเป็นต้องเริ่มต้นที่แอดเดรสระดับสูง ไม่มีขีดจำกัดที่กำหนดไว้ในหน่วยความจำฮีป ข้อจำกัดทั้งหมดกำหนดโดยระบบปฏิบัติการ เป็นไปได้ที่จะเปลี่ยนหน่วยความจำฮีปแบบไดนามิก และขีดจำกัดเหล่านี้อาจเปลี่ยนแปลงได้ตามความต้องการของผู้ใช้ระหว่างการใช้งานฮีป ขีดจำกัดของหน่วยความจำฮีปขึ้นอยู่กับปัจจัยที่กำหนดโดยระบบปฏิบัติการและฮาร์ดแวร์ กล่าวอีกนัยหนึ่งคือมีการใช้งานแบบไดนามิกภายในขีดจำกัดเหล่านี้

ส่วนข้อความมีรหัสโปรแกรมและส่วนข้อมูลประกอบด้วยข้อมูลส่วนกลาง ส่วนแบ่งที่อยู่สูง กองและกองหน่วยความจำ กันเอง ระบบจะจัดสรรหน่วยความจำทั้งสองไว้ที่รันไทม์

เพื่อให้เข้าใจบัฟเฟอร์ล้นได้ดีขึ้น คุณควรตรวจสอบการลงทะเบียนข้อมูลวัตถุประสงค์ทั่วไปที่สถาปัตยกรรมคอมพิวเตอร์ของคุณใช้เพื่อจัดเก็บข้อมูล แทนที่จะวิเคราะห์แต่ละเรกคอร์ดทีละรายการ ให้เน้นที่สิ่งจำเป็น

  • ESP (ตัวชี้สแต็กแบบขยาย): การลงทะเบียนนี้มีที่อยู่ที่ด้านบนของสแต็ก
  • EBP (ตัวชี้ฐานแบบขยาย): สิ่งนี้ถือตัวชี้ฐาน
  • EIP (ตัวชี้คำแนะนำเพิ่มเติม): และการลงทะเบียนนี้เก็บที่อยู่ของคำสั่งถัดไปที่จะดำเนินการ

คำศัพท์ทางเทคนิคเหล่านี้อาจฟังดูสับสนเล็กน้อย แต่ลองนึกภาพทั้งหมดเป็นพาร์ติชันขนาดเล็กในหน่วยความจำ

การโจมตีบัฟเฟอร์ล้นทำงานอย่างไร

เมื่อคุณเพิ่มข้อมูลใหม่ลงในสแต็กใดๆ ข้อมูลนี้จะถูกเสียบไว้ด้านบนสุด ข้อมูลใหม่ทั้งหมดจะถูกย้ายลง ESP อยู่ที่ด้านบนสุดของสแต็ก ดังนั้นในกรณีนี้ ESP จะไปยังที่อยู่หน่วยความจำที่ต่ำกว่า ลองนึกภาพข้อมูลที่เพิ่มไว้ด้านบนกด ESP ลง

แหล่งซื้อเสื้อยืดลายกราฟฟิกที่ดีที่สุด
  แผนภาพแสดงพื้นที่บัฟเฟอร์อยู่ระหว่าง ESP และ EBP

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

  แผนภาพแสดงข้อมูลใน ESP ที่กำหนดเป้าหมายที่อยู่ผู้ส่ง

ด้วยข้อมูลใหม่แต่ละบิต สแต็กจะขยายไปสู่ ​​EBP คำถามจริงที่นี่คือ หากเราป้อนข้อมูลมากเกินไป เราจะส่ง EBP ไปยัง EIP ได้หรือไม่ ด้วยวิธีนี้ ข้อมูลหรือรหัสที่คุณต้องการจะอยู่บน EIP และคุณสามารถดูผลลัพธ์ที่คุณต้องการได้ สิ่งที่เหลืออยู่คือการเรียกใช้ เมื่อคุณเรียกใช้โปรแกรม โปรแกรมจะชี้ไปที่รหัส EIP ของคุณและเริ่มดำเนินการ ดังนั้น หากคุณเป็นแฮ็กเกอร์ คุณจะได้ทำการโจมตีแบบ buffer overflow ครั้งแรก

ในการยกตัวอย่างจากมุมที่แตกต่างกัน คุณสามารถพิจารณาของเหลวที่มีความหนาแน่นต่างกัน ซึ่งเรียกว่า ESP, EBP และ EIP ในคอนเทนเนอร์ ลองนึกภาพว่า ESP อยู่ที่ด้านบนของคอนเทนเนอร์เพราะความหนาแน่นต่ำกว่า เช่นเดียวกับน้ำมันมะกอกและน้ำ ไม่ควรผสมกัน โค้ดที่เป็นอันตรายจึงเป็นของเหลวอีกชนิดหนึ่ง เมื่อคุณเพิ่มลงในคอนเทนเนอร์ โค้ดดังกล่าวจะทำให้ความสมดุลนี้ยุ่งเหยิง แทนที่ของเหลวบางส่วน และผสมกับ EIP สิ่งนี้จะบ่งชี้ว่าบัฟเฟอร์ล้น

วิธีป้องกันการโจมตีจากบัฟเฟอร์ล้น

แล้วคุณจะหยุดสิ่งนี้ไม่ให้เกิดขึ้นได้อย่างไร?

ประการแรก สิ่งสำคัญคือต้องใช้แนวทางปฏิบัติในการเขียนโค้ดที่ดีตลอดกระบวนการพัฒนาซอฟต์แวร์เพื่อลดช่องโหว่ด้านความปลอดภัยให้เหลือน้อยที่สุด โค้ดที่เขียนอย่างระมัดระวังสามารถลดโอกาสที่บัฟเฟอร์จะล้นได้

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

ดำเนินการกับบัฟเฟอร์ล้น

การโจมตีด้วยบัฟเฟอร์ล้นเป็นภัยคุกคามที่สำคัญต่อความปลอดภัยทางไซเบอร์ของคุณ และการป้องกันสิ่งเหล่านี้เป็นสิ่งสำคัญโดยธรรมชาติ โชคดีที่สามารถสกัดกั้นการโจมตีเหล่านี้และเสริมสร้างกลไกการป้องกันได้ แนวปฏิบัติด้านความปลอดภัยที่ดีหลายอย่าง เช่น การอัปเดตซอฟต์แวร์อยู่เสมอเพื่อแก้ไขแพตช์ ช่วยป้องกันการโจมตีดังกล่าว ตลอดจนช่องโหว่อื่นๆ