การติดตั้งเซิร์ฟเวอร์ที่ใช้งานจริงจะปลอดภัยหรือไม่?


42

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

ฉันยังมีgccคอมไพเลอร์บนเซิร์ฟเวอร์ที่ฉันใช้ในการสร้างแอปพลิเคชันก่อนการปรับใช้


4
ถ้ามันทำให้คุณรู้สึกที่ดีกว่าใด ๆชิ้นส่วนของซอฟต์แวร์ที่ติดตั้งได้ทุกที่สร้างช่องโหว่
MDMoore313

1
และหนึ่งในนั้นที่มีการเข้าถึงที่ไม่ใช่รูทเชลล์ไปยังเซิร์ฟเวอร์สามารถดาวน์โหลดแพ็คเกจคอมไพเลอร์ "distro Independent" (.tar.gz) ที่ไม่จำเป็นต้องติดตั้งดังนั้น ...

1
เป็นฉันหรือว่า "ปลอดภัยหรือไม่" และ "การเข้าถึงรูท" ค่อนข้างอึดอัดใช่ไหม
DNA

2
หากคุณติดตั้ง gcc ไว้แล้วไม่มีทางที่จะทำให้ปัญหาความปลอดภัยที่อาจเกิดขึ้นแย่ลงได้
Shadur

1
@Shadur GCC มีความแตกต่างอะไรบ้าง? หากผู้ใช้มีการเข้าถึงเครื่องแล้วพวกเขาสามารถอัปโหลดสำเนาของ gcc เล็กน้อย อย่างไรก็ตาม gcc สามารถเป็นประโยชน์กับผู้ใช้ที่ไม่มีสิทธิ์และไม่เสี่ยงต่อความปลอดภัยตราบใดที่ไม่มีผู้ใช้ที่ได้รับสิทธิพิเศษทำงาน
Vality

คำตอบ:


50

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

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

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

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

ฉันไม่คาดหวังว่าเครื่องมือในการพัฒนาจะต้องตรงกับข้อใดข้อหนึ่งข้างต้นและนี่ไม่ใช่แพ็คเกจที่มีความเสี่ยงสูง

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

หากคุณพบว่าคุณไม่ต้องการเครื่องมือเหล่านั้นบนเซิร์ฟเวอร์คุณควรงดการติดตั้งด้วยเหตุผลหลายประการ:

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

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


6
ฉันจะเพิ่มนี้ว่าระบบการผลิตจำนวนหนึ่งพึ่งพาโค้ดตีความ (เช่น PHP, Perl, Python, ... ) ห้ามการพัฒนาเครื่องมือในบริบทนี้ไม่สมเหตุสมผล ฉันคิดว่าคอมไพเลอร์gccไม่ต้องการแสดงความเสี่ยงสูงกว่าสิ่งเหล่านี้ อย่างที่คุณพูดผู้โจมตีในตำแหน่งที่จะใช้คอมไพเลอร์ที่ติดตั้งบนระบบโดยทั่วไปแล้วจะสามารถทำสิ่งที่แย่กว่านั้นได้เช่นอัปโหลดไฟล์ปฏิบัติการของพวกเขาเอง
Bruno

3
ที่เกี่ยวข้อง: รุ่นเล็ก ๆ ของ wget (51 ไบต์?) ตัวอย่างชีวิตจริงของผู้โจมตีที่ย้ายไบนารีไปยังเซิร์ฟเวอร์โดยใช้echoคำสั่งที่ตามมาลงในไฟล์ กระบวนการทั้งหมดเป็นไปโดยอัตโนมัติโดยพบสคริปต์ในลิงก์เดียวกัน
Adi

2
@Adnan น่าสนใจ เท่าที่ฉันสามารถบอกได้ข้อบกพร่องด้านความปลอดภัยที่สำคัญในตัวอย่าง DVR นี้คือความจริงที่ว่าผู้โจมตีสามารถเทลเน็ตให้เป็นรูทด้วยรหัสผ่าน 123456 ในตอนแรก การมีหรือไม่มี wget หรือเครื่องมืออื่น ๆ (ก่อนการโจมตี) นั้นมีความเกี่ยวข้องกันอย่างแน่นอน
Bruno

15

