안 드 로 이 드 응용 샌 드 박스 메커니즘 상세 설명

6510 단어 Android샌 드 박스
머리말
안 드 로 이 드 는 샌 드 박스 를 사용 하여 사용자 가 악의 적 인 응용 으로 부터 침 해 를 받 지 않도록 보호 하 는 동시에 응용 을 분리 시 켜 서로 데 이 터 를 방문 하지 않도록 한다.본 고 는 주로 안 드 로 이 드 응용 샌 드 박스 의 몇 가지 기술 에 대해 간략하게 요약 하고 자 한다.
1.안 드 로 이 드 응용 DAC 샌 드 박스
  • 안 드 로 이 드 를 조금 아 는 사람 은 모두 알 고 있 습 니 다.안 드 로 이 드 의 앱 은 리 눅 스 의 사용자 프로그램 처럼 애플 리 케 이 션 을 시작 하 는 uid 기본 값 은 로그 인 사용자 의 uid 입 니 다.sudo 나 setuid 등 체 제 를 사용 하지 않 는 한.모든 안 드 로 이 드 애플 리 케 이 션 은 하나의 uid,즉 한 사용자 에 대응 하여 리 눅 스 시스템 의 DAC 체 제 를 통 해 응 용 된 데 이 터 를 엄 격 히 분리 합 니 다
  • 안 드 로 이 드 는/etc/passwd 설정 파일 과 useradd,usermod,userdel 등 바 이 너 리 를 사용 하여 사용 자 를 관리 하지 않 았 습 니 다.이런 것들 은 안 드 로 이 드 에 게 너무 복잡 합 니 다.실제로 안 드 로 이 드 가 uid 에 적용 한 맵 은 Package Manager Service 로 이 루어 졌 습 니 다.즉,PMS 이 며,/data/system/packages.xml 에 저 장 됩 니 다
  • 안 드 로 이 드 응용 프로그램 을 DAC 로 분리 한 후에 응용 프로그램 이 모든 시스템 자원 에 접근 하려 면 거부 되 기 때문에 안 드 로 이 드 는 응용 권한 체 제 를 설계 하여 응용 프로그램 에 시스템 자원 에 접근 하 는 통 로 를 제공 하 는 동시에 시스템 자원 이 남용 되 지 않도록 보호 한다
  • 다음은 Pixel 2 XL(RP1A.2010 05.004.A1)위의 예 입 니 다
  • 
    u:r:untrusted_app:s0:c161,c256,c512,c768 u0_a161 16613 887 14608676 86088 0                  0 S com.google.android.apps.photos
    u:r:untrusted_app:s0:c138,c256,c512,c768 u0_a138 17204 888 1402772 138956 0                  0 S com.android.chrome
    앨범 애플 리 케 이 션 을 볼 수 있 는 사용 자 는 u0 입 니 다.a161,Chrome 브 라 우 저 사용 자 는 u0a138
    2.Android 응용 권한
    Android 응용 권한 의 핵심 유형 은 네 가지 로 나 뉜 다.일반 권한,위험 권한,서명 권한,서명 또는 시스템 권한 이다.
    권한 형식
    권한 행위
    일반 권한(일반)
    일반 권한 은 AndroidManifest.xml 에서 만 설명 하면 사용 할 수 있 는 권한 입 니 다.
    위험 권한(dangerous)
    위험 권한 은 AndroidManifest.xml 에서 설명 해 야 하 는 것 을 제외 하고 Android 6.0 또는 더 높 은 버 전에 서 는 동적 권한 API 를 사용 하여 신청 해 야 하 며 사용자 가 동 의 를 클릭 해 야 사용 할 수 있 습 니 다.Android 5.1 및 이전 버 전에 서 는 설치 할 때 위험 권한 을 따로 표시 하여 사용자 에 게 특별히 알려 줍 니 다.사용자 정의 권한 이 위험 권한 으로 설정 되면 안 드 로 이 드 버 전이 얼마 든 설치 할 때 위험 권한 을 따로 표시 합 니 다.
    서명 권한(서명)
    서명 권한 은 이 권한 을 정의 하 는 가방 과 같은 서명 만 부여 합 니 다.
    서명 또는 시스템 권한(signatureOrSystem)
    signature|privileged 의 옛 동의어 입 니 다.서명 이나 시스템 권한 과 서명 권한 의 유일한 차이 점 은 서명 이나 시스템 권한 도 특권 응용(privapp)이 필드 는 현재 버 려 졌 습 니 다.
    사용자 정의 권한 에 서 는 민감 한 인 터 페 이 스 를 보호 하기 위해 서명 권한 을 자주 사용 합 니 다.
    3.응용 정보의 저장
    응용 정보의 저장 은 앞에서 언급 한 바 와 같이/data/system/packages.xml 에 있 습 니 다.이 안 에는 응용 되 는 각종 정보 가 저장 되 어 있 습 니 다.다음은 예제 입 니 다.
    
    <package name="com.android.storagemanager" codePath="/system/priv-app/StorageManager" nativeLibraryPath="/system/priv-app/StorageManager/lib" publicFlags="541605445" privateFlags="8" ft="165151eba60" it="165151eba60" ut="165151eba60" version="29" user appUseNotchMode="0" appUseSideMode="1" hwExtraFlags="0" isOrphaned="true" forceDarkMode="2">
        <sigs count="1" schemeVersion="1">
            <cert index="13" />
        </sigs>
        <perms>
            <item name="android.permission.USE_RESERVED_DISK" granted="true" flags="0" />
            <!-- ... -->
        </perms>
        <proper-signing-keyset identifier="3" />
    </package>
    <package name="com.android.settings" codePath="/system/priv-app/Settings" nativeLibraryPath="/system/priv-app/Settings/lib" publicFlags="675823173" privateFlags="8" ft="165151eba60" it="165151eba60" ut="165151eba60" version="10010400" sharedUser appUseNotchMode="0" appUseSideMode="1" hwExtraFlags="0" isOrphaned="true" forceDarkMode="2">
        <sigs count="1" schemeVersion="1">
            <cert index="0" />
        </sigs>
        <perms>
            <item name="android.permission.REAL_GET_TASKS" granted="true" flags="0" />
            <!-- ... -->
        </perms>
        <proper-signing-keyset identifier="1" />
    </package>
    4.567917.이 파일 에 많은 내용 이 저장 되 어 있 는 것 을 볼 수 있 습 니 다.가장 관건 적 인 정 보 는 응용 uid,가방 이름,각종 경로,그리고 정의 와 권한 을 포함 합 니 다4
  • 예 를 들 어 StorageManager 라 는 응용 uid 는 10036 이 고 설정 한 uid 는 1000,즉 system 의 uid 이다.
  • 4.응용 권한 의 맵
    4.567917.우 리 는 안 드 로 이 드 가 리 눅 스 커 널 을 사용 하 는 것 을 알 고 있 습 니 다.리 눅 스 의 안전 모델 에서 시스템 자원 에 접근 하려 면 시스템 자원 에 접근 하 는 사용자 와 프로 세 스 는 해당 하 는 권한 을 가 져 야 합 니 다
  • 안 드 로 이 드 는 어떻게 자체 적 으로 정 의 된 안 드 로 이 드 권한 을 리 눅 스 차원 의 권한 에 투사 합 니까?정 답 은/etc/permissions/platform.xml 에 있 습 니 다.다음은 이 파일 의 선택 입 니 다
  • 
    <permission name="android.permission.BLUETOOTH_ADMIN" >
        <group g />
    </permission>
    <permission name="android.permission.BLUETOOTH" >
        <group g />
    </permission>
    안 드 로 이 드 의 블 루 투 스 권한 두 개가 각각 net 에 대응 하 는 것 을 보 여 줍 니 다.bt_admin 과 netbt 두 리 눅 스 그룹 은 응용 에 해당 하 는 권한 을 부여 할 때 PMS 는 uid 를 이 두 그룹 에 자동 으로 추가 합 니 다.그러면 응용 은 해당 시스템 자원 에 대한 접근 권한 을 가 집 니 다.
    5.응용 SELinux 태그
    안 드 로 이 드 가 SELinux 를 도입 한 후에 응용 권한 에 대한 구분 이 더욱 세밀 해 졌 다.안 드 로 이 드 는 기본적으로 응용 을 네 가지 로 나 누 었 다.믿 을 수 없 는 응용,특권 응용,플랫폼 응용 과 시스템 응용 이다.
    SELinux 태그
    태그 행동
    믿 을 수 없 는 응용(untrustedapp)
    신뢰 할 수 없 는 응용 프로그램 은 최소한 의 특권 을 가지 고 있 으 며,시스템 자원 에 접근 하 는 것 은 엄격 한 제한 을 받 고 있 으 며,모든 사용자 가 설치 한 응용 프로그램 과 일부 프 리 셋 응용 프로그램 은 이 탭 에 속 합 니 다.
    특권 적용(priv-app)
    특권 은/system/priv-app 디 렉 터 리 나 OEM 이 정의 하 는 다른 디 렉 터 리 에 있 습 니 다.마 운 트 해제 할 수 없 지만 system uid 로 실행 되 지 않 습 니 다.
    플랫폼 응용(platformapp)
    플랫폼 응용 프로그램 은 플랫폼 서명 을 갖 추고 있 지만 시스템 uid 로 실행 되 지 않 습 니 다.AOSP 와 일부 제3자 ROM 을 제외 하고 거의 모든 OEM 이 플랫폼 의 비밀 키 를 공개 하지 않 기 때문에 일반적인 상황 에서 플랫폼 응용 은 OEM 이 제공 할 수 밖 에 없다.
    시스템 응용(systemapp)
    시스템 응용 프로그램 은 플랫폼 서명 을 갖 추고 있 으 며 시스템 uid 로 실 행 됩 니 다(android:shared UserId="android.uid.system"설정).시스템 uid 를 사용 하여 실행 하 는 것 은 샌 드 박스 의 제한 을 받 지 않 고 대부분의 안 드 로 이 드 프레임 워 크 의 시스템 자원 에 접근 할 수 있다 는 것 을 의미 합 니 다.
    다음은 Pixel 2 XL(RP1A.2010 05.004.A1)위의 예 입 니 다.
    다음 과 같은 결론 을 얻 을 수 있다.
    크롬 은 이 핸드폰 에 untrustedapp 4
  • 시동 기 nexuslauncher 는 이 핸드폰 에 priv 입 니 다.app
  • 4.567917.systemui 는 이 핸드폰 에 platform 입 니 다.app 이 핸드폰 에 settings 를 설치 하면 systemapp
    분명히 설정 만 시스템 uid 로 실행 되 고 다른 프로 세 스 는 일반적인 uid 를 사용 합 니 다.
    6.안 드 로 이 드 응용 MAC 샌 드 박스
    위 에서 말 한 SELinux 태그,Android 는 소스 코드 에서 서로 다른 SELinux 정책 을 정의 하여 MAC 차원 의 샌 드 박스 강 화 를 실현 했다.
    이상 은 안 드 로 이 드 응용 샌 드 박스 체제 에 대한 상세 한 내용 입 니 다.안 드 로 이 드 응용 샌 드 박스 체제 에 관 한 더 많은 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기