iOS의 Keychain Services는 애플리케이션이 비밀번호, 암호화 키, 인증 토큰 등을 안전하게 저장할 수 있도록 제공하는 보안 저장소입니다. 키체인 데이터는 앱의 샌드박스(Sandbox) 내에서만 접근 가능하며, 일반적으로 다른 앱에서 접근할 수 없도록 보호됩니다.
키체인 항목은 다음과 같은 주요 API를 통해 저장 및 조회됩니다.
- SecItemAdd → 새로운 항목을 추가
- SecItemUpdate → 기존 항목을 업데이트
- SecItemCopyMatching → 특정 항목을 조회
- SecItemDelete → 항목 삭제
이러한 보안 구조 때문에 일반적인 방법으로는 키체인 데이터를 쉽게 추출할 수 없지만, 탈옥 환경이나 동적 분석 도구를 사용하면 특정 조건에서 데이터를 확인할 수 있습니다.
iOS 키체인 정보 추출 방법
1. 탈옥(Jailbreak) 환경에서 키체인 덤프
iOS 기기가 탈옥된 경우 보안 제한이 해제되므로, 특정 도구를 사용하여 키체인 데이터를 덤프할 수 있습니다.
Keychain Dumper 사용
Keychain Dumper는 iOS 기기에서 키체인 데이터를 추출하는 대표적인 도구입니다.
실행 방법
- 탈옥된 iOS 기기에서 Keychain Dumper를 다운로드하고 설치
- SSH를 통해 기기에 접속
- 터미널에서 다음 명령어 실행
./keychain_dumper
5. 키체인에 저장된 정보를 확인
이 도구는 앱이 저장한 키체인 항목을 평문으로 출력하며, Access Group을 확인하면 특정 앱에서 저장한 데이터를 확인할 수 있습니다.
2. Frida를 이용한 런타임 후킹
Frida는 iOS 앱의 런타임 동작을 분석하고 함수 호출을 가로챌 수 있는 강력한 도구입니다. 이를 활용하면, 키체인 데이터를 읽는 함수(SecItemCopyMatching)를 후킹하여 값을 가로챌 수 있습니다.
Frida 후킹 예제
Java.perform(function() {
var SecItemCopyMatching = Module.findExportByName("Security", "SecItemCopyMatching");
Interceptor.attach(SecItemCopyMatching, {
onEnter: function(args) {
console.log("키체인 접근 감지!");
},
onLeave: function(retval) {
console.log("키체인 반환 값: " + retval);
}
});
});
이 코드를 실행하면, 앱이 키체인에서 데이터를 읽어올 때마다 로그로 출력됩니다.
3. 앱 바이너리에서 키체인 저장 방식 분석
리버싱을 수행할 때, 키체인과 관련된 함수 호출을 분석하는 것도 중요한 과정입니다.
Strings 분석
앱 바이너리에서 SecItemAdd, SecItemCopyMatching 등의 키체인 관련 API가 호출되는 부분을 검색하면, 저장된 데이터의 구조와 접근 방식에 대한 힌트를 얻을 수 있습니다.
Strings 추출 예제
strings targetApp | grep SecItem
이 명령어를 실행하면, 해당 앱이 키체인을 어떻게 사용하는지 확인할 수 있습니다.
Class-dump 및 Hopper 분석
- class-dump를 사용하면, 앱 내부에서 키체인 관련 메서드가 정의된 인터페이스를 추출할 수 있습니다.
- Hopper 같은 정적 분석 도구를 사용하면, 키체인 데이터를 저장하거나 조회하는 로직을 확인할 수 있습니다.
iOS 키체인은 기본적으로 강력한 보안이 적용되어 있어 일반적인 환경에서는 접근할 수 없습니다. 하지만 탈옥 환경에서는 Keychain Dumper 같은 도구를 활용하여 데이터를 추출할 수 있으며, Frida 후킹을 이용하면 런타임에서 키체인 데이터를 가로챌 수도 있습니다. 또한, 바이너리 분석을 통해 앱이 키체인을 사용하는 방식을 역추적하는 것도 가능합니다.
따라서 보안 관점에서는 탈옥된 환경에서 민감한 데이터를 보호하는 방법을 고려해야 하며, 키체인 접근을 최소화하거나 추가적인 암호화 계층을 적용하는 것이 중요합니다.
'클라이언트' 카테고리의 다른 글
[iOS] 언제까지 SnapKit? SwiftLayout은 어때? (0) | 2025.02.17 |
---|---|
[iOS] SnapKit을 활용한 iOS UI 레이아웃 잡기 (0) | 2025.02.17 |
[UIKit] UIColor Hex 초기화, 문자열 초기화 유틸 Extension 코드 (0) | 2025.02.16 |
[GameKit] 간단한 가위바위보 멀티게임 만들기 (0) | 2025.02.16 |
[iOS] iOS 앱 리버싱 간단한 예제 (0) | 2025.02.16 |