OS X에서 시스템 키 체인은 어떻게 보호됩니까?


22

나는 무엇인가를 찾고있다. iOS 용 보안 백서를 좋아하세요. OS X 또는 그보다 나은 경우를 제외하고는 독립적 인 전문가의 보안 감사 보고서 일 수 있습니다. 같은 문서를 읽은 후 키 체인 서비스 프로그래밍 가이드 나는 OS X 시스템의 암호화되지 않은 백업에 대한 공격에 취약한 것에 대해 더욱 혼란 스럽다.

지난 번 확인한 바에 따르면 OS X에서 사용자의 로그인 키 체인은 비밀번호만큼 안전합니다. 암호가 키로 변환되는 방식과 관련하여 몇 가지 문제로 인해 111 비트 (안개가 자욱한 기억, 제발 저를 기분 좋게 생각하십시오)와 같은 열쇠의 실제 비밀을 수축시킨 몇 가지 문제를 생각해 보았습니다.하지만 그것은 오래 전이었습니다. 잘하면 그것이 수정되었습니다.

다른 한편으로는, 나는 체계 키 체인은 모든 관리자가 액세스 할 수 있기 때문에 본질적으로 안전성이 떨어집니다. 침입자는 단일 사용자의 암호를 추측하는 것 외에 관리자가 될 수있는 많은 옵션을 가지고 있습니다.

특히 시스템 키 파일을 백업하고 더 이상 암호화하지 않고 오프 사이트에 저장하면 시스템 키 체인에 자동화 된 스크립트에 사용 된 비밀번호 저장에 대해 걱정이됩니다. 문서 및 다른 사용자 데이터는 오프 사이트로 옮기기 전에 암호화되지만 시스템 키 체인이 손상된 후에는 그 키를 복구 할 수있는 경로가 있다는 잔소리에의 한 의혹이 있습니다 (절차 상, 반드시 암호화 결함이 아님) . 따라서 시스템 키 체인이 어떻게 동시에 보안이 설정되고 모든 관리자가 액세스 할 수 있는지 철저히 이해하고 싶습니다.

  1. 관리 사용자가 시스템 키 체인을 잠금 해제 할 수 있도록 키를 어떻게 구성합니까?

  2. 관리 사용자가 시스템 키 체인의 정보로 어떤 작업을 수행 할 수 있는지를 제한하는 암호화 제한이 있습니까?

  3. 주어진 암호화되지 않은 시스템 백업 없이 /Users, 어떻게 시스템 키 체인의 키에 액세스 할 수 있습니까?

OS X 10.5 Leopard 이상 버전에 관심이 있습니다.


나는 대답이 없지만 일화는 : 관리자 권한이없는 표준 사용자로서 시스템 키 체인에서 상대적으로 쉽게 암호를 추출 할 수있었습니다. 정확한 단계는 기억이 나지 않지만 확실히 가능했습니다. 참고로이 기능이 더 좋을 수도 있습니다. security.stackexchange.com ?
alexwlchan

@Alex, Security.SE를 먼저 시도했지만 거기에 답변이 없습니다.
Old Pro

1
왜 당신이하고있는 일에 대해 별도의 키 체인을 사용하지 않습니까? 스크립트가 시스템 키 체인에 액세스해야하는 좋은 이유가 있습니까?
Jay Thompson

@ 예, 예, 스크립트는 사용자 권한에 관계없이 디스크의 모든 파일에 액세스 할 수 있도록 시스템에서 실행해야합니다.
Old Pro

답변:


11

시스템 키 체인은 /Library/Keychains/System.keychain 잠금을 해제하기위한 키는 /var/db/SystemKey (기본 파일 사용 권한은 루트에서만 읽을 수 있음). 이 파일의 위치는 보안 검사 시스템 스크립트 (로부터 security_systemkeychain 소스 ). 시스템 키 체인의 자동 잠금 / 잠금 해제를 테스트하는 것도 가능합니다.

systemkeychain -vt

키 체인 보안 프레임 워크를 사용하면 권한이없는 프로그램이 키 체인 항목에 저장된 ACL에 제공된 정보에 대한 요청을 할 수 있습니다. 분명히 사용자가 시스템에 루트를 갖고 있다면 시스템 키 체인을 저장하는 파일과 잠금 해제 키를 직접 액세스 할 수 있으므로 보안 프레임 워크를 통해 요청을 만들지 않으며 키 체인에 저장된 ACL을 볼 수 없습니다 그 자체.

