환경 보호

Google은 앱이 안전하고 신뢰할 수 있는 환경에서 실행 중인지 감지하는 데 도움이 되는 일련의 API 및 서비스를 제공합니다. 핵심은 Play Integrity API로, 잠재적으로 위험하고 허위일 가능성이 있는 상호작용을 감지하여 상호작용이 진짜인지 확인하는 데 도움이 됩니다. 이제 Play Integrity API는 앱 및 기기 무결성 외에도 액세스 및 접근성 위험, Google Play 프로텍트, 최근 기기 활동에 관한 정보를 제공합니다. 사기 방지 전략을 강화하기 위해 Android 플랫폼은 앱과 관련이 있을 수 있는 특정 시나리오에 관한 API를 제공합니다.

Play Integrity API

Play Integrity API 기능

Play Integrity API를 사용하면 앱이 실행되는 기기의 보안 상태를 확인할 수 있습니다. 이렇게 하면 적절한 사용자가 민감한 정보에 액세스하고 있는지 확신할 수 있습니다.

이를 통해 신뢰할 수 있는 환경에서 상호작용과 서버 요청이 정품 앱 바이너리에서 비롯되는지 확인할 수 있습니다.

  • 정품 앱 바이너리: Google Play에서 인식하는 수정되지 않은 바이너리와 상호작용하는지 확인합니다.
  • 정품 Play 설치: 현재 사용자 계정에 라이선스가 부여되었는지 확인합니다. 즉, 사용자가 Google Play에서 앱이나 게임을 설치했거나 비용을 지불했음을 의미합니다.
  • 정품 Android 기기: Google Play 서비스에서 제공하는 정품 Android 기기에서 앱이 실행되는지 확인합니다.
  • 알려진 멀웨어 없음: Google Play 프로텍트가 사용 설정되어 있는지, 기기에 위험한 앱이 설치되어 있는지 확인합니다.
  • 다른 앱의 액세스 위험이 낮음: 화면을 캡처하거나 기기와 앱에 대한 입력을 제어할 수 있는 다른 앱이 실행 중인지 확인합니다.

사기를 완화하는 데 도움이 되는 방법

사용자가 앱에서 중요한 작업을 실행하면 Play Integrity API를 호출할 수 있습니다. 그렇지 않다면 앱의 백엔드 서버가 공격 및 사기를 방지하기 위해 취할 수 있는 조치를 결정할 수 있습니다. 예를 들어 추가 사용자 인증을 요구하거나 민감한 기능에 대한 액세스를 거부할 수 있습니다.

Play Integrity API 결정 흐름

앱 액세스 위험

앱 액세스 위험 신호는 앱이 실행 중일 때 기기의 다른 앱이 화면을 보고 캡처할 수 있는지 또는 접근성 권한을 사용하여 앱에 액세스할 수 있는지 평가하는 데 도움이 되도록 도입되었습니다. 확인된 접근성 앱은 이러한 확인 결과에서 자동으로 제외됩니다. 앱 액세스 위험은 개발자가 사용자 개인 정보를 보호하면서 앱을 보호하는 데 도움이 됩니다. 요청 앱이 설치된 앱의 ID를 가져오지 않고 확인 결과가 사용자 또는 기기 식별자와 연결되지 않기 때문입니다.

사용자가 특정 앱을 닫도록 요구하는 휴대전화의 스크린샷

이러한 협력 덕분에 YouTube는 고객을 더 효과적으로 보호하기 위한 심층적인 통계를 제공하는 데 필요한 신호를 얻을 수 있습니다.
—Nubank, 사전 체험판 파트너

앱 액세스 위험에는 다음과 같은 다양한 위험 수준이 있습니다.

  • 캡처 응답은 화면을 캡처할 수 있는 다른 앱이 실행 중임을 의미합니다.
  • 제어 응답은 기기를 제어할 수 있는 다른 앱이 실행 중임을 의미하므로 이러한 앱은 화면을 캡처하고 앱에 대한 입력을 제어할 수 있습니다.

앱 액세스 위험 시정 조치

액세스를 완전히 거부하는 대신 앱 또는 게임에서 중요하거나 민감한 작업을 식별하여 Play Integrity API로 보호하세요. 가능하면 중요 작업을 진행하도록 허용하기 전에 위험한 트래픽을 확인합니다. 예를 들어 앱 액세스 위험이 화면을 캡처할 수 있는 앱이 실행 중임을 나타내면 사용자에게 화면을 캡처할 수 있는 앱을 사용 중지하거나 제거하도록 요청한 후 보호하려는 기능을 계속 진행하도록 허용합니다.

다음 표에는 몇 가지 확인 결과의 예가 포함되어 있습니다.

