System Keychain được bảo mật như thế nào trong OS X?


22

Tôi đang tìm kiếm thứ gì đó giống như sách trắng bảo mật này cho iOS ngoại trừ OS X hoặc thậm chí tốt hơn, một loại báo cáo kiểm toán bảo mật từ một chuyên gia độc lập. Sau khi đọc qua tài liệu như Hướng dẫn lập trình dịch vụ Keychain, tôi càng bối rối hơn về những gì dễ bị tấn công bất lợi đối với bản sao lưu không được mã hóa của Hệ thống OS X.

Lần trước tôi đã kiểm tra, móc khóa đăng nhập của người dùng trong OS X cũng an toàn như mật khẩu. Tôi nhớ lại một số vấn đề làm giảm tính bảo mật thực sự của khóa thành thứ gì đó như 111 bit (bộ nhớ mờ, xin vui lòng sửa cho tôi) do một số vấn đề về cách chuyển đổi mật khẩu thành khóa, nhưng đó là một thời gian dài trước đây và hy vọng điều đó đã được sửa chữa.

Mặt khác, tôi đã được bảo rằng System Keychain vốn đã kém an toàn hơn bởi vì bất kỳ quản trị viên nào cũng có thể truy cập nó và kẻ xâm nhập có nhiều tùy chọn để trở thành quản trị viên bên cạnh việc đoán mật khẩu của một người dùng.

Cụ thể, tôi lo lắng về việc lưu trữ mật khẩu được sử dụng trong các tập lệnh tự động trong System Keychain vì các tệp hệ thống được sao lưu và lưu trữ ngoài trang web mà không cần mã hóa thêm. Tài liệu và dữ liệu người dùng khác được mã hóa trước khi được đưa ra khỏi trang web, nhưng tôi có một nghi ngờ dai dẳng rằng có một con đường tôi đang tìm kiếm để phục hồi các khóa đó một khi System Keychain bị xâm phạm (do thủ tục của chúng tôi, không nhất thiết là bất kỳ sai sót về mật mã nào) . Vì vậy, tôi muốn có một sự hiểu biết thấu đáo về cách Hệ thống Keychain được bảo mật đồng thời nhưng vẫn có thể truy cập được đối với bất kỳ quản trị viên nào.

  1. Làm thế nào các khóa được kiến ​​trúc sao cho bất kỳ người dùng quản trị nào cũng có thể mở khóa System Keychain?

  2. Có giới hạn mật mã nào giới hạn những gì người dùng quản trị có thể làm với thông tin trong System Keychain theo bất kỳ cách nào không?

  3. Với một bản sao lưu hệ thống không được mã hóa mà không có /Users , làm thế nào bạn có thể truy cập vào các khóa trong System Keychain?

Tôi quan tâm đến OS X 10.5 Leopard và các phiên bản mới hơn.


Tôi không có câu trả lời, nhưng một giai thoại: với tư cách là người dùng chuẩn không có đặc quyền quản trị viên, tôi đã có thể trích xuất mật khẩu từ móc khóa Hệ thống một cách dễ dàng. Tôi không nhớ các bước chính xác, nhưng chắc chắn là có thể. Bên cạnh đó, điều này có thể tốt hơn trên security.stackexchange.com ?
alexwlchan

@Alex, tôi đã thử Security.SE trước, nhưng không có câu trả lời nào ở đó.
Old Pro

1
Tại sao không sử dụng một móc khóa riêng hoàn toàn cho những gì bạn đang làm? Có một lý do chính đáng để tập lệnh của bạn cần truy cập vào móc khóa hệ thống?
Jay Thompson

@eyemyth, vâng, các tập lệnh cần được chạy bởi hệ thống để chúng có thể truy cập tất cả các tệp trên đĩa bất kể quyền của người dùng.
Old Pro

Câu trả lời:


11

Móc khóa hệ thống được lưu trữ /Library/Keychains/System.keychainvà khóa để mở khóa được lưu trữ /var/db/SystemKey(quyền truy cập tệp mặc định của nó chỉ có thể đọc được bằng root). Vị trí của các tệp này được tham chiếu trong tập lệnh bảo mật-hệ thống kiểm tra (từ nguồn security_systemkeychain ). Thậm chí có thể kiểm tra khóa / mở khóa tự động của móc khóa hệ thống bằng cách sử dụng

systemkeychain -vt

Khung bảo mật móc khóa cho phép các chương trình không có đặc quyền đưa ra yêu cầu cung cấp thông tin với điều kiện chúng nằm trong ACL được lưu trữ trong mục nhập móc khóa. Rõ ràng nếu người dùng đã root họ trên một hệ thống, họ có thể truy cập trực tiếp cả tệp lưu trữ móc khóa hệ thống và khóa để mở khóa, do đó họ không đưa ra yêu cầu thông qua khung bảo mật và không được lưu ý đến ACL được lưu trữ trong móc khóa chinh no.

(Tôi đã không thực sự trả lời các câu hỏi ban đầu vì vậy hãy thử lại lần nữa)

