SlideShare a Scribd company logo
Android Security Internals
- 3장 패키지 관리
석사 29기 박준영
Contents
• 패키지 전체 구조
• 패키지 서명
• APK 설치 / 업데이트 과정
• 암호화된 APK 설치
• (구) 포워드 락 / (신) 포워드 락
• 패키지 검증
• 요약
Android App Package
• APK ( JAR ( ZIP ) )
• App Code
• App Resource
• App Manifest
1. 패키지명 / 버전 / 컴포넌트 및 기타 데이터 선언
2. 폰트 / 음악파일 등
3. 앱 실행 코드, native dex format (Dalvik VM)
4. JNI를 이용한 Native Library 이용시 arch마다 dir생성.
5. Package manifest file / Code signature
6. 리소스 (Animation / Image .. )
7. 문자열 / 스타일 등 컴파일된 리소스
!
"
#
$
%
&
'
Code Sign (JAVA)
• Signature 보호 수준의 권한을 부여
• 프로그램 무결성 보증
• 생성자 확인
MANIFEST.MF
filename - sign
filename - sign
filename - sign
…
MANIFEST.MF
파일명 - 서명값 쌍의 묶음
CERT.SF
전체 매니페스트 파일
+
각 항목의 SHA1-Digest
CERT.SF에 의해
MANIFEST.MF가 검증됨.
——————————— 중략 ———————————
!
"
#$
%
&
'
(
1. 객체 식별자
2. 버전
3. 사용된 해시 알고리즘 식별자
4. 서명한 데이터 형
5. 서명값을 포함한 SignerInfo 구조체
6. 사용된 다이제스트 알고리즘
7. 서명값 생성에 사용된 다이제스트 암호화 알
8. 서명값
Common Code Sign
vs
Android Code Sign
공개키 암호 기반
X.509 인증서 포맷
PKI측면의 인증서 검증 X
모든 APK항목
동일 인증서로 서명
공통점 차이점
signapk
• code signing tool for Android
• 특장점을 제외하면 jarsigner와 거의 동일하게 작동.
• SHA1 + SHA256 / ECDSA 서명 추가지원
• 전체 파일 서명모드 (OTA Update 용)
• Google play store
• Sideloading (apk를 디바이스에 넣어 실행하여 바로 설치)
• adb install
• shell을 이용하여 시스템 앱 디렉토리에 복사하여 설치
APK 설치 방법
App Package의 위치
• /system/app - 대부분의 시스템 앱
• /system/priv-app - SignatureOrSystem 보호 수준 권한의 앱
• /system/vendor/app - 제조사 고유 앱
• /data/app - 사용자 설치 앱
Package Installer (System App)
• 패키지 관리에 대한 기본 정보를 GUI로 보여줌
• 패키지 정보를 분석, 앱의 요구권한 표시
• [알 수 없는 출처] 옵션 활성화했을 경우만 설치 가능
• 이후 pm명령(CLI기반)을 통해 설치/제거
알 수 없는 출처
/system/priv-app 내의 권한있는 앱인지 검사 후
권한이 없다면 ‘알 수 없는 출처’
Package Manager Service
• 패키지 관리 기반 구조의 핵심 객체
• APK 파싱, 앱 설치 시작, 패키지 업그레이드/제거, 패키지 DB유지, 권한 관리
• installPackageWithVerificationAndEncryption()

- 암호화된 APK파일 설치, 검증 Agent를 통해 패키지 검증.
Installer 클래스
• /dev/socker/installd 소켓을 통해 installd 데몬에 연결, 전달할 명령 캡슐화.
• system UID로 실행.
• 앱 디렉터리 생성, 삭제, 변경 위해 installd 데몬에 작업 위임
installd 데몬
• 앱 관리 기능을 시스템 패키지 매니저에 제공
• 높은 권한을 가진 네이티브 데몬
• dexopt 명령 실행 (odex 생성)
• system UID로 실행되는 프로세스만 접근
• Opaque Binary Blob(OBB)파일 / 외장 메모리 등 마운팅
• 디바이스 암호화
• 패스워드 변경
• 보안 컨테이너 관리 (포워드 락 구현을 위함)
• system UID로 실행됨
마운트 서비스
OBB
void 데몬
• 볼륨 관리 데몬
• root 사용자로 실행됨
• 파일시스템 생성 / 포맷
• 보안 컨테이너 관리
미디어 컨테이너 서비스
• APK 파일 복사(설치 위치 or 암호화된 컨테이너)
• 패키지 매니저 서비스가 이동식 저장소에 접근할 수 있게 함
• 암호화된 APK파일 복호화
• 마운트 서비스에 암호화된 컨테이너 생성 위임,

새로 생성된 컨테이너에 APK의 보호된 부분 복사.
앱 디렉터리 감시자
• 앱 디렉터리가 변경되는지를 항상 감시
• APK파일이 추가될 시 패키지 검사 후 앱 설치 / 업데이트
패키지 설치
• 패키지 파싱 / 검증
• 권한 허용 / 설치과정 시작
• 앱 디렉터리 복사
• 패키지 스캐닝
• 데이터 디렉터리 생성
• ODEX 생성
• packages.xml 갱신
• 컴포넌트와 권한 갱신
• ‘알 수 없는 출처’ 설치 여부 체크
• APK파일 파싱
• AndroidManifest.xml / 패키지 서명에서 정보 수집
• APK파일의 무결성 검증
패키지 파싱 / 검증
패키지 설치
• 패키지 파싱 / 검증
• 권한 허용 / 설치과정 시작
• 앱 디렉터리 복사
• 패키지 스캐닝
• 데이터 디렉터리 생성
• ODEX 생성
• packages.xml 갱신
• 컴포넌트와 권한 갱신
• 앱이 요청하는 권한 정보 출력
• InstallAppProgress Activity에 설치 정보 전달
• installPackageWithVerificationAndEncryption() 실행
• InstallAppProgress는 오류대기상태
권한 허용 / 설치과정 시작
패키지 설치
• 패키지 파싱 / 검증
• 권한 허용 / 설치과정 시작
• 앱 디렉터리 복사
• 패키지 스캐닝
• 데이터 디렉터리 생성
• ODEX 생성
• packages.xml 갱신
• 컴포넌트와 권한 갱신
• /data/app에 apk파일 복사
• /data/app-lib로 앱 라이브러리 복사
• 패키지명에 기반한 이름으로 변경(com.example...apk)
• apk 파일 권한 0644로 설정
• SELinux 컨텍스트 설정
앱 디렉터리 복사
패키지 설치
• 패키지 파싱 / 검증
• 권한 허용 / 설치과정 시작
• 앱 디렉터리 복사
• 패키지 스캐닝
• 데이터 디렉터리 생성
• ODEX 생성
• packages.xml 갱신
• 컴포넌트와 권한 갱신
• dexopt명령을 installd에 보내 위임
• dexopt를 fork()
• /data/dalvik-cache 디렉터리에 odex 생성
ODEX 생성
패키지 설치
• 패키지 파싱 / 검증
• 권한 허용 / 설치과정 시작
• 앱 디렉터리 복사
• 패키지 스캐닝
• 데이터 디렉터리 생성
• ODEX 생성
• packages.xml 갱신
• 컴포넌트와 권한 갱신
packages.xml 갱신
패키지 설치
• 패키지 파싱 / 검증
• 권한 허용 / 설치과정 시작
• 앱 디렉터리 복사
• 패키지 스캐닝
• 데이터 디렉터리 생성
• ODEX 생성
• packages.xml 갱신
• 컴포넌트와 권한 갱신
• 내부 컴포넌트 레지스트리에 새 앱의 컴포넌트 추가
• 앱이 선언한 권한 그룹 / 권한 추가
• 패키지 DB 변경내용 디스크에 저장
• 다른 컴포넌트들에게 Broadcast
컴포턴트와 권한 갱신
패키지 업데이트
• 서명 검증

- 기존 패키지와 동일한 서명자에 의해 서명되어 있는지.
• 반드시 원래의 인증서를 이용해 서명해야 함
암호화된 APK 설치
• Android 4.1부터 적용
• PackageInstaller는 암호화된 APK를 지원하지 않음
• pm명령 사용 or 설치앱 직접 제작
• adb install = adb push + pm install
adb install [-l] [-r] [-s] [—algo <알고리즘 명> --key <16진수 키> --iv <16진수 IV>] <file>
(구) 포워드 락
• 사용자가 유료 앱을 다른 사용자에게 전달하지 못하도록 함
• /data/app : 리소스 / 매니페스트 (누구나 읽을 수 있음)
• /data/app-private : 실행코드 (system 사용자만 읽을 수 있음)
• root권한을 가진 디바이스에서 추출 가능
• ‘Google Play Licensing’으로 교체, 이후 새로운 포워드 락으로 개선
안드로이드 4.1 포워드 락
• 컨테이너에 ext4 Filesystem 사용
• res.zip은 누구나 읽기 가능
• pkg.apk는 앱 전용사용자만 읽기 가능
• /data/app-asec 에 .asec 확장자를 가진 파일로 저장됨.
패키지 검증
• 악성코드 / 멀웨어 등 유해가능성이 있는 앱으로부터 보호
• 구글에 앱 데이터를 전송하여 검증
요약
• APK 파일은 JAR의 확장

- 리소스, 코드, Manifest등을 담고있음.
• APK는 JAR 파일과 같은 코드 서명 포맷으로 서명되지만, 모든 파일을 동일 인증
서 집합으로 서명해야 함.
• 업데이트 시 코드 서명자의 ‘인증서’를 기반으로 신뢰 관계 설정
• 포워드 락 구현을 위해 암호화된 APK 파일과 보안 앱 컨테이너 지원
• 구글에서 지원하는 앱 검증 사용 가능
Question & Answer

More Related Content

Similar to Android Security Internals (Lesson 3)

Debian packaging - basic process
Debian packaging - basic processDebian packaging - basic process
Debian packaging - basic process
경섭 심
 
Open stack swift 디버깅 시작하기
Open stack swift 디버깅 시작하기Open stack swift 디버깅 시작하기
Open stack swift 디버깅 시작하기
영우 김
 
Springmvc
SpringmvcSpringmvc
Springmvc
HyungKuIm
 
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
Amazon Web Services Korea
 
DevOps Study
DevOps StudyDevOps Study
DevOps Study
상환 이
 
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XpressEngine
 
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기
Ji-Woong Choi
 
Ubuntu packaging - deploy package
Ubuntu packaging - deploy packageUbuntu packaging - deploy package
Ubuntu packaging - deploy package
경섭 심
 
리스펙토링 세미나 - 나만의 카카오 챗봇 만들기
리스펙토링 세미나 - 나만의 카카오 챗봇 만들기리스펙토링 세미나 - 나만의 카카오 챗봇 만들기
리스펙토링 세미나 - 나만의 카카오 챗봇 만들기
Wooyoung Ko
 
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
ymtech
 
세션2_데보션테크데이_Decapod_v1.2.pdf
세션2_데보션테크데이_Decapod_v1.2.pdf세션2_데보션테크데이_Decapod_v1.2.pdf
세션2_데보션테크데이_Decapod_v1.2.pdf
Jaesuk Ahn
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
Peter YoungSik Yun
 
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
Hong Min Kim
 
(160820) #fitalk fileless malware forensics
(160820) #fitalk    fileless malware forensics(160820) #fitalk    fileless malware forensics
(160820) #fitalk fileless malware forensics
INSIGHT FORENSIC
 
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
Ji-Woong Choi
 
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdf
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdfletswift22_우당탕탕 확장 프로그램(이다혜 light).pdf
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdf
Lee Dahae
 
okspring3x
okspring3xokspring3x
okspring3x
Kenu, GwangNam Heo
 
Firefox OS 앱 개발하기 - 1주차
Firefox OS 앱 개발하기 - 1주차Firefox OS 앱 개발하기 - 1주차
Firefox OS 앱 개발하기 - 1주차Channy Yun
 

Similar to Android Security Internals (Lesson 3) (20)

Debian packaging - basic process
Debian packaging - basic processDebian packaging - basic process
Debian packaging - basic process
 
Open stack swift 디버깅 시작하기
Open stack swift 디버깅 시작하기Open stack swift 디버깅 시작하기
Open stack swift 디버깅 시작하기
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
 
DevOps Study
DevOps StudyDevOps Study
DevOps Study
 
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
 
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
 
[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기
 
Ubuntu packaging - deploy package
Ubuntu packaging - deploy packageUbuntu packaging - deploy package
Ubuntu packaging - deploy package
 
리스펙토링 세미나 - 나만의 카카오 챗봇 만들기
리스펙토링 세미나 - 나만의 카카오 챗봇 만들기리스펙토링 세미나 - 나만의 카카오 챗봇 만들기
리스펙토링 세미나 - 나만의 카카오 챗봇 만들기
 
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
 
세션2_데보션테크데이_Decapod_v1.2.pdf
세션2_데보션테크데이_Decapod_v1.2.pdf세션2_데보션테크데이_Decapod_v1.2.pdf
세션2_데보션테크데이_Decapod_v1.2.pdf
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
 
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
 
(160820) #fitalk fileless malware forensics
(160820) #fitalk    fileless malware forensics(160820) #fitalk    fileless malware forensics
(160820) #fitalk fileless malware forensics
 
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
 
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdf
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdfletswift22_우당탕탕 확장 프로그램(이다혜 light).pdf
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdf
 
okspring3x
okspring3xokspring3x
okspring3x
 
Firefox OS 앱 개발하기 - 1주차
Firefox OS 앱 개발하기 - 1주차Firefox OS 앱 개발하기 - 1주차
Firefox OS 앱 개발하기 - 1주차
 

More from Joon Young Park

WheelLogger_WISA
WheelLogger_WISAWheelLogger_WISA
WheelLogger_WISA
Joon Young Park
 
Power spy
Power spyPower spy
Power spy
Joon Young Park
 
MoLe: Motion Leaks through Smartwatch Sensors
MoLe: Motion Leaks through Smartwatch SensorsMoLe: Motion Leaks through Smartwatch Sensors
MoLe: Motion Leaks through Smartwatch Sensors
Joon Young Park
 
MACTANS: Injecting Malware
into iOS Devices via Malicious Chargers
MACTANS: Injecting Malware
into iOS Devices via Malicious ChargersMACTANS: Injecting Malware
into iOS Devices via Malicious Chargers
MACTANS: Injecting Malware
into iOS Devices via Malicious Chargers
Joon Young Park
 
Leave me alone; app level protection against runtime information gathering on...
Leave me alone; app level protection against runtime information gathering on...Leave me alone; app level protection against runtime information gathering on...
Leave me alone; app level protection against runtime information gathering on...
Joon Young Park
 
Delegation-based Authentication and Authorization for the IP-based IoT
Delegation-based Authentication and Authorization for the IP-based IoTDelegation-based Authentication and Authorization for the IP-based IoT
Delegation-based Authentication and Authorization for the IP-based IoT
Joon Young Park
 
Lithe: Lightweight Secure CoAP for the Internet of Things
Lithe: Lightweight Secure CoAP for the Internet of ThingsLithe: Lightweight Secure CoAP for the Internet of Things
Lithe: Lightweight Secure CoAP for the Internet of Things
Joon Young Park
 
Electronic Signature
Electronic SignatureElectronic Signature
Electronic Signature
Joon Young Park
 
RSA Algorithm
RSA AlgorithmRSA Algorithm
RSA Algorithm
Joon Young Park
 
SPINS: Security Protocols for Sensor Networks
SPINS: Security Protocols for Sensor NetworksSPINS: Security Protocols for Sensor Networks
SPINS: Security Protocols for Sensor Networks
Joon Young Park
 
MiTumb
MiTumbMiTumb
Linux Remote Connection
Linux Remote ConnectionLinux Remote Connection
Linux Remote Connection
Joon Young Park
 
License Plate Recognition
License Plate RecognitionLicense Plate Recognition
License Plate Recognition
Joon Young Park
 
Digital Forensics
Digital ForensicsDigital Forensics
Digital Forensics
Joon Young Park
 
DDD
DDDDDD
Baas.io
Baas.ioBaas.io
LBSNS Flatform Business
LBSNS Flatform BusinessLBSNS Flatform Business
LBSNS Flatform Business
Joon Young Park
 

More from Joon Young Park (17)

WheelLogger_WISA
WheelLogger_WISAWheelLogger_WISA
WheelLogger_WISA
 
Power spy
Power spyPower spy
Power spy
 
MoLe: Motion Leaks through Smartwatch Sensors
MoLe: Motion Leaks through Smartwatch SensorsMoLe: Motion Leaks through Smartwatch Sensors
MoLe: Motion Leaks through Smartwatch Sensors
 
MACTANS: Injecting Malware
into iOS Devices via Malicious Chargers
MACTANS: Injecting Malware
into iOS Devices via Malicious ChargersMACTANS: Injecting Malware
into iOS Devices via Malicious Chargers
MACTANS: Injecting Malware
into iOS Devices via Malicious Chargers
 
Leave me alone; app level protection against runtime information gathering on...
Leave me alone; app level protection against runtime information gathering on...Leave me alone; app level protection against runtime information gathering on...
Leave me alone; app level protection against runtime information gathering on...
 
Delegation-based Authentication and Authorization for the IP-based IoT
Delegation-based Authentication and Authorization for the IP-based IoTDelegation-based Authentication and Authorization for the IP-based IoT
Delegation-based Authentication and Authorization for the IP-based IoT
 
Lithe: Lightweight Secure CoAP for the Internet of Things
Lithe: Lightweight Secure CoAP for the Internet of ThingsLithe: Lightweight Secure CoAP for the Internet of Things
Lithe: Lightweight Secure CoAP for the Internet of Things
 
Electronic Signature
Electronic SignatureElectronic Signature
Electronic Signature
 
RSA Algorithm
RSA AlgorithmRSA Algorithm
RSA Algorithm
 
SPINS: Security Protocols for Sensor Networks
SPINS: Security Protocols for Sensor NetworksSPINS: Security Protocols for Sensor Networks
SPINS: Security Protocols for Sensor Networks
 
MiTumb
MiTumbMiTumb
MiTumb
 
Linux Remote Connection
Linux Remote ConnectionLinux Remote Connection
Linux Remote Connection
 
License Plate Recognition
License Plate RecognitionLicense Plate Recognition
License Plate Recognition
 
Digital Forensics
Digital ForensicsDigital Forensics
Digital Forensics
 
DDD
DDDDDD
DDD
 
Baas.io
Baas.ioBaas.io
Baas.io
 
LBSNS Flatform Business
LBSNS Flatform BusinessLBSNS Flatform Business
LBSNS Flatform Business
 

Android Security Internals (Lesson 3)

  • 1. Android Security Internals - 3장 패키지 관리 석사 29기 박준영
  • 2. Contents • 패키지 전체 구조 • 패키지 서명 • APK 설치 / 업데이트 과정 • 암호화된 APK 설치 • (구) 포워드 락 / (신) 포워드 락 • 패키지 검증 • 요약
  • 3. Android App Package • APK ( JAR ( ZIP ) ) • App Code • App Resource • App Manifest
  • 4. 1. 패키지명 / 버전 / 컴포넌트 및 기타 데이터 선언 2. 폰트 / 음악파일 등 3. 앱 실행 코드, native dex format (Dalvik VM) 4. JNI를 이용한 Native Library 이용시 arch마다 dir생성. 5. Package manifest file / Code signature 6. 리소스 (Animation / Image .. ) 7. 문자열 / 스타일 등 컴파일된 리소스 ! " # $ % & '
  • 5. Code Sign (JAVA) • Signature 보호 수준의 권한을 부여 • 프로그램 무결성 보증 • 생성자 확인 MANIFEST.MF filename - sign filename - sign filename - sign …
  • 6. MANIFEST.MF 파일명 - 서명값 쌍의 묶음 CERT.SF 전체 매니페스트 파일 + 각 항목의 SHA1-Digest CERT.SF에 의해 MANIFEST.MF가 검증됨.
  • 7. ——————————— 중략 ——————————— ! " #$ % & ' ( 1. 객체 식별자 2. 버전 3. 사용된 해시 알고리즘 식별자 4. 서명한 데이터 형 5. 서명값을 포함한 SignerInfo 구조체 6. 사용된 다이제스트 알고리즘 7. 서명값 생성에 사용된 다이제스트 암호화 알 8. 서명값
  • 8. Common Code Sign vs Android Code Sign 공개키 암호 기반 X.509 인증서 포맷 PKI측면의 인증서 검증 X 모든 APK항목 동일 인증서로 서명 공통점 차이점
  • 9. signapk • code signing tool for Android • 특장점을 제외하면 jarsigner와 거의 동일하게 작동. • SHA1 + SHA256 / ECDSA 서명 추가지원 • 전체 파일 서명모드 (OTA Update 용)
  • 10. • Google play store • Sideloading (apk를 디바이스에 넣어 실행하여 바로 설치) • adb install • shell을 이용하여 시스템 앱 디렉토리에 복사하여 설치 APK 설치 방법
  • 11. App Package의 위치 • /system/app - 대부분의 시스템 앱 • /system/priv-app - SignatureOrSystem 보호 수준 권한의 앱 • /system/vendor/app - 제조사 고유 앱 • /data/app - 사용자 설치 앱
  • 12. Package Installer (System App) • 패키지 관리에 대한 기본 정보를 GUI로 보여줌 • 패키지 정보를 분석, 앱의 요구권한 표시 • [알 수 없는 출처] 옵션 활성화했을 경우만 설치 가능 • 이후 pm명령(CLI기반)을 통해 설치/제거 알 수 없는 출처 /system/priv-app 내의 권한있는 앱인지 검사 후 권한이 없다면 ‘알 수 없는 출처’
  • 13. Package Manager Service • 패키지 관리 기반 구조의 핵심 객체 • APK 파싱, 앱 설치 시작, 패키지 업그레이드/제거, 패키지 DB유지, 권한 관리 • installPackageWithVerificationAndEncryption()
 - 암호화된 APK파일 설치, 검증 Agent를 통해 패키지 검증.
  • 14. Installer 클래스 • /dev/socker/installd 소켓을 통해 installd 데몬에 연결, 전달할 명령 캡슐화. • system UID로 실행. • 앱 디렉터리 생성, 삭제, 변경 위해 installd 데몬에 작업 위임
  • 15. installd 데몬 • 앱 관리 기능을 시스템 패키지 매니저에 제공 • 높은 권한을 가진 네이티브 데몬 • dexopt 명령 실행 (odex 생성) • system UID로 실행되는 프로세스만 접근
  • 16. • Opaque Binary Blob(OBB)파일 / 외장 메모리 등 마운팅 • 디바이스 암호화 • 패스워드 변경 • 보안 컨테이너 관리 (포워드 락 구현을 위함) • system UID로 실행됨 마운트 서비스 OBB
  • 17. void 데몬 • 볼륨 관리 데몬 • root 사용자로 실행됨 • 파일시스템 생성 / 포맷 • 보안 컨테이너 관리
  • 18. 미디어 컨테이너 서비스 • APK 파일 복사(설치 위치 or 암호화된 컨테이너) • 패키지 매니저 서비스가 이동식 저장소에 접근할 수 있게 함 • 암호화된 APK파일 복호화 • 마운트 서비스에 암호화된 컨테이너 생성 위임,
 새로 생성된 컨테이너에 APK의 보호된 부분 복사.
  • 19. 앱 디렉터리 감시자 • 앱 디렉터리가 변경되는지를 항상 감시 • APK파일이 추가될 시 패키지 검사 후 앱 설치 / 업데이트
  • 20. 패키지 설치 • 패키지 파싱 / 검증 • 권한 허용 / 설치과정 시작 • 앱 디렉터리 복사 • 패키지 스캐닝 • 데이터 디렉터리 생성 • ODEX 생성 • packages.xml 갱신 • 컴포넌트와 권한 갱신 • ‘알 수 없는 출처’ 설치 여부 체크 • APK파일 파싱 • AndroidManifest.xml / 패키지 서명에서 정보 수집 • APK파일의 무결성 검증 패키지 파싱 / 검증
  • 21. 패키지 설치 • 패키지 파싱 / 검증 • 권한 허용 / 설치과정 시작 • 앱 디렉터리 복사 • 패키지 스캐닝 • 데이터 디렉터리 생성 • ODEX 생성 • packages.xml 갱신 • 컴포넌트와 권한 갱신 • 앱이 요청하는 권한 정보 출력 • InstallAppProgress Activity에 설치 정보 전달 • installPackageWithVerificationAndEncryption() 실행 • InstallAppProgress는 오류대기상태 권한 허용 / 설치과정 시작
  • 22. 패키지 설치 • 패키지 파싱 / 검증 • 권한 허용 / 설치과정 시작 • 앱 디렉터리 복사 • 패키지 스캐닝 • 데이터 디렉터리 생성 • ODEX 생성 • packages.xml 갱신 • 컴포넌트와 권한 갱신 • /data/app에 apk파일 복사 • /data/app-lib로 앱 라이브러리 복사 • 패키지명에 기반한 이름으로 변경(com.example...apk) • apk 파일 권한 0644로 설정 • SELinux 컨텍스트 설정 앱 디렉터리 복사
  • 23. 패키지 설치 • 패키지 파싱 / 검증 • 권한 허용 / 설치과정 시작 • 앱 디렉터리 복사 • 패키지 스캐닝 • 데이터 디렉터리 생성 • ODEX 생성 • packages.xml 갱신 • 컴포넌트와 권한 갱신 • dexopt명령을 installd에 보내 위임 • dexopt를 fork() • /data/dalvik-cache 디렉터리에 odex 생성 ODEX 생성
  • 24. 패키지 설치 • 패키지 파싱 / 검증 • 권한 허용 / 설치과정 시작 • 앱 디렉터리 복사 • 패키지 스캐닝 • 데이터 디렉터리 생성 • ODEX 생성 • packages.xml 갱신 • 컴포넌트와 권한 갱신 packages.xml 갱신
  • 25. 패키지 설치 • 패키지 파싱 / 검증 • 권한 허용 / 설치과정 시작 • 앱 디렉터리 복사 • 패키지 스캐닝 • 데이터 디렉터리 생성 • ODEX 생성 • packages.xml 갱신 • 컴포넌트와 권한 갱신 • 내부 컴포넌트 레지스트리에 새 앱의 컴포넌트 추가 • 앱이 선언한 권한 그룹 / 권한 추가 • 패키지 DB 변경내용 디스크에 저장 • 다른 컴포넌트들에게 Broadcast 컴포턴트와 권한 갱신
  • 26. 패키지 업데이트 • 서명 검증
 - 기존 패키지와 동일한 서명자에 의해 서명되어 있는지. • 반드시 원래의 인증서를 이용해 서명해야 함
  • 27. 암호화된 APK 설치 • Android 4.1부터 적용 • PackageInstaller는 암호화된 APK를 지원하지 않음 • pm명령 사용 or 설치앱 직접 제작 • adb install = adb push + pm install adb install [-l] [-r] [-s] [—algo <알고리즘 명> --key <16진수 키> --iv <16진수 IV>] <file>
  • 28. (구) 포워드 락 • 사용자가 유료 앱을 다른 사용자에게 전달하지 못하도록 함 • /data/app : 리소스 / 매니페스트 (누구나 읽을 수 있음) • /data/app-private : 실행코드 (system 사용자만 읽을 수 있음) • root권한을 가진 디바이스에서 추출 가능 • ‘Google Play Licensing’으로 교체, 이후 새로운 포워드 락으로 개선
  • 29. 안드로이드 4.1 포워드 락 • 컨테이너에 ext4 Filesystem 사용 • res.zip은 누구나 읽기 가능 • pkg.apk는 앱 전용사용자만 읽기 가능 • /data/app-asec 에 .asec 확장자를 가진 파일로 저장됨.
  • 30. 패키지 검증 • 악성코드 / 멀웨어 등 유해가능성이 있는 앱으로부터 보호 • 구글에 앱 데이터를 전송하여 검증
  • 31. 요약 • APK 파일은 JAR의 확장
 - 리소스, 코드, Manifest등을 담고있음. • APK는 JAR 파일과 같은 코드 서명 포맷으로 서명되지만, 모든 파일을 동일 인증 서 집합으로 서명해야 함. • 업데이트 시 코드 서명자의 ‘인증서’를 기반으로 신뢰 관계 설정 • 포워드 락 구현을 위해 암호화된 APK 파일과 보안 앱 컨테이너 지원 • 구글에서 지원하는 앱 검증 사용 가능