앱 액세스 위험 확인 결과 응답 예시 해석
appsDetected:
["KNOWN_INSTALLED"]
Google Play에서 인식하거나 기기 제조업체가 시스템 파티션에 미리 로드한 앱만 설치되어 있습니다. 캡처, 제어 또는 오버레이 확인 결과를 초래하는 앱은 실행되고 있지 않습니다.
appsDetected:
["KNOWN_INSTALLED",
"UNKNOWN_INSTALLED",
"UNKNOWN_CAPTURING"]
Google Play에서 설치했거나 기기 제조업체가 시스템 파티션에 미리 로드한 앱이 있습니다. 화면을 보거나 다른 입력과 출력을 캡처하는 데 사용할 수 있는 권한이 사용 설정된 다른 앱이 실행되고 있습니다.
appsDetected:
["KNOWN_INSTALLED",
"KNOWN_CAPTURING",
"UNKNOWN_INSTALLED",
"UNKNOWN_CONTROLLING"]
화면을 보거나 기타 입력과 출력을 캡처하는 데 사용할 수 있는 권한이 사용 설정된 Play 또는 시스템이 실행되고 있습니다. 기기를 제어하고 앱에 대한 입력을 직접 제어하는 데 사용할 수 있는 권한이 사용 설정된 다른 앱도 실행되고 있습니다.
appAccessRiskVerdict: {} 필요한 요구사항을 충족하지 못하여 앱 액세스 위험이 평가되지 않았습니다. 예를 들어 기기를 충분히 신뢰할 수 없습니다.

Play 프로텍트 신호

Play 프로텍트 신호는 Play 프로텍트가 사용 설정되어 있는지, 기기에 설치된 알려진 위험한 앱을 발견했는지 앱에 알려줍니다.

environmentDetails:{
  playProtectVerdict: "NO_ISSUES"
}

앱 또는 사용자 데이터와 관련해 멀웨어가 특히 우려되는 경우 이 결과를 검사하고, 진행하기 전에 Play 프로텍트를 사용 설정하거나 유해한 앱을 삭제하도록 사용자에게 요청할 수 있습니다.

Play 프로텍트 사용 설정 대화상자

playProtectVerdict의 값은 다음 중 하나일 수 있습니다.

결과 설명 권장 작업

NO_ISSUES

Play 프로텍트가 사용 설정되어 있으며 기기에서 앱 문제를 발견하지 못했습니다.

Play 프로텍트가 사용 설정되어 있으며 문제가 발견되지 않았으므로 사용자 작업이 필요하지 않습니다.

NO_DATA

Play 프로텍트가 사용 설정되어 있지만 아직 검사가 이루어지지 않았습니다. 기기 또는 Play 스토어 앱이 최근에 재설정되었을 수 있습니다.

Play 프로텍트가 사용 설정되어 있으며 문제가 발견되지 않았으므로 사용자 작업이 필요하지 않습니다.

POSSIBLE_RISK

Play 프로텍트가 사용 중지되어 있습니다.

Play 프로텍트가 사용 설정되어 있으며 문제가 발견되지 않았으므로 사용자 작업이 필요하지 않습니다.

MEDIUM_RISK

Play 프로텍트가 사용 설정되어 있으며 기기에 설치된 잠재적으로 위험한 앱을 발견했습니다.

위험 허용 범위에 따라 사용자에게 Play 프로텍트를 실행하고 Play 프로텍트 경고에 조치를 취하도록 요청할 수 있습니다. 사용자가 이러한 요구사항을 충족할 수 없다면 서버 작업에서 차단할 수 있습니다.

HIGH_RISK

Play 프로텍트가 사용 설정되어 있으며 기기에 설치된 위험한 앱을 발견했습니다.

위험 허용 범위에 따라 사용자에게 Play 프로텍트를 실행하고 Play 프로텍트 경고에 조치를 취하도록 요청할 수 있습니다. 사용자가 이러한 요구사항을 충족할 수 없다면 서버 작업에서 차단할 수 있습니다.

UNEVALUATED

Play 프로텍트 확인 결과가 평가되지 않았습니다.

이는 다음을 비롯하여 여러 가지 이유로 발생할 수 있습니다.

  • 기기를 충분히 신뢰할 수 없습니다.
  • 게임에만 적용: 사용자 계정에 LICENSED가 없습니다.

최근 기기 활동

또한 최근 기기 활동을 선택하면 지난 1시간 동안 앱이 특정 기기에서 무결성 토큰을 요청한 횟수를 알 수 있습니다. 최근 기기 활동을 사용하여 공격이 진행 중임을 나타낼 수 있는 예기치 않은 과잉 활성 기기로부터 앱을 보호할 수 있습니다. 일반적인 기기에 설치된 앱이 매시간 무결성 토큰을 요청하는 횟수를 기반으로 각 최근 기기 활동 수준을 얼마나 신뢰할지 결정할 수 있습니다.

