* 주의 : 나는 영어를 잘 하지 못한다. 이걸 번역한것은 뇌에서 고등학교 수준의 영어로 번역해낸 것이다. 더욱 자세한 내용을 볼려면 원문을 읽어라.
Android Permissions
android 권한 모델은 API 사용권한, 파일 시스템 사용 권한 및 IPC 사용 권한 같은 기능을 제공한다. 이것들은 각각이 얽혀 있기도 하다.
앞에서 말한것 처럼 일부 high-level 수준의 사용권한은 low-level 수준의 OS 기능으로 다시 매핑 된다. 여기에는 소켓 열기,Bluetooth 장치 및 특정 파일 시스템 경로와 같은 작업이 포함 될 수 있다.
앱 사용자의 권한과 추가적인 그룹을 결정 하기 위해 ANdroid는 앱 패키지의 Android Manifest.xml 파일에 지정된 high-level 권한을 처리 한다.("Major Application Components" 섹션에서 매니페스트 및 사용 권한에 대해 자세히 설명 하겠다.)
어플리케이션의 권한은 패키지 관리자에 의해 설치시 응용 프로그램의 매니페스트에서 추출 되고 /data/system/package.xml에 저장 된다. 이러한 항목은 프로세스가 instantiation(순간화, 인스턴스화) 작업시 적절한 권한을 부여 하는데 사용 된다.(예: 보조 GID 설정). 다음 그림은 package.xml 내부의 google Chrome 패키지 항목과 이 앱에 대한 고유 userID 및 요청 하는 권한을 보여줍니다.
permission-to-group에 매핑 된 것들은 /etc/permissions/platform.xml에 저장 됩니다. 이 응용 프로그램은 추가 그룹 ID를 경정하는데 사용 된다.
밑의 그림은 이러한 매핑 상태를 보여 준다.
그 권리는 패키지 엔트리에서 정의된 후에 두가지 방법 중 하나로 시행 되고 있다.
- 지정된 메서드 호출 시 수행되며 런타임에 의해 실행된다.
- 라이브러리 또는 커널 자체에 의해 OS 내에서 더 낮은 수준으로 강제 적용된다.
API Permissions
API 사용 권한에는 Android API/framework 내의 고급 기능 및 경우에 따라 타사 프레임 워크에 대한 엑세스를 제어하는 권한이 포함된다.
일반적인 API 사용 권한의 예는 READ_PHONE_STATE 입니다. 이는 "전화 상태에 대한 읽기 전용 액세스(read only access to phone state.)"를 허용하는 것으로 정의됩니다. 따라서 이 권한을 요청하고 이후에 부여된 앱은 전화 정보 쿼리와 관련된 다양한 방법을 호출할 수 있다.
여기에는 getDeviceSoftwareVersion, getDeviceId, getDeviceId 등과 같은 전화 관리자 클래스의 메서드가 포함됩니다.
앞에서 언급했듯이, 일부 API 사용 권한은 kernel-level 시행 메커니즘에 해당 된다.
예를 들어 인터넷 사용 권한이 부여 되면 요청 앱의 UID가 innet 그룹의 멤버로 추가 된다.(GID 3003).
이 그룹의 멤버쉽은 사용자에게 HttpURLConnection 객체 생성과 같은 상위 레벨 API기능에 필요한 AF_INET 및 AF_INET6 소켓을 열 수 있는 권한을 부여합니다.
이에 대한 내용은 4장에서 나온다.
File System Permissions
안드로이드의 어플리케이션 샌드박스는 엄격함 유닉스 파일 시스템 권한에 의해 크게 영향을 받는다. 어플리케이션의 고유 UID 및 GID는 기본적으로 파일 시스템의 각 데이터 스토리지 경로에만 엑세스 할 수 있다. 다음 디렉토리 목록에 UID 및 GID (두번째줄 과 세번째줄)를 기록 한다. 이러한 디텍터리 목록은 디렉토리들 마다 고유 하며, 해당 UID와 GID만 해당 콘텐츠에 엑세스 할 수 있는 권한이 있다.
이후에 응용 프로그램에서 만든 파일들에 적절한 권한들이 설정 된다. 다음 목록은 애플리케이션의 데이터 디렉토리를 보여주며, 하위 디렉토리에 대한 소유권과 권한은 앱의 UID 및 GID에만 설정 되어 있다.
SD카드 또는 기타 외부 저장소와 같은 공유 리소스에 접근할때는 특정 보조그룹(GID)이 사용된다. 아래 그림에서 mount와 ls 명령의 출력을 확인해보길 바란다.
여기서 SD 카드가 sdcard_rw 그룹에 해당하는 GID 1015로 마운트 된 것을 볼 수 있다. WRITE_EXTERNAL_STORE 사용 권한을 요청하는 응용 프로그램에는 해당 UID가 이 그룹에 추가 되어 이 경로에 대한 쓰기 엑세스 권한이 부여 된다.
IPC Permissions
IPC의 퍼미션은 API 퍼미션이랑 중봉 되는 부분이 있지만 앱 구성 요소(및 일부 시스템 IPC기능) 간의 통신과 직접 관련된 사용 권한입니다. 이러한 사용 권한의 선언 및 시행은 런타임, 라이브러리 기능 또는 프로그램 자체에서 직접 발생하는 등 서로 다른 수준에서 발생할 수 있다. 특히 이 퍼미션은 안드로이드의 Binder IPC 매커니즘을 기반으로 하는 안드로이드 어플리케이션 구성 요소에 적용 된다. 이러한 구성 요소 및 바인더 자체에 대한 자한 내용은뒤에 나온다.
'안드로이드에 관하여 > 안드로이드 공부' 카테고리의 다른 글
JEB2 or JEB3가 안될때 (0) | 2021.03.20 |
---|---|
Android Hacker's Handbook 2장 -1- (0) | 2021.01.24 |
Where is my arm ? (0) | 2021.01.17 |
Android Hackers Handbook 1장 (0) | 2021.01.16 |
APK 보호기법 (0) | 2021.01.06 |