ScholarGate
ผู้ช่วย

ช่องโหว่และการใช้ประโยชน์จากช่องโหว่

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

ค้นหาหัวข้อด้วย PaperMindเร็ว ๆ นี้Find papers & topics
Tools & resources
ดาวน์โหลดสไลด์
Learn & explore
วิดีโอเร็ว ๆ นี้

Definition

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

Scope

หัวข้อนี้ครอบคลุมประเภทช่องโหว่หลักๆ ได้แก่ ข้อบกพร่องที่เกิดจากการเสียหายของหน่วยความจำ (buffer overflows, use-after-free), การแทรกข้อมูล (injection), ข้อผิดพลาดเกี่ยวกับจำนวนเต็ม (integer errors) และข้อบกพร่องเชิงตรรกะ (logic flaws) รวมถึงเทคนิคในการใช้ประโยชน์จากช่องโหว่เหล่านี้ ซึ่งรวมถึงการจี้การควบคุมการทำงาน (control-flow hijacking) และการเขียนโปรแกรมแบบ return-oriented programming นอกจากนี้ยังครอบคลุมถึงมาตรการบรรเทาผลกระทบที่เพิ่มต้นทุนในการใช้ประโยชน์จากช่องโหว่ (ASLR, DEP/NX, stack canaries, control-flow integrity) โดยไม่รวมถึงแนวปฏิบัติในการพัฒนาที่ปลอดภัยและช่องโหว่เฉพาะของเว็บ ซึ่งจะกล่าวถึงในหัวข้อที่เกี่ยวข้อง

Core questions

  • ข้อบกพร่องของซอฟต์แวร์ประเภทใดที่ก่อให้เกิดช่องโหว่ที่สามารถใช้ประโยชน์ได้?
  • ข้อบกพร่องที่เกิดจากการเสียหายของหน่วยความจำถูกเปลี่ยนเป็นการควบคุมโปรแกรมได้อย่างไร?
  • return-oriented programming คืออะไร และเหตุใดจึงสามารถเอาชนะการป้องกันแบบง่ายๆ ได้?
  • มาตรการบรรเทาผลกระทบเช่น ASLR, DEP และ stack canaries ยกระดับอุปสรรคในการใช้ประโยชน์จากช่องโหว่อย่างไร?
  • เหตุใด 'การแข่งขันด้านอาวุธ' ระหว่างการใช้ประโยชน์จากช่องโหว่และการบรรเทาผลกระทบจึงยังคงดำเนินต่อไป?

Key concepts

  • buffer overflow
  • use-after-free
  • integer overflow
  • injection
  • control-flow hijacking
  • return-oriented programming
  • shellcode
  • ASLR, DEP/NX, stack canaries
  • control-flow integrity

Key theories

การจี้การควบคุมการทำงาน (Control-flow hijacking)
exploit จำนวนมากทำให้ตัวชี้โค้ดเสียหาย (เช่น ที่อยู่ส่งคืนหรือตัวชี้ฟังก์ชัน) เพื่อเปลี่ยนเส้นทางการทำงานไปยังโค้ดที่ผู้โจมตีเลือก ตัวอย่างที่เป็นที่รู้จักคือ stack buffer overflow ที่เขียนทับที่อยู่ส่งคืนที่บันทึกไว้
มาตรการบรรเทาผลกระทบและการแข่งขันด้านอาวุธในการใช้ประโยชน์จากช่องโหว่
การป้องกันเช่น หน่วยความจำที่ไม่สามารถประมวลผลได้, การสุ่มตำแหน่งหน่วยความจำ, stack canaries และความสมบูรณ์ของการควบคุมการทำงาน แต่ละอย่างจะบล็อกเทคนิคประเภทหนึ่ง ซึ่งกระตุ้นให้เกิดการโจมตีใหม่ๆ (return-oriented programming, การรั่วไหลของข้อมูล) ในการยกระดับที่ต่อเนื่อง

Mechanisms

stack overflow แบบคลาสสิกจะเขียนข้อมูลเกินขอบเขตของบัฟเฟอร์ ทำให้เขียนทับที่อยู่ส่งคืนที่บันทึกไว้ (saved return address) ดังนั้นเมื่อฟังก์ชันส่งคืน การทำงานจะกระโดดไปยัง shellcode ที่ผู้โจมตีจัดหาให้ มาตรการบรรเทาผลกระทบได้แก้ไขปัญหานี้: หน่วยความจำที่ไม่สามารถประมวลผลได้ (non-executable memory) (DEP/NX) หยุดการทำงานของโค้ดที่ถูกแทรก ทำให้เกิดการเขียนโปรแกรมแบบ return-oriented programming ที่เชื่อมโยงส่วนของโค้ดที่มีอยู่ การสุ่มตำแหน่งหน่วยความจำ (address-space layout randomization) ซ่อนที่อยู่เป้าหมาย ทำให้เกิดกลไกการรั่วไหลของข้อมูล (information-leak primitives) เพื่อเอาชนะมัน ความสมบูรณ์ของการควบคุมการทำงาน (control-flow integrity) และภาษาที่ปลอดภัยต่อหน่วยความจำ (memory-safe languages) มีเป้าหมายที่จะปิดช่องโหว่ประเภทเหล่านี้โดยสิ้นเชิง