recentDeviceActivity 수신을 선택하면 deviceIntegrity 필드에 다음 두 가지 값이 포함됩니다.

deviceIntegrity: {
  deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"]
  recentDeviceActivity: {
    // "LEVEL_2" is one of several possible values.
    deviceActivityLevel: "LEVEL_2"
  }
}

먼저 데이터를 확인하여 모든 기기에서 앱의 일반적인 기기 활동 수준을 확인해야 합니다. 그런 다음 기기에서 요청이 너무 많을 때 앱이 어떻게 응답해야 할지 결정할 수 있습니다. 활동이 약간 높으면 사용자에게 나중에 다시 시도하도록 요청하는 것이 좋습니다. 활동이 매우 많은 경우 더 강력한 시정 조치를 취하는 것이 좋습니다.

표준 요청과 기존 요청 비교

Play Integrity를 구현할 때는 두 가지 유형의 요청을 고려하는 것이 중요합니다. 대부분의 경우 가장 빠른 응답을 제공하려면 표준 요청을 사용해야 하며 기기 증명 레코드에 대해 새로 생성된 요청이 필요한 경우에는 기존 요청을 사용해야 합니다.

기존 요청

표준 요청

요청 시간이 더 오래 걸리므로 실행 빈도를 줄여야 합니다.

예를 들어 매우 중요하거나 민감한 작업이 진짜인지 확인하기 위해 일회성으로 가끔 실행해야 합니다.

드물게 사용합니다.

요청은 지연 시간이 짧으며 주문형으로 사용할 수 있습니다.

표준 요청은 다음 두 부분으로 구성됩니다.

  • 무결성 토큰 제공자 준비(일회성)
  • 무결성 토큰 요청 (주문형)

주문형으로 사용

표준기존 요청에 관한 자세한 내용은 Play Integrity 문서를 참고하세요.

구현

Play Integrity API를 시작하려면 다음 단계를 따르세요.

기본적으로 Play Integrity API는 앱당 하루에 최대 10, 000개의 요청을 허용합니다. 일일 최대 요청 수 증가에 관심이 있는 경우 이 안내를 따르세요. 일일 최대 요청 수를 늘릴 수 있으려면 앱이 Play Integrity API를 올바르게 구현하고 Google Play 외에 다른 배포 채널에서도 사용할 수 있어야 합니다.

Play Integrity API에 유의해야 할 사항

자동 무결성 보호 (API 23 이상)

자동 무결성 보호는 무단 수정 및 재배포의 형태로 무결성을 저해하는 행위로부터 앱을 보호하는 조작 방지 코드 보호 서비스입니다. 데이터 연결 없이 작동하며 테스트하기 전에 개발자의 작업이 필요하지 않으며 백엔드 서버 통합도 필요하지 않습니다.

사기를 완화하는 데 도움이 되는 방법

자동 무결성 보호를 사용 설정하면 Google Play에서 앱 코드에 검사를 추가하고 고급 난독화 및 리버스 엔지니어링 방지 기술을 사용해 검사를 삭제하기 어렵게 만듭니다. 런타임 시 보호 기능은 앱이 조작되었거나 재배포되었는지 확인합니다.

  • 설치 프로그램 검사를 통과하지 못하면 사용자에게 Google Play에서 앱을 다운로드하라는 메시지가 표시됩니다.
  • 수정 검사를 통과하지 못하면 앱이 실행되지 않습니다.

이렇게 하면 앱의 수정된 버전으로부터 사용자를 보호할 수 있습니다.

구현

자동 무결성 보호는 현재 일부 Play 파트너에게만 제공됩니다. Google Play Console에서 이 기능을 사용할 수 없으며 액세스 권한을 얻고 싶다면 Google Play 개발자 지원팀에 문의하세요.

버전을 만들 때 또는 앱 무결성 페이지 (출시 > 앱 무결성)에서 보호 기능을 사용 설정할 수 있습니다. 자동 무결성 보호를 사용하려면 앱에서 Play 앱 서명을 사용해야 합니다.

프로덕션으로 출시를 승격하기 전에 보호된 앱을 테스트해야 합니다.

주의사항

  • 보호되지 않은 앱 버전을 출시하지 마세요
  • 여러 조작 방지 솔루션을 함께 사용할 때 주의할 점
  • 프로덕션으로 출시하기 전에 보호된 앱 테스트
  • 비정상 종료가 증가하는지 평소와 같이 통계를 모니터링합니다.
  • 앱의 손상된 버전을 Google Play에 신고할 수 있습니다.