Làm thế nào các khóa được kiến ​​trúc sao cho bất kỳ người dùng quản trị nào cũng có thể mở khóa System Keychain?

Các khuôn khổ libsecurity keychain cho phép quá trình thường xuyên tương tác với hệ thống móc chìa khóa một cách chứng thực sử dụng khuôn khổ truyền thông của Apple XPC interprocess (IPC).

Chương trình A gửi yêu cầu truy cập thông tin móc khóa hệ thống bằng IPC. Một kiểm tra được thực hiện rằng người dùng yêu cầu đã ở trong nhóm bánh xe và cũng biết mật khẩu của người dùng trong nhóm bánh xe. Khi ủy quyền được xác nhận, kcproxydaemon đặc quyền có thể được sử dụng để truy cập tài liệu vào /var/db/SystemKey, mở khóa móc khóa hệ thống và trả về thông tin được yêu cầu.

Có giới hạn mật mã nào giới hạn những gì người dùng quản trị có thể làm với thông tin trong System Keychain theo bất kỳ cách nào không?

Không - người dùng quản trị được phép truy cập / thay đổi bất cứ thứ gì trong móc khóa hệ thống. Ngay cả khi họ không thể, họ có thể sao chép các tệp bên dưới sang một máy khác mà họ có toàn quyền kiểm soát và chỉ cần mở khóa / truy cập vào đó.

Đưa ra một bản sao lưu hệ thống không được mã hóa mà không có / Người dùng, làm thế nào bạn có thể truy cập vào các khóa trong System Keychain?

Nếu bản sao lưu chứa các bản sao /Library/Keychains/System.keychain/var/db/SystemKeysau đó tôi sẽ sao chép chúng vào các vị trí tương ứng của chúng trên hệ thống OS X mới và sử dụng systemkeychainđể mở khóa sau và hủy cơ sở dữ liệu móc khóa bằng cách sử dụng security dump-keychain.


1
Có một tiện ích được gọi là dumpkeychain từ GuidanceSoftware / EnCase, cho phép kết xuất trực tiếp một móc khóa hệ thống (với SystemKey) trong Windows (có thể dễ dàng hơn so với thiết lập cài đặt OS X mới để kết xuất nó).
drfrogsplat

1
@Anon, làm cách nào tôi có thể sử dụng thông tin trên để truy cập / mở khóa / kết xuất System.keychain từ bản sao lưu Time Machine của một máy tính khác? Đó là, tôi có System.keychain và SystemKey được lưu trữ trên một đĩa bên ngoài nên tôi đoán tôi phải chỉ định đường dẫn cho cả hai tệp tương ứng để tránh việc nó sử dụng các tệp ở vị trí mặc định.
db

Bài đăng này có liên quan (cách sử dụng SystemKey để giải mã System.keychain từ một hệ thống cũ). apple.stackexchange.com/questions/307189/... Tôi tò mò nếu có một cách với Keychain Access hoặc systemkeychain cli để mở khóa một hồi System.keychain (tức là từ một tuổi rơi HDD) với SystemKey tương ứng từ cùng cài đặt. Mục tiêu của tôi là mở khóa và di chuyển thông tin đăng nhập vào móc khóa Hệ thống mới trên bản cài đặt mới.
mattpr

5

Móc khóa hệ thống

System Keychain có một số khả năng độc đáo. Chúng được ghi lại bởi trang hướng dẫn systemkeychain . Các đề cập đến mật khẩu chủ có thể là trọng tâm của bạn. Các hệ thống móc chìa khóa mã nguồn cụ thể là nhỏ và có sẵn.

System Keychain, /System/Library/Keychains/System.keychainlà một Keychain đặc biệt để Apple và daemon sử dụng. Bạn thường nên tránh sử dụng nó cho các kịch bản cấp người dùng.

Đánh giá mã: Keychain

Apple đã xuất bản mã nguồn cho Keychain và khung bảo mật cho Mac OS X 10.5; bạn có thể xem lại mã này để khám phá cách nó hoạt động.

Phương pháp thay thế: Keychain riêng

Bạn có thể tạo một Keychain riêng để lưu thông tin đăng nhập của tập lệnh. Chúng tôi đề nghị thực hành này cho khách hàng của chúng tôi. Bạn có thể sử dụng bảo mật công cụ dòng lệnh để truy cập, trích xuất và quản lý Keychains của mình mà không cần dùng đến giao diện đồ họa.

Cân nhắc lưu trữ mật khẩu cho các tập lệnh tự động của bạn trong một Keychain riêng - và loại trừ Keychain này khỏi bản sao lưu ngoài trang web của bạn.

Tôi đánh giá cao việc loại bỏ Keychain khỏi bản sao lưu của bạn là không lý tưởng nhưng nó sẽ giải quyết mối quan tâm của bạn. Khi khôi phục máy Mac, bạn cần lấy lại Keychain từ một nguồn khác; có thể là nguồn đáng tin cậy hơn hoặc kênh bên.

