ความจริงมีความอันตรายเพียงใดที่ SELinux อยู่ในโหมด "อนุญาต" ฉันควรระวังอะไร


14

ฉันได้ติดตั้ง ROM บางตัวซึ่งมาพร้อมกับ SELinux ในโหมด "Permissive" นี่เป็น ROM (ดี) เดียวที่เหมาะสมกับอุปกรณ์ของฉันและไม่มีวิธีการเปลี่ยนสถานะของ SELinux

ตอนนี้ฉันไม่แน่ใจจริง ๆ ว่าอะไรคือผลที่ตามมาของการตัดสินใจดังกล่าวและจะมีความสุขถ้าใครบางคนสามารถอธิบายให้ฉันได้ Said ROM มีรูทที่ "ปิดการใช้งาน" ดังนั้นอุปกรณ์จึงไม่ได้ทำการรูท แต่มันเข้ากับ SELinux ได้อย่างไรฉันไม่แน่ใจ


คุณคิดว่า "ไม่มีทางที่จะเปลี่ยนสถานะของ SELinux" หรือไม่? คุณลองออกsetenforce 1จาก terminal emulator (เหมือนรูท) หรือไม่?
Marc.2377

ฉันจะทำการวิจัยเพิ่มเติมเกี่ยวกับเรื่องนี้อีกเล็กน้อย แต่ใช่ฉันค่อนข้างแน่ใจเนื่องจากคำแนะนำของผู้สร้าง ROMs ฉันเป็นนักปราชญ์ดังนั้นฉันจึงไม่แน่ใจ 100% ว่าทำไม (ยังต้องทำการวิจัย) แต่เหตุผลที่ระบุไว้คือ bootloader ถูกล็อค ... forum.xda-developers.com/amazon-fire/orig-development/ ......
j.d'oh

คำตอบ:


12

TL; DR:อย่าลังเลที่จะข้ามไปยังข้อสรุปที่ด้านล่างหากคุณต้องการ :)!

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

คำว่า "ผู้ใช้" ที่นี่ยังรวมถึงกระบวนการใด ๆ ที่ทำงานบนอุปกรณ์ไม่ว่าจะเกี่ยวข้องโดยตรงกับการกระทำของผู้ใช้ทางกายภาพ (มนุษย์, คุณ;)) เนื่องจากทุกกระบวนการทำงานโดยใช้บัญชี "ผู้ใช้" ของระบบ

ในอดีตสิทธิ์บนระบบที่ใช้ Unix นั้นได้รับการจัดการโดยใช้สิ่งที่เรียกว่าระบบ Discretionary Access Control (DAC) ในรุ่นนี้:

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

นี่เป็นสิ่งที่ดีมากและให้ความปลอดภัยที่ดีอยู่แล้ว อย่างไรก็ตามสิ่งที่เกี่ยวกับสถานการณ์เช่นนี้:

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

ที่นี่ SELinux มา

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

วิธีนี้จะแก้ปัญหาทั้งสองที่กล่าวถึงข้างต้นด้วยวิธีต่อไปนี้:

  1. ดังที่ฉันได้กล่าวไปแล้วนโยบายนี้ก็มีผลกับผู้ใช้ที่ได้รับสิทธิพิเศษด้วย ซึ่งหมายความว่าด้วยนโยบายที่ได้รับการออกแบบอย่างเหมาะสมบริการที่ออกแบบมาเพื่อจัดการการกำหนดค่าเครือข่ายของอุปกรณ์จะไม่สามารถทำสิ่งอื่นได้: จะไม่มีการเข้าถึง SMS เช่นและการจัดการบริการ SMS จะไม่สามารถเข้าถึงการกำหนดค่าเครือข่ายได้ และทั้งสองคนจะไม่สามารถเข้าถึงข้อมูลของผู้ใช้ได้แม้ว่าทั้งคู่กำลังทำงานโดยใช้บัญชีผู้ใช้ขั้นสูง
  2. เมื่อเร็ว ๆ นี้ Android ได้รวมฟีเจอร์ผู้ใช้หลายคนที่ SELinux บังคับใช้เพื่อป้องกันไม่ให้ผู้ใช้เข้าถึงข้อมูลของผู้ใช้รายอื่น แต่นอกเหนือจากนั้นนโยบาย SELinux ยังรับผิดชอบในการอธิบายพฤติกรรมการใช้งานที่ได้รับอนุญาตและเป็นไปได้แม้ว่าทรัพยากรบางอย่างจะไม่ได้รับการป้องกันอย่างเหมาะสมโดยใช้ระบบ DAC SELinux จะเข้ามาช่วยเหลือและยังป้องกันไม่ให้แอพพลิเคชันที่เป็นอันตรายเข้าถึงโดยตรง

ระบบ DAC และ MAC นั้นไม่ได้เกิดร่วมกันในทางตรงกันข้ามระบบ MAC (SELinux) ทำหน้าที่เป็นชั้นที่สองของการป้องกันหลังระบบ DAC (การอนุญาตแบบ Unix ที่เหมือนกัน) งานของ SELinux คือการบล็อกกิจกรรมใด ๆ ที่ขัดต่อนโยบายที่กำหนดไว้เฉพาะระบบ DAC เท่านั้นที่จะได้รับการยอมรับ

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

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

ข้อสรุป

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

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

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

หากคุณมีเทคโนโลยีเพียงพอและมีการเข้าถึงบันทึกโทรศัพท์ ( dmesgอย่างน้อย แต่พวกเขามักจะถูกคัดลอกไปlogcatยัง: มีแอปพลิเคชันที่ช่วยให้ดูหลัง แต่ขึ้นอยู่กับรุ่น Android ของคุณพวกเขาอาจต้องเข้าถึงราก) คุณพบรายการ "avc": ข้อความเหล่านี้บอกคุณว่า SELinux เพิ่งตรวจพบการกระทำที่ขัดต่อนโยบาย

นี่คือตัวอย่างของรายการดังกล่าวที่นำมาจากเว็บไซต์ของ CyanogenMod :

type=AVC msg=audit(1363289005.532:184): avc: denied { read } for pid=29199 comm="Trace" 
name="online" dev="sysfs" ino=30 scontext=staff_u:staff_r:googletalk_plugin_t 
tcontext=system_u:object_r:sysfs_t tclass=file

หากไม่มีเลยมีเพียงไม่กี่คนหรือด้วยเหตุผลใดก็ตามที่คุณคิดว่าพวกเขาอาจไม่ให้คุณใช้โทรศัพท์คุณอาจลองเปลี่ยน SELinux เป็นโหมด "บังคับใช้" ใน CyanogenMod ROM ที่เก่ากว่านี่เป็นเรื่องง่ายและเป็นไปได้เพียงแค่ใช้ตัวเลือกที่ซ่อนอยู่ใน GUI (ไม่จำเป็นต้องรูทโทรศัพท์หรือติดตั้งแอปพลิเคชันเฉพาะ) ฉันไม่รู้ว่า ROM อื่นเสนอคุณสมบัติเดียวกัน แต่เนื่องจากคุณใช้ CyanogenMod แท็กฉันคิดว่าคุณอาจโชคดี;)


@ j.d'oh: ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายนานฉันได้สร้างห้องแชทใหม่เพื่อลองตอบคำถามของคุณ
WhiteWinterWolf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.