[목차]

 

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 모바일 앱 모의해킹(기초) 강의

728x90

+ Recent posts