Bạn luôn có thể lưu trữ mật khẩu của Keychain riêng biệt trong System Keychain. Sau đó, bạn có thể mở khóa Keychain riêng biệt từ một tập lệnh. Nếu sao lưu bị tấn công, bạn sẽ chỉ hiển thị mật khẩu cho Keychain riêng biệt chứ không phải chính Keychain vì tệp này không có bản sao lưu ngoài trang web.


Cảm ơn, nhưng thật khó cho tôi để tìm ra tất cả các mã đó về cách System Keychain được bảo mật và điều gì giữ an toàn. Chúng tôi cần sử dụng System Keychain vì chúng tôi cần các tập lệnh được chạy tự động trong nền với các đặc quyền gốc bất kể ai đã đăng nhập.
Old Pro

1
Tôi khuyên bạn nên hỏi trong danh sách gửi thư của Apple CDSA ( lists.apple.com/mailman/listinfo/apple-cdsa ) hoặc sử dụng Sự cố Hỗ trợ Kỹ thuật của Apple. Chỉ thông qua các phương tiện này, bạn có thể đảm bảo bạn sẽ tiếp cận được các kỹ sư Apple thích hợp.
Graham Miln

Có các kịch bản chạy trong nền là root là công việc của launchd. Chính xác những gì bạn đang cố gắng để làm?
Jay Thompson

1
Lỗi đánh máy nhỏ trong "/ System / L Library / Keychains / System.keychain" (Bạn đã quên "Thư viện"). Trên thực tế, bạn có thể nhận danh sách các vị trí móc khóa trong Truy cập Keychain bằng cách chọn "Chỉnh sửa> Danh sách Keychain"
tên người dùng

1
@OldPro Với những lo ngại về bảo mật của bạn, tại sao không sử dụng mã hóa toàn bộ đĩa?
Graham Miln

2

Apple gần đây đã xuất bản một tài liệu phác thảo các thực tiễn bảo mật của nó , bạn có thể tìm thấy một số câu trả lời ở đó. Tài liệu dành riêng cho iOS nhưng rất nhiều tính năng bảo mật có nhiều điểm tương đồng với OS X.


Đây là một hướng đi đúng đắn và là một ví dụ điển hình về loại tài liệu tôi sẽ thấy hữu ích, nhưng iOS không có khái niệm về System Keychain nên nó không trả lời câu hỏi của tôi.
Old Pro

Rất vui khi chấp nhận tiền thưởng của bạn nếu điều này giúp bạn đi đúng hướng ;-)
demianturner

0

Tôi không có kiến ​​thức cụ thể về Keychain * nhưng đây là cách thực hành khá chuẩn.

  1. Bạn muốn bảo vệ tập tin văn bản đơn giản "foo". Foo có thể có kích thước tùy ý.
  2. Tạo một khóa đối xứng để mã hóa foo.
  3. Mã hóa khóa đối xứng bằng một khóa được gieo từ cụm mật khẩu.

Khi đã xong, bạn có thể thay đổi "mật khẩu" bằng cách nhập cụm mật khẩu hiện tại, giải mã khóa đối xứng và sau đó mã hóa nó bằng cụm mật khẩu mới. Điều này tránh quá trình giải mã / mã hóa kéo dài trong trường hợp "foo" rất lớn.

Vậy làm thế nào để nó hoạt động cho nhiều người dùng cần truy cập vào bản rõ của foo? Thực sự khá dễ dàng, bạn chỉ cần tạo một bản sao được mã hóa của khóa đối xứng một lần cho mỗi người dùng. Nói cách khác, làm bước ba cho mỗi người dùng.

Trong thực tế, tất cả những điều này được trừu tượng hóa khỏi tầm nhìn và người dùng cuối chỉ cần xử lý mật khẩu của riêng họ.

Đối với phần 3 của câu hỏi của bạn, khóa của người dùng không được lưu trữ trong nhà của họ. Họ rất có thể sẽ được lưu trữ ở /private/varmột nơi nào đó. Vì vậy, ngay cả khi không có /Usersai đó trước đây có quyền truy cập sẽ có thể mở khóa hệ thống.


* Có thể là Keychain hoạt động khác nhau.


Điểm khác biệt của móc khóa hệ thống là hệ thống có thể truy cập vào những gì trên móc khóa bất kể ai đã đăng nhập. Ví dụ: Time Machine có thể truy cập móc khóa hệ thống để gắn kết chia sẻ tệp từ xa, ngay cả khi người dùng duy nhất đăng nhập không phải là một người dùng quản trị và do đó không thể truy cập vào hệ thống móc khóa. Vì vậy, một cái gì đó khác đang diễn ra, và tôi muốn biết chính xác đó là gì.
Old Pro

Một lần nữa, tôi chỉ có thể phỏng đoán, nhưng IMO nó thực sự không khác nhau. Bản thân hệ thống rõ ràng có thể lấy chìa khóa, điều đó được cấp. Tôi cho rằng có một khóa hệ thống được xử lý tương tự như khóa người dùng. Nhưng bây giờ chúng tôi là trung tâm của câu hỏi của bạn, điều gì cung cấp quyền truy cập đầu tiên?
bahamat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.