(나는 원래의 질문에 실제로 대답하지 않았으므로 이것을 다른 곳으로 보내자.)

관리 사용자가 시스템 키 체인을 잠금 해제 할 수 있도록 키를 어떻게 구성합니까?

그만큼 libsecurity 키 체인 프레임 워크 일반 프로세스가 Apple의 XPC 프로세스 간 통신 프레임 워크 (IPC)를 사용하여 인증 된 방식으로 시스템 키 체인과 상호 작용할 수 있습니다.

프로그램 A는 IPC를 사용하여 시스템 키 체인 정보에 액세스하라는 요청을 보냅니다. 요청한 사용자가 이미 휠 그룹에 있고 또한 휠 그룹에있는 사용자의 비밀번호를 알고 있는지 확인합니다. 승인이 확인되면 특권이 부여 된 kcproxy 데몬을 사용하여 다음 자료를 액세스 할 수 있습니다. /var/db/SystemKey, 시스템 키 체인을 잠금 해제하고 요청 된 정보를 리턴하십시오.

관리 사용자가 시스템 키 체인의 정보로 어떤 작업을 수행 할 수 있는지를 제한하는 암호화 제한이 있습니까?

아니요 - 관리 사용자는 시스템 키 체인에있는 항목에 액세스하거나 변경할 수 있습니다. 그들이 할 수 없다고하더라도, 그들은 기본 파일을 완벽하게 제어 할 수있는 다른 컴퓨터에 복사하고 거기서 잠금 해제 / 액세스 할 수 있습니다.

/ Users가없는 암호화되지 않은 시스템 백업이 주어지면 System Keychain의 키에 어떻게 액세스 할 수 있습니까?

백업에 /Library/Keychains/System.keychain/var/db/SystemKey 그런 다음 새로운 OS X 시스템에서 해당 위치로 복사 한 다음 systemkeychain 나중에 나중을 잠금 해제하고 키 체인 데이터베이스를 덤프하려면 security dump-keychain.


1
다음과 같은 유틸리티가 있습니다. 덤프 키 체인 GuidanceSoftware / EnCase의 Windows에서 시스템 키 체인 (시스템 키 포함)을 직접 덤프 할 수 있습니다 (덤프하기 위해 새 OS X 설치를 설정하는 것보다 쉽습니다).
drfrogsplat

1
@Anon, 위의 정보를 사용하여 다른 컴퓨터의 Time Machine 백업에서 System.keychain에 액세스 / 잠금 해제 / 덤프하는 방법은 무엇입니까? 즉, System.keychain과 SystemKey를 외장 디스크에 저장하여 기본 위치의 파일을 사용하지 않도록 각 파일에 대한 경로를 각각 지정해야합니다.
d-b

이 게시물은 SystemKey를 사용하여 이전 시스템에서 System.keychain을 해독하는 방법과 관련됩니다. apple.stackexchange.com/questions/307189/... Keychain Access 또는 systemkeychain cli를 사용하여 복구 된 System.keychain (예 : 이전에 충돌 한 HDD)을 잠금 해제하는 방법이 있는지 궁금합니다. 동일한 설치의 해당 SystemKey가 있습니다. 내 목표는 새로운 설치시 로그인을 잠금 해제하고 새로운 시스템 키 체인으로 마이그레이션하는 것입니다.
mattpr

5

시스템 키 체인

System Keychain에는 몇 가지 고유 한 기능이 있습니다. 이것들은 systemkeychain 매뉴얼 페이지. 마스터 비밀번호에 대한 언급이 귀하의 관심사입니다. 그만큼 시스템 키 체인 특정 소스 코드 작고 사용 가능합니다.

시스템 키 체인, /System/Library/Keychains/System.keychain, 애플과 데몬을위한 특별한 키 체인입니다. 일반적으로 사용자 수준의 스크립트에는 사용하지 않는 것이 좋습니다.

코드 리뷰 : 키 체인

애플은 키 체인의 소스 코드 Mac OS X 10.5 용 보안 프레임 워크 이 코드를 검토하여 작동 방식을 알아낼 수 있습니다.

대체 접근법 : 별도의 키 체인

별도의 키 체인을 만들어 스크립트의 자격 증명을 저장할 수 있습니다. 우리는 고객에게 이러한 관행을 권장합니다. 명령 줄 도구를 사용할 수 있습니다. 보안 그래픽 인터페이스를 사용하지 않고도 키 체인에 액세스하고, 추출하고, 관리 할 수 ​​있습니다.

