- Apple의 보안2025년 03월 15일
- 2료일
- 작성자
- 2025.03.15.:11
오늘은 외부에서 어떻게 신뢰할수 있는 앱을 다운받을 수 있는지와 그러더라도 앱을 다운받았지만 해킹프로그램이 있을때 어떻게 보안을 하는지에 대해 얘기해볼것이다.
프로비저닝 프로파일
애플에서 어떠한 앱을 다운받기 위해서는 AppStore를 통해야한다. 즉 신뢰할 수 있는 앱만 실행할 수 있도록 되어있다.
신뢰할 수 있어? = 그 개발자 신뢰 가능? 이라고 보면된다. 앱스토어 말고 우리는 앱을 깃허브 클론이나 다른 방식으로 받을 수 있다.
프로비저닝 프로파일이 디바이스가 특정 개발자의 앱을 신뢰하고 실행할 수 있게 해준다.
구성요소: 앱 ID(bundle), 앱 실행이 허용된 디바이스 UUID, 인증서, 권한(푸쉬알림 등)
프로비저닝 프로파일 종류
1. Development: 개발 및 디버깅을 위한 프로필. 등록된 개발 기기에서만 앱 실행 가능. 디버거 연결 허용
2. Ad Hoc: Appstore없이 제한된 테스트 그룹에 배포하기 위한 프로파일. -> 내부테스트용
3. distribute: 배포용으로 기기 UUID목록을 포함하지 않음!! (1과차이)
4. Enterprise: 회사에서 내부 배포용, 기기 제한 없다. (나도 해보고 싶다...취업해서..)
인증서 시스템
1. 개발자가 XCode나 Keychain Access에서 인증서 서명 요청(CSR) 생성.
2. 이때 개인키와 공개키 쌍이 생성되며, 개인 키는 개발자의 맥에 저장되고 공개키는 CSR에 포함.
3. CSR을 Apple Developer Potal 제출
4. apple이 CSR 검증하여 공개키가 포함된 디지털 인증서를 발급해준다
5. 다운로드하여 더블클릭하면 키체인에 공개키와 함께 등록된다.
협업시에는 개발용 인증서 + 공개키를 .P12(인증서)로 내보내면 끝
- 코드 서명:
개발자는 개인키를 사용하여 앱 바이너리에 디지털 서명한다.
앱바이너리의 해시를 계산하고 이 해시를 개인키로 암호화하여 서명을 생성한다. 이 서명은 앱 패키지의 일부로 포함됨. - 서명 검증:
iOS 기기는 인증서 내의 공개키를 사용하여 서명을 검증한다.
앱 바이너리의 해시를 계산하고 서명을 공개키로 복호화하여 원본 해시 추출한다.
두 해시가 일치하면 앱이 변조되지 않았음을 확인!
빌드할 때 XCode는 개인키로 앱을 서명하고, Apple은 공개키를 통해 서명을 검증한다. 예를 들어 A가 앱을 빌드하면 A의 개인키로 앱을 서명하고, Apple은 공개키를 통해 서명을 검증한다. 이 과정에서 맞지않으면 서명 검증 실패해서 빌드가 안된다!!!
개인키를 분실했다면 새 인증서를 생성해도 이미 등록된 앱과 연결이 끊기므로 다시 1번과정부터 해야함. 그래서 이전에 만든 .p12 파일로 백업해서 안전하게 보관하는것이 중요!
결국 팀 협업을 할때 실기기에서 빌드하기 위해서는 인증서의 개인키 + 그 인증서를 포함한 프로비저닝 프로파일이 필요.
그래서 팀 리더가 .p12 파일과 프로비저닝 프로파일을 팀원들에게 배포하고 각자 키체인 등록하면된다. 그러면 XCode에서 동일한 팀 ID로 로그인해서 프로파일 사용하면 빌드가능해진다.
샌드박스
: 각 앱이 자신만의 격리된 환경에서 실행되도록 하는 보안기술.
사실 앱 보안을 말하기 위해서는 이 친구가 찐이다. 위의 프로비저닝 프로파일은 신뢰할수 있는 앱만 다운이 되도록 막는 외부적인 방법이였다면 샌드박스는 앱이 실행되는 제한된 환경으로 앱이 시스템의 다른 부분이나 다른 앱에 접근하는 것을 제한한다! 왜냐면 앱스토어를 통해 다운받았는데 어? 얘알고보니 해킹이야. 내 정보 다털어가려는 코드가 막 천지야... 그럴 수도 있으니 이제는 내부적으로 제한하는 방법 시작!
주요 특징
1. 격리된 파일 시스템: 각 앱은 자신만의 고유한 파일 시스템 디렉토리를 가진다. 다른 앱의 파일에 직접 접근이 불가능하다.
2. 제한된 리소스 접근: 카메라, 마이크, 위치 정보 등의 시스템 리소스에 대한 접근은 사용자 허가가 필요하다.
3. 통제된 프로세스 간 통신: 앱 간 통신은 iOS가 제공하는 안전한 매커니즘(URL 스킴, 앱 그룹, 유니버셜링크)등을 통해서만 가능
4. 네트워크 접근 제한: 앱은 info.plist에 명시된 도메인만 연결이 가능하다.
iOS 앱이 설치되면 고유한 컨테이너가 생성된다. 앱의 데이터와 실행환경을 격리하는 샌드박스의 물리적구조!
/private/var/mobile/Containers/ ├── Data/ │ └── Application/ │ └── [UUID]/ │ ├── Documents/ │ ├── Library/ │ │ ├── Caches/ │ │ ├── Preferences/ │ │ └── ... │ └── tmp/ └── Bundle/ └── Application/ └── [UUID]/ └── [AppName].app/
여러 디렉토리로 구성되어 있다.
- Documents/ : 사용자가 생성한 문서와 데이터 저장.(iCloud를 통해 백업됨)
- Library/Caches/: 앱 실행 간 유지해야하지만 백업할 필요는 없는 데이터 (ex, network에서 다운로드한 컨텐츠 저장)
- Library/Preferences/: UserDefaults에 저장되는 앱 설정
- tmp/: 임시파일저장. 앱이 실행 중이 아닐때 시스템이 자동으로 삭제가능
- Bundle/: 실행 파일과 리소스가 포함된다.
장점:
1. 최적화된 I/O작업: 제한된 공간에서 효율적으로 파일 관리하고 캐시 매커니즘 개선
2. 메모리 관리: 앱 종료 시 샌드박스 임시 파일자동 정리하고 시스템 메모리 압박 시 캐시 파일 우선제거
'면접준비' 카테고리의 다른 글
Metal(1)- 메탈을 알기전에 필요한 것들 (1) 2025.03.29 Autolayout 모든 것: 사이클부터 제약조건까지 (0) 2025.03.26 근본으로 돌아가자(6) Image (2) 2025.03.05 근본으로 돌아가자(5) - 프로토콜 (0) 2025.03.03 Dynamic Dispatch는 어떻게 이루어지는가? 클래스 VS 프로토콜 (0) 2025.03.02 다음글이전글이전 글이 없습니다.댓글