ฉันจะปิดใช้งานหรือลบบัญชีรากที่สร้างขึ้นเป็นผลข้างเคียงจากข้อบกพร่องด้านความปลอดภัยของ High Sierra นี้ได้อย่างไร


40

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

ไม่จำเป็นต้องทำสิ่งนี้ด้วยตนเองเพื่อยืนยัน การทำเช่นนั้นจะสร้างบัญชี“ root” ที่ผู้อื่นอาจได้รับประโยชน์หากคุณไม่ปิดใช้งาน

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

บัญชีนี้จะถูกปิดใช้งานหรือลบอย่างปลอดภัยได้อย่างไร

หน้า Apple นี้อธิบายถึงวิธีการปิดการใช้งานบัญชี แต่สิ่งนี้ไม่ได้ป้องกันความผิดพลาดเนื่องจากความผิดพลาดนั้นสามารถเปิดใช้งานบัญชีได้อีกครั้ง มันจะทำงานเพื่อกู้คืนระบบกลับสู่สถานะปกติโดยที่ root ถูกปิดใช้งานเมื่อข้อผิดพลาดด้านความปลอดภัยได้รับการแก้ไข

ปรับปรุง 2017-11-29 16:43 UTC

ดูเกี่ยวกับเนื้อหาความปลอดภัยของ Security Update 2017-001เพื่ออัปเดต macOS High Sierra เพื่อป้องกันการเลี่ยงผ่านการตรวจสอบสิทธิ์ผู้ดูแลระบบโดยไม่ต้องป้อนรหัสผ่านของผู้ดูแลระบบ


ชื่อของคำถามนี้เป็น XY ตามที่ระบุไว้ในปัจจุบันเนื่องจากไม่ต้องการให้นำออกหรือปิดใช้งานบัญชี
Monty Harder

คำตอบ:


40

มีโปรแกรมแก้ไขให้คลิกที่นี่หรือเพียงอัปเดตบนเครื่อง

ที่น่าสนใจคือไม่มีแพทช์สำหรับ OSX รุ่นเบต้าและผู้พัฒนาเท่าที่ฉันรู้ ฉันจะอัปเดตคำตอบนี้ทันทีที่ฉันได้ยินพวกเขา

ดาวน์โหลดแพตช์ด้านบน ออกจากส่วนที่เหลือของโพสต์สำหรับประวัติ :-)

CVE คือCVE-2017-13872และNIST จะอัปเดตการวิเคราะห์ในอนาคตอันใกล้

คำตอบเดิมเกี่ยวข้องโดยไม่ต้องแก้ไข

ออกก่อนไม่ได้ปิดการใช้งานบัญชี root ผ่าน GUI ที่มี "คนพิการ" บัญชี root เป็นสาเหตุของปัญหา

คุณจะต้องเปิดใช้งานผู้ใช้รูทและให้รหัสผ่าน นี่คือสิ่งสำคัญเนื่องจากช่องโหว่ที่มีอยู่ในระยะไกลเช่นกันผ่านทางแอปเปิ้ลและ VNC Remote Desktop (เพื่อชื่อไม่กี่) (แหล่งอื่น)

มีสองวิธีพื้นฐานในการทำเช่นนี้ GUI และเทอร์มินัล

ก่อนอื่น GUI

หากต้องการเปิดใช้งานบัญชีรูทให้ไปที่ "Directory Utility" เช่น cmd + space และค้นหา กดล็อคเพื่อปลดล็อค "โหมดผู้ดูแลระบบ" จากนั้นเปิดใช้งานบัญชีรูทผ่านการแก้ไข -> "เปิดใช้งานผู้ใช้รูท"

วิธีเปิดใช้งานรูท

ควรถามรหัสผ่านรูทตอนนี้ให้ป้อนรหัสผ่านปกติของคุณ (ดังนั้นคุณจะไม่ลืมมัน) หากไม่ขอรหัสผ่านให้ใช้แก้ไข -> "เปลี่ยนรหัสผ่านรูท ... " ด้านบน

สถานีปลายทาง

