Bagaimana Sistem Keychain diamankan di OS X?

22

Saya mencari sesuatu seperti kertas putih keamanan ini untuk iOS kecuali untuk OS X atau bahkan lebih baik, semacam laporan audit keamanan dari pakar independen. Setelah membaca dokumentasi seperti Panduan Pemrograman Layanan Keychain, saya bahkan lebih bingung tentang apa yang rentan terhadap serangan permusuhan pada cadangan yang tidak terenkripsi dari Sistem OS X.

Terakhir kali saya periksa, gantungan kunci login pengguna di OS X hampir seaman kata sandi. Saya ingat beberapa masalah yang mengecilkan kerahasiaan kunci untuk sesuatu seperti 111 bit (memori berkabut, jangan ragu untuk mengoreksi saya) karena beberapa masalah dengan bagaimana kata sandi dikonversikan menjadi kunci, tetapi itu sudah lama sekali dan semoga itu sudah diperbaiki.

Di sisi lain, saya telah diberitahu bahwa Keychain Sistem secara inheren kurang aman karena administrator dapat mengaksesnya dan penyusup memiliki banyak pilihan untuk menjadi administrator selain menebak kata sandi satu pengguna.

Khususnya, saya khawatir tentang menyimpan kata sandi yang digunakan dalam skrip otomatis di Keychain Sistem karena file sistem dicadangkan dan disimpan di luar situs tanpa enkripsi lebih lanjut. Dokumen dan data pengguna lainnya dienkripsi sebelum dibawa keluar-situs, tetapi saya memiliki kecurigaan yang mengganggu bahwa ada jalan yang saya lewati yang memulihkan kunci-kunci tersebut setelah Sistem Keychain dikompromikan (karena prosedur kami, tidak harus ada kekurangan kriptografi) . Jadi saya ingin memiliki pemahaman menyeluruh tentang bagaimana Keychain Sistem secara bersamaan diamankan namun dapat diakses oleh administrator mana pun.

  1. Bagaimana kunci dibuat sedemikian rupa sehingga setiap pengguna administratif dapat membuka kunci Sistem Keychain?

  2. Apakah ada batasan kriptografi yang membatasi apa yang dapat dilakukan oleh pengguna administratif dengan informasi di System Keychain?

  3. Diberikan cadangan sistem yang tidak terenkripsi tanpa /Users , bagaimana Anda mendapatkan akses ke kunci di System Keychain?

Saya tertarik dengan OS X 10.5 Leopard dan versi yang lebih baru.

Pro tua
sumber
Saya tidak punya jawaban, tetapi sebuah anekdot: sebagai pengguna standar tanpa hak admin, saya pernah bisa mengekstrak kata sandi dari gantungan kunci Sistem dengan relatif mudah. Saya tidak ingat langkah pastinya, tapi itu pasti mungkin. Di samping catatan, mungkin ini lebih baik di security.stackexchange.com ?
alexwlchan
@ Alex, saya mencoba Security.SE pertama, tetapi tidak mendapat jawaban di sana.
Old Pro
1
Mengapa tidak menggunakan gantungan kunci terpisah sama sekali untuk apa yang Anda lakukan? Apakah ada alasan yang bagus mengapa skrip Anda memerlukan akses ke gantungan kunci sistem?
Jay Thompson
@ ya, ya, skrip harus dijalankan oleh sistem sehingga mereka dapat mengakses semua file pada disk terlepas dari izin pengguna.
Old Pro

Jawaban:

11

Keychain sistem disimpan /Library/Keychains/System.keychaindan kunci untuk membukanya disimpan /var/db/SystemKey(izin file default-nya hanya dapat dibaca oleh root). Lokasi file-file ini direferensikan dalam skrip security-checksystem (dari sumber security_systemkeychain ). Bahkan dimungkinkan untuk menguji penguncian / pembukaan kunci otomatis sistem keychain dengan menggunakan

systemkeychain -vt

Kerangka keamanan gantungan kunci memungkinkan program yang tidak memiliki hak istimewa untuk membuat permintaan informasi asalkan mereka berada di ACL yang disimpan dalam entri gantungan kunci. Jelas jika seorang pengguna telah melakukan root pada suatu sistem, mereka dapat secara langsung mengakses file yang menyimpan gantungan kunci sistem dan kunci untuk membukanya, sehingga mereka tidak harus membuat permintaan melalui kerangka kerja keamanan dan tidak terikat pada ACL yang disimpan dalam gantungan kunci. diri.

(Saya tidak benar-benar menjawab pertanyaan asli jadi mari kita lanjutkan ini)

Bagaimana kunci dibuat sedemikian rupa sehingga setiap pengguna administratif dapat membuka kunci Sistem Keychain?