자동화 된 스크립트의 암호를 별도의 키 체인에 저장하고이 키 체인을 오프 사이트 백업에서 제외하십시오.

백업에서 키 체인을 제거하는 것이 이상적이지는 않지만 귀하의 우려를 해소 해 주시면 감사하겠습니다. Mac을 복원 할 때 다른 소스에서 키 체인을 다시 가져와야합니다. 더 신뢰할 수있는 소스 또는 측면 채널 수 있습니다.

시스템 키 체인에 별도의 키 체인 암호를 저장할 수 있습니다. 그런 다음 별도의 키 체인을 스크립트에서 잠금 해제 할 수 있습니다. 백업이 공격받은 경우이 파일은 오프 사이트 백업이 아니므로 키 체인 자체가 아닌 별도의 키 체인에만 비밀번호가 노출됩니다.


고맙지 만 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"( "라이브러리"를 잊어 버렸습니다)에 약간의 오류가 있습니다. 실제로, 키 체인 접근에서 "편집 & gt; 키 체인 목록"을 선택하여 키 체인 위치 목록을 얻을 수 있습니다.
username

1
@OldPro 귀하의 보안 문제를 감안할 때 전체 디스크 암호화를 사용하지 않으시겠습니까?
Graham Miln

2

애플은 최근에 보안 관행 , 거기에 몇 가지 해답을 찾을 수 있습니다. 이 문서는 iOS 전용이지만 많은 보안 기능은 OS X와 ​​공통점이 있습니다.


이것은 올바른 방향이고 도움이 될만한 문서의 좋은 예이지만 iOS에는 시스템 키 체인 개념이 없으므로 내 질문에 답하지 않습니다.
Old Pro

이것이 올바른 방향으로 인도한다면 현상금을 수령하게되어 기쁩니다 ;-)
demianturner

0

Keychain *에 대한 구체적인 지식이 없습니다. 그러나 이것은 꽤 표준화 된 방법입니다.

  1. 일반 텍스트 파일 "foo"를 보호하려고합니다. Foo는 임의의 크기 일 수 있습니다.
  2. foo를 암호화 할 대칭 키를 만듭니다.
  3. 대칭 키를 암호로 시드 한 키로 암호화합니다.

완료되면 현재 패스 프레이즈를 입력하고 대칭 키를 해독 한 다음 새 암호로 암호화하여 "비밀번호"를 변경할 수 있습니다. 이렇게하면 "foo"가 매우 큰 경우에 긴 암호 해독 / 암호화 프로세스가 수행되지 않습니다.

그렇다면 foo의 일반 텍스트에 액세스해야하는 여러 사용자에게 이것이 어떻게 작동합니까? 매우 쉽습니다. 각 사용자별로 한 번씩 대칭 키의 암호화 된 복사본을 만들면됩니다. 즉, 각 사용자에 대해 3 단계를 수행하십시오.

실제로이 모든 것은 뷰에서 추상화되어 최종 사용자는 자신의 비밀번호 만 처리하면됩니다.

질문 중 파트 3과 관련하여 사용자의 키는 집에 저장되지 않습니다. 그들은 아마도에 저장됩니다 /private/var 어딘가에. 그럼에도 불구하고 /Users 이전에 액세스 권한을 가진 사용자는 시스템의 잠금을 해제 할 수 있습니다.


* Keychain의 작동 방식이 다를 수 있습니다.


시스템 키 체인과 다른 점은 시스템이 로그인 한 사람과 상관없이 키 체인에있는 항목에 액세스 할 수 있다는 것입니다. 예를 들어 Time Machine은 로그온 한 사용자 만이 시스템 키 체인에 액세스하여 원격 파일 공유를 마운트 할 수 있습니다 관리 사용자이므로 시스템 키 체인에 액세스 할 수 없습니다. 그래서 뭔가 다른 일이 벌어지고 있는데, 그것이 무엇인지 정확히 알고 싶습니다.
Old Pro

다시 한 번 추측 할 수는 있지만 IMO는 실제로는 아닙니다. 다른. 시스템 자체가 분명히 핵심에 도달 할 수 있습니다. 나는 시스템 키가 사용자 키와 비슷한 것으로 취급한다고 가정한다. 그러나 이제 우리는 귀하의 질문의 핵심입니다 ... 무엇이 첫 번째 액세스를 제공합니까?
bahamat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.