1. 개요
사용자가 홈 버튼을 누르거나, 앱이 실행중인 상태에서 다른 앱을 실행하여 앱이 백그라운드 모드로 전환되면 안드로이드는 현재 앱 액티비티의 스크린샷을 생성하여 작업 관리자(task manager)에서 확인할 수 있으며, 사용자가 최근 사용한 앱 목록을 볼 때 표시된다. 이 기능은 사용자에게 편리함을 제공하지만, 동시에 보안상의 위험을 초래할 수 있다. 예를 들어, 앱이 민감한 정보를 화면에 표시하고 있는 경우, 스크린샷이 기록되어 작업 관리자에 노출될 수 있다. 이는 민감한 정보의 외부 노출로 이어질 수 있으므로, 민감한 정보가 스크린샷에 포함되지 않도록 해야 한다.
💡 더 알아보기
작업 관리자의 명칭은 구글 공식 문서에서도 다양한 이름으로 사용하고 있다.
영문으로는 Recents screen, Overview screen, Recent task list, recent apps screen 등으로 사용한다. 하지만 기능은 최근 사용한 액티비티와 작업을 나열하는 시스템 수준 UI를 제공한다. 사용자는 목록을 탐색하고, 다시 사용할 앱을 선택하거나 스와이프해서 제거할 수 있다.
공식 문서: https://developer.android.com/guide/components/activities/recents
작업 관리자는 홈 버튼이 없는 모델의 경우 화면 하단에서 천천히 스와이프 하면 접근할 수 있다. 실행중인 앱의 목록을 확인할 수 있으며, 마지막으로 동작한 앱 화면이 나타난다.
작업 관리자에서는 앱이 동작하는 상태가 아닌 뷰의 스크린샷의 이미지 파일이 시스템 경로 내 저장된다. 루트(root) 또는 시스템 사용자만 해당 폴더에 접근할 수 있지만, 적은 데이터 양이라도 노출되는 경우 민감정보 유출로 이어질 수 있다.
2. 진단 방법
adb를 이용하여 백그라운드 이미지가 저장되는 경로에 접근하고 ‘adb pull’ 명령을 이용하여 파일을 추출하고 확인할 수 있다.
1. 백그라운드 이미지 저장 위치 접근
ADB # cd /data/system_ce/0/recent_images/
ADB # cd /data/system_ce/0/snapshots/
2. 이미지 파일 임시 경로로 복사
ADB # cp /data/system_ce/0/snapshot/[이미지파일명].jpg /data/local/tmp/[이미지파일명].jpg
3. 파일 소유자 및 권한변경
ADB # cd /data/local/tmp
ADB # chown shell /data/local/tmp/[이미지파일명].jpg
4. 파일 추출
PC > adb pull /data/local/tmp/[이미지파일명].jpg .
단말의 종류나 버전에 따라 백그라운드 이미지가 저장되는 위치에 차이가 있을 수 있으므로 ‘/data/system_ce/0’ 하위 경로를 탐색하며, 이미지 파일이 존재하는 경로를 찾는다. 디렉터리 소유자 권한이 root인 경우 ‘adb pull’을 통한 파일 추출이 불가능하기 때문에 임시경로(‘/data/local/tmp’) 등으로 복사 후 소유자 및 권한을 변경하여 파일을 추출한다. 또는 안드로이드 스튜디오의 ‘Device File Explorer’ 기능에서 경로 접근 및 파일을 선택하면 파일을 확인할 수 있다.
취약여부 | 설명 |
취약 | 앱이 백그라운드로 진입할 때 화면 스냅샷 내에 민감정보가 평문으로 포함되어 있는 경우 |
양호 | 앱이 백그라운드로 진입할 때 별도 스플래시 화면이 마련되어 있거나 화면 스냅샷 내에 민감정보가 포함되지 않는 경우 |
3. 보안 대책
1. FLAG_SECURE 플래그 설정
‘FLAG_SECURE’ 플래그는 안드로이드 앱의 화면(Window)에 대한 플래그 중 하나로, 화면을 보안 모드로 설정하는 데 사용된다. 화면 캡처 및 녹화를 방지하고, 앱이 작업관리자로 전환되었을 때 화면을 보호한다.
@Override
protected void onResume() {
super.onResume();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
}
@Override
protected void onPause() {
super.onPause();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
}
코드에서는 액티비티가 사용되는 시점에는 플래그 속성을 제거(clearFlags)하고 앱이 작업관리자로 전환되는 시점(onPause 콜백함수)에는 FLAG_SECURE 속성을 선언(addFlags)하고 있다.
2. 민감 정보의 마스킹 처리
백그라운드 화면 보호가 필요한 액티비티는 사용자의 민감정보를 처리하는 부분이다. 불필요한 정보의 노출을 지양하고 필요한 정보의 경우 최소한의 정보만 보이도록 마스킹한다. 컴플라이언스(ISMS-P 등) 기준에서도 개인정보의 조회 및 출력 시 용도를 특정하고 용도에 따라 출력 항목을 최소화, 개인정보 표시제한 등을 수행하도록 명시하고 있다.
개인정보 표시제한 조치 적용 예시
- 이름: 홍*동
- 연락처: 010-****-4567
- 주소: 서울 영등포구 여의대로 1길 ***
- 카드번호: 1234-14**-****-0001
- IP주소: 12*.12*.***.123
- 이메일 주소: mye*****@email.com
'Security > └ 안드로이드 취약점 진단' 카테고리의 다른 글
[안드로이드 모의해킹] 코드 패치와 앱 무결성 검증 (smali 코드 분석) (4) | 2024.11.16 |
---|---|
[안드로이드 모의해킹] 액티비티 강제 실행 (0) | 2024.11.11 |
[안드로이드 모의해킹] 디버그 로그 내 중요정보 노출 (7) | 2024.11.08 |
[안드로이드 모의해킹] 단말기 내 중요정보 저장 진단 (5) | 2024.08.08 |
[Tool] 안드로이드 파일 모니터링 (0) | 2024.06.25 |