โค้ด / ซอฟต์แวร์สามารถเข้าถึงตำแหน่งในหน่วยความจำที่ไม่ควรได้อย่างไร


1

ตามค่าเริ่มต้นเมื่อแอปพลิเคชันทำงานพวกเขาจะถูก จำกัด จำนวน RAM ที่พวกเขาสามารถเข้าถึงได้ใช่ไหม ในทางเทคนิค VLC ของฉันไม่สามารถเข้าถึงที่อยู่หน่วยความจำที่ Chrome ใช้ แต่เป็นไปได้อย่างไรที่ระบบปฏิบัติการ / คอมไพเลอร์อนุญาตการเข้าถึงที่อยู่โดยไม่ได้ตั้งใจและไม่อนุญาตให้ใช้รหัส ฉันรู้ว่า 'การหาประโยชน์' และ 'เพย์โหลด' ใช้ประโยชน์จากข้อเท็จจริงนี้และสร้างตัวแปรที่ใช้พื้นที่มากเกินไปและ 'ล้น' ในที่อยู่อื่น แต่สิ่งนี้เกิดขึ้นจริงได้อย่างไร

บางโปรแกรมมีแนวโน้มที่จะเกิดปัญหานี้มากกว่าโปรแกรมอื่นหรือไม่? มันมีความสำคัญในภาษาใดที่พวกเขาได้รับรหัส? ตัวอย่างเช่นฉันรู้ว่า C อนุญาตให้เล่นกับหน่วยความจำในขณะที่ Java ไม่ได้

นอกจากนี้ข้อดีของสิ่งนี้คืออะไร? จะเกิดอะไรขึ้นถ้ามีคนเขียนโค้ดที่เป็นอันตรายเพื่อเข้าถึงบางแห่งในหน่วยความจำพวกเขาจะทำอย่างไร สิ่งเดียวที่ฉันนึกได้ก็คือรหัสผ่าน / คีย์ที่เก็บไว้ใน RAM

ป.ล.ฉันคิดว่าจะนำเรื่องนี้ไปวางไว้ใน Stack Overflow แต่คำถามของฉันนั้นกว้างกว่าเฉพาะที่เกี่ยวข้องกับมุมมองการเขียนโปรแกรมโดยเฉพาะ หากฉันวางผิดที่ฉันขอโทษ


มันไม่ใช่คำตอบที่ 'ถูกต้อง' แต่คุณควรอ่าน 'การแฮ็ก - ศิลปะแห่งการเอารัดเอาเปรียบ' สำหรับคำอธิบายทางวิชาการที่ดีเกี่ยวกับกระบวนการ
Journeyman Geek

คำตอบ:


1

ผิดปกติพอที่จะเกี่ยวข้องกับการล้น - สแต็คล้น - ใช้กระบวนการที่ออกแบบมาอย่างรอบคอบเพื่อใช้พื้นที่เกินกว่าที่ควรจะเป็นเพื่อเปลี่ยนพฤติกรรมของ prpgramme เป้าหมายหรือผิดพลาดมัน


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

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

เอาล่ะฉันจะอ่านมันซะ ฉันรู้ว่าเวลาส่วนใหญ่เป้าหมายของแฮ็กเกอร์ (ฉันเกลียดการใช้คำนี้เพื่อกำหนดบุคคลที่เป็นอันตรายแฮกเกอร์เป็นมิตร) คือการเปิดรูตเชลล์ ขอบคุณสำหรับความช่วยเหลือของคุณ.
n0pe

2

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

จากนั้นกระบวนการดังกล่าวสามารถโต้ตอบโดย IPC ปกติและการโทรของระบบเพื่อรับช่วงเวลาอื่นที่บัญชีของคุณสามารถเข้าถึงได้ VLC ไม่สามารถเข้าถึงพื้นที่หน่วยความจำของ Chrome ด้วยที่อยู่ธรรมดา แต่สามารถ:

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.