The kerangka libsecurity keychain memungkinkan proses biasa untuk berinteraksi dengan sistem gantungan kunci dengan cara yang dikonfirmasi menggunakan kerangka komunikasi Apple XPC interprocess (IPC).

Program A mengirimkan permintaan untuk mengakses informasi gantungan kunci sistem menggunakan IPC. Pemeriksaan dilakukan bahwa pengguna yang meminta sudah ada di grup wheel dan juga tahu kata sandi pengguna di grup wheel. Setelah otorisasi dikonfirmasi, kcproxydaemon privilege dapat digunakan untuk mengakses materi /var/db/SystemKey, membuka kunci sistem dan mengembalikan informasi yang diminta.

Apakah ada batasan kriptografi yang membatasi apa yang dapat dilakukan oleh pengguna administratif dengan informasi di System Keychain?

Tidak - pengguna administratif diizinkan untuk mengakses / mengubah apa pun di gantungan kunci sistem. Bahkan jika mereka tidak bisa, mereka dapat menyalin file yang mendasarinya ke mesin lain di mana mereka memiliki kontrol penuh dan hanya membuka / mengaksesnya di sana.

Diberikan cadangan sistem yang tidak terenkripsi tanpa / Pengguna, bagaimana Anda mendapatkan akses ke kunci di System Keychain?

Jika cadangan berisi salinan /Library/Keychains/System.keychaindan /var/db/SystemKeykemudian saya akan menyalinnya ke lokasi masing-masing pada sistem OS X baru dan gunakan systemkeychainuntuk membuat yang kemudian membuka bekas dan membuang basis data gantungan kunci menggunakan security dump-keychain.

Segera
sumber
1
Ada utilitas yang disebut dumpkeychain dari GuidanceSoftware / EnCase, yang memungkinkan pembuangan langsung dari gantungan kunci sistem (dengan SystemKey) di Windows (mungkin lebih mudah daripada menyiapkan instalasi OS X baru untuk membuangnya).
drfrogsplat
1
@ Anon, bagaimana saya bisa menggunakan informasi di atas untuk mengakses / membuka / membuang System.keychain dari cadangan Time Machine dari komputer lain? Yaitu, saya memiliki System.keychain dan SystemKey disimpan pada disk eksternal jadi saya kira saya harus menentukan path masing-masing file untuk menghindari menggunakan file di lokasi default.
db
Posting ini terkait (cara menggunakan SystemKey untuk mendekripsi System.keychain dari sistem lama). apple.stackexchange.com/questions/307189/... Saya ingin tahu apakah ada cara dengan Keychain Access atau systemkeychain cli untuk membuka kunci System.keychain yang dipulihkan (yaitu dari HDD yang rusak lama) dengan SystemKey yang sesuai dari instalasi yang sama. Tujuan saya adalah membuka kunci dan memigrasikan login ke keychain Sistem baru pada instalasi baru.
mattpr
5

Sistem Keychain

System Keychain memiliki beberapa kemampuan unik. Ini didokumentasikan oleh halaman manual key rantai . Sebutan kata sandi master cenderung menjadi fokus Anda. The sistem gantungan kunci kode sumber tertentu kecil dan tersedia.

System Keychain,, /System/Library/Keychains/System.keychainadalah Keychain khusus untuk Apple dan daemon yang digunakan. Anda umumnya harus menghindari menggunakannya untuk skrip tingkat pengguna.

Ulasan Kode: Gantungan Kunci

Apple menerbitkan kode sumber untuk Keychain dan kerangka kerja keamanan untuk Mac OS X 10.5; Anda dapat meninjau kode ini untuk mengetahui cara kerjanya.

Pendekatan Alternatif: Gantungan Kunci Terpisah

Anda dapat membuat Keychain terpisah untuk menyimpan kredensial skrip Anda. Kami merekomendasikan praktik ini kepada pelanggan kami. Anda dapat menggunakan keamanan alat baris perintah untuk mengakses, mengekstrak, dan mengelola Gantungan Kunci Anda tanpa menggunakan antarmuka grafis.

Pertimbangkan menyimpan kata sandi untuk skrip otomatis Anda di Gantungan Kunci terpisah - dan kecualikan Gantungan Kunci ini dari cadangan di luar situs Anda.

Saya menghargai menghapus Keychain dari cadangan Anda tidak ideal tetapi itu akan mengatasi masalah Anda. Saat memulihkan Mac, Anda harus mendapatkan Keychain kembali dari sumber yang berbeda; mungkin sumber atau saluran samping yang lebih tepercaya.

Anda selalu dapat menyimpan kata sandi Keychain terpisah di Keychain Sistem. Anda kemudian dapat membuka Keychain terpisah dari skrip. Jika back-up diserang, Anda hanya akan mengekspos password ke Keychain terpisah dan bukan Keychain itu sendiri karena file ini tidak dengan back-up di luar situs.

