Amazon Web Services 한국 블로그

Amazon EC2 Mac 인스턴스, 시스템 무결성 보호(SIP) 구성 제공

이제 개발자들이 Amazon EC2 Mac 인스턴스에서 Apple의 System Integrity Protection(SIP)을 프로그래밍 방식으로 비활성화할 수 있게 되었습니다. System Integrity Protection(SIP), 일명 루트리스(rootless)는 Apple이 OS X El Capitan(2015, 버전 10.11)에서 도입한 보안 기능입니다. 이 기능은 루트 사용자 계정의 권한을 제한하여 잠재적으로 해로운 소프트웨어로부터 시스템을 보호하도록 설계되었습니다. SIP는 macOS에서 기본적으로 활성화되어 있습니다.

SIP(System Integrity Protection)은 보호된 파일과 폴더의 수정 방지, 시스템 소유 파일 및 디렉터리에 대한 접근 제한, 무단 소프트웨어의 시동 디스크 선택 차단을 통해 시스템을 보호합니다. SIP의 주요 목적은 무제한 루트 접근으로 인한 보안 위험을 해결하는 것으로, 이로 인해 악성코드가 단 하나의 비밀번호나 취약점만으로도 기기를 완전히 제어할 수 있는 상황을 방지합니다. 이 보호 기능을 도입함으로써 Apple은 특히 약하거나 비밀번호가 없는 관리자 계정을 사용하는 사용자가 많은 점을 고려해, macOS 사용자를 위한 보다 높은 수준의 보안을 보장하고자 합니다.

SIP는 일상적인 사용 환경에서 악성코드로부터 뛰어난 보호 기능을 제공하지만, 개발자들은 개발 및 테스트 목적으로 일시적으로 이를 비활성화해야 할 때가 있습니다. 예를 들어, 새로운 디바이스 드라이버나 시스템 확장 프로그램을 만들 때 코드를 설치하고 테스트하기 위해 SIP를 비활성화해야 할 수 있습니다. 또한, SIP는 소프트웨어가 제대로 작동하는 데 필요한 일부 시스템 설정에 대한 접근을 차단할 수도 있습니다. SIP를 일시적으로 비활성화하면 macOS용 프로그램을 세밀하게 조정하는 데 필요한 권한을 얻을 수 있습니다. 하지만 이것은 금고 문을 잠시 열어두고 정식 점검을 하는 것과 같을 뿐, 영구적으로 열어두는 것이 아니라는 점을 반드시 기억해야 합니다.

Mac에서 SIP를 비활성화하려면 기기에 물리적으로 접근해야 합니다. 기기를 복구 모드로 재시동한 후, csrtutil 명령줄 도구를 사용해 SIP를 비활성화하고, 다시 한 번 기기를 재시동해야 합니다.

지금까지는 EC2 Mac 인스턴스에서 표준 SIP 설정을 그대로 사용해야 했습니다. 물리적 접근이 필요하고 복구 모드로 부팅해야 했기 때문에, SIP를 Amazon EC2 관리 콘솔이나 EC2 API와 통합하는 것이 어려웠습니다. 하지만 이제 더 이상 그렇지 않습니다! 이제 Amazon EC2 Mac 인스턴스에서 SIP를 자유롭게 비활성화하거나 다시 활성화할 수 있습니다. 방법을 직접 보여드리겠습니다.

이제 작동 방식을 살펴보겠습니다.
예를 들어, 제가 Amazon EC2 Mac 인스턴스를 시작했다고 가정해봅시다. 이 인스턴스는 Apple Silicon M2 프로세서가 탑재된 mac2-m2.metal 인스턴스입니다. SIP를 비활성화하거나 활성화하는 것은 새로운 EC2 API인 CreateMacSystemIntegrityProtectionModificationTask를 호출하는 것만큼 간단합니다. 이 API는 비동기 방식으로 동작하며, 인스턴스의 SIP 상태 변경 프로세스를 시작합니다. 진행 상황은 또 다른 새로운 EC2 API인 DescribeMacModificationTasks를 사용해 모니터링할 수 있습니다. 제가 알아야 할 것은 작업하려는 머신의 인스턴스 ID뿐입니다.