หากคุณเป็นบุคคลที่มีเทอร์มินัลใช้ด้านล่าง:

sudo passwd -u root
## Enter passwords as needed.... 
## (if you are using the terminal you should know what you are doing...)

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

หมายเหตุ

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

ดูเหมือนว่าพยายามเข้าสู่ระบบด้วย "root" ในระบบเข้าสู่ระบบหน้าต่างเปิดใช้งานบัญชีรูทหากมันถูกปิดใช้งานก่อนหน้านี้ เช่นด้วยบัญชีรูทที่ปิดใช้งานคุณต้องป้อนรูทสองครั้งในระบบเข้าสู่ระบบ windows เพื่อเข้าใช้รูทและ (ตามการทดสอบของฉัน) ในครั้งแรกลองเปิดใช้งานบัญชีรูท (ไม่มีรหัสผ่านหากไม่ได้ตั้งค่าผ่านpasswd) และ ในวินาทีที่คุณลองทำ

มันดูเหมือนว่าปัญหาที่ได้รับในการเปิดอย่างน้อยตั้งแต่ 2017/11/13 (13 พฤศจิกายน) เมื่อมีการกล่าวถึงในฟอรั่มการสนับสนุนแอปเปิ้ล

โปรดพิสูจน์ว่าฉันผิดฉันจะขอบคุณจริง ๆ ที่จะผิดตอนนี้

อัพเดทที่น่ากลัว

