“ LD_LIBRARY_PATH” มีความเสี่ยงด้านความปลอดภัยหรือไม่


8

เรารู้ว่าld.soค้นหาไลบรารีในไดเรกทอรีที่ระบุโดยตัวแปรสภาพแวดล้อม$LD_LIBRARY_PATHแต่ผู้ใช้ทั่วไปสามารถเรียกใช้:

export LD_LIBRARY_PATH=dir1:dir2...

พวกเขาสามารถบันทึกไลบรารี่ที่ติดไวรัสไว้ในพา ธ ที่มีลำดับความสำคัญสูงกว่าไลบรารีดั้งเดิมเพื่อที่ld.soจะค้นหาไลบรารีนั้นld.so.cacheๆแทนที่จะเป็นไลบรารีที่เชื่อถือได้ใน

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


ขอบคุณ @Byte Commander สำหรับการแก้ไข ภาษาอังกฤษของฉันไม่ดี :)
Sinoosh

ไม่มีปัญหาจะดีกว่าค่าเฉลี่ย :)
ผู้บัญชาการ Byte

คำตอบ:


17

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

ดังนั้นสภาพแวดล้อมเดียวที่จะได้รับผลกระทบหากคุณเรียกใช้export LD_LIBRARY_PATH=...คือเชลล์ปัจจุบันของคุณและเชลล์ย่อยใด ๆ ที่คุณอาจวางไข่ในภายหลัง สมมติว่าคุณเปลี่ยนเส้นทางการค้นหาเพื่อรวมไลบรารีที่ติดไวรัสไว้ที่จุดเริ่มต้นเช่นด้วยลำดับความสำคัญสูงสุด จากนั้นคุณรันโปรแกรมปฏิบัติการที่โหลดหนึ่งใน libs ที่ติดไวรัสโดยที่ไม่รู้ตัว เกิดอะไรขึ้น?

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

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

PS:นอกจากนี้ยังมี executables ที่มีชุดธงsetuidหรือsetgidซึ่งหมายความว่าพวกเขาจะไม่ทำงานในฐานะผู้ใช้ / กลุ่มของผู้ที่รันพวกเขา แต่เป็นคนที่เป็นเจ้าของมัน ตัวอย่างเช่นsudoไฟล์ที่รันได้จะเป็นเจ้าของโดยรูทและมีชุดแฟล็ก setuidซึ่งหมายความว่ามันจะทำงานเป็นรูทเสมอเมื่อถูกเรียกใช้งาน เพื่อเหตุผลด้านความปลอดภัย$LD_LIBRARY_PATHตัวแปรจะถูกละเว้นโดยไฟล์เรียกทำงานที่มีหนึ่งในชุดแฟล็กsetuid / setgidเพื่อให้แน่ใจว่าผู้ใช้ทั่วไปไม่สามารถทำการปฏิบัติการที่รันด้วยสิทธิพิเศษรูทเพื่อโหลดไลบรารีโดยพลการ
(ขอบคุณ @Rinzwind ที่ชี้เรื่องนี้ออก!)


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

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


@ Byte บัญชาการผมเห็นด้วยกับคุณไม่ได้อยู่กับผู้เขียน :)
Sinoosh

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