사전 조건
Apple 실리콘 기반 EC2 Mac 인스턴스 및 최신 유형의 머신에서는, 새로운 EC2 API를 호출하기 전에 macOS에서 ec2-user 사용자의 비밀번호를 설정하고 해당 사용자에 대해 보안 토큰을 활성화해야 합니다. 이를 위해서는 해당 머신에 접속하여 터미널에서 두 가지 명령어를 입력해야 합니다.

# 대상 EC2 Mac 인스턴스에서
# ec2-user 사용자에 대한 비밀번호 설정
~ % sudo /usr/bin/dscl . -passwd /Users/ec2-user
새 비밀번호: (MyNewPassw0rd)

# ec2-user에 대해 동일한 비밀번호로 보안 토큰 활성화
# 이전 비밀번호는 방금 dscl로 설정한 비밀번호입니다
~ % sysadminctl -newPassword MyNewPassw0rd -oldPassword MyNewPassw0rd
2025-03-05 13:16:57.261 sysadminctl[3993:3033024] ec2-user의 비밀번호를 변경 시도 중…
2025-03-05 13:16:58.690 sysadminctl[3993:3033024] SecKeychainCopyLogin 반환됨 -25294
2025-03-05 13:16:58.690 sysadminctl[3993:3033024] 키체인 비밀번호를 업데이트하지 못했습니다(-25294).
2025-03-05 13:16:58.690 sysadminctl[3993:3033024] - 완료

# KeyChain에 대한 오류가 예상됩니다. 이 머신에서 GUI로 한 번도 접속한 적이 없어서 로그인 키체인이 존재하지 않습니다.
# 이 오류는 무시해도 됩니다.  아래 명령어는 이 세션에서 활성화된 키체인 목록을 보여줍니다
~ % security list
    "/Library/Keychains/System.keychain"

# 보안 토큰이 활성화되었는지 확인합니다
~ % sysadminctl -secureTokenStatus ec2-user
2025-03-05 13:18:12.456 sysadminctl[4017:3033614] ec2-user 사용자에 대해 보안 토큰이 활성화되어 있습니다

SIP 상태 변경
SIP 상태를 전환하기 위해 머신에 직접 접속할 필요는 없습니다. 인스턴스 ID만 알면 됩니다. 노트북에서 터미널을 열고 AWS Command Line Interface(AWS CLI)를 사용해 Amazon EC2 Mac 인스턴스 ID를 확인합니다.

 aws ec2 describe-instances \
         --query "Reservations[].Instances[?InstanceType == 'mac2-m2.metal' ].InstanceId" \
         --output text

i-012a5de8da47bdff7

이제 노트북의 터미널에서 create-mac-system-integrity-protection-modification-task 명령어를 사용해 SIP를 비활성화합니다.

echo '{"rootVolumeUsername":"ec2-user","rootVolumePassword":"MyNewPassw0rd"}' > tmpCredentials
aws ec2 create-mac-system-integrity-protection-modification-task \
--instance-id "i-012a5de8da47bdff7" \
--mac-credentials fileb://./tmpCredentials \
--mac-system-integrity-protection-status "disabled" && rm tmpCredentials

{
    "macModificationTask": {
        "instanceId": "i-012a5de8da47bdff7",
        "macModificationTaskId": "macmodification-06a4bb89b394ac6d6",
        "macSystemIntegrityProtectionConfig": {},
        "startTime": "2025-03-14T14:15:06Z",
        "taskState": "pending",
        "taskType": "sip-modification"
    }
}

작업이 시작된 후에는 aws ec2 describe-mac-modification-tasks 명령어로 상태를 확인할 수 있습니다.

