พวงกุญแจระบบรักษาความปลอดภัยใน OS X อย่างไร


22

ฉันกำลังมองหาบางอย่างเช่นกระดาษสีขาวเพื่อความปลอดภัยนี้สำหรับ iOSยกเว้น OS X หรือดีกว่ารายงานการตรวจสอบความปลอดภัยบางอย่างจากผู้เชี่ยวชาญอิสระ หลังจากอ่านเอกสารเช่นคู่มือการเขียนโปรแกรม Keychain Servicesฉันยิ่งสับสนมากขึ้นเกี่ยวกับสิ่งที่เสี่ยงต่อการถูกโจมตีจากฝ่ายตรงข้ามในการสำรองข้อมูลที่ไม่ได้เข้ารหัสของระบบ OS X

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

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

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

  1. คีย์ได้รับการออกแบบให้ผู้ใช้ที่เป็นผู้ดูแลระบบสามารถปลดล็อก System Keychain ได้อย่างไร?

  2. มีข้อ จำกัด การเข้ารหัสลับที่ จำกัด ผู้ใช้ที่เป็นผู้ดูแลระบบสามารถทำอะไรกับข้อมูลใน System Keychain ในทางใดทางหนึ่งหรือไม่?

  3. ได้รับการสำรองข้อมูลระบบที่ไม่ได้เข้ารหัสโดยไม่มี /Usersคุณจะเข้าถึงคีย์ใน System Keychain ได้อย่างไร

ฉันสนใจ OS X 10.5 Leopard และรุ่นที่ใหม่กว่า


ฉันไม่ได้รับคำตอบ แต่เป็นเกร็ดเล็กเกร็ดน้อย: ในฐานะผู้ใช้มาตรฐานที่ไม่มีสิทธิ์ของผู้ดูแลระบบฉันสามารถแยกรหัสผ่านจากพวงกุญแจระบบได้อย่างง่ายดาย ฉันจำขั้นตอนไม่ได้ แต่ก็เป็นไปได้อย่างแน่นอน สังเกตด้านบนนี้อาจจะดีขึ้นในsecurity.stackexchange.com ?
alexwlchan

@Alex ฉันลอง Security.SE ก่อน แต่ไม่มีคำตอบ
โปรเก่า

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

@eyemyth ใช่สคริปต์จะต้องเรียกใช้โดยระบบเพื่อให้สามารถเข้าถึงไฟล์ทั้งหมดบนดิสก์โดยไม่คำนึงถึงสิทธิ์ของผู้ใช้
โปรเก่า

คำตอบ:


11

พวงกุญแจของระบบจะถูกเก็บไว้ใน/Library/Keychains/System.keychainและกุญแจเพื่อปลดล็อคมันถูกเก็บไว้ใน/var/db/SystemKey(รากอนุญาตเริ่มต้นของไฟล์ที่สามารถอ่านได้โดยรากเท่านั้น) ตำแหน่งของไฟล์เหล่านี้ถูกอ้างถึงในสคริปต์ระบบความปลอดภัย - ตรวจสอบ (จากแหล่ง security_systemkeychain ) มันเป็นไปได้ที่จะทดสอบการล็อค / ปลดล็อคพวงกุญแจระบบโดยอัตโนมัติด้วยการใช้

systemkeychain -vt

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

(ฉันไม่ได้ตอบคำถามเดิมจริง ๆ แล้วลองอีกครั้ง)

คีย์ได้รับการออกแบบให้ผู้ใช้ที่เป็นผู้ดูแลระบบสามารถปลดล็อก System Keychain ได้อย่างไร?

กรอบ libsecurity พวงกุญแจช่วยให้กระบวนการปกติในการโต้ตอบกับระบบพวงกุญแจในลักษณะที่รับรองความถูกต้องโดยใช้กรอบการสื่อสารของ Apple XPC จัดสรร (IPC)

