การติดตั้ง / tmp noexec มีประโยชน์อย่างไร?


39

หลายคน (รวมถึงคู่มือรักษาความปลอดภัยเดเบียน ) แนะนำให้ติดตั้ง/tmpกับnoexec,nodev,nosuidชุดตัวเลือก โดยทั่วไปแล้วจะแสดงเป็นองค์ประกอบหนึ่งของกลยุทธ์ 'การป้องกันเชิงลึก' โดยการป้องกันการเพิ่มของการโจมตีที่ให้ใครบางคนเขียนไฟล์หรือการโจมตีโดยผู้ใช้ที่มีบัญชีถูกต้องตามกฎหมาย แต่ไม่มีพื้นที่การเขียนอื่น ๆ

เมื่อเวลาผ่านไปฉันได้พบข้อโต้แย้ง (ส่วนใหญ่เด่นโดย Debian / Ubuntu Developer Colin Watson) ซึ่งnoexecเป็นวิธีที่ไร้ประโยชน์ด้วยเหตุผลที่เป็นไปได้:

  1. ผู้ใช้สามารถเรียกใช้/lib/ld-linux.so <binary>ในความพยายามที่จะได้รับผลกระทบที่เหมือนกัน
  2. ผู้ใช้ยังคงสามารถเรียกใช้ล่ามที่ระบบจัดให้กับสคริปต์ที่ไม่สามารถเรียกใช้โดยตรง

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


1
@ เสียง: ฉันเคยได้ยินว่าบางครั้งแอปพลิเคชันจะแตกถ้า / tmp ไม่สามารถเรียกใช้ ฉันยังไม่ได้เห็นมันเกิดขึ้นจริง ดู TuxGuitar-1.2 ... มันเกิดขึ้น จะไม่เริ่มทำงานหากไม่ได้ติดตั้ง / tmp โดยไม่มีตัวเลือก noexec เพราะจะปลดไลบรารีออกจากนั้นลองโหลดมัน

Site Recovery Manager ของ VMware เรียกใช้สคริปต์จาก "/ tmp": การปรับแต่ง IP ล้มเหลวในระหว่างการล้มเหลวหรือการทดสอบความล้มเหลวของแผนการกู้คืนใน vCenter Site Recovery Manager (2021083): kb.vmware.com/selfservice/microsites/ ......

1
ฉันรู้ว่ายูทิลิตี้การบีบอัดที่เรียกว่า snappy ปล่อยไฟล์. so ใน / tmp และไม่สามารถเรียกใช้ถ้ามันติดตั้ง noexec (ก็ใช้โดยเริ่มต้นในคาสซานดราและ Kafka) IMHO นี้เป็นเหตุผลที่จะไม่ใช้เร็วมากกว่าเหตุผลที่จะไม่ติดที่ / tmp noexec
jorfus

คำตอบ:


31

นี่คือข้อโต้แย้งสำหรับยูทิลิตี้ที่ฉันเคยเห็นมาแล้ว:

เคอร์เนลสมัยใหม่แก้ไข/lib/ld-linux.soหลุมเพื่อที่จะไม่สามารถแมปเพจที่เรียกใช้งานได้จากnoexecระบบไฟล์

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

การค้นพบช่องโหว่ 'แบบกระป๋อง' หลายอย่างอาจพยายามเขียนและเรียกใช้งานโปรแกรมที่ดำเนินการอยู่/tmpและnoexecลดความน่าจะเป็นที่จะเกิดการโจมตีแบบสคริปต์ (พูดในหน้าต่างระหว่างการเปิดเผยช่องโหว่และการติดตั้งโปรแกรมแก้ไข)

ดังนั้นจึงยังคงมีประโยชน์ในการรักษาความปลอดภัยการติดตั้งด้วย/tmpnoexec

ตามที่อธิบายไว้ในตัวติดตามบั๊กของ Debianการตั้งค่าAPT::ExtractTemplates::TempDirในapt.confไดเรกทอรีที่ไม่noexecสามารถเข้าถึงได้และรูทจะทำให้เกิดข้อกังวลเกี่ยวกับ debconf


แต่ผมได้ได้ยินมาว่าการใช้งานในบางครั้งจะแตกถ้า tmp / ไม่ปฏิบัติการ ฉันยังไม่ได้เห็นมันเกิดขึ้นจริง
neoice

