ดาวน์โหลดโปรแกรมฟรี
       
   สมัครสมาชิก   เข้าสู่ระบบ
THAIWARE.COM | ทิปส์ไอที
 

การโจมตีแบบ Buffer Overflow คืออะไร ? มีกี่ประเภท ? และการป้องกัน

การโจมตีแบบ Buffer Overflow คืออะไร ? มีกี่ประเภท ? และการป้องกัน
ภาพจาก : https://www.freepik.com/free-vector/vector-abstract-big-data-visualization-green-glowing-data-flow-as-binary-numbers-computer-code-representation-cryptographic-analysis-hacking-bitcoin-blockchain-transfer_11029323.htm
เมื่อ :
|  ผู้เข้าชม : 1,607
เขียนโดย :
0 %E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%88%E0%B8%A1%E0%B8%95%E0%B8%B5%E0%B9%81%E0%B8%9A%E0%B8%9A+Buffer+Overflow+%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3+%3F+%E0%B8%A1%E0%B8%B5%E0%B8%81%E0%B8%B5%E0%B9%88%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B9%80%E0%B8%A0%E0%B8%97+%3F+%E0%B9%81%E0%B8%A5%E0%B8%B0%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9B%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B8%81%E0%B8%B1%E0%B8%99
A- A+
แชร์หน้าเว็บนี้ :

การโจมตีแบบ Buffer Overflow คืออะไร ? มีกี่ประเภท ? และการป้องกัน

ผู้ที่ติดตามข่าวสารด้าน ภัยคุกคามทางไซเบอร์ (Cyber Threat) เป็นประจำ ไม่ว่าจะเป็นการจารกรรมข้อมูลของแฮกเกอร์, เทคนิคที่ มัลแวร์ (Malware) ใช้ในการเจาะเข้าสู่ระบบของเหยื่อ หรือจะเป็นช่องโหว่ที่ถูกค้นพบในซอฟต์แวร์อะไรก็ตาม บ่อยครั้งที่เราจะได้ยินคำว่า "Buffer Overflow" 

บทความเกี่ยวกับ Security อื่นๆ

สำหรับ Buffer Overflow เป็นเทคนิคหนึ่งที่ได้รับความนิยมจาก แฮกเกอร์ (Hacker) เป็นอย่างมาก ซึ่งก็แสดงให้เห็นว่ามันเป็นช่องโหว่ (Vulnerability) ที่ได้ผล ไม่อย่างนั้นมันคงไม่ได้รับความไว้วางใจจากแฮกเกอร์มาอย่างยาวนานขนาดนี้

คำถามคือแล้ว Buffer Overflow มันคืออะไร ? หลายคนน่าจะสงสัยเหมือนกับผู้เขียน ซึ่งเราได้ไปหาข้อมูลมาแล้วพบว่าเรื่องราวมันน่าสนใจดี เลยนำมาเล่าให้อ่านกันในบทความนี้

เนื้อหาภายในบทความ

Buffer Overflow คืออะไร ? (What is Buffer Overflow ?)

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

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

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

การโจมตีแบบ Buffer Overflow คืออะไร ? มีกี่ประเภท ? และการป้องกัน
ส่วนที่อยู่เลยแถบสีเหลือง ก็คือการทำ Buffer นั่นเอง
ภาพจาก : https://www.avast.com/c-how-to-stop-buffering

ในบางกรณี Buffer ถูกใช้เพื่อช่วยในการจัดการข้อมูลที่ถูกส่งผ่านระบบ, เช่น การอ่านข้อมูลจากไฟล์หรือการรับข้อมูลจากเครือข่าย. การใช้ Buffer ช่วยลดประสิทธิภาพที่สูญเสียในกระบวนการการถ่ายโอนข้อมูล

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

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

ตัวอย่างเช่น Buffer ของระบบยืนยันตัวตนที่ใช้ในการเข้าสู่ระบบ ออกแบบมาให้ข้อมูลบัญชี และรหัสผ่าน มีขนาด 8 ไบต์ (Bytes) แต่ถ้าหากว่าเกิดเหตุการณ์ข้อมูลถูกป้อนเข้าไป 10 Bytes แทน ทำให้มีส่วนเกินออกมา 2 Bytes เป็นเหตุให้ระบบพยายามเขียนข้อมูลเกินขอบเขต Buffer ที่ถูกกำหนดไว้

การโจมตีแบบ Buffer Overflow คืออะไร ? มีกี่ประเภท ? และการป้องกัน
ภาพจาก : https://www.imperva.com/learn/application-security/buffer-overflow/

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

การโจมตีแบบ Buffer Overflow ทำงานอย่างไร ? (How does Buffer Overflow attack work ?)

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

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

การโจมตีแบบ Buffer Overflow คืออะไร ? มีกี่ประเภท ? และการป้องกัน
ภาพจาก : https://avinetworks.com/glossary/buffer-overflow/

