ตัวแปรสภาพแวดล้อมปรากฏแก่ผู้ใช้ที่ไม่มีสิทธิพิเศษบน Linux หรือไม่


12

ฉันพยายามที่จะตรวจสอบว่าใน Linux ตัวแปรสภาพแวดล้อมสำหรับกระบวนการสามารถสังเกตเห็นได้โดยผู้ใช้อื่น (ไม่ใช่รูท)

กรณีการใช้งานทันทีคือการใส่ความลับลงในตัวแปรสภาพแวดล้อม สิ่งนี้ถูกกล่าวถึงในหลาย ๆ แห่งทั่วทั้งเว็บว่าไม่ปลอดภัย แต่ฉันไม่สามารถเป็นศูนย์ในจุดรับแสงที่แน่นอนใน Linux

โปรดทราบว่าฉันไม่ได้พูดถึงการใส่ความลับที่ชัดเจนเข้าไปในไฟล์ โปรดทราบว่าฉันไม่ได้พูดถึงการเปิดรับบัญชีรูท (ฉันพยายามปกปิดความลับจากฝ่ายตรงข้ามที่มีรูทเป็น nonstarter)

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

ในการทดสอบของฉันผู้ใช้ที่ไม่มีสิทธิพิเศษไม่สามารถสังเกตเห็นตัวแปรสภาพแวดล้อมสำหรับผู้ใช้รายอื่นผ่านตารางกระบวนการ ('ps auxwwe') คำสั่งที่ตั้งค่าตัวแปรสภาพแวดล้อม (เช่นการส่งออก) คือเชลล์บิวด์อินซึ่งไม่ได้ทำไว้ในตารางกระบวนการและโดยส่วนขยายไม่อยู่ใน / proc / $ pid / cmdline / proc / $ pid / environ สามารถอ่านได้โดย UID ของเจ้าของกระบวนการเท่านั้น

อาจเกิดความสับสนระหว่างระบบปฏิบัติการหรือรุ่นต่าง ๆ แหล่งที่มาต่าง ๆ (ล่าสุด) ทั่วทั้งเว็บบอกถึงความไม่มั่นคงของตัวแปรสภาพแวดล้อม แต่การตรวจสอบสปอตของรุ่นลินุกซ์ที่แตกต่างกันดูเหมือนจะบ่งบอกว่านี่เป็นไปไม่ได้ที่จะย้อนกลับไปอย่างน้อยปี 2007 มือที่จะทดสอบ)

ใน Linux ผู้ใช้ที่ไม่มีสิทธิพิเศษสามารถสังเกตตัวแปรสภาพแวดล้อมสำหรับกระบวนการของผู้อื่นได้อย่างไร

คำตอบ:


7

ตามที่ Gilles อธิบายไว้ในคำตอบที่ครอบคลุมมากสำหรับคำถามที่คล้ายกันใน security.stackexchange.com สภาพแวดล้อมของกระบวนการจะเข้าถึงได้โดยผู้ใช้ที่เป็นเจ้าของกระบวนการเท่านั้น (และรูทของหลักสูตร)


ลิงก์ใด ๆ ไปยังโพสต์ที่คุณหมายถึง?
cyc115

@ cyc115 คลิกที่คำว่า "คำตอบ" :)
guntbert

6

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

คุณสามารถเข้าถึงข้อมูลที่เก็บไว้ในตัวแปรสภาพแวดล้อมได้เพียง 2 แห่ง:

1. สภาพแวดล้อมการทำงานของกระบวนการ

/proc/$PID/environเมื่อกระบวนการทำงานตัวแปรสภาพแวดล้อมของกระบวนการที่สามารถเข้าถึงได้ผ่านทาง อย่างไรก็ตามเฉพาะผู้ใช้ที่เป็นเจ้าของกระบวนการหรือรูทเท่านั้นที่สามารถเข้าถึงไฟล์นั้นได้

2. แหล่งที่มาของตัวแปรสภาพแวดล้อม

หากคุณใช้สคริปต์เริ่มต้นและตัวแปรถูกเก็บไว้ในสคริปต์เริ่มต้นนั้นแน่นอนว่าสามารถรับตัวแปรได้จากการอ่านสคริปต์นั้น

หรือถ้าตัวแปรสภาพแวดล้อมมาจากที่อื่นก็ไม่ว่าที่ไหนก็ตาม

3. เอาต์พุต 'ps'

ใช่ฉันรู้ว่าฉันพูด 2 และในระบบที่ดีใด ๆ มันจะเป็น 2 อย่างไรก็ตามหากผู้ดูแลระบบไม่ทราบว่าเขากำลังทำอะไรอยู่

หากกระบวนการจะเปิดตัวผ่านสิ่งที่ต้องการsh -c 'cd /foo/bar; POP=tart /my/executable'แล้วว่าshกระบวนการจะมองเห็นได้ในps:

$ sh -c 'cd /; POP=tart sleep 10' &
[1] 3085

$ ps ax | grep POP
phemmer   3085  14   5  0.0  0.0 SN         00:00 sh -c cd /; POP=tart sleep 10

1
คุณควรพูดถึงโมดิeฟายเออร์psด้วย นอกจากนี้ยังอนุญาตให้ดูสภาพแวดล้อมของกระบวนการที่ผู้ใช้เป็นเจ้าของเท่านั้น
Barmar

1
อีกตำแหน่งหนึ่งที่เป็นไปได้: หากตัวแปรสภาพแวดล้อมถูกตั้งค่าผ่านเชลล์ (เช่นexport FOO=bar) จากนั้นอาจปรากฏในไฟล์ประวัติ (เช่น~/.bash_history) หากผู้ใช้ไม่ได้ใช้ความระมัดระวังเพื่อป้องกันไม่ให้บันทึกหรือลบออก
tavnab
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.