기기 무결성 API
Android 루팅 또는 iOS 탈옥 기기를 탐지하는 로컬 전용 무결성 검사 API입니다.
이 로컬 검사는 우회할 수 있습니다. 하드웨어 기반 토큰을 서버에서 검증하는 device attestation(Play Integrity / App Attest)이 필요하면 device attestation API를 참고하세요. 별도 선택 패키지로 로컬 검사를 보완합니다. 로컬 검사는 빠른 오프라인 사전 필터로, attestation은 서버가 신뢰 여부를 판단하는 기준으로 사용하세요.
개요
이 API는 서버에서 검증하지 않고 파일 시스템 검사, 패키지 감지 같은 로컬 탐지만 수행합니다. 다음과 같은 앱에서 다층 방어의 한 수단으로 사용할 수 있습니다.
- 금융·은행 앱
- 민감한 데이터를 다루는 의료 앱
- 기업용 MDM 솔루션
- DRM이 필요한 앱
모든 탐지 방식은 로컬 전용이며 Magisk + Shamiko, RootHide, PlayIntegrityFix 같은 도구로 우회할 수 있습니다.
- 탐지하지 못했다고 기기가 안전하다는 뜻은 아닙니다.
- Play Integrity API나 iOS App Attest를 사용하지 않습니다.
- 유일한 보안 수단이 아니라 다층 방어의 한 수단으로 사용하세요.
지원 여부 배지 설명을 읽으세요. 두 API는 핵심 패키지에 속하며 웹에서는 fallback 값만 반환합니다.
API 레퍼런스
isDeviceCompromised()
v1.4.2부터 iOS 15.1+ Android API 24+ 웹: fallback 값
루팅(Android) 또는 탈옥(iOS) 여부를 동기로 검사합니다.
반환값: 루팅·탈옥 등 보안 침해 징후를 탐지하면 true, 그 외 false
성능: <50ms
에뮬레이터 정책: 개발 편의를 위해 에뮬레이터·시뮬레이터에서는 false를 반환합니다.
verifyDeviceIntegrity()
v1.4.2부터 iOS 15.1+ Android API 24+ 웹: fallback 값
기기 무결성 검사의 비동기 래퍼입니다.
반환값: 루팅·탈옥을 탐지하면 true로 resolve되는 Promise
성능:
- iOS: 최대 200ms(SSH 포트 검사 포함)
- Android: <50ms(
isDeviceCompromised()의 비동기 래퍼)
플랫폼 차이:
- iOS:
isDeviceCompromised()의 모든 검사에 SSH 포트 검사(22, 44)를 추가합니다. 탈옥 도구가 설치한 OpenSSH를 탐지할 수 있습니다. - Android: API 형태를 맞추기 위해 비동기 래퍼로 제공하며 검사는
isDeviceCompromised()와 같습니다.
에뮬레이터 정책: 에뮬레이터·시뮬레이터에서는 false를 반환합니다.
탐지 방식
Android
iOS
사용 예제
기본 검사
금융 앱 보호
조건에 따른 기능 접근
플랫폼 지원
권장 사용법
- 탐지에만 의존하지 마세요. 다층 방어의 한 수단으로 사용하세요.
- 실패를 처리하세요. 앱을 강제 종료하지 말고 대체 흐름을 제공하세요.
- 분석할 수 있도록 기록하세요. 보안 분석에 사용할 탐지율을 확인하세요.
- 실제 기기에서 테스트하세요. 에뮬레이터는 항상
false를 반환합니다. - 정기적으로 갱신하세요. 새로운 루팅 도구가 계속 등장합니다.