Graham Miln
sumber
Terima kasih, tetapi terlalu sulit bagi saya untuk mengetahui dari semua kode itu bagaimana Sistem Keychain diamankan dan apa yang membuatnya tetap aman. Kita perlu menggunakan System Keychain karena kita membutuhkan skrip untuk dijalankan secara otomatis di latar belakang dengan hak akses root tanpa memandang siapa yang login.
Old Pro
1
Saya merekomendasikan untuk bertanya pada milis CDSA Apple ( lists.apple.com/mailman/listinfo/apple-cdsa ) atau menggunakan Insiden Dukungan Teknis Apple. Hanya melalui cara ini Anda dapat memastikan Anda akan mencapai insinyur Apple yang sesuai.
Graham Miln
Memiliki skrip dijalankan di latar belakang sebagai root adalah pekerjaan launchd. Apa yang sebenarnya ingin Anda lakukan?
Jay Thompson
1
Kesalahan ketik kecil di "/System/Library/Keychains/System.keychain" (Anda lupa "Library"). Sebenarnya, Anda bisa mendapatkan daftar lokasi gantungan kunci di Akses Keychain dengan memilih "Edit> Daftar Gantungan Kunci"
nama pengguna
1
@ OldPro Mengingat masalah keamanan Anda, mengapa tidak menggunakan enkripsi disk lengkap?
Graham Miln
2

Apple baru-baru ini menerbitkan dokumen yang menguraikan praktik keamanannya , Anda mungkin menemukan beberapa jawaban di sana. Dokumen ini khusus untuk iOS tetapi banyak fitur keamanan memiliki banyak kesamaan dengan OS X.

demianturner
sumber
Ini ada di jalur yang benar, dan contoh yang bagus dari jenis dokumentasi yang menurut saya sangat membantu, tetapi iOS tidak memiliki konsep System Keychain sehingga tidak menjawab pertanyaan saya.
Old Pro
Senang menerima karunia Anda jika ini membuat Anda ke arah yang benar ;-)
demianturner
0

Saya tidak memiliki pengetahuan khusus tentang Keychain * tetapi ini adalah praktik yang cukup standar.

  1. Anda ingin melindungi file teks biasa "foo". Foo mungkin berukuran sewenang-wenang.
  2. Buat kunci simetris untuk mengenkripsi foo.
  3. Enkripsi kunci simetris dengan kunci yang diunggulkan dari frasa sandi.

Setelah selesai, Anda dapat mengubah "kata sandi" dengan memasukkan frasa sandi saat ini, mendekripsi kunci simetris, dan kemudian mengenkripsinya dengan kata sandi baru. Ini menghindari proses dekripsi / enkripsi yang panjang jika "foo" sangat besar.

Jadi bagaimana cara kerjanya untuk beberapa pengguna yang perlu mengakses plaintext of foo? Cukup mudah kok, Anda cukup membuat salinan kunci simetris terenkripsi satu kali untuk setiap pengguna. Dengan kata lain, lakukan langkah tiga untuk setiap pengguna.

Dalam praktiknya, semua ini disarikan dari tampilan dan pengguna akhir hanya perlu berurusan dengan kata sandi mereka sendiri.

Berkenaan dengan bagian 3 dari pertanyaan Anda, kunci pengguna tidak disimpan di rumah mereka. Mereka kemungkinan besar akan disimpan di /private/varsuatu tempat. Jadi bahkan tanpa /Usersseseorang yang sebelumnya memiliki akses akan dapat membuka kunci sistem.


* Mungkin gantungan kunci berfungsi berbeda.

bahamat
sumber
Apa yang berbeda tentang gantungan kunci sistem adalah bahwa sistem dapat mengakses apa yang ada di gantungan kunci terlepas dari siapa yang login. Sebagai contoh, Time Machine dapat mengakses gantungan kunci sistem untuk me-mount berbagi file jarak jauh, bahkan jika satu-satunya pengguna yang login bukanlah pengguna administratif dan karenanya tidak dapat mengakses gantungan kunci sistem. Jadi sesuatu yang lain sedang terjadi, dan saya ingin tahu persis apa itu.
Old Pro
Sekali lagi, saya hanya dapat dugaan, tapi IMO itu sebenarnya tidak yang berbeda. Sistem itu sendiri jelas bisa mendapatkan kunci, yang diberikan. Saya akan berasumsi bahwa ada kunci sistem yang diperlakukan mirip dengan kunci pengguna. Tapi sekarang kami berada di jantung pertanyaan Anda ... apa yang menyediakan akses pertama?
bahamat