[Android] 안드로이드 보안

wooki·2022년 7월 18일

Android

목록 보기
1/3

안드로이드

안드로이드는 리눅스 시스템을 기반으로 한 플랫폼이다.
안드로이드는 리눅스에서 사용하는 User Id(UID)와 Group Id(GID)를 이용해 각 앱에 권한을 부여하게 된다. 기본적으로 안드로이드는 각 앱에 권한을 부여함으로써 다른 앱의 데이터에 접근할 수 없도록 구성되어 있다.

리눅스에서 터미널에 ls-al을 입력해 현재 폴더 파일의 상세 정보를 보면 아래와 같다.

$ ls -al
[권한]		  [UID]	 [GID]
drwxrwx--x  63 system system    4096 2022-06-28 14:03 data

권한이란?

  • d : Directory (폴더)
  • r : Read
  • w : Write
  • x : eXecute

drwxrwx--x는 아래와 같이 4부분으로 나눌 수 있다.

  • d : 해당 파일(폴더)에 대한 속성 (d : 폴더)
  • rwx : User(Owner)의 권한
  • rwx : Group(OwnerGroup)의 권한
  • --x : 그 외 사용자들(Others)의 권한

따라서, 위 폴더는 Owner와 OwnerGroup에서는 읽고 쓰고 실행이 가능하지만, 그 외 사용자는 실행만 가능하다는 뜻이다.

UID(User ID)란?

UID값을 통해 사용자를 식별한다. 이 UID를 통해 시스템 리소스(파일, 폴더 등)에 접근할 수 있는지를 확인하는 일에 사용되며 리눅스 상에서 유일한 값이 설정된다.

GID(Group ID)란?

여러 사용자(UID)를 하나의 그룹으로 묶을 수 있기 때문에 이 그룹에 속한 사용자들은 시스템 리소스(파일, 폴더 등)에 접근할 수 있다. 모든 사용자들은 하나 이상의 그룹의 멤버가 되며 primary group 이라하며, 하나의 사용자가 여러 그룹에 속하면 그 그룹들은 supplementray group이라고 한다.


위에서 언급한대로 설치된 앱들은 각자의 UID, GID를 가지고 있다. adb를 통해 확인해보면 아래와 같다.

$ ps -efl | grep com.

u0_a104      18133  3506 0 09:47:15 ?     00:00:02 com.google.android.googlequicksearchbox:interactor
u0_a193      18445  3506 0 14:11:57 ?     00:00:41 com.google.vr.vrcore
u0_a296      18531  3506 0 22:58:47 ?     00:00:01 com.samsung.android.oneconnect:Receiver
u0_a28       20166  3506 0 19:47:43 ?     00:00:13 com.google.process.gservices

맨 앞은 UID를 의미하며 앱 별로 UID가 다른 것을 확인할 수 있다. adb에서는 패키지명을 알고 있으면 해당 앱의 data에 접근할 수 있다. 단, debuggable 모드이거나 root모드여야 하므로 아래 예시에서는 임시로 만들었던 앱을 사용했다.

$ pm list packages
...
package:com.example.android.basicpermissions
...
$ run-as com.example.android.basicpermissions

dreamlteks:/data/data/com.example.android.basicpermissions $ whoami
u0_a225
dreamlteks:/data/data/com.example.android.basicpermissions $ ls -al
total 44
drwx------   4 u0_a225 u0_a225        4096 2022-03-31 16:06 .
drwxrwx--x 418 system  system        28672 2022-07-14 14:29 ..
drwxrws--x   2 u0_a225 u0_a225_cache  4096 2022-03-22 17:14 cache
drwxrws--x   2 u0_a225 u0_a225_cache  4096 2022-03-22 17:14 code_cache

위에서 볼 수 있듯이 이 폴더에는 u0_a225의 UID와 GID를 가진 사용자만 접근할 수 있는 것을 확인할 수 있다.

결론

안드로이드는 다른 앱이 내 앱의 데이터에 임의로 접근할 수 없도록 UID, GID를 이용해 권한을 제어한다는 것을 알 수 있었다.
그렇다고 다른 앱에 무조건 접근이 안되는건 아니고 앱별로 동일한 UID를 가질 수도 있는데, 그러기 위해서는 앱들이 같은 인증서로 서명이 되어있어야 한다고 한다.

공식문서

0개의 댓글