플랫폼 보안 관행
Unveily 플랫폼이 고객 앱을 보호하는 방법
한눈에 보기
Unveily SDK와 플랫폼은 보안을 기본값으로 설계합니다. 고객이 별도 구성하지 않아도 아래 보호 조치가 자동으로 적용됩니다.
SDK 보안 (Android & iOS)
라이선스 키 암호화 저장
앱 최초 실행 시 라이선스 키를 하드웨어 보안 저장소로 자동 마이그레이션합니다.
| 플랫폼 | 저장 방식 |
|---|---|
| Android | AndroidKeyStore 기반 EncryptedSharedPreferences (AES256-GCM) |
| iOS | iOS Keychain (kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly) |
이후 실행부터는 파일 시스템을 거치지 않고 암호화 저장소에서 직접 로드합니다.
SSL 인증서 피닝 + XOR 난독화
SDK 내부 API 통신에 SHA-256 기반 인증서 핀이 적용됩니다. 컴파일된 바이너리에 핀 값이 평문으로 노출되지 않도록 필드별로 다른 XOR 키를 사용해 인코딩합니다.
- 호스트명, 기본 핀, 백업 핀이 각각 다른 키로 인코딩
- 바이너리 분석으로 단일 필드가 노출되어도 전체 노출 방지
루트 / 탈옥 감지
루트(Android) 또는 탈옥(iOS) 상태가 감지된 기기에서는 SDK 실행이 차단됩니다.
{
"security": {
"rootDetectionEnabled": true
}
}스크린샷 및 백그라운드 보호
- 스크린샷 차단: 앱 화면 캡처 및 화면 녹화 차단
- 백그라운드 블러: 앱 전환 시 미리보기에 콘텐츠가 노출되지 않도록 블러 처리
{
"security": {
"screenshotProtectionEnabled": true,
"backgroundProtectionEnabled": true
}
}금융, 의료, 결제 앱에는 이 옵션을 활성화하는 것을 권장합니다.
앱 서명 검증
라이선스는 패키지명과 서명 인증서 해시를 조합해 검증됩니다. 재패키징된 앱에서는 SDK가 동작하지 않습니다.
API 보안
| 항목 | 방식 |
|---|---|
| 인증 | JWT (단기 만료) |
| 시크릿 관리 | GCP Secret Manager — 소스 코드 및 환경 변수에 평문 저장 금지 |
| 통신 | 모든 엔드포인트 HTTPS 강제 |
| 속도 제한 | 인증 엔드포인트 Rate limiting 적용 |
인프라
| 항목 | 구성 |
|---|---|
| 서버 | GCP Cloud Run — 퍼시스턴트 서버 없음 |
| 데이터베이스 | Cloud SQL, 프라이빗 IP (공인 인터넷 접근 불가) |
| 파일 다운로드 | GCS 프라이빗 버킷, Signed URL (15분 만료) |
| 컨테이너 | Artifact Registry (공개 Docker Hub 미사용) |
의존성 취약점 관리
GitHub Dependabot을 통해 모든 저장소의 의존성을 매주 자동 스캔합니다.
| 저장소 | 스캔 대상 |
|---|---|
| ActuallyWorks.Platform | NuGet (API), npm (Web, BFF) |
| HybridApp Android SDK | Gradle |
| HybridApp iOS SDK | Swift Package Manager |
- Critical CVE는 공개 후 72시간 이내 패치
- 매주 월요일 09:00 KST 자동 스캔
취약점 신고
보안 취약점을 발견하신 경우 공개 이슈가 아닌 아래 주소로 비공개 신고 부탁드립니다.
신고 접수 후 48시간 내 확인, 7 영업일 이내 해결 일정을 안내드립니다. 선의의 보안 연구자에 대해 법적 조치를 취하지 않습니다.