이 글은 Apple의 보안 업데이트에 포함된 취약점 CVE-2024-54471에 대해 설명함. 이 취약점은 macOS Sequoia 15.1, macOS Sonoma 14.7.1, macOS Ventura 13.7.1에서 패치되었음. macOS 기기를 사용하는 경우, 최신 버전으로 업데이트할 것을 권장함. 운영 체제에서 하드웨어와 통신하고 멀티태스킹 모델을 애플리케이션에 제공하는 코드를 커널이라고 함. macOS의 커널은 XNU로, BSD 커널과 Mach 커널의 변형을 포함하는 하이브리드 커널임. Mach 커널은 1980년대와 90년대의 유닉스 전쟁과 깊이 얽혀 있음. Mach는 카네기 멜론 대학교에서 운영 체제 연구 프로젝트로 시작되었으며, NeXTSTEP 운영 체제에 사용되었고, 이는 결국 macOS의 기초가 되었음. Mach는 유닉스 시스템 설계 및 사용의 복잡성을 줄이기 위해 개발되었음. Mach는 네 가지 기본 추상화로 구성되어 있으며, 이는 현대 macOS에서도 여전히 사용되고 있음. 포트는 커널 공간에만 존재하며, 사용자 공간에는 포트 권한으로 노출됨. 여러 태스크가 포트에 대한 전송 권한을 가질 수 있지만, 수신 권한은 하나의 태스크만 가질 수 있음. 각 Mach 메시지는 헤더, 선택적 설명자, 임의의 페이로드, 커널이 추가한 트레일러로 구성됨. macOS에는 부트스트랩 서버가 있으며, 이는 모든 태스크가 전송 권한을 가진 포트의 수신 권한을 보유함. 클라이언트는 부트스트랩 서버에 특정 이름의 Mach 서비스에 대한 전송 권한을 요청할 수 있음. MIG는 Mach 메시지 전송 및 수신을 위한 기능적 인터페이스를 생성하는 도구임. 이는 메시지 기반의 RPC 스타일 인터페이스를 제공하여 메모리 안전성을 높임. MIG는 Mach 메시지의 래퍼로, 각 함수는 루틴으로 불리며, 루틴의 집합은 서브시스템으로 불림. 서브시스템은 메시지 ID 필드에 인덱스됨. MIG 서버는 메시지 발신자를 검증하지 않으면, 전송 권한을 가진 태스크가 서버의 루틴을 호출할 수 있음. ipsw CLI 도구를 사용하여 NDR_record 심볼을 사용하는 바이너리를 검색할 수 있음. 이는 MIG 서버와 클라이언트를 찾는 데 유용함. NetAuthAgent는 macOS에서 파일 서버의 자격 증명을 처리하는 데몬임. 이 취약점이 패치되기 전에는 서버의 자격 증명을 요청하면 제공했음. NetAuthAgent는 macOS 키체인을 사용하여 자격 증명을 저장함. 키체인은 중앙 집중식 비밀 관리자이며, 각 항목은 자체 접근 제어 목록을 가짐. NetAuthAgent는 com.apple.netauth.user.gui라는 이름으로 부트스트랩 서버에 등록된 MIG 서버를 노출함. 이 서버는 자격 증명을 읽고 생성하며 덮어쓸 수 있는 루틴을 제공함. 이 취약점은 iCloud API 토큰을 노출시켜, 공격자가 사용자 정보를 유출하거나 다른 장치의 위치를 추적할 수 있게 함. 이 글은 Apple이 이 취약점을 해결하기 위해 어떤 조치를 취했어야 했는지에 대한 논의를 포함함.비밀번호 유출 (그리고 더 많은 것들!) macOS에서
소개
커널이란 무엇인가?
Mach의 역사
왜 Mach인가?
Mach의 아키텍처
네 가지 추상화
태스크, 포트, 포트 권한
메시지의 구조
전송 권한 획득 방법
Mach 인터페이스 생성기 (MIG)
소개
기술적 세부사항
MIG 서버의 취약점
MIG 서버의 보안
MIG 서버 찾기
NetAuthAgent의 취약점
NetAuthAgent 소개
NetAuthAgent의 작동 방식
NetAuthAgent의 MIG 서버
취약점의 영향
iCloud API 토큰 노출
Apple이 해야 했던 것