ทำไมการรูทการเขียนไฟล์ไปยังไดเร็กทอรีที่ไม่ได้เป็นเจ้าของโดยรูตจึงไม่ดี


28

สิ่งนี้เกิดขึ้นในความเห็นของคำถามอื่นและฉันชอบถ้ามีคนสามารถอธิบายเหตุผลของเรื่องนี้ให้ฉันได้

ฉันแนะนำให้ Apache บันทึกข้อผิดพลาดสำหรับ VHost ที่กำหนดไว้ในไดเรกทอรีบ้านของผู้ใช้ นี่ถูกยิงเพราะมันไม่ปลอดภัย ทำไม?

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

ขอบคุณ

บาร์ต


4
อาปาเช่ทำอะไรอยู่ในฐานะรูท - หลักการของสิทธิพิเศษอย่างน้อยก็ร้องออกมาเพื่อสิ่งนั้น!
Jonathan Leffler

1
Apache กำลังทำงานเป็น www แต่กำลังเริ่มต้นเป็น root เพื่อให้สามารถผูกกับพอร์ต 80 ได้ตามปกติ เห็นได้ชัดว่ามันยังบันทึกเป็นราก
บาร์ต B

คำตอบ:


31

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

ตัวอย่างเช่นหากผู้ใช้จะหาวิธีสร้างsymlinkจากบันทึก Apache ที่ควรพูด/ etc / shadowคุณจะมีระบบที่ใช้ไม่ได้ Apache ( root) จะเขียนทับข้อมูลประจำตัวของผู้ใช้ของคุณซึ่งทำให้ระบบเกิดความผิดพลาด

ln -s /etc/shadow /home/eviluser/access.log

หากไฟล์access.logไม่สามารถเขียนได้โดยผู้ใช้อาจเป็นการยากที่จะจี้ แต่การหลีกเลี่ยงความเป็นไปได้นั้นดีกว่า!

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

ln -s /etc/shadow /home/eviluser/access.log.1

หมายเหตุ :

symlinkวิธีการเป็นเพียงหนึ่งในการโจมตีที่เป็นไปได้ให้เป็นหลักฐานการแนวคิด

การรักษาความปลอดภัยจะต้องทำด้วยใจ White Listไม่ใช่บัญชีดำสิ่งที่เรารู้ว่าเป็นปัญหา


มีวิธีการตั้งค่าการอนุญาตเพื่อให้พวกเขาสามารถอ่านไฟล์และไม่ลบแก้ไขหรือทำสิ่งอื่น (เช่น chown, chmod เป็นต้น)?
Joshua

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

2
@Joshua: chown สามารถทำได้โดยรูทเท่านั้น chmod สามารถทำได้โดยใครก็ตามที่เป็นเจ้าของไฟล์ IIRC การเปลี่ยนชื่อสามารถทำได้โดยใครก็ตามที่เป็นเจ้าของไดเรกทอรี ในฐานะที่เป็น AlberT กล่าวถึงการสร้างลิงค์ก่อนรูทจะสร้างไฟล์โดยใครก็ตามที่สามารถเขียนไปยังไดเรคทอรีได้
atk

2
@ atk: นอกจากนี้ผู้ใดก็ตามที่เป็นเจ้าของไดเรกทอรีสามารถลบไฟล์ออกจากมันได้ (เว้นแต่ว่า+tมีการตั้งค่า bit เหนียว) แม้ว่าพวกเขาจะไม่ได้รับอนุญาตให้เขียนไฟล์เอง (เพราะ unlink () เป็นการเขียนไปยังไดเรกทอรีไม่ใช่ ไฟล์). แม้ว่ารูทจะสร้างไฟล์ล่วงหน้า แต่เจ้าของไดเรกทอรีก็ยังสามารถลบไฟล์และแทนที่ด้วย symlink ให้เป็นอย่างอื่นได้
James Sneeringer

1
หาก eviluser สามารถเขียนใน / home / eviluser (หรือสามารถเปลี่ยนการอนุญาตในไดเรกทอรี - พวกเขาเป็นเจ้าของ IOW) แล้วมันไม่สำคัญว่าสิทธิ์ในการเข้าถึงคืออะไร ผู้ชั่วร้ายสามารถย้ายไฟล์และวาง symlink ในตำแหน่งของมันได้ คำถามอื่นคือว่าซอฟต์แวร์ให้ความสนใจกับสิ่งที่เปิดหรือไม่
Jonathan Leffler

1

หลักการทั่วไปของการไม่มีกระบวนการเขียนลงในไดเรกทอรีที่พวกเขาไม่ได้เป็นเจ้าของหรือเชื่อถือได้เป็นสิ่งที่ดี แต่ในกรณีนี้มีความเหมาะสมที่จะเชื่อว่ารหัส Apache เปิดบันทึกด้วยO_NOFOLLOWฯลฯ : การเข้าสู่โฮมไดเร็กตอรี่ของผู้ใช้เป็นการตั้งค่าทั่วไป

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