macOS의 서명: 정체성, 무결성 및 Mach-O 포맷

발행: (2026년 3월 1일 오전 07:05 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

서명의 세 가지 기둥

macOS 코드 서명은 단순한 디지털 “스탬프”가 아닙니다. 이것은 Mach‑O(Mac 실행 파일 포맷) 바이너리에 직접 삽입된 다계층 보안 계약입니다.

1. 봉인 (무결성)

개발자가 바이너리에 서명하면 codesign 유틸리티가 실행 코드의 각 “페이지”에 대해 암호화 해시(고유 지문)를 생성합니다.

  • 검사: 프로그램이 메모리로 로드될 때 macOS 커널이 지속적으로 이 해시들을 다시 계산합니다.
  • “킬”: 바이너리의 한 비트라도(헥스 에디터, 바이러스, 손상된 다운로드 등) 변경되면 해시가 서명과 일치하지 않게 됩니다. 커널은 팝업을 띄우지 않고 SIGKILL로 프로세스를 바로 종료합니다.

2. 신원 (신뢰)

서명은 코드를 만든 사람을 식별합니다. 신뢰 수준은 세 단계로 나뉩니다:

  • Apple‑Signed: 핵심 OS 구성 요소. 높은 권한.
  • Developer ID: 등록된 Apple 개발자($99/년)에게 서명된 것. Notarized 될 수 있으며(Apple 서버에서 사전 악성코드 검사를 받음).
  • Ad‑hoc Signatures (-): 검증된 인증서가 없는 서명. “나는 이 특정 버전의 코드를 식별하지만 검증된 ID는 없습니다.” 라는 의미입니다. Intel Mac에서는 많은 시스템 수준 기능이 동작하기 위한 최소 요구 사항입니다.

3. 권한 (허가서)

서명의 가장 강력한 부분입니다. 권한은 시스템에 프로그램이 수행할 수 있는 작업을 알려주는 내장 XML “사전”입니다.

  • Hardened Runtime: macOS Big Sur에서 도입된 기능으로, 바이너리가 서명 내에 명시적으로 권한을 “요청”(예: 마이크 사용, 서드파티 플러그인 로드)해야 합니다. 권한 목록에 없는 동작을 시도하면 커널이 이를 차단합니다.

서명 검사 방법

Mac에서 codesign 도구를 사용해 어떤 바이너리든 서명을 “내부에서” 확인할 수 있습니다:

codesign -dvv /path/to/binary

일반적인 출력 필드:

  • Executable: 파일 경로.
  • Identifier: 앱의 고유 문자열(예: com.google.chrome).
  • CodeDirectory: 해시 버전 및 플래그(예: hardened).
  • Authority: 서명자(예: Developer ID Application: Apple Inc.).

왜 중요한가

개발자 입장에서 서명 시스템은 “내 컴퓨터에서는 동작한다”는 말이 바이너리를 공유할 때 종종 실패하는 이유입니다. 유효한 서명과 올바른 권한이 없으면 코드는 macOS 커널에 의해 단순히 “신뢰되지 않음”을 넘어 사실상 작동하지 않게 됩니다.

Installerpedia (선택 도구)

툴, 라이브러리, 전체 저장소 등을 더 쉽게 설치하고 싶다면 Installerpedia라는 커뮤니티 기반 설치 플랫폼을 고려해 보세요.

ipm install repo-name

🔗 Explore Installerpedia here

0 조회
Back to Blog

관련 글

더 보기 »