[목차]
1. Side Channel Data Leakage
2. 실습
- Device Logs
- App Screenshots + 백그라운드 화면 보호
- pasteboard
- Keystroke logging
- Cookies (CookieReader.py 활용 방법)
3. 대응 방안
1. Side Channel Data Leakage
# 이론
사이드 채널 데이터 유출 취약점은
애플리케이션이 중요한 데이터가
실수로 유출되는 취약점
디바이스 로그, Pasteboard, 앱 스크린샷,
Keystroke 로깅, HTTP 쿠키에 사용되는
보안되지 않은 API 등과 같은 다양한 종류가 존재
# 참고
Keystroke : 입력 키를 누르는 행위로,
키보드 또는 이와 유사한 입력 장치 키를 누르는 것
Pasteborad(붙여넣기) : 애플리케이션 내에서
또는 애플리케이션 간에 데이터를 교환하기 위한
표준화된 메커니즘
2. 실습
2-1) 디바이스 로그 (Device Logs)
#이론
개발자가 개발 단계에서 애플리케이션을
디버깅 하기 위해 추가한 로그 기능을
배포 시점에 제거하지 않고 그대로 올려
발생하는 취약점 (중요 정보는
디바이스 로그에 기록되면 안됨)
# 실습
DVIA 앱 내에서 해당 메뉴 사용 시
앱 문제로 그냥 종료되고
3utools의 Realtime Log 기능을 통해
입력 값이 저장되는지 확인해 보아도
저장되지 않는다.
해당 방법 외 로그 파일의 존재 유무 및
존재 시 중요 정보가 저장되어 있는지
여부를 별도로 확인하면 된다.
2-2) App Screenshot + 백그라운드 화면 보호
# 이론
애플리케이션이 백그라운드로 들어갈 때
스크린샷을 찍는 것으로, 사용자에게 UI를
원활하게 보여주기 위해 사용
스크린샷에 중요한 정보가 담길 수 있고
적절한 보호조치 없이 애플리케이션 샌드박스에
저장되어 쉽게 확인 가능
# 실습
앱 실행 후 중요 데이터를 입력한 뒤
백그라운드로 들어가면
위처럼 작업 중이던 창들이 보이는데
이때 보이는 이미지는 실시간으로
반영되는 이미지가 아니라
백그라운드 전환 직전
자동으로 찍힌 스크린샷의 이미지로
취약점 점검 시 저장되는 스크린 샷에
중요정보가 노출 되는지,
(금융권 앱의 경우)
실행중이던 애플리케이션이
백그라운드 상태로 진입할 때
적절한 화면 보호가 이루어 지는지,
함께 확인이 필요하다.
저장된 스크린 샷은
/var/mobile/Containers/Data/Application/UUID/Library/SplashBoard/Snapshots/
경로에 ktx 파일로 저장되며
변환할 필요 없이 아이폰 단말기
Filza 앱을 통해 확인 가능하다.
중요정보도 그대로 저장되고
화면 보호도 이루어 지지 않는다!
2-3) Pasteboard
# 이론
일부 텍스트를 복사하면
Pasteboard 버퍼에 저장되어
다른 애플리케이션이 해당 버퍼에
저장된 데이터를 가져올 수 있음
복사한 중요한 텍스트가
Pasteboard에 포함되어 있으면
다른 애플리케이션에서 가져와
데이터 유출 가능
# 실습
a. 카드 번호 입력 후 복사
b. pasteboard 버퍼 확인
- 스크립트 제작
function start_pasteboard_monitoring(interval_value) // 함수 선언 후 인자 값 interval_value 설정!
{
var pasteboard = (ObjC.classes.UIPasteboard).generalPasteboard(); // # 핵심코드 1, 클래스는 .이든 []이든 둘다 사용 가능
// generalPasteboard 메소드 사용!
var latest_word = ""; // 빈 문자열 선언
setInterval(function(){ // 2초마다 실행되도록 설정하는 코드 블럭
try
{
var on_pasteboard = pasteboard.string().toString() // # 핵심코드 2
if(on_pasteboard != latest_word) // 한번 출력된 값이 재 출력 안되도록 설정!
{
console.log("[*] Found on pasteboard: "+ on_pasteboard); // # 핵심코드 3
latest_word = on_pasteboard;
}
}
catch(err)
{
a = "";
}
}, interval_value); // 인자 값
}
//start_pasteboard_monitoring(INTERVAL_VALUE_HERE_MILLISECONDS)
start_pasteboard_monitoring(2000) // 함수 호출 - 2초마다 실행
정상 확인 가능하고
해당 앱을 종료한 후에도
복사한 내용은 pasteboard
버퍼에 저장되어 있다.
2-4) Keystroke logging
# 이론
텍스트 필드가 Secure로 설정되지 않은 경우
기본적으로 디바이스의 텍스트 필드에 입력한
모든 입력을 기록함
Keystroke 로그는
디바이스에서 쉽게 가져와 볼 수 있음
위치는
/var/mobile/Library/Keyboard/ko-dynamic.lm
위치에 확장자가 .dat 파일로 저장됨
# 실습
a. 데이터 입력
b. 파일 확인 후 export
보통 위 파일 살펴보면
기록이 남아 있는데
ios 버전이 높아지면서
확인이 어려움!
2-5) Cookies
# 이론
일부 애플리케이션은
Persistance Cookies(영구적, 지속적)를 생성해
cookie.binarycookies 파일에 저장하는데
이는 앱을 종료한 후에도 남아있음!
확인 경로는
/var/mobile/Containers/Data/Application/$uuid/Library/Cookies/Cookies.binarycookies
# 실습
a. 앱 실행 후 쿠키 파일 찾기
b. 파일 확인
> 가독성이 떨어지지만 대충
admin123 / dvpassword
> 시도해 보면
성공!
# CookiReader 소개 및 설치!
메모장 혹은 노트패드로 쿠키파일을 확인하면
글자가 깨져 가독성이 떨어지기 때문에
BinaryCookieReader 라는 툴을 통해
확인해본다.
a. BinaryCookieReader.py 다운
https://github.com/as0ler/BinaryCookieReader
b. 콘다에 python 2.7 환경 구성
$ conda create -n ios_py2 python=2.7 -y
c. BinaryCookieReader.py 실행
가독성이 좋게 출력된다!
3. 대응 방안
# Device Logs
개발자가 애플리케이션 로그 제거를 잊었을 때 발생하므로,
로그 활성화 여부 확인이 필요
# App Screenshot
애플리케이션이 백그라운드로 전환될 때
스크린샷은 애플리케이션의 메인 화면 또는
중요한 데이터가 노출되지 않는 보호된 화면을
사용해야 함
# Pasteboard
중요한 데이터를 다루는 곳에서는
Custom Pasteboard / 가상 키패드를 사용,
중요한 데이터 Pasteboard 버퍼 캐싱 여부 확인
# Keystroke logging
텍스트 필드를 Secure로 설정하고
autocorrect(자동고침) 옵션을 해제
# Cookies
중요한 데이터(계정정보)를 저장하면 안되고
서버에서 세션 값을 받아와 인증하도록 설정
[도움 출처]
: 보안프로젝트 김태영 팀장 iOS 모바일 앱 모의해킹(기초) 강의
'APP 진단 > iOS' 카테고리의 다른 글
19. WebView Issues (0) | 2022.11.24 |
---|---|
18. IPC Issues (0) | 2022.11.23 |
16. Runtime Manipulation - 인증 우회 실습 3 (Brute Force) (0) | 2022.11.21 |
15. Runtime Manipulation - 인증 우회 실습 2 (0) | 2022.11.20 |
14. Runtime Manipulation - 인증 우회 실습 1 (0) | 2022.11.20 |