macOS Gatekeeper / Quarantine / XProtect
Gatekeeper
Gatekeeper는 Mac 운영 체제용으로 개발된 보안 기능으로, 사용자가 시스템에서 신뢰할 수 있는 소프트웨어만 실행하도록 보장하도록 설계되었습니다. 사용자가 다운로드하고 앱 스토어 외부 소스에서 열려고 하는 소프트웨어(앱, 플러그인 또는 설치 프로그램)를 검증함으로써 작동합니다.
Gatekeeper의 주요 메커니즘은 검증 프로세스에 있습니다. 다운로드한 소프트웨어가 인식된 개발자에 의해 서명되었는지 확인하여 소프트웨어의 신뢰성을 보장합니다. 더 나아가, 소프트웨어가 **Apple에 의해 노타라이즈(notarised)**되었는지 확인하여 알려진 악성 콘텐츠가 없으며 노타라이즈 이후에 변조되지 않았음을 확인합니다.
게다가, Gatekeeper는 사용자가 다운로드한 소프트웨어의 처음 실행을 승인하도록 사용자에게 알림을 통해 사용자 제어와 보안을 강화합니다. 이 보호장치는 사용자가 해로운 실행 가능 코드를 무해한 데이터 파일로 오인할 수 있는 것을 방지하는 데 도움이 됩니다.
애플리케이션 서명
애플리케이션 서명 또는 코드 서명은 Apple의 보안 인프라의 중요한 구성 요소입니다. 이를 사용하여 소프트웨어 작성자(개발자)의 신원을 확인하고 코드가 마지막으로 서명된 이후에 변조되지 않았는지 확인합니다.
작동 방식은 다음과 같습니다:
애플리케이션 서명: 개발자가 애플리케이션을 배포할 준비가 되면 개인 키를 사용하여 애플리케이션에 서명합니다. 이 개인 키는 개발자가 Apple 개발자 프로그램에 등록할 때 Apple이 발급하는 인증서와 관련되어 있습니다. 서명 프로세스는 앱의 모든 부분에 대한 암호화 해시를 생성하고 이 해시를 개발자의 개인 키로 암호화하는 것을 포함합니다.
애플리케이션 배포: 서명된 애플리케이션은 사용자에게 개발자의 인증서와 함께 제공됩니다. 이 인증서에는 해당하는 공개 키가 포함되어 있습니다.
애플리케이션 확인: 사용자가 애플리케이션을 다운로드하고 실행하려고 할 때, Mac 운영 체제는 개발자의 인증서에서 공개 키를 사용하여 해시를 복호화합니다. 그런 다음 애플리케이션의 현재 상태를 기반으로 해시를 다시 계산하고 이를 복호화된 해시와 비교합니다. 일치하면, 개발자가 서명한 이후에 애플리케이션이 수정되지 않았음을 의미하며 시스템은 애플리케이션을 실행할 수 있습니다.
애플리케이션 서명은 Apple의 Gatekeeper 기술의 중요한 부분입니다. 사용자가 인터넷에서 다운로드한 애플리케이션을 열려고 시도할 때, Gatekeeper는 애플리케이션 서명을 확인합니다. Apple이 알려진 개발자에게 발급한 인증서로 서명되었고 코드가 변조되지 않았다면, Gatekeeper는 애플리케이션을 실행할 수 있습니다. 그렇지 않으면, 애플리케이션을 차단하고 사용자에게 경고합니다.
macOS Catalina부터 **Gatekeeper는 애플이 노타라이즈(notarized)**한지 여부도 확인하여 추가적인 보안 층을 추가합니다. 노타라이즷 프로세스는 애플리케이션을 알려진 보안 문제와 악성 코드에 대해 확인하고 이러한 검사를 통과하면 Apple은 Gatekeeper가 확인할 수 있는 애플리케이션에 티켓을 추가합니다.
서명 확인
일부 악성 코드 샘플을 확인할 때는 항상 이진 파일의 서명을 확인해야 합니다. 왜냐하면 서명한 개발자가 이미 악성 코드와 관련되어 있을 수 있기 때문입니다.
승인
애플의 승인 프로세스는 사용자를 잠재적으로 해로운 소프트웨어로부터 보호하는 추가적인 안전장치로 작용합니다. 이는 개발자가 자신의 애플리케이션을 애플의 승인 서비스에 제출하는 과정을 포함하며, 이는 앱 검토와 혼동해서는 안 됩니다. 이 서비스는 악성 콘텐츠의 존재와 코드 서명에 대한 잠재적인 문제를 조사하는 자동화된 시스템입니다.
소프트웨어가 이 검사를 통과하고 어떠한 우려도 일으키지 않는다면, 승인 서비스는 승인 티켓을 생성합니다. 그런 다음 개발자는 이 티켓을 자신의 소프트웨어에 첨부해야 합니다. 또한, 승인 티켓은 Gatekeeper, 애플의 보안 기술이 액세스할 수 있는 온라인에도 게시됩니다.
사용자가 소프트웨어를 처음 설치하거나 실행할 때, 실행 파일에 첨부되어 있거나 온라인에서 찾을 수 있는 승인 티켓의 존재는 Gatekeeper에게 애플이 승인한 소프트웨어임을 알려줍니다. 결과적으로 Gatekeeper는 초기 실행 대화 상자에 애플이 악성 콘텐츠를 확인했음을 나타내는 설명 메시지를 표시합니다. 이 과정은 사용자가 시스템에 설치하거나 실행하는 소프트웨어의 보안에 대한 신뢰를 향상시킵니다.
GateKeeper 열거
GateKeeper는 믿을 수 없는 앱이 실행되는 것을 방지하는 여러 보안 구성 요소이자 구성 요소 중 하나입니다.
GateKeeper의 상태를 확인할 수 있습니다:
GateKeeper 시그니처 확인은 격리 속성이 있는 파일에 대해서만 수행됨을 유의하십시오.
GateKeeper는 바이너리가 실행될 수 있는지를 환경 설정 및 시그니처에 따라 확인합니다:
이 구성을 유지하는 데이터베이스는 **/var/db/SystemPolicy
**에 위치해 있습니다. 다음과 같이 루트로 이 데이터베이스를 확인할 수 있습니다:
참고로 첫 번째 규칙이 "App Store"로 끝나고 두 번째 규칙이 "Developer ID"로 끝나며, 이전 이미지에서는 App Store 및 식별된 개발자로부터 앱을 실행할 수 있도록 설정되어 있었습니다. 해당 설정을 App Store로 변경하면 "Notarized Developer ID" 규칙이 사라집니다.
또한 수천 개의 GKE 유형의 규칙이 있습니다:
다음은 /var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth
, /var/db/gke.bundle/Contents/Resources/gk.db
및 **/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db
**에서 나온 해시입니다.
또는 이전 정보를 다음과 같이 나열할 수도 있습니다:
다음은 spctl
의 --master-disable
및 --global-disable
옵션으로 이러한 서명 확인을 완전히 비활성화합니다:
완전히 활성화된 경우, 새 옵션이 나타납니다:
GateKeeper가 앱을 허용할지 확인하는 방법입니다:
GateKeeper에 새 규칙을 추가하여 특정 앱의 실행을 허용할 수 있습니다:
파일 격리
응용 프로그램 또는 파일을 다운로드할 때, macOS 응용 프로그램은 웹 브라우저나 이메일 클라이언트와 같은 특정 응용 프로그램이 다운로드된 파일에 "격리 플래그"라고 불리는 확장 파일 속성을 부착합니다. 이 속성은 해당 파일을 신뢰할 수 없는 출처(인터넷)에서 가져온 것으로 표시하고 잠재적인 위험을 가지고 있을 수 있다고 표시합니다. 그러나 일부 응용 프로그램은 이 속성을 부착하지 않습니다. 예를 들어, 일반적인 비트토렌트 클라이언트 소프트웨어는 일반적으로 이 프로세스를 우회합니다.
격리 플래그가 존재하는 경우 사용자가 파일을 실행하려고 시도할 때 macOS의 Gatekeeper 보안 기능에 신호를 보냅니다.
격리 플래그가 없는 경우(일부 비트토렌트 클라이언트를 통해 다운로드된 파일 등), Gatekeeper의 확인이 수행되지 않을 수 있습니다. 따라서 사용자는 안전하지 않거나 알려지지 않은 소스에서 다운로드한 파일을 열 때 주의해야 합니다.
코드 서명의 유효성을 확인하는 것은 암호화된 코드 및 모든 번들된 리소스의 암호 해시를 생성하는 자원 집약적인 프로세스를 포함합니다. 또한 인증서 유효성을 확인하는 것은 발급된 후에 취소되었는지 Apple의 서버에 온라인 확인을 하는 것을 의미합니다. 이러한 이유로 완전한 코드 서명 및 인증 검사는 앱을 실행할 때마다 실행하기에는 비현실적입니다.
따라서 이러한 확인은 격리된 속성을 가진 앱을 실행할 때에만 실행됩니다.
이 속성은 파일을 생성/다운로드하는 응용 프로그램에 의해 설정되어야 합니다.
그러나 샌드박스에 있는 파일은 생성된 모든 파일에 이 속성이 설정됩니다. 샌드박스에 있지 않은 앱은 스스로 설정하거나 Info.plist에서 LSFileQuarantineEnabled 키를 지정하여 시스템이 생성된 파일에 com.apple.quarantine
확장 속성을 설정하도록 할 수 있습니다.
또한, **qtn_proc_apply_to_self
**를 호출하는 프로세스에 의해 생성된 모든 파일은 격리됩니다. 또는 API **qtn_file_apply_to_path
**는 지정된 파일 경로에 격리 속성을 추가합니다.
루트 권한이 필요한 경우 상태를 확인하고 활성화/비활성화할 수 있습니다:
다음을 사용하여 파일이 격리 확장 속성을 가지고 있는지 확인할 수도 있습니다:
확장 속성의 값을 확인하고 quarantine 속성을 작성한 앱을 찾으세요:
실제로 프로세스 "생성하는 파일에 격리 플래그를 설정할 수 있습니다" (생성된 파일에 USER_APPROVED 플래그를 적용해 보았지만 적용되지 않았습니다):
Last updated