어뷰징 방지

구글 Play Integrity API로 안드로이드 악성 사용자 차단하기

왈왈디 2025. 10. 12. 23:32
728x90

배경

모바일 리워드 앱은 사용자 보상 구조상 “정상 사용자 vs 자동화/매크로/다계정 유저 등의 어뷰저” 간의 싸움이 항상 존재한다.

특히 글로벌 시장(예: 미국, 캐나다 등)에서는

한국과 달리 본인 인증 수단이 약하기 때문에 디바이스 단위의 보안 중요하다.

 

구글 Play Integrity API는 구글에서 제공하는 안드로이드 보안 도구로, 앱과 디바이스의 무결성을 확인해 악성 사용자(루팅 디바이스, 클론 앱 사용자 등)를 식별하고 차단하는 데 활용할 수 있다.

서비스에 이 API를 어떻게 활용해 어뷰저를 차단하고, 어떤 값들을 어떤 방식으로 활용할 수 있는지 알아보자.


Play Integrity API란?

Play Integrity API는 사용자의 디바이스와 앱이 정상적인 환경에서 실행되고 있는지 확인할 수 있도록 구글이 제공하는 보안 API이다.

디바이스 루팅 여부, 앱 위변조, 인증 상태 등을 체크할 수 있으며, 클라이언트가 발급한 토큰을 서버에서 검증하는 구조입니다.

주요 기능

  • 디바이스 무결성 검사 (루팅, 에뮬레이터 등)
  • 앱 무결성 검사 (APK 위변조, 비공식 설치 등)
  • 앱 라이선스 상태 확인
  • 요청 유효성 검증 (nonce, timestamp)

 

사용 흐름 요약

  1. 클라이언트 앱에서 integrityToken을 생성
  2. 해당 토큰을 백엔드 서버에 전달
  3. 서버는 Google API에 토큰 검증 요청
  4. Google이 반환한 Payload(JSON) 을 바탕으로 유저 차단 여부 판단

 

응답 Payload 주요 프로퍼티

1. deviceIntegrity

디바이스의 무결성 수준

 

각 값의 의미

MEETS_DEVICE_INTEGRITY 정상 디바이스 (루팅/에뮬 아님)
MEETS_BASIC_INTEGRITY 기본 무결성은 충족 (루팅 추정됨)
NO_INTEGRITY 루팅/에뮬레이터/위조 환경일 가능성 높음

 


 

2. appIntegrity

앱의 설치 상태 및 서명 정보

 

각 값의 의미

PLAY_RECOGNIZED Play 서명으로 설치된 앱
UNRECOGNIZED_VERSION 비공식 빌드 or 변경된 APK
UNEVALUATED 평가 불가 (일시적 오류)

 


 

3. accountDetails.appLicensingVerdict

앱 라이선스 검증 결과

 

각 값의 의미

LICENSED 정상 사용자
UNLICENSED Play Store 외부 설치 사용자 (불법 복제 가능성 포함)
UNKNOWN 평가 불가

 

4. requestDetails

요청의 상세 정보

 

  • requestPackageName: 클라이언트에서 설정한 패키지명
  • nonce: 요청 위변조 방지를 위한 임의 문자열
  • timestampMillis: 토큰 발급 시각 (UTC)

 

실무 적용 시 고려할 것들

1. 어떤 시점에 API를 호출할 것인가?

  • 로그인 시점 또는 앱 실행 초기
    • 너무 잦은 호출은 비용 낭비
    • 신뢰 수준 높은 시점에 1회 호출하는 것이 일반적

 

2. 차단 기준 설정하기

 

예시:

if (
  response.deviceIntegrity.includes("NO_INTEGRITY") ||
  response.appIntegrity === "UNRECOGNIZED_VERSION"
) {
  blockUser("Integrity policy violation")
}
블락 외에도 모니터링, 기능 제한, 추가 인증 요구 등 유연한 대응이 가능

 

3. 비용 정책

  • 계정별 일일 무료 호출 한도가 정해져 있음
  • 초과 시 비용 청구됨

 

4. 보안 강화 팁

  • nonce는 서버에서 생성하여 클라이언트에 전달 (Replay 방지)
  • 결과 토큰은 반드시 서버에서 검증
  • 검증 실패 시(유효하지 않거나 디코드 불가) → 차단 or 로깅

 

흔한 실수 & 주의사항

클라이언트에서만 검증 무의미. 반드시 서버에서 검증해야 함
nonce를 사용하지 않음 동일 토큰 재사용 가능성 생김
결과 로그 저장 안 함 분석/이슈 대응 시 어려움
모든 NO_INTEGRITY를 블락 오탐 가능성 있음 (기업용 디바이스, 일부 개발자 환경 등)

 


 

테스트 방법

  • 루팅된 디바이스, 에뮬레이터, 클론 앱 등 다양한 환경에서 테스트 필요
  • Play Integrity 응답은 Google 서버에서 평가되므로, 일부 결과는 수 분 지연 가능

 

분석에 활용 가능한 항목

  • 일일 무결성 실패율 (NO_INTEGRITY 비율)
  • 앱 무결성 위반률 (UNRECOGNIZED_VERSION)
  • requestHash, IP, Device ID 기반 다계정 시도 탐지
  • Integrity 응답 결과 기반 사용자 클러스터링

참고 자료

 

Play Integrity API 개요  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Play Integrity API 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Play Integrity API를 사용하면 사용자

developer.android.com

 

 

728x90