การโจมตีแบบ Buffer Overflow มีกี่ประเภท ? (How many types of Buffer Overflow Attack ?)

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

Stack-Based Buffer Overflow

ในขณะที่ซอฟต์แวร์กำลังทำงาน จะมีการใช้เทคนิคที่เรียกว่า Stack โดยมันเป็นโครงสร้างข้อมูลที่จัดเก็บข้อมูลแบบเข้าหลังออกก่อน (Last-In-First-Out - LIFO) ถ้าแฮกเกอร์สามารถส่งข้อมูลที่มีขนาดเกินกว่าขนาด Buffer ที่ใช้ใน Stack ได้ ก็จะเกิด Buffer Overflow ขึ้น

Heap-Based Buffer Overflow

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

แต่ถ้าข้อมูลที่ถูกเขียนลงไปใน Buffer ของ Heap มีขนาดใหญ่เกินกว่าที่มันจะรองรับได้ มันก็เลยทำให้เกิด Buffer Overflow ในที่สุด

Format String Overflow

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

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

Integer Overflow

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

ตัวอย่างเช่น ถ้าค่า Integer มีค่าเท่ากับ 9,223,372,036,854,775,807 ซึ่งเป็นค่าสูงสุดที่ Integer ของระบบ 64 บิต สามารถรองรับได้ แต่ถูกบวกค่าเพิ่มเข้าไปอีก 1 จะทำให้ตัวแปรกลับไปติดลบทันที ซึ่งถือว่าเป็นการทำงานที่ผิดพลาด แฮกเกอร์สามารถใช้มันในการโจมตีระบบได้

แนวทางในการป้องกัน การโจมตีแบบ Buffer Overflow (How to prevent a Buffer Overflow Attack ?)

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

นอกจากนี้ ในตัวระบบปฏิบัติการในยุคนี้ ก็มีการใส่ระบบป้องกันการโจมตีด้วยเทคนิค Buffer Overflow เข้ามาให้ด้วย

สำหรับแนวทางป้องกันที่นิยมใช้กันจะมีอยู่ 3 เทคนิค ประกอบไปด้วย

Address Space Randomization (ASLR)

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

Data Execution Prevention

คุณสมบัตินี้จะกำหนดพื้นที่บนหน่วยความจำเอาไว้เลย ว่าส่วนไหนที่อนุญาตให้ใช้ได้ และส่วนไหนที่ไม่อนุญาตให้ใช้ เพื่อป้องกันไม่ให้เกิดการรันโค้ดจากพื้นที่บนหน่วยความจำที่ไม่ได้รับอนุญาต นั่นหมายความว่ามันจะช่วยให้ไม่เกิดการ Buffer Overflow ได้

Structured Exception Handler Overwrite Protection (SEHOP)

ในระบบปฏิบัติการ Windows จะมีคุณสมบัติที่เรียกว่า Structured Exception Handler (SEH) มันมีหน้าที่จัดการข้อผิดพลาดต่าง ๆ ที่อาจเกิดขึ้นระหว่างการทำงานของซอฟต์แวร์ หรือที่เรียกว่า "Exceptions" ในการจัดการกับ Exceptions ที่เกิดขึ้นก็คือหน้าที่ของ SEH นั่นเอง

Structured Exception Handler Overwrite Protection (SEHOP) เป็นเทคนิคที่ใช้พัฒนาขึ้นมาเพื่อใช้ป้องการโจมตีที่เกี่ยวข้องกับซอฟต์แวร์ที่มีการใช้ SEH ในระบบปฏิบัติการ Windows ด้วยการตรวจสอบ และป้องกันการเขียนข้อมูลทับของ Structured Exception Handler ในหน่วยความจำ


ที่มา : www.fortinet.com , en.wikipedia.org , www.cloudflare.com , www.invicti.com , owasp.org , www.checkpoint.com , www.veracode.com , www.imperva.com

0 %E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%82%E0%B8%88%E0%B8%A1%E0%B8%95%E0%B8%B5%E0%B9%81%E0%B8%9A%E0%B8%9A+Buffer+Overflow+%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3+%3F+%E0%B8%A1%E0%B8%B5%E0%B8%81%E0%B8%B5%E0%B9%88%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B9%80%E0%B8%A0%E0%B8%97+%3F+%E0%B9%81%E0%B8%A5%E0%B8%B0%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%9B%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B8%81%E0%B8%B1%E0%B8%99
แชร์หน้าเว็บนี้ :
Keyword คำสำคัญ »
เขียนโดย
ระดับผู้ใช้ : Admin    Thaiware
แอดมินสายเปื่อย ชอบลองอะไรใหม่ไปเรื่อยๆ รักแมว และเสียงเพลงเป็นพิเศษ
 
 
 

ทิปส์ไอทีที่เกี่ยวข้อง

 


 

แสดงความคิดเห็น