Szukam czegoś takiego jak ta biała księga bezpieczeństwa na iOS z wyjątkiem OS X lub nawet lepszego, jakiegoś rodzaju raportu z audytu bezpieczeństwa od niezależnego eksperta. Po przeczytaniu dokumentacji, takiej jak Przewodnik programowania usług pęku kluczy , jestem jeszcze bardziej zdezorientowany, co jest podatne na atak przeciwny na niezaszyfrowaną kopię zapasową systemu OS X.
Ostatnim razem, gdy sprawdzałem, brelok logowania użytkownika w systemie OS X był tak samo bezpieczny jak hasło. Pamiętam jakiś problem, który skrócił rzeczywistą tajemnicę klucza do czegoś takiego jak 111 bitów (mglista pamięć, proszę o poprawienie mnie) z powodu jakiegoś problemu z konwersją hasła na klucz, ale to było dawno temu i mam nadzieję, że zostało to naprawione.
Z drugiej strony powiedziano mi, że systemowy brelok jest z natury mniej bezpieczny, ponieważ każdy administrator może uzyskać do niego dostęp, a intruz ma wiele opcji zostania administratorem, oprócz odgadywania hasła jednego użytkownika.
W szczególności martwię się o przechowywanie haseł używanych w skryptach automatycznych w pęku kluczy systemowych, ponieważ kopie zapasowe plików systemowych są przechowywane poza witryną bez dalszego szyfrowania. Dokumenty i inne dane użytkownika są szyfrowane przed przeniesieniem ich poza witrynę, ale mam dokuczliwe podejrzenie, że przeoczam ścieżkę, która odzyskuje te klucze po naruszeniu pęku kluczy systemowych (z powodu naszych procedur, niekoniecznie żadnych wad kryptograficznych) . Chcę więc dokładnie zrozumieć, w jaki sposób systemowy pęku kluczy jest jednocześnie zabezpieczony, ale dostępny dla każdego administratora.
W jaki sposób są zbudowane klucze, aby każdy użytkownik administracyjny mógł odblokować pęku kluczy systemu?
Czy istnieją ograniczenia kryptograficzne, które w jakikolwiek sposób ograniczają to, co użytkownik administracyjny może zrobić z informacjami w pęku kluczy systemu?
Biorąc pod uwagę system tworzenia kopii zapasowych niezaszyfrowane bez
/Users
, w jaki sposób uzyskać dostęp do kluczy w pęku kluczy systemu?
Interesuje mnie OS X 10.5 Leopard i nowsze wersje.
źródło
Odpowiedzi:
/Library/Keychains/System.keychain
Brelok systemowy jest przechowywany, a klucz do odblokowania jest przechowywany w/var/db/SystemKey
(domyślne uprawnienia do plików są odczytywane tylko przez root). Lokalizacja tych plików jest podana w skrypcie systemu kontroli bezpieczeństwa (ze źródła security_systemkeychain ). Możliwe jest nawet przetestowanie automatycznego blokowania / odblokowywania pęku kluczy systemowych za pomocąStruktura bezpieczeństwa pęku kluczy pozwala programom nieuprzywilejowanym na wysyłanie żądań informacji, pod warunkiem że znajdują się one na liście ACL zapisanej w pozycji pęku kluczy. Oczywiście, jeśli użytkownik ma root w systemie, może bezpośrednio uzyskać dostęp zarówno do pliku przechowującego systemowy brelok, jak i klucz do jego odblokowania, dlatego nie ma żądań za pośrednictwem struktury zabezpieczeń i nie jest przypisany do list ACL przechowywanych w pęku kluczy samo.
(Właściwie nie odpowiedziałem na oryginalne pytania, więc spróbujmy jeszcze raz)
Struktura pęku kluczy libsecurity pozwala regularnym procesom współdziałać z pękiem systemu w sposób uwierzytelniony przy użyciu szkieletu komunikacji międzyprocesowej Apple'a (IPC).
Program A wysyła żądanie dostępu do informacji o pęku kluczy systemu za pomocą IPC. Sprawdzane jest, czy żądający użytkownik jest już w grupie kół, a także zna hasło użytkownika w grupie kół. Po potwierdzeniu autoryzacji uprzywilejowanego
kcproxy
demona można użyć do uzyskania dostępu do materiału/var/db/SystemKey
, odblokowania pęku kluczy systemu i zwrócenia żądanych informacji.Nie - użytkownik administracyjny może uzyskiwać dostęp / zmieniać cokolwiek w pęku kluczy systemu. Nawet jeśli nie mogliby, mogli skopiować pliki bazowe na inny komputer, na którym mają pełną kontrolę, i po prostu odblokować / uzyskać do nich dostęp.
Jeśli kopia zapasowa zawierała kopie,
/Library/Keychains/System.keychain
a/var/db/SystemKey
następnie skopiowałbym je do odpowiednich lokalizacji w nowym systemie OS X i użyłem,systemkeychain
aby później odblokować ten pierwszy i zrzucić bazę danych pęku kluczy za pomocąsecurity dump-keychain
.źródło
Brelok systemowy
Brelok systemowy ma kilka unikalnych możliwości. Są one udokumentowane na stronie podręcznika systemkeychain . Wzmianki o głównym haśle prawdopodobnie będą Twoim celem. Kod źródłowy specyficzny układ keychain jest mały i dostępny.
Systemowy brelok,
/System/Library/Keychains/System.keychain
to specjalny brelok do użytku dla Apple i demonów. Ogólnie należy unikać używania go do skryptów na poziomie użytkownika.Przegląd kodu: pęku kluczy
Apple opublikowało kod źródłowy Keychain i ramy bezpieczeństwa dla Mac OS X 10.5; możesz przejrzeć ten kod, aby dowiedzieć się, jak on działa.
Alternatywne podejście: oddzielny pęku kluczy
Możesz utworzyć osobny brelok do przechowywania poświadczeń skryptu. Polecamy tę praktykę naszym klientom. Możesz użyć zabezpieczeń narzędzia wiersza poleceń, aby uzyskać dostęp, wyodrębnić pęki kluczy i zarządzać nimi bez uciekania się do interfejsu graficznego.
Rozważ przechowywanie haseł do automatycznych skryptów w osobnym pęku kluczy - i wyklucz ten pęku kluczy z kopii zapasowej poza witryną.
Doceniam, że usunięcie pęku kluczy z kopii zapasowej nie jest idealne, ale rozwiązałoby to Twoje obawy. Podczas przywracania komputera Mac musisz odzyskać pęku kluczy z innego źródła; może być bardziej zaufanym źródłem lub bocznym kanałem.
Zawsze możesz przechowywać osobne hasło pęku kluczy w pęku kluczy systemu. Następnie możesz odblokować oddzielny pęku kluczy ze skryptu. Jeśli kopia zapasowa zostanie zaatakowana, ujawnisz hasło tylko do osobnego pęku kluczy, a nie do samego pęku kluczy, ponieważ ten plik nie zawiera kopii zapasowej poza witryną.
źródło
Firma Apple niedawno opublikowała dokument opisujący swoje praktyki bezpieczeństwa , możesz tam znaleźć odpowiedzi. Dokument jest specyficzny dla iOS, ale wiele funkcji bezpieczeństwa ma wiele wspólnego z OS X.
źródło
Nie mam szczegółowej wiedzy na temat pęku kluczy *, ale jest to dość standardowa praktyka.
Po wykonaniu tej czynności możesz zmienić „hasło”, wprowadzając bieżące hasło, odszyfrowując klucz symetryczny, a następnie szyfrując go nowym hasłem. Pozwala to uniknąć długotrwałych procesów odszyfrowywania / szyfrowania w przypadku, gdy „foo” jest bardzo duże.
Jak to działa dla wielu użytkowników, którzy potrzebują dostępu do zwykłego tekstu foo? Całkiem proste, po prostu tworzysz zaszyfrowaną kopię klucza symetrycznego raz dla każdego użytkownika. Innymi słowy, wykonaj krok trzeci dla każdego użytkownika.
W praktyce wszystko to jest oderwane od widoku, a użytkownik końcowy musi mieć do czynienia tylko z własnym hasłem.
W odniesieniu do części 3 pytań klucze użytkowników nie są przechowywane w ich domu. Najprawdopodobniej byłyby
/private/var
gdzieś przechowywane . Więc nawet bez/Users
kogoś, kto wcześniej miał dostęp, byłby w stanie odblokować system.* Możliwe, że pęku kluczy działa inaczej.
źródło