จะปลอดภัยหรือไม่หากปล่อยให้รูทเชลล์ทำงานในเซสชันหน้าจอที่แยกออก


20

ฉันอยากรู้เกี่ยวกับความปลอดภัยในการออกจากเชลล์รูทที่ทำงานอยู่ในหน้าจอที่แยกออกมา ฉันมักจะไม่ทำสิ่งนี้

นอกเหนือจากศักยภาพของบัญชีผู้ใช้ที่ไม่ใช่รูทของฉันที่ถูกบุกรุก (เปิดเผยรหัสผ่าน, คีย์ ssh ถูกบุกรุก ฯลฯ ), มีเวกเตอร์อื่น ๆ ของรายการในเซสชันหน้าจอเดี่ยวที่มีการป้องกันด้วยรหัสผ่านฉันควรกังวลหรือหน้าจอเดี่ยว เซสชั่นได้รับการพิจารณาเฉื่อย?


นี้ไม่ได้เป็นคำตอบเพราะผมไม่ทราบว่ามัน sudoแต่ผมไม่คิดว่ามันจะทำให้ความแตกต่างระหว่างการทำเหมือนที่คุณพูดและออกจากงานเพื่อใด
phunehehe

7
@phunehehe มีความแตกต่างเพราะเมื่องานเสร็จสิ้นให้sudoปิดใช้งานในขณะที่รูทเชลล์ที่แท้จริงยังคงเปิดอยู่
Michael

คำตอบ:


5

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

แต่มีความเสี่ยงเพิ่มขึ้นอื่น ๆ นอกเหนือจากนั้น ตัวอย่างเช่นตอนนี้คุณเปิดตัวเองขึ้นมาถึงการหาประโยชน์ทางทฤษฎีซึ่งอนุญาตให้หนึ่งสิทธิ์ในการเปลี่ยนซ็อกเก็ตหน้าจอ ( /var/run/screenในระบบของฉัน แต่บางครั้ง/tmpก็ใช้) การหาประโยชน์ดังกล่าวในขณะนี้มีเส้นทางไปสู่การรูทซึ่งอาจไม่เป็นอย่างอื่น

sudoมีข้อดีอื่น ๆ sudo su -ถ้าคุณสามารถฝึกตัวเองที่จะใช้สำหรับแต่ละคำสั่งมากกว่าการทำ มันบันทึกการกระทำ (ซึ่งนอกจากว่าคุณจะเข้าสู่ระบบจากระยะไกลจะไม่เพิ่มความปลอดภัยอย่างมีความหมาย แต่จะให้เส้นทางของสิ่งที่คุณทำ) และช่วยป้องกันอุบัติเหตุด้วยการเพิ่มระดับความตั้งใจสำหรับแต่ละคำสั่งแทนที่จะเปลี่ยนเป็นเซสชันที่มีสิทธิ์ทั้งหมด


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

-1 ถ้าฉันมีช่องโหว่ที่สามารถเปลี่ยนการอนุญาตไฟล์ฉันไม่จำเป็นต้องแฮ็คหน้าจอที่กำลังรันอยู่ ฉันสามารถทำอะไรก็ได้ที่ฉันต้องการด้วยระบบ
Let_Me_Be

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

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

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

10

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

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

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

“ ฟีเจอร์อื่นที่ไม่กัดคุณ”: ใช่มันคลุมเครือ แต่ความกังวลด้านความปลอดภัยอยู่เสมอ คุณอาจถูกล่อลวงให้ยกเลิกสิ่งนี้เป็นความคิดที่ปรารถนาธรรมดา ๆ แต่คุณคิดทุกอย่างจริงๆหรือ? ตัวอย่างเช่น…

ตราบใดที่คุณสามารถเขียนไปยังอุปกรณ์ปลายทางคุณสามารถฉีดข้อมูลลงในอินพุตของเชลล์นั้น ภายใต้การกำหนดค่าเริ่มต้นของหน้าจอบนเครื่องของฉัน:

printf '\ekfoo\017bar\e\\' >/dev/pts/33
printf '\e[21t' >/dev/pts/33

ส่วนแทรกนี้␛]lfoobar␛lในสตรีมอินพุตของเชลล์ \ekคือลำดับการควบคุมที่อนุญาตให้แอปพลิเคชั่น (หรือสิ่งใดก็ตามที่สามารถเขียนไปยังอุปกรณ์ปลายทาง) ตั้งชื่อหน้าต่าง (ดูที่ส่วน"หน้าต่างการตั้งชื่อ" ในคู่มือหน้าจอ ) และ\e[21tทำให้เทอร์มินัลรายงานชื่อเรื่องของอินพุตมาตรฐานของแอปพลิเคชัน หน้าจอไม่ได้เรียงลำดับนี้ แต่ใช้มันคุณสามารถค้นหามันได้CSI Ps ; Ps ; Ps ; tในรายการลำดับการควบคุม xtermอันที่จริงอย่างน้อยภายใต้หน้าจอ 4.0.3 ตัวควบคุมทั้งหมดจะถูกถอดออกจากชื่อรายงานดังนั้นเชลล์จึงอ่านlfoobar(สมมติ␛]ว่าไม่ได้ถูกผูกไว้กับคำสั่งแก้ไข) และไม่มีการขึ้นบรรทัดใหม่ดังนั้นผู้โจมตีจึงไม่สามารถเรียกใช้คำสั่งในลักษณะนั้นได้chmod u+s /bin/sh ตามด้วยช่องว่างจำนวนมากและข้อความแจ้งเตือนที่น่าจะเป็นไปได้

หน้าจอใช้ลำดับการควบคุมที่มีความเสี่ยงอื่น ๆ ที่คล้ายกันหลายอย่างฉันไม่ทราบว่าช่องโหว่เหล่านั้นมีศักยภาพอย่างไร แต่หวังว่าในตอนนี้คุณจะเห็นได้ว่าการป้องกันด้วยรหัสผ่านเซสชันของหน้าจอนั้นยอดเยี่ยมมาก เครื่องมือรักษาความปลอดภัยโดยเฉพาะเช่น sudo มีโอกาสน้อยมากที่จะมีช่องโหว่


+1 คำตอบที่ยอดเยี่ยม ขอบคุณที่สละเวลาอธิบายทุกอย่าง
Michael

1

ท่อที่สร้างโดยหน้าจอสามารถเข้าถึงได้โดยเจ้าของเท่านั้นดังนั้นจึงไม่ควรเป็นปัญหาด้านความปลอดภัย


5
คุณใช้ "เป็น" ในส่วนแรกของประโยคที่คุณอาจหมายถึง "ควร" อย่าให้เป็นนิสัยในการตั้งสมมติฐาน
Shadur

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