โปรแกรม A ส่งคำขอเพื่อเข้าถึงข้อมูลระบบพวงกุญแจโดยใช้ IPC มีการตรวจสอบว่าผู้ใช้ที่ร้องขออยู่ในกลุ่มล้อและยังรู้รหัสผ่านของผู้ใช้ในกลุ่มล้อ เมื่อยืนยันการให้สิทธิ์แล้วkcproxydaemon ที่มีสิทธิ์สามารถใช้เพื่อเข้าถึงเนื้อหาใน/var/db/SystemKeyปลดล็อกพวงกุญแจระบบและส่งคืนข้อมูลที่ร้องขอ

มีข้อ จำกัด การเข้ารหัสลับที่ จำกัด ผู้ใช้ที่เป็นผู้ดูแลระบบสามารถทำอะไรกับข้อมูลใน System Keychain ในทางใดทางหนึ่งหรือไม่?

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

ได้รับการสำรองข้อมูลระบบที่ไม่มีการเข้ารหัสโดยไม่มี / ผู้ใช้คุณจะเข้าถึงคีย์ใน System Keychain ได้อย่างไร

หากการสำรองข้อมูลที่มีสำเนา/Library/Keychains/System.keychainและ/var/db/SystemKeyแล้วฉันจะคัดลอกไปยังสถานที่ของตนบนระบบ OS X ใหม่และการใช้งานที่จะทำให้การปลดล็อคต่อมาในอดีตและการถ่ายโอนฐานข้อมูลโดยใช้พวงกุญแจsystemkeychainsecurity dump-keychain


1
มียูทิลิตี้ที่ชื่อdumpkeychainจาก GuidanceSoftware / EnCase ที่อนุญาตให้ถ่ายโอนข้อมูลโดยตรงของพวงกุญแจระบบ (ด้วย SystemKey) ใน Windows (อาจจะง่ายกว่าการตั้งค่าการติดตั้ง OS X ใหม่เพื่อถ่ายโอนข้อมูล)
drfrogsplat

1
@ ไม่ฉันจะใช้ข้อมูลข้างต้นเพื่อเข้าถึง / ปลดล็อค / ถ่ายโอนข้อมูล System.keychain จากการสำรองข้อมูล Time Machine ของคอมพิวเตอร์เครื่องอื่นได้อย่างไร นั่นคือฉันมี System.keychain และ SystemKey เก็บไว้ในดิสก์ภายนอกดังนั้นฉันเดาว่าฉันต้องระบุพา ธ ไปยังไฟล์ทั้งสองตามลำดับเพื่อหลีกเลี่ยงการใช้ไฟล์ในตำแหน่งเริ่มต้น
db

โพสต์นี้เกี่ยวข้อง (วิธีการใช้ SystemKey เพื่อถอดรหัส System.keychain จากระบบเก่า) apple.stackexchange.com/questions/307189/ … ฉันอยากรู้ว่ามีทางเข้า Keychain หรือ systemkeychain cli เพื่อปลดล็อก System.keychain ที่กู้คืนมา (เช่นจาก HDD เก่าที่เสียหาย) ด้วย SystemKey ที่สอดคล้องกันจากการติดตั้งเดียวกัน เป้าหมายของฉันคือปลดล็อคและโอนย้ายการเข้าสู่ระบบพวงกุญแจระบบใหม่ในการติดตั้งใหม่
mattpr

5

พวงกุญแจระบบ

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

System Keychain /System/Library/Keychains/System.keychainเป็นพวงกุญแจพิเศษสำหรับ Apple และ daemons ที่จะใช้ โดยทั่วไปคุณควรหลีกเลี่ยงการใช้สคริปต์ระดับผู้ใช้

รีวิวรหัส: พวงกุญแจ

Apple เผยแพร่ซอร์สโค้ดสำหรับ Keychainและ Framework ความปลอดภัยสำหรับ Mac OS X 10.5; คุณสามารถตรวจสอบรหัสนี้เพื่อค้นหาวิธีการทำงาน

วิธีการทางเลือก: พวงกุญแจแยก

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