ตามที่ระบุไว้ในคู่มือการเชื่อมโยงในคำถามมันยุ่งกับแพคเกจ Debconf pre-configuration โดยไม่ต้องตั้งค่าทางเลือก
Phil Miller

2
ใช่ noexec เป็นเลเยอร์เพิ่มเติมที่ดีมากสำหรับการรักษาความปลอดภัยและฉันไม่เคยเห็นสิ่งที่เบรกเนื่องจากความเสียหาย การติดตั้งแพคเกจเป็นสิ่งเดียวและยังสามารถแก้ไขได้ตามที่ได้รับคำตอบไว้ที่นี่ ในฐานะที่เป็นโซลูชันของฉันฉันมีนามแฝงเช่นนี้: alias update = "mount -o exec, remount / tmp && apt-get update && apt-get อัพเกรด && mount -o noexec, remount / tmp"
Janne Pikkarainen

1
ฉันเดาว่ามันผิดปกติ แต่แพคเกจที่เขียนขึ้นเพื่อรันบางอย่างจาก / tmp นอกบริบทการติดตั้งแพ็กเกจนั้นมีอยู่ (เช่นมิดเดิลแวร์รุ่นปัจจุบันสำหรับการใช้บัตรประจำตัวอิเล็กทรอนิกส์ของเบลเยียม)
equaeghe

equaeghe: แพคเกจนั่นคืออะไร? มันอาจจะถูกรายงานว่าเป็นข้อผิดพลาด ฉันยินดีที่จะเดิมพันว่ามีช่องโหว่ด้านความปลอดภัยที่พบได้ในการใช้งานเช่นกัน
Phil Miller

7

แพ็คเกจ Debian จำนวนมากจำเป็นต้องมี / tmp เพื่อให้สามารถเรียกใช้งานได้เพื่อให้แพคเกจติดตั้ง สิ่งเหล่านี้มักถูกทำเครื่องหมายว่าเป็นข้อบกพร่อง (ของความรุนแรง 'ปกติ' / 'สิ่งที่ปรารถนา'):

https://www.google.com/#q=site:bugs.debian.org+noexec+/tmp

ฉันได้รับเพียงแค่ข้อผิดพลาดนี้ในขณะที่ติดตั้งเคอร์เนลที่อัพเดตไปยังสาขาที่มีเสถียรภาพในวันนี้

ดังนั้นดูเหมือนว่า Debian (& Derivatives?) ยังไม่พร้อมสำหรับ / tmp ที่จะติดตั้ง noexec ...


6

เพิ่มสิ่งต่อไปนี้ใน /etc/apt.conf หรือ /etc/apt/apt.conf.d/50remount

DPkg::Pre-Install-Pkgs {"mount -o remount,exec /tmp";};
DPkg::Post-Invoke {"mount -o remount /tmp";};

6
ฉันถูกแทนที่mountด้วย/bin/mountในกรณีที่ PATH ได้รับการแก้ไข คุณจะไม่มีทางรู้
Lekensteyn

4

แม้ว่าจะมีวิธีแก้ไขปัญหาสำหรับมาตรการรักษาความปลอดภัยเสริมส่วนใหญ่ที่คุณอาจเลือกใช้ แต่มาตรการรักษาความปลอดภัยที่หลีกเลี่ยงได้ง่ายที่สุด (เช่นการติดตั้ง / tmp noexec หรือรัน SSH บนพอร์ตสำรอง) จะขัดขวางการโจมตีอัตโนมัติหรือสคริปต์ที่อาศัยค่าเริ่มต้น ฟังก์ชั่น มันจะไม่ปกป้องคุณจากการโจมตีที่มุ่งมั่นและมีความรู้ แต่กว่า 99% ของเวลาที่คุณจะไม่ได้รับการโจมตีจากการโจมตีที่มุ่งมั่นหรือมีความรู้ แต่คุณจะปกป้องตัวเองจากสคริปต์โจมตีอัตโนมัติ


2

