iOS UIPasteboard

htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기

HackTricks를 지원하는 다른 방법:

iOS 기기에서 애플리케이션 간 및 내에서 데이터 공유는 UIPasteboard 메커니즘을 통해 이루어지며, 이는 다음 두 가지 주요 범주로 나뉩니다:

  • 시스템 전역 클립보드: 모든 애플리케이션과 데이터를 공유하기 위해 사용되며, iOS 10부터 제공되는 기능으로 데이터를 장치 재부팅 및 앱 삭제 후에도 유지할 수 있도록 설계되었습니다.

  • 사용자 지정 / 이름 지정된 클립보드: 앱 내 또는 동일한 팀 ID를 공유하는 다른 앱과 데이터를 공유하기 위해 특별히 설계되었으며, iOS 10에서 소개된 변경 사항에 따라 생성한 애플리케이션 프로세스의 수명을 넘어서 지속되지 않도록 설계되었습니다.

보안 고려 사항은 클립보드를 활용할 때 중요한 역할을 합니다. 예를 들어:

  • 사용자가 클립보드에 액세스하는 앱 권한을 관리하는 메커니즘이 없습니다.

  • 클립보드의 무단 백그라운드 모니터링 위험을 완화하기 위해, 애플리케이션이 포그라운드에 있을 때만 액세스가 제한됩니다(iOS 9부터).

  • 개인 정보 보호 문제로 인해 지속적인 이름이 지정된 클립보드 사용이 권장되지 않습니다.

  • iOS 10에서 소개된 Universal Clipboard 기능은 개발자가 데이터 만료 및 자동 콘텐츠 전송 비활성화를 설정할 수 있도록 관리할 수 있습니다.

민감한 정보가 실수로 저장되지 않도록 시스템 전역 클립보드에 주의를 기울이는 것이 중요합니다. 또한 애플리케이션은 시스템 전역 클립보드 데이터가 의도하지 않은 작업에 사용되는 것을 방지하도록 설계되어야 하며, 개발자는 민감한 정보가 클립보드로 복사되는 것을 방지하기 위한 조치를 구현할 것을 권장합니다.

정적 분석

정적 분석을 위해 소스 코드 또는 이진 파일에서 다음을 검색하세요:

  • 시스템 전역 클립보드 사용을 식별하기 위해 generalPasteboard를 검색합니다.

  • 사용자 지정 클립보드를 생성하기 위해 pasteboardWithName:create:pasteboardWithUniqueName을 검색합니다. 지속성이 활성화되어 있는지 확인하십시오(이는 폐기된 기능입니다).

동적 분석

동적 분석은 특정 메서드를 후킹하거나 추적하는 것을 포함합니다:

  • 시스템 전역 사용을 위해 generalPasteboard를 모니터링합니다.

  • 사용자 정의 구현을 위해 pasteboardWithName:create:pasteboardWithUniqueName을 추적합니다.

  • 지속성 설정을 확인하기 위해 폐기된 setPersistent: 메서드 호출을 관찰합니다.

모니터링해야 할 주요 세부 정보는 다음과 같습니다:

  • 클립보드 이름콘텐츠 (예: 문자열, URL, 이미지 확인).

  • 표준 및 사용자 지정 데이터 유형 확인을 활용하여 존재하는 항목 수데이터 유형.

  • setItems:options: 메서드를 검사하여 만료 및 로컬 전용 옵션 확인.

objection의 클립보드 모니터를 사용한 모니터링 도구 사용 예는 시스템 전역 클립보드를 5초마다 변경 사항을 확인하고 새 데이터를 출력하는 것입니다.

다음은 objection의 방법을 영감받은 간단한 JavaScript 스크립트 예제로, 5초마다 클립보드에서 변경 사항을 읽고 기록하는 것입니다:

const UIPasteboard = ObjC.classes.UIPasteboard;
const Pasteboard = UIPasteboard.generalPasteboard();
var items = "";
var count = Pasteboard.changeCount().toString();

setInterval(function () {
const currentCount = Pasteboard.changeCount().toString();
const currentItems = Pasteboard.items().toString();

if (currentCount === count) { return; }

items = currentItems;
count = currentCount;

console.log('[* Pasteboard changed] count: ' + count +
' hasStrings: ' + Pasteboard.hasStrings().toString() +
' hasURLs: ' + Pasteboard.hasURLs().toString() +
' hasImages: ' + Pasteboard.hasImages().toString());
console.log(items);

}, 1000 * 5);

참고 자료

제로부터 영웅이 될 때까지 AWS 해킹 배우기 htARTE (HackTricks AWS Red Team Expert)!

HackTricks를 지원하는 다른 방법:

Last updated