พิจารณาการจัดเก็บรหัสผ่านสำหรับสคริปต์อัตโนมัติของคุณใน Keychain ที่แยกต่างหาก - และแยก Keychain นี้ออกจากการสำรองนอกไซต์ของคุณ

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

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


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

1
ฉันขอแนะนำให้ถามในรายชื่อผู้รับจดหมายของ Apple CDSA ( lists.apple.com/mailman/listinfo/apple-cdsa ) หรือใช้เหตุการณ์การสนับสนุนทางเทคนิคของ Apple ด้วยวิธีการเหล่านี้คุณสามารถมั่นใจได้ว่าคุณจะเข้าถึงวิศวกรของ Apple ที่เหมาะสม
Graham Miln

การให้สคริปต์ทำงานในพื้นหลังเนื่องจากรูทเป็นงานของ launchd คุณพยายามทำอะไร
Jay Thompson

1
ตัวพิมพ์เล็กใน "/System/Library/Keychains/System.keychain" (คุณลืม "Library") ที่จริงแล้วคุณสามารถรับรายการตำแหน่งพวงกุญแจใน Keychain Access ได้โดยเลือก "แก้ไข> รายการพวงกุญแจ"
ชื่อผู้ใช้

1
@OldPro จากความกังวลด้านความปลอดภัยของคุณทำไมไม่ใช้การเข้ารหัสดิสก์แบบเต็ม?
เกรแฮมมิลน์

2

Apple เพิ่งเผยแพร่เอกสารที่สรุปแนวทางปฏิบัติด้านความปลอดภัยคุณอาจพบคำตอบที่นั่น เอกสารนี้ใช้เฉพาะกับ iOS แต่มีคุณสมบัติความปลอดภัยจำนวนมากที่เหมือนกับ OS X


นี่เป็นแนวทางที่ถูกต้องและเป็นตัวอย่างที่ดีของประเภทเอกสารที่ฉันจะพบว่ามีประโยชน์ แต่ iOS ไม่มีแนวคิดของ System Keychain จึงไม่ตอบคำถามของฉัน
โปรเก่า

มีความสุขที่จะยอมรับเงินรางวัลของคุณหากสิ่งนี้ทำให้คุณไปในทิศทางที่ถูกต้อง ;-)
demianturner

0

ฉันไม่มีความรู้เฉพาะเกี่ยวกับ Keychain * แต่นี่เป็นวิธีปฏิบัติที่ค่อนข้างเป็นมาตรฐาน

  1. คุณต้องการปกป้องไฟล์ข้อความธรรมดา "foo" ฟูอาจมีขนาดที่กำหนดเอง
  2. สร้างคีย์สมมาตรเพื่อเข้ารหัส foo
  3. เข้ารหัสคีย์ symmetric ด้วยคีย์ที่ seeded จากวลีรหัสผ่าน

เมื่อเสร็จแล้วคุณสามารถเปลี่ยน "รหัสผ่าน" โดยป้อนรหัสผ่านปัจจุบันถอดรหัสรหัสสมมาตรแล้วเข้ารหัสด้วยรหัสผ่านใหม่ วิธีนี้จะช่วยหลีกเลี่ยงกระบวนการถอดรหัสลับ / การเข้ารหัสที่มีความยาวในกรณีที่ "foo" มีขนาดใหญ่มาก

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

ในทางปฏิบัติสิ่งเหล่านี้ถูกแยกออกจากมุมมองและผู้ใช้ต้องจัดการกับรหัสผ่านของตนเองเท่านั้น

ในส่วนที่ 3 ของคำถามของคุณคีย์ของผู้ใช้จะไม่ถูกเก็บไว้ในบ้าน พวกเขาส่วนใหญ่จะถูกเก็บไว้ใน/private/varบางแห่ง ดังนั้นแม้จะไม่มี/Usersใครที่เคยเข้าถึงก็สามารถปลดล็อคระบบได้


* เป็นไปได้ว่า Keychain ทำงานแตกต่างกัน


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

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