환경 보호

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를 가져오지 않고 확인 결과가 사용자 또는 기기 식별자와 연결되지 않으므로 앱 액세스 위험을 사용하면 개발자가 사용자 개인 정보를 보호하면서 앱을 보호할 수 있습니다.

사용자에게 특정 앱을 종료하도록 요청하는 휴대전화의 스크린샷

이러한 협업 덕분에 고객을 더욱 효과적으로 보호하기 위한 심층적인 인사이트를 얻는 데 필요한 신호를 얻을 수 있게 되었습니다.
—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에 신고할 수 있습니다.