ครั้งแรก: มันครอบคลุมหลาย ๆ กรณีการโจมตีที่แตกต่างกันปิดเพราะมีวิธีการที่รู้จักไม่กี่รอบ (บางส่วนที่ได้รับการแก้ไข) เป็นเรื่องแปลก ผู้โจมตีทำการดาวน์โหลดรหัสไปยัง / dev / shm หรือ / tmp เป็นสิ่งที่พบได้บ่อย

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

  • มันอาจถูกหยุดโดยข้อ จำกัด ของผู้ใช้ iptables
  • มันอาจถูกหยุดโดย SELinux
  • มันอาจจะไม่ถูกหยุดเนื่องจากการใช้ประโยชน์อื่น ๆ ที่เข้าถึงได้ง่าย

จุดคือการทำให้มันยากอย่างที่คุณได้อย่างง่ายดายสามารถและตัดออก 99% ของการโจมตี

ที่สอง: มันหยุดการปฏิบัติที่ไม่ดี (การรันเนื้อหาจาก temp ทำการติดตั้งแอปพลิเคชันหลักผ่าน / tmp แทนผู้ใช้ tmpdir) โดยปล่อยให้ข้อมูลอยู่ใน / tmp ติดตั้งที่กำหนดเองมักจะไม่เข้าใจ TMPDIR นอกจากนี้: แม้ว่าจะไม่ได้: เวลาการติดตั้งเช่นการกระทำที่จุดในเวลาไม่ได้เป็นเหตุผลที่ถูกต้องเพื่อปิดปัญหาด้านความปลอดภัยอย่างถาวร

ข้อที่สาม: พิจารณาเนมสเปซที่ไม่ระบุชื่อใน / tmp ("คุณสมบัติ") คุณต้องการ จำกัด สิ่งที่ใส่ไว้และเรียกใช้จากที่นั่น

Forth: สะดวกไม่ได้เป็นปัจจัยที่เกี่ยวข้องในเรื่องนี้ สมมติว่าเราใช้เซิร์ฟเวอร์เพื่อเงินและเพื่อจุดประสงค์: เรารับผิดชอบต่อสิ่งนี้ "โอ้ฉันไม่ได้ล็อค / tmp เพราะฉันต้องการเวลาอีกไม่กี่นาทีเมื่อฉันอัปเดตซอฟต์แวร์ในปีหน้า" แน่นอนว่ามันจะไม่เป็นเพียงแค่สิ่งนี้ที่ยืนอยู่ระหว่างการถูกแบล็กเมล์และการถูกปรับ เป็นเหตุผลที่ดี ฉันไม่คิดอย่างนั้น

แล้วอันนี้ละ:

"เราเรียนรู้ว่าศัตรูสามารถโจมตีได้โดยไม่ต้องแจ้งให้ทราบล่วงหน้าพวกเขายังสามารถใช้สายลับหลายร้อยคนเพื่อวางยาพิษในอาหารได้ดังนั้นเราจึงหยุดส่งปืนให้กับทหารของเรา"

รออะไร?

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


1

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

อย่างไรก็ตามประเด็นคือผลิตภัณฑ์อย่างน้อยหนึ่งรายการต้องใช้ / tmp เพื่อไม่ติดตั้ง noexec และอาจมีผลิตภัณฑ์อื่น ฉันไม่พบเหตุผลที่น่าสนใจสำหรับมัน ถ้าคุณต้องการความปลอดภัยที่ดีกว่าฉันจะไปกับ selinux แทน


การวิเคราะห์ช่องโหว่สำหรับช่องโหว่ของ Samba ซึ่งจะถูกหยุดโดย noexec / tmp: bobao.360.cn/learning/detail/4168.html (แนะนำให้ใช้ Google Chrome สำหรับการแปล Chrome ซึ่งจะเป็นการทำลายช่องโหว่ในเบื้องต้นและ ส่วนใหญ่ของเพย์โหลด ... ) (คุณสามารถทำลายการหาประโยชน์อัตโนมัติทั่วไปได้หลายวิธีเช่นนั้น .... ) mount -o remount,exec /tmpทำงานเมื่อคุณต้องการติดตั้งสิ่งต่าง ๆ ... (ใช่มันเป็นเรื่องง่ายที่จะแก้ไข แต่ผู้โจมตีจำนวนมากดูเหมือนจะไม่รำคาญ ... )
Gert van den Berg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.