Play Integrity API를 사용하면 상호작용과 서버 요청이 정품 Android 기기에서 실행되는 정품 앱 바이너리에서 비롯되는지 확인할 수 있습니다. 조작된 앱 버전과 신뢰할 수 없는 환경 등 잠재적으로 위험하고 허위일 가능성이 있는 상호작용을 감지함으로써 앱의 백엔드 서버는 공격을 방지하고 악용을 줄이기 위한 적절한 조치를 취할 수 있습니다.
앱 또는 게임이 Google Play 스토어가 설치되고 Google Play 서비스가 지원되는 Android 기기에서 사용되는 경우 Play Integrity API는 다음과 상호작용하는지 확인하는 데 도움이 되는 응답을 제공합니다.
- 정품 앱 바이너리: Google Play에서 인식하는 수정되지 않은 바이너리와 상호작용하는지 확인합니다.
- 정품 Play 설치: 현재 사용자 계정에 라이선스가 부여되었는지 확인합니다. 즉, 사용자가 Google Play에서 앱이나 게임을 설치했거나 비용을 지불했음을 의미합니다.
- 정품 Android 기기: Google Play 서비스(또는 PC용 Google Play 게임즈의 정품 인스턴스)에서 제공하는 정품 Android 기기에서 앱이 실행되는지 확인합니다.
다음을 포함하여 Play Integrity API 응답에서 환경에 관한 정보를 수신하도록 선택할 수도 있습니다.
- 앱 액세스의 위험: 화면을 캡처하거나, 오버레이를 표시하거나, 기기를 제어하는 데 사용할 수 있는 앱이 실행 중인지 확인합니다.
- 알려진 멀웨어의 위험: Google Play 프로텍트가 사용 설정되어 있는지, 기기에 위험한 앱이 설치되어 있는지 확인합니다.
개요
사용자가 앱에서 작업을 실행하면 Play Integrity API를 호출하여 해당 작업이 정품 Google Play를 통해 설치되어 Android 기기에서 실행 중인 정품 앱 바이너리에서 발생했는지 확인할 수 있습니다. 기기가 최근에 보낸 요청 횟수와 앱 액세스 위험 확인 결과 및 Play 프로텍트 확인 결과를 비롯한 환경에 관한 신호를 포함하여 응답에 추가 정보를 선택할 수도 있습니다. 결과에 문제가 있는 경우 앱의 백엔드 서버는 악용 및 사기, 오용 및 속임수, 무단 액세스, 공격과 같은 문제를 방지하기 위해 취할 수 있는 조치를 결정할 수 있습니다.
보안 고려사항
다음 권장사항을 따르면 Play Integrity API가 앱에 최대한의 가치를 제공합니다.
악용 방지 전략 수립
Play Integrity API는 단독 악용 방지 메커니즘이 아니라 전반적인 악용 방지 전략의 일부로 다른 신호와 함께 사용할 때 가장 좋습니다. 이 API를 앱의 다른 적절한 보안 권장사항과 함께 사용하세요. 기본적으로 앱은 모든 설치에서 하루에 총 10,000회까지 요청을 할 수 있습니다. 일일 최대한도 증가를 요청할 수 있습니다.
작업 진행 전 원격 분석 수집 및 잠재고객 파악하기
Play Integrity API 확인 결과에 따라 앱의 동작 방식을 변경하기 전에 시행 없이 API를 구현하여 기존 잠재고객의 현재 상황을 파악할 수 있습니다. 현재 설치한 사용자 수에서 반환되는 확인 결과를 파악하고 나면 계획 중인 모든 시행의 영향을 추정하고 그에 따라 악용 방지 전략을 조정할 수 있습니다.
무결성 확인 결과를 요청하는 방법 결정
Play Integrity API는 무결성 확인 결과를 요청하고 수신하는 두 가지 옵션을 제공합니다. 표준 요청을 하든 기존 요청을 하든 두 유형의 요청을 조합하든 무결성 확인 결과 응답은 동일한 형식으로 반환됩니다.
표준 API 요청: 모든 앱 또는 게임에 적합하며 사용자 작업 또는 서버 요청이 진짜인지 확인하기 위해 요청 시 이루어질 수 있습니다. 표준 요청은 지연 시간이 가장 짧으며(평균 수백 밀리초) 사용 가능한 확인 결과를 얻는 데 있어 안정성이 높습니다. 표준 요청은 스마트 기기 내 캐싱을 사용하는 동시에 특정 유형의 공격 방지는 Google Play에 위임합니다.
기존 API 요청: 무결성 확인 결과를 요청하는 원래 방식이며, 계속 사용할 수 있습니다. 기존 요청은 지연 시간이 더 길고(평균 몇 초) 특정 유형의 공격 위험을 직접 완화해야 합니다. 기존 요청은 새로운 평가를 시작하므로 표준 요청보다 사용자의 데이터와 배터리를 더 많이 사용합니다. 따라서 매우 민감하거나 중요한 작업이 진짜인지 확인하기 위해 일회성으로 가끔 요청해야 합니다. 기존 요청을 하고 나중에 사용할 수 있도록 캐시하려는 경우 대신 표준 요청을 실행하여 공격 위험을 줄여야 합니다.
다음 표에서는 두 가지 요청 유형 간 주요 차이점을 보여줍니다.
표준 API 요청 | 기존 API 요청 | |
---|---|---|
필요한 최소 Android SDK 버전 | Android 5.0(API 수준 21) 이상 | Android 4.4(API 수준 19) 이상 |
API 준비 필요 | ✔️(몇 초) | ❌ |
일반적인 요청 지연 시간 | 수백 밀리초 | 몇 초 |
잠재적 요청 빈도 | 잦음(모든 작업 또는 요청에 관한 주문형 확인) | 드묾(가장 중요한 작업 또는 가장 민감한 요청에 관한 일회성 확인) |
재전송 및 유사한 공격 완화 | Google Play에서 자동 완화 | 서버 측 로직과 함께 nonce 필드 사용 |
기존 요청 고려사항에서 더 많은 차이가 있는 표를 확인할 수 있습니다.
적절한 시점에 무결성 확인 결과 요청
액세스를 방지하려는 작업 또는 서버 요청 시점에 최대한 가깝게 앱 액세스 위험 확인 결과를 요청해야 합니다. 이렇게 하면 사기범이 앱에서 실행된 무결성 확인을 우회할 수 없습니다.
API 요청을 복제하기 어렵게 하기
표준 API 요청에는 조작 및 유사한 공격을 방지하는 데 사용되는 requestHash
필드가 있습니다. 이 필드에는 앱 요청의 모든 관련 값 다이제스트를 포함해야 합니다. 콘텐츠 결합 사용 방법의 안내에 따라 앱의 표준 요청을 보호하세요.
기존 API 요청에는 재전송 및 조작 공격과 같은 특정 유형의 공격을 방지하는 데 사용되는 nonce
(number once의 줄임말) 필드가 있습니다. nonce를 생성하는 방법에 관한 안내에 따라 앱의 기존 요청을 보호하세요.
무결성 확인 결과 캐싱 방지
무결성 확인 결과를 캐시하면 악의적인 행위자가 좋은 기기의 확인 결과를 다른 환경에서 악의적인 목적으로 재사용하는 공격인 프록시화의 위험이 증가합니다. 응답을 캐시하는 대신 표준 API 요청을 실행하여 요청 시 확인 결과를 가져올 수 있습니다.
단계식 시행 전략 보유
Play Integrity API의 무결성 확인 결과에는 가능한 다양한 응답이 있으므로 여러 단계의 시행을 통해 악용 방지 전략을 세울 수 있습니다. 앱의 백엔드 서버가 각각의 가능한 응답 또는 응답 그룹에 따라 다르게 동작하도록 구성하면 됩니다.
Play Console의 API 응답에서 추가 기기 라벨을 수신하도록 선택하여 기기의 신뢰성에 따라 시행 전략을 단계화할 수도 있습니다. 각 기기는 기준을 충족하는 모든 라벨을 반환합니다. 예를 들어 모든 기기 라벨을 수신하도록 선택한 후 MEETS_STRONG_INTEGRITY
, MEETS_DEVICE_INTEGRITY
, MEETS_BASIC_INTEGRITY
를 반환하는 기기를 MEETS_BASIC_INTEGRITY
만 반환하는 기기보다 더 많이 신뢰할 수 있습니다. 각 시나리오에서 서버와 다르게 응답할 수 있습니다.
서버에서 앱으로 다양한 응답 전송
결정 결과의 범위가 있는 것이 각 응답마다 서버에서 다시 앱으로 바이너리 허용/거부 응답을 전송하는 것보다 복제하기가 더 어렵습니다. 예를 들어 허용, 허용(제한 있음), CAPTCHA 완료 후 허용(제한 있음), 거부와 같은 일련의 관련 응답을 사용할 수 있습니다.
최근 기기 활동을 사용하여 대규모 악용 감지
Play Integrity API의 최근 기기 활동 기능을 사용하여 다수의 무결성 토큰을 요청하는 기기를 찾습니다. 대용량 활동 악용자는 일반적으로 실제 기기에서 유효한 증명 결과를 생성하고 이를 봇에 제공하여 루팅된 기기 및 에뮬레이터에 대한 공격을 자동화합니다. 최근 기기 활동 수준을 사용하여 지난 1시간 동안 기기에서 앱이 생성한 증명 수를 확인할 수 있습니다.
실행 가능한 오류 메시지 표시
가능한 경우 사용자에게 유용한 오류 메시지를 제공하여 인터넷 연결 재시도나 사용 설정 또는 Play 스토어 앱의 최신 상태 여부 확인 등 문제 해결을 위해 할 수 있는 작업을 사용자가 알도록 합니다.
예기치 않은 문제 또는 서비스 중단에 대한 계획 수립
Play 상태 대시보드에는 Play Integrity API의 서비스 상태에 관한 정보와 장애 및 서비스 중단에 관한 정보가 표시됩니다. 예상치 못한 대규모 Play Integrity API 서비스 중단이 발생하는 경우 백엔드 서버가 작동하는 방식을 미리 계획해야 합니다. 기기에 고유한 Android 플랫폼 키 증명 키가 취소된 경우에도 백엔드 서버가 작동할 준비가 되어 있어야 합니다.
엔드 투 엔드 엔터프라이즈 사기 솔루션 고려
완전한 사기 및 봇 관리 솔루션을 원하는 기업 고객은 모바일용 reCAPTCHA Enterprise를 구매할 수 있으며 여기에는 개발자에게 사기 위험 점수를 제공하는 Android용 SDK가 포함되어 있습니다. reCAPTCHA Enterprise는 Play Integrity API 신호를 자동으로 포함하고, 고객을 위해 reCAPTCHA 네트워크 및 애플리케이션 신호와 이를 결합하여 보이지 않는 원활한 사기 관리 솔루션을 즉시 제공합니다. 또한 Play Integrity API를 사용할 수 없는 Android 앱도 보호할 수 있습니다.
중요하거나 민감한 기능에 액세스할 때 위험한 트래픽 확인
액세스를 완전히 거부하는 대신 앱 또는 게임에서 중요하거나 민감한 작업을 식별하여 Play Integrity API로 보호하세요. 가능하면 중요 작업을 진행하도록 허용하기 전에 위험한 트래픽을 확인합니다. 예를 들어 앱 액세스 위험이 화면을 캡처할 수 있는 앱이 실행 중임을 나타내면 사용자에게 화면을 캡처할 수 있는 앱을 사용 중지하거나 제거하도록 요청한 후 보호하려는 기능을 계속 진행하도록 허용합니다.
서비스 약관 및 데이터 보안
Play Integrity API에 액세스하거나 이를 사용하면 Play Integrity API 서비스 약관에 동의하는 것으로 간주됩니다. Play Integrity API에 액세스하기 전에 모든 관련 약관 및 정책을 자세히 읽고 숙지하세요.
Google Play에는 개발자가 앱의 데이터 수집, 공유, 보안 관행을 공개하여 사용자에게 정보를 제공할 수 있는 데이터 보안 섹션이 있습니다. 데이터 양식을 작성하는 데 도움이 되는 정보는 Play Integrity API가 데이터를 처리하는 방법을 참고하세요.