[iOS]iOS 어플의 프로텍션(보안) 구조[iOS]iOS 어플의 프로텍션(보안) 구조

Posted at 2012. 3. 5. 23:26 | Posted in 테마 기획/iOS 한글화 강좌 시즌 1
유용한 정보 게시물 - iOS 앱에 대해 알아보자!
 
안녕하세요. 오랜만에 쓰는 정보글입니다.
오늘은 iOS 어플리케이션의 프로텍션(보안) 구조에 대해 알려드리려고 합니다.

애플 앱스토어에서 판매되고 있는 iOS 어플리케이션은 무단 복제,리버싱 방지와 구매자 인증 장치를 탑재하고 있습니다. 또한 iOS 자체의 샌드박스 시스템으로 어플의 권한도 제한하고 있는데 이에 대해 자세히 알아보도록 하겠습니다.

Code Signature  

일단 처음으로 iOS 어플리케이션은 Code Signature(코드 무결성 사인) 이라는 방식으로 보호되고 있습니다.
이 Code Signature는 일종의 해쉬값으로서 어플리케이션을 개발한다음 패키징할때 생성되는 사인입니다.
XCode를 다뤄보신 분이라면 아시겠지만.. XCode 설치시 기본적으로 제공되는 codesign 이라는 유틸리티가 애플 개발자 등록을 한 사람에게 지급되는 개발자 인증서(Provisioning Profile)를 이용하여 이 사인을 작성해주고 있습니다.
이 Code Signature는 파일의 해쉬값을 담고 있으므로.. ipa 패키지 내부의 파일(메타 데이터와 아트워크는 제외)이 단 1바이트라도 변형되면 iOS의 설치 데몬인 installd에서 바로 체크하여 설치가 불가능하게 됩니다.

구매자 정보 인증와 암호화(SC_Info)

두번째로.. iOS 어플리케이션에는 구매자 인증 정보 시스템이 존재하며 메인 바이너리에 암호화가 되어 있습니다. 이는 앱스토어에서 어플을 다운 받을때 삽입되는 고유 코드로.. 구매자의 계정정보(회원코드 및 이름 등)와 이에 따른 해쉬값이 들어 있습니다. 이 인증 정보는 ipa 패키지 내부의 SC_Info 폴더에 저장됩니다. (이 인증장치는 ipa 파일 생성 혹은 앱스토어에 올릴 때 자동으로 적용됩니다.)
또한 이 SC_Info 폴더에는 암호화 키값이 저장되는데 iOS 에서 앱을 실행할때 마다 이 암호화 키를 이용하여 메인 바이너리(어플 명과 같으며 확장자가 없는 파일)의 암호화를 푼뒤 메모리에 올리게 됩니다.
참고로 iTunesMetadata.plist 파일의 경우 아이튠즈에서 표시하기 위한 임시 파일로 이 파일은 보안에 아무런 영향이 없습니다. iTunesArtwork도 마찬가지로 어플리케이션 아이콘을 빠르게 표시하기 위해 들어있는 파일입니다.

샌드박스 시스템 

세번째로 샌드박스 시스템이 존재합니다.
이 샌드박스 시스템은 일종의 격리 장소로.. 어플리케이션이 시스템 폴더나 파일접근하지 못하도록 제공되는 가상 공간입니다.
(이 샌드박스가 XCode에서는 컨테이너라는 단어로 표시됩니다.)

iOS 어플리케이션은 두가지 종류가 존재하는데 바로 시스템 어플리케이션(연락처, 사진, 사파리, 음악, 앱스토어 등의 기본 어플리케이션)과 사용자 어플리케이션(앱스토어에서 다운받는 어플리케이션)으로 나뉘어집니다.
시스템 어플리케이션은 샌드박스 시스템이 적용되지 않고.. 시스템의 모든 부분에 접근이 가능합니다.
(참고로.. iOS를 탈옥하면 설치되는 Cydia 및 Cydia에서 다운받아서 설치되는 어플리케이션 역시 이 시스템 어플리케이션 분야에 속하며 시스템 어플리케이션으로 설치되었기 때문에 Cydia는 애플이 승인하지 않는 앱들을 설치할 수 있고 Cydia에서 받은 어플리케이션들이 테마 적용, 기능 개선 등의 시스템적인 부분에 접근이 가능한 것이죠..)

반면에 사용자 어플리케이션은 이 샌드박스 시스템이 적용되는데 이 샌드박스 외부의 공간으로 접근불가능합니다.
다만 음악 라이브러리, 사진 등에 제한적으로 접근이 가능한 경우가 있는데 이는 시스템 API를 이용한 것입니다. 음악 라이브러리 접근의 경우 iOS 3.0 에서 추가된 기능이기도 하며 그 전에는 이용이 불가능했습니다.
그리고 이 시스템 API를 이용하면 다른 어플리케이션의 폴더에도 파일을 옮기는 등.. 샌드박스 외부에 대한 제한적인 접근이 가능합니다.

앱스토어 심사 제도

마지막으로.. 앱스토어에 어플리케이션을 올릴 때 애플에서 자체 검열하는 앱스토어 심사 제도가 있습니다. 애플 앱스토어에 어플리케이션을 올릴 때에는 애플에서 이 어플리케이션이 자신들의 정책에 위반되지 않는지, 법적으로 문제가 되지 않는지, 코드 등에 해킹 코드는 없는지 등을 자체적으로 확인하게 됩니다.
이 심사 제도에도 몇가지 문제가 있긴 합니다.
비통과시에 이유를 말해주지도 않고.. 심사를 연기하는 등의 여러가지 문제가 있고.. 자신들의 이익에 이용하기도 하며 최근에는 저작권에 문제가 되거나 스팸 어플리케이션이 수차례 올라온적도 있습니다.
반면에 유용하던 어플리케이션(메모리 정리 어플 등)은 삭제가 되었죠..
하지만 몇가지 문제가 있다 하더라도 일차적으로 문제가 될 수 있는 앱들을 걸러주고 나중에 문제가 된다 싶을 때에는 앱스토어에서 삭제 조치 하기 때문에 어느정도는 보안에 도움을 준다고 볼 수 있겠습니다. 물론.. 앱스토어에서 삭제되기 전에 받았던 유저는 ipa 파일만 백업해 놓는다면 원할때 언제든지 다시 설치할 수 있긴 합니다..

필자의 한마디

애플 iOS 어플리케이션의 보안 구조에 대해 어느정도 이해가 되셨나요?
이렇게 많은 보안장치가 걸려있지만...
탈옥 하나로 모든게 무력화 될 수 있다는 점이 참 아쉽기도 합니다.
어플리케이션 개발자들이 힘들게 개발하고 심지어 비용을 내면서 무료로 어플리케이션을 배포하는 경우도 있습니다.
(개발자가 어플을 앱스토어에 등록하거나 기기에 올리기 위해서는 무료앱이든 유료앱이든 1년에 최소 99$를 지불하여야 합니다.)
그리고.. 모든 개발은 맥 OSX에서 이루어지며 애플에서 나온 컴퓨터를 이용하여야 하므로 비용이 추가적으로 들게 됩니다.

이렇게 힘들게 만들어진 어플리케이션인 만큼.. 꼭 정품구매하도록 합시다..!
감사합니다. 
//