Clinical relevance

ช่องโหว่ที่สามารถใช้ประโยชน์ได้เป็นวัตถุดิบของการโจมตีจริง: ข้อบกพร่องด้านความปลอดภัยของหน่วยความจำคิดเป็นส่วนใหญ่ของช่องโหว่ร้ายแรงในเบราว์เซอร์และระบบปฏิบัติการหลักๆ, exploit แบบ zero-day ถูกซื้อขายและใช้ในการจารกรรมและอาชญากรรม, และสาขาวิชานี้ขับเคลื่อนวิศวกรรมการป้องกัน, การเปิดเผยข้อมูลอย่างรับผิดชอบ, โปรแกรม bug bounties, และการผลักดันไปสู่ภาษาที่ปลอดภัยต่อหน่วยความจำเช่น Rust

Evidence & guidelines

ประเภทของช่องโหว่ถูกจัดทำรายการใน CWE ของ MITRE และติดตามเป็นรายบุคคลในฐานะ CVEs พร้อมคะแนนความรุนแรง CVSS การศึกษาจากผู้จำหน่ายรายใหญ่ (Microsoft, Google) รายงานว่าประมาณ 70% ของช่องโหว่ร้ายแรงเกิดจากความไม่ปลอดภัยของหน่วยความจำ ซึ่งกระตุ้นให้เกิดคำแนะนำในการใช้ภาษาที่ปลอดภัยต่อหน่วยความจำและการปรับใช้มาตรการบรรเทาผลกระทบ (ASLR, CFI) โดยค่าเริ่มต้นในแพลตฟอร์มสมัยใหม่

History

การใช้ประโยชน์จากช่องโหว่เป็นที่รู้จักในวงกว้างด้วย Morris worm ในปี 1988 ที่ใช้ buffer overflow และถูกจัดระบบโดย 'Smashing the Stack for Fun and Profit' ของ Aleph One ในปี 1996 การป้องกันแต่ละครั้งกระตุ้นให้เกิดการตอบสนอง: DEP นำไปสู่ return-into-libc และ return-oriented programming ของ Shacham (2007); ASLR นำไปสู่การหลีกเลี่ยงโดยอาศัยการรั่วไหลของข้อมูล การสำรวจ 'Eternal War in Memory' ในปี 2013 ได้กำหนดกรอบการแข่งขันด้านอาวุธที่กำลังดำเนินอยู่ ซึ่งยังคงขับเคลื่อนทั้งมาตรการบรรเทาผลกระทบใหม่ๆ และการนำภาษาที่ปลอดภัยต่อหน่วยความจำมาใช้

Key figures

  • Elias Levy (Aleph One)
  • Hovav Shacham
  • Dawn Song
  • Ross Anderson
  • Halvar Flake

Related topics

Seminal works

  • aleph1996
  • szekeres2013
  • anderson2020

Frequently asked questions

ช่องโหว่ zero-day คืออะไร?
zero-day คือช่องโหว่ที่ไม่เป็นที่รู้จักของผู้ป้องกันซอฟต์แวร์ (และยังไม่ได้รับการแก้ไข) ในขณะที่ถูกใช้ประโยชน์ ทำให้พวกเขามีเวลาเตรียมตัวเป็นศูนย์วัน ข้อบกพร่องดังกล่าวมีค่าอย่างยิ่งสำหรับผู้โจมตีเนื่องจากยังไม่มีการแก้ไขหรือลายเซ็นใดๆ
เหตุใดภาษาที่ปลอดภัยต่อหน่วยความจำจึงได้รับการส่งเสริมให้เป็นทางออก?
ภาษาที่ปลอดภัยต่อหน่วยความจำ (เช่น Rust) ป้องกันข้อบกพร่องได้ทั้งประเภท — buffer overflows, use-after-free — ในระหว่างการคอมไพล์หรือรันไทม์ ซึ่งช่วยขจัดแหล่งที่มาที่พบบ่อยที่สุดของช่องโหว่ร้ายแรง แทนที่จะเพียงแค่ทำให้แต่ละช่องโหว่ยากต่อการใช้ประโยชน์

Methods for this concept

Related concepts