หลังจากเปิดใช้งานบัญชีรูทที่ไม่มีรหัสผ่าน (เช่นผ่านแผงการตั้งค่าระบบและคลิกที่ "ล็อค" และป้อน "รูท" ด้วยรหัสผ่านที่ว่างเปล่าหนึ่งสองหรือสามครั้ง (จำนวนครั้งขึ้นอยู่กับสถานะเริ่มต้น) มันเป็นไปได้ คอมพิวเตอร์จากหน้าจอเข้าสู่ระบบหลักโดยใช้ "root" และรหัสผ่านว่างเปล่า (!) SSH / Telnet ดูเหมือนจะไม่ทำงาน แต่ Apple Remote Desktop, Screen Sharing และ VNC นั้นมีช่องโหว่

ดังนั้นสำหรับผู้ดูแลระบบเครือข่ายอาจเป็นที่สนใจที่จะวางแพ็กเก็ตชั่วคราวไปยังพอร์ตต่อไปนี้:

  • 5900-5905 (ish, เป็น ninja safe) เพื่อรับพอร์ต VNC ที่ใช้กันทั่วไป VNC เริ่มต้นที่ 5,900 โดยค่าเริ่มต้นและจะนับขึ้นไปหากคุณใช้จอแสดงผลหลายจอ การแชร์หน้าจอและ Apple Remote Desktop ดูเหมือนว่าจะใช้พอร์ตเหล่านี้ ( รายการพอร์ตซอฟต์แวร์ Apple )
  • 3283 และ 5988 สำหรับ Apple Remote Desktop ( รายการพอร์ตซอฟต์แวร์ Apple )

อ่านเพิ่มเติม:

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


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

1
ฉันไม่ใช่คน Mac แต่ในโลก * ห้ามการปิดใช้งานรหัสผ่านรูทไม่ควรมีความปลอดภัยน้อยกว่าการใช้รหัสผ่านที่ปลอดภัย ในความเป็นจริงมันเป็นเรื่องธรรมดามากที่จะปิดการใช้งานรหัสผ่านและการตั้งค่าเปลือกเพื่อ/dev/nullสำหรับรูต ด้วยวิธีนี้การเข้าถึงบัญชีรูทเกิดขึ้นผ่านsusyscalls สำหรับผู้ใช้ที่ได้รับอนุญาต
crasic

1
@crasic AFAIK OSX ทำสิ่งที่แปลกด้วยหน้าต่างเข้าสู่ระบบของพวกเขา เห็นได้ชัดว่าพวกเขาเปิดใช้งานบัญชีโดยทั่วไปหรือเฉพาะเจาะจงหากพยายาม และแทบไม่มีเอกสารเกี่ยวกับพฤติกรรมนี้ โปรดทราบว่าข้อมูลจำเพาะ BSD (เช่นการใช้ commandline / bash) นั้นไม่มีปัญหา
flindeberg

ดังนั้นด้วยคำสั่ง Terminal คุณสามารถตั้งรหัสผ่านรูทได้โดยไม่ต้องเปิดใช้งานรูท ดูเหมือนว่าตัวเลือกที่ปลอดภัยที่สุด
wisbucky

1
@jcm Nah จริงๆแล้วมันไม่ได้เป็นเพียงคำพูดที่แย่มากหลังจากที่ย้ายข้อความไปรอบ ๆ ฉันจะพยายามล้างมันหน่อยดูในนาทีไหม?
flindeberg

10

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

คุณไม่ต้องการปิดใช้งานผู้ใช้รูทบน High Sierra เท่านั้น

เพื่อรักษาความปลอดภัย Mac ของคุณให้เปิดใช้งานรูทด้วยรหัสผ่านที่ปลอดภัยนาน

เราจะไม่เปลี่ยนแปลงสิ่งนี้ในที่ทำงานจนกว่าการปล่อยจุดเต็มถัดไปจะออกสำหรับ macOS ซึ่งน่าจะเป็น 10.13.2


หากคุณไม่ดำเนินการใด ๆ ผู้ใช้รูทจะถูกปิดการใช้งานและไม่ดีถ้า Mac ของคุณไม่ได้รับการแก้ไขอย่างถูกต้อง

หากคุณต้องการให้เลือกเปลือกแข็งจนกว่า Apple มีแพทช์อย่างเป็นทางการหรือแก้ไข

นี่เป็นสคริปต์ที่ยอดเยี่ยมในการตั้งค่ารหัสผ่านรูทแบบสุ่มและเปลี่ยน / ตั้งค่ารูทเชลล์เป็น/usr/bin/falseดังนั้นแม้ว่าจะเดารหัสผ่านได้แล้วรูทเชลล์ก็ไม่สามารถเข้าสู่ระบบได้:

โดยพื้นฐานแล้วมันทำสามสิ่งสำคัญ:

rootpassword=$(openssl rand -base64 32)
/usr/bin/dscl . -passwd /Users/root "$rootpassword"
/usr/bin/dscl . -create /Users/root UserShell /usr/bin/false

UserShell สร้างคือถ้าเปลือกไม่ได้ตั้งค่าและการตรวจสอบสคริปต์เต็มรูปแบบสำหรับเปลือกที่มีอยู่และ-changees มันแทนของ-createไอเอ็นจีมัน

ฉันจะป้องกันตนเองจากช่องโหว่ของรูตใน macOS High Sierra ได้อย่างไร


1
โดยทั่วไปจะไม่เก็บรหัสผ่านไว้ชั่วคราวเช่นนี้ หน้าคน dcsl แสดงให้เห็น "ไม่ได้ให้รหัสผ่านเป็นส่วนหนึ่งของคำสั่งและคุณจะได้รับแจ้งอย่างปลอดภัย"
จอชแคสเวล

1
เห็นด้วย @JoshCaswell - การใช้สคริปต์ดีกว่าเนื่องจากตัวแปรไม่ถูกส่งออกและสร้างขึ้น ข่าวดีก็คือแอปเปิ้ลมีแพทช์อย่างเป็นทางการที่ทำให้แฮ็คนี้มีความจำเป็นในระยะสั้น - เราใช้วิธีนี้เพื่อป้องกันอันตรายจากการเข้ารหัสรหัสผ่านที่เหมือนกันในฝูงบินหรือไม่มีรหัสผ่านเลย แน่นอนว่ามันเป็นการประนีประนอมและไม่ใช่ทางออก
bmike

ด้วยความอยากรู้อย่างแท้จริงทำไมคุณถึงมีลิงค์ไปยังคำถามนี้ในตอนท้ายของคำตอบ?
reirab

1
@ รีแรบสับสนโดยสิ้นเชิง ดูการแก้ไขเพื่อแก้ไขลิงค์ที่ถูกต้อง ขอบคุณ!
bmike


0

คุณต้องเข้าสู่ระบบในฐานะผู้ใช้รูทและเปลี่ยนรหัสผ่านเป็นสิ่งที่ดี หากมันสร้างบัญชีใหม่ (ซึ่งต่างจากการเปิดใช้งานบัญชีรูทที่มีอยู่แล้ว) คุณควรลบบัญชีนั้นก่อน


ดูคำตอบของฉัน คำแนะนำของคุณในการตั้งรหัสผ่านที่รัดกุมนั้นสมเหตุสมผล แต่การปิดใช้งานบัญชีดูเหมือนเป็นการป้องกันที่เข้มงวดยิ่งขึ้นและคืนค่า OS X กลับสู่สถานะเริ่มต้น support.apple.com/en-us/HT204012 การตั้งค่าตัวป้องกันรหัสผ่านที่คาดเดายากจากการใช้ประโยชน์จากข้อบกพร่องที่อธิบายไว้แม้ว่าจะเปิดใช้งานบัญชีรูทแล้วหรือไม่
Freiheit

ใน High Sierra, 10.13.0 และ 10,13.1 คุณไม่ต้องการปิดการใช้งานบัญชีรูท ปัญหาคือว่าถ้ารูทถูกปิดใช้งานและคุณพยายามที่จะใช้หน้าต่างเข้าสู่ระบบใด ๆ เพื่อเข้าสู่ระบบในฐานะรูทหน้าต่างเข้าสู่ระบบจะเปิดใช้งานบัญชีรูทด้วยรหัสผ่านที่ว่างเปล่า หากรูทถูกเปิดใช้งานด้วยรหัสผ่านที่รัดกุมหน้าต่างล็อกอินจะไม่ลบรหัสผ่าน การลดเท่านั้นคือเปิดใช้งานรูทด้วยรหัสผ่านที่คาดเดายาก
Brian Reiter

0

Apple เพิ่งเปิดตัวอัปเดตเพื่อแก้ไขปัญหา

อัปเดตความปลอดภัย 2017-001 https://support.apple.com/th-th/HT208315

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

https://support.apple.com/en-ph/HT204012

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


0

No! อย่าลบบัญชีรูท!

ก่อนอื่นrootมีอยู่ในทุกรุ่นของ macOS, Mac OS X, Mac OS และแม้แต่ระบบปฏิบัติการรุ่นโบราณ macOS ไม่ได้สร้างบัญชีนี้เนื่องจากช่องโหว่ มันเปิดเผยโดยบังเอิญ

การนำออกrootจะเป็นความคิดที่แย่มากและให้ฉันบอกคุณว่า

มันจะทำให้ macOS พิการอย่างสมบูรณ์เนื่องจากจะไม่มีบัญชีที่มีสิทธิ์เพียงพอในการเรียกใช้บริการที่สำคัญ (เช่น WindowServer ซึ่งรัน GUI) มีมาตรการป้องกันเพื่อป้องกันผู้ใช้ที่ไม่มีส่วนเกี่ยวข้องในการลบrootและคุณไม่ควรพยายามเลี่ยงผ่าน

มาดูกันว่าใครเป็นผู้ดำเนินกระบวนการแรกในระบบซึ่งเป็นกระบวนการที่สำคัญที่สุด (โดยใช้การตรวจสอบกิจกรรม):

kernel_task และ launchd ก็เป็นเจ้าของเช่นกัน

เฮ้เป็นย่านที่เป็นมิตรของเราrootอีกครั้ง! ขั้นตอนแรก (กับ PID 0) ถูกควบคุมจริงโดย kernel และอาจจะมีสิทธิ์เต็มรูปแบบอยู่แล้ว แต่กระบวนการเด็กของตนlaunchd(ผู้รับผิดชอบสำหรับการเริ่มต้นการให้บริการเช่นหน้าต่างเข้าสู่ระบบและเซิร์ฟเวอร์หน้าต่างตัวเอง) rootจะเริ่มต้นด้วยสิทธิ์ของ หากrootไม่มีอยู่กระบวนการนี้จะไม่เริ่มต้นขึ้นหรือไม่มีสิทธิ์

การรักษาความปลอดภัยบัญชีรูท

คำตอบอื่น ๆ ได้จัดให้มีโปรแกรมแก้ไขที่ออกโดย Apple ที่ควรแก้ไขปัญหา อย่างไรก็ตามหากคุณไม่สามารถติดตั้งหรือไม่เต็มใจ ...

ใช้งานได้เนื่องจาก macOS แฮชรหัสผ่านที่ป้อนเป็น "อัปเกรด" อีกครั้งเนื่องจากบัญชีที่ถูกปิดใช้งาน (รูท) ตรวจพบอย่างไม่ถูกต้องว่ามีแฮชเก่า มันจะยังบอกว่ามันไม่ถูกต้อง แต่ครั้งต่อไปแฮชจะตรงกัน (เพราะ macOS เปลี่ยนแล้ว) และมันจะให้คุณเข้าไป

เพื่อความปลอดภัยrootคุณจะต้องใช้ Directory Utility มีสองวิธีในการเข้าถึง:

  1. ใช้สปอตไลท์ การเริ่มต้นยูทิลิตี้ของไดเรกทอรีโดยใช้ Spotlight
  2. ใช้ Finder เปิดตัวค้นหากด Command + Shift + G (หรือเลือกป้อนใน/System/Library/CoreServices/Applications/และกดไป (หรือกด Enter) จากนั้นเปิดไดเรกทอรียูทิลิตี้จากที่นั่นเลือกไป การเลือกว่าจะไปที่ไหน กำลังเปิดไดเรกทอรียูทิลิตี้

เมื่อคุณเปิด Directory Utility คุณจะต้อง คลิกที่ล็อคเพื่อทำการเปลี่ยนแปลง

หลังจากคุณทำเสร็จแล้วให้เลือกChange Root PasswordหรือEnable Root Userจากเมนูแก้ไข ฉันแสดงChange Root Passwordเนื่องจากบัญชีหลักของฉันเปิดใช้งานด้วยรหัสผ่านที่คาดเดายาก

เลือกเปลี่ยนรหัสผ่านรูท

เลือกรหัสผ่านและตอนนี้รหัสผ่านเปล่าจะไม่ทำงานอีกต่อไป

การเลือกรหัสผ่าน

ขอแสดงความยินดี! คุณจะไม่เสี่ยงกับการแฮ็ครากอีกต่อไป


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

ดูที่target-see.com/blog/blog_0x24.htmlสำหรับการวิเคราะห์สาเหตุ
ชาร์ลส์ดัฟฟี่

ใช่ - การเก็งกำไรของฉันไม่ถูกต้อง ดังนั้นจึงแฮรหัสผ่านว่างเปล่าเป็น "อัพเกรด" อีกครั้งเนื่องจากบัญชีที่ถูกปิดการใช้งานถูกตรวจพบอย่างไม่ถูกต้องว่ามีแฮชเก่าหรือไม่ ฉันถูกไหม?
Dev

ในทางทฤษฎีสิ่งที่ควรทำใน codepath นี้คือตรวจสอบว่าอัลกอริทึมแฮชเก่าตรวจสอบรหัสผ่านที่ป้อนแล้วอัปเดตด้วยแฮชใหม่ (ของรหัสผ่านที่ป้อนซึ่งเป็นที่รู้กันว่าตรงกับรหัสเก่า) ในทางปฏิบัติจะไม่ตรวจสอบข้อผิดพลาดจากฟังก์ชันที่ควรเรียกแฮชเก่าจากฟิลด์ "ShadowHash" (หรือค่อนข้างจะตรวจสอบเฉพาะค่าที่ส่งคืน แต่ไม่ใช่ค่าที่ส่งผ่านโดยอ้างอิงที่ใช้เพื่อส่งคืน ผลลัพธ์การเปรียบเทียบ) แล้วสร้างแฮชใหม่จากรหัสผ่าน (ว่างเปล่าหรือไม่!)
Charles Duffy

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