makebashเป็นเปลือกที่มีไวยากรณ์ที่แตกต่างกว่า

คอมไพเลอร์ชอบgccคือการawkกำหนดค่าที่มีประสิทธิภาพด้วยชุดของการทดแทนที่มาตรฐานawkไม่สนับสนุน มันไม่ได้เป็นไปตาม POSIX sortหรือcatที่จะฉีดขยะในผลลัพธ์ มันเป็นโปรแกรมแก้ไขข้อความแบบโต้ตอบ (คิดvi) ซึ่งกำหนดค่าให้ทำการแก้ไขบางอย่างเมื่อเริ่มต้นแล้วออกก่อนที่จะแสดงส่วนติดต่อผู้ใช้

ไม่มีสิ่งใดที่ไม่ปลอดภัยในตัวพวกเขาพวกเขาไม่ได้ทำให้เครื่องของคุณไม่ปลอดภัยมากกว่าที่คุณมีการcatเปลี่ยนเส้นทางเปลือกbash + +


2
คำตอบดังนั้นเซนฉันไม่ทราบวิธีการให้คะแนน
kasperd

4
@kasperd คำตอบนี้ตั้งใจจะจริงจัง ฉันคิดว่าการนำมุมมองของโปรแกรมเมอร์มาช่วยได้ ฟังก์ชั่นที่แปลอินพุตเป็นเอาต์พุตไม่ได้แนะนำช่องโหว่เพียงเพราะเอาต์พุตนั้นอยู่ในรูปแบบที่เข้าใจได้ของ CPU
Ignis

1
ฉันเห็นด้วยกับจุดที่คุณกำลังทำ ฉันคิดว่าคำตอบของคุณคือการอ่านที่ดีสำหรับทุกคนที่เห็นด้วยกับมัน ฉันแค่กังวลว่าคำตอบของคุณอาจเป็นเรื่องตลกสำหรับคนที่ไม่เห็นด้วยกับมัน
kasperd

ฉันชอบคำตอบนี้มากกว่าคำตอบที่ยอมรับ :)
Ruslan

15

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

คุณควรสร้างแอปพลิเคชันของคุณบนเซิร์ฟเวอร์บิลด์สร้างแพ็กเกจจากนั้นปรับใช้แพ็คเกจไบนารีกับระบบที่ใช้งานจริงของคุณ

หมายเหตุ: เครื่องมือบรรจุภัณฑ์พื้นเมืองดูด อย่าแม้แต่จะพยายามคร่ำครวญ ให้ตรวจสอบของ Jordan Sissel fpmแทน มันทำให้บรรจุภัณฑ์มีความสุขอย่างแน่นอน


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

11
ในขณะที่คุณควรสร้างแอปพลิเคชันของคุณบนเซิร์ฟเวอร์แยกต่างหากการกล่าวว่าการมีคอมไพเลอร์ในระบบการผลิตเป็นปัญหาด้านความปลอดภัยที่สำคัญไม่สมเหตุสมผล แล้วภาษาสคริปต์และระบบที่คอมไพล์ด้วย JIT (Perl, Python, Java, ... ) ล่ะ?
Bruno

3
การมีคอมไพเลอร์ในสภาพแวดล้อมการผลิตไม่ใช่ "ความเสี่ยงด้านความปลอดภัยที่สำคัญ" ผมตัวเองได้ย้ายไบนารีกล่องที่ถูกบุกรุกโดยใช้และecho base64ในความเป็นจริงคุณยังสามารถทำมันได้ด้วยชุดของechoงบและไม่มีเครื่องมืออื่น
Adi

1
จุดดีทั้งหมด ฉันได้แก้ไขคำตอบเพื่อชี้แจง
EEAA

9

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


4

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

ความเป็นจริงที่รุนแรงเกี่ยวกับความปลอดภัยของคอมพิวเตอร์นั้นมากเท่ากับที่คุณต้องการป้องกันการเข้าถึงที่ไม่พึงประสงค์การหมกมุ่นกับการบล็อกการเข้าถึงนั้นไม่สำคัญเท่ากับ:

  1. ใครสามารถเข้าถึงเซิร์ฟเวอร์
  2. คุณจะทำอย่างไรเพื่อย้อนกลับจากการหยุดพัก

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


1

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

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

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