{
    "macModificationTasks": [
        {
            "instanceId": "i-012a5de8da47bdff7",
            "macModificationTaskId": "macmodification-06a4bb89b394ac6d6",
            "macSystemIntegrityProtectionConfig": {
                "debuggingRestrictions": "",
                "dTraceRestrictions": "",
                "filesystemProtections": "",
                "kextSigning": "",
                "nvramProtections": "",
                "status": "disabled"
            },
            "startTime": "2025-03-14T14:15:06Z",
            "tags": [],
            "taskState": "in-progress",
            "taskType": "sip-modification"
        },
...

인스턴스는 이 과정을 시작하며, 여러 번 재부팅이 진행되고 그 동안에는 접속이 불가능해집니다. 이 과정은 완료까지 60~90분 정도 소요될 수 있습니다. 이후 콘솔에서 상태가 다시 사용 가능(available)으로 표시되면, 평소처럼 SSH나 EC2 Instance Connect를 통해 해당 머신에 접속할 수 있습니다.

➜  ~ ssh ec2-user@54.99.9.99
경고: 알려진 호스트 목록에 '54.99.9.99'(ED25519)을 영구적으로 추가했습니다.
Last login: Mon Feb 26 08:52:42 2024 from 1.1.1.1

    ┌───┬──┐   __|  __|_  )
    │ ╷╭╯╷ │   _|  (     /
    │  └╮  │  ___|\___|___|
    │ ╰─┼╯ │  Amazon EC2
    └───┴──┘  macOS Sonoma 14.3.1

➜  ~ uname -a
Darwin Mac-mini.local 23.3.0 Darwin Kernel Version 23.3.0: Wed Dec 20 21:30:27 PST 2023; root:xnu-10002.81.5~7/RELEASE_ARM64_T8103 arm64

➜ ~ csrutil --status 
System Integrity Protection 상태: 비활성화됨.

SIP 비활성화 시기
SIP를 비활성화하는 것은 시스템이 잠재적인 보안 위험에 노출될 수 있으므로 신중하게 접근해야 합니다. 하지만 이 글의 서두에서 언급했듯이, macOS용 디바이스 드라이버나 커널 확장 프로그램을 개발할 때는 SIP를 비활성화해야 할 수도 있습니다. 일부 구형 애플리케이션은 SIP가 활성화되어 있을 때 제대로 동작하지 않을 수도 있습니다.

Spotlight 인덱싱을 끄기 위해서도 SIP를 비활성화해야 합니다. Spotlight는 Mac에서 앱, 문서, 이메일 및 기타 항목을 빠르게 찾는 데 도움을 줍니다. 데스크톱에서는 매우 편리하지만, 서버에서는 그다지 유용하지 않습니다. 문서가 변경될 때마다 인덱싱할 필요가 없다면 Spotlight를 끄는 것이 CPU 사용량과 디스크 I/O를 줄이는 데 도움이 됩니다.

알아야 할 사항
Amazon EC2 Mac에서 SIP를 비활성화할 때 추가로 알아두어야 할 몇 가지 사항이 있습니다.

  • SIP 비활성화는 API, AWS SDK, AWS CLI, 그리고 AWS Management Console을 통해 사용할 수 있습니다.
  • Apple 실리콘에서는 이 설정이 볼륨 단위로 적용됩니다. 따라서 루트 볼륨을 교체하면 SIP를 다시 비활성화해야 합니다. Intel 기반에서는 이 설정이 Mac 호스트 단위로 적용되기 때문에, 루트 볼륨을 교체해도 SIP는 계속 비활성화된 상태로 유지됩니다.
  • SIP를 비활성화한 후 인스턴스를 중지했다가 다시 시작하면 SIP가 다시 활성화됩니다. 인스턴스를 재부팅해도 SIP 상태는 변경되지 않습니다.
  • SIP 상태는 EBS 볼륨 간에 이전되지 않습니다. 즉, EBS 스냅샷에서 인스턴스를 복원하거나 SIP가 활성화된 인스턴스에서 AMI를 생성하면 SIP가 다시 비활성화됩니다.

이 새로운 API들은 Amazon EC2 Mac이 제공되는 모든 리전에서 추가 비용 없이 사용할 수 있습니다. 오늘부터 사용해보세요.

— seb


뉴스 블로그의 상황은 어떤가요? 이 1분짜리 설문조사에 참여해 주세요!

(이 설문조사는 외부 기업에서 호스트합니다. AWS는 AWS 개인정보 처리방침에 설명한 대로 사용자 정보를 처리합니다. AWS는 이 설문 조사를 통해 수집된 데이터를 소유하며 수집된 정보를 설문 응답자와 공유하지 않습니다)