Google은 앱이 안전하고 신뢰할 수 있는 환경에서 실행 중인지 감지하는 데 도움이 되는 일련의 API 및 서비스를 제공합니다. 핵심은 Play Integrity API로, 잠재적으로 위험하고 허위일 가능성이 있는 상호작용을 감지하여 상호작용이 진짜인지 확인하는 데 도움이 됩니다. 이제 Play Integrity API는 앱 및 기기 무결성 외에도 액세스 및 접근성 위험, Google Play 프로텍트, 최근 기기 활동에 관한 정보를 제공합니다. 사기 방지 전략을 강화하기 위해 Android 플랫폼은 앱과 관련이 있을 수 있는 특정 시나리오에 관한 API를 제공합니다.
Play Integrity API
Play Integrity API를 사용하면 앱이 실행되는 기기의 보안 상태를 확인할 수 있습니다. 이렇게 하면 적절한 사용자가 민감한 정보에 액세스하고 있는지 확신할 수 있습니다.
이를 통해 신뢰할 수 있는 환경에서 상호작용과 서버 요청이 정품 앱 바이너리에서 비롯되는지 확인할 수 있습니다.
- 정품 앱 바이너리: Google Play에서 인식하는 수정되지 않은 바이너리와 상호작용하는지 확인합니다.
- 정품 Play 설치: 현재 사용자 계정에 라이선스가 부여되었는지 확인합니다. 즉, 사용자가 Google Play에서 앱이나 게임을 설치했거나 비용을 지불했음을 의미합니다.
- 정품 Android 기기: Google Play 서비스에서 제공하는 정품 Android 기기에서 앱이 실행되는지 확인합니다.
- 알려진 멀웨어 없음: Google Play 프로텍트가 사용 설정되어 있는지, 기기에 위험한 앱이 설치되어 있는지 확인합니다.
- 다른 앱의 액세스 위험이 낮음: 화면을 캡처하거나 기기와 앱에 대한 입력을 제어할 수 있는 다른 앱이 실행 중인지 확인합니다.
사기를 완화하는 데 도움이 되는 방법
사용자가 앱에서 중요한 작업을 실행하면 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 프로텍트를 사용 설정하거나 유해한 앱을 삭제하도록 사용자에게 요청할 수 있습니다.
playProtectVerdict
의 값은 다음 중 하나일 수 있습니다.
결과 | 설명 | 권장 작업 |
---|---|---|
|
Play 프로텍트가 사용 설정되어 있으며 기기에서 앱 문제를 발견하지 못했습니다. |
Play 프로텍트가 사용 설정되어 있으며 문제가 발견되지 않았으므로 사용자 작업이 필요하지 않습니다. |
|
Play 프로텍트가 사용 설정되어 있지만 아직 검사가 이루어지지 않았습니다. 기기 또는 Play 스토어 앱이 최근에 재설정되었을 수 있습니다. |
Play 프로텍트가 사용 설정되어 있으며 문제가 발견되지 않았으므로 사용자 작업이 필요하지 않습니다. |
|
Play 프로텍트가 사용 중지되어 있습니다. |
Play 프로텍트가 사용 설정되어 있으며 문제가 발견되지 않았으므로 사용자 작업이 필요하지 않습니다. |
|
Play 프로텍트가 사용 설정되어 있으며 기기에 설치된 잠재적으로 위험한 앱을 발견했습니다. |
위험 허용 범위에 따라 사용자에게 Play 프로텍트를 실행하고 Play 프로텍트 경고에 조치를 취하도록 요청할 수 있습니다. 사용자가 이러한 요구사항을 충족할 수 없다면 서버 작업에서 차단할 수 있습니다. |
|
Play 프로텍트가 사용 설정되어 있으며 기기에 설치된 위험한 앱을 발견했습니다. |
위험 허용 범위에 따라 사용자에게 Play 프로텍트를 실행하고 Play 프로텍트 경고에 조치를 취하도록 요청할 수 있습니다. 사용자가 이러한 요구사항을 충족할 수 없다면 서버 작업에서 차단할 수 있습니다. |
|
Play 프로텍트 확인 결과가 평가되지 않았습니다. 이는 다음을 비롯하여 여러 가지 이유로 발생할 수 있습니다.
|
최근 기기 활동
또한 최근 기기 활동을 선택하면 지난 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를 시작하려면 다음 단계를 따르세요.
- Google Play Console에서 Play Integrity API 응답을 사용 설정하고 Google Cloud 프로젝트에 연결합니다.
- 앱에 Play Integrity API를 통합합니다.
- 확인 결과를 처리하는 방법을 결정합니다.
기본적으로 Play Integrity API는 앱당 하루에 최대 10, 000개의 요청을 허용합니다. 일일 최대 요청 수 증가에 관심이 있는 경우 이 안내를 따르세요. 일일 최대 요청 수를 늘릴 수 있으려면 앱이 Play Integrity API를 올바르게 구현하고 Google Play 외에 다른 배포 채널에서도 사용할 수 있어야 합니다.
Play Integrity API에 유의해야 할 사항
- Play Integrity API 응답에서 오류를 적절하게 처리하는 것이 중요합니다. 오류 코드에 따라 여기의 재시도 및 시정 조치 전략 가이드를 따르세요.
- Play Integrity API는 응답 테스트 도구를 제공합니다.
- 기기의 무결성 결과를 보려면 이 단계를 따르세요.
- Play Integrity API를 사용하는 권장사항에 관한 보안 고려사항을 읽어보세요.
자동 무결성 보호 (API 23 이상)
자동 무결성 보호는 무단 수정 및 재배포의 형태로 무결성을 저해하는 행위로부터 앱을 보호하는 조작 방지 코드 보호 서비스입니다. 데이터 연결 없이 작동하며 테스트하기 전에 개발자의 작업이 필요하지 않으며 백엔드 서버 통합도 필요하지 않습니다.
사기를 완화하는 데 도움이 되는 방법
자동 무결성 보호를 사용 설정하면 Google Play에서 앱 코드에 검사를 추가하고 고급 난독화 및 리버스 엔지니어링 방지 기술을 사용해 검사를 삭제하기 어렵게 만듭니다. 런타임 시 보호 기능은 앱이 조작되었거나 재배포되었는지 확인합니다.
- 설치 프로그램 검사를 통과하지 못하면 사용자에게 Google Play에서 앱을 다운로드하라는 메시지가 표시됩니다.
- 수정 검사를 통과하지 못하면 앱이 실행되지 않습니다.
이렇게 하면 앱의 수정된 버전으로부터 사용자를 보호할 수 있습니다.
구현
자동 무결성 보호는 현재 일부 Play 파트너에게만 제공됩니다. Google Play Console에서 이 기능을 사용할 수 없으며 액세스 권한을 얻고 싶다면 Google Play 개발자 지원팀에 문의하세요.
버전을 만들 때 또는 앱 무결성 페이지 (출시 > 앱 무결성)에서 보호 기능을 사용 설정할 수 있습니다. 자동 무결성 보호를 사용하려면 앱에서 Play 앱 서명을 사용해야 합니다.
프로덕션으로 출시를 승격하기 전에 보호된 앱을 테스트해야 합니다.
주의사항
- 보호되지 않은 앱 버전을 출시하지 마세요
- 여러 조작 방지 솔루션을 함께 사용할 때 주의할 점
- 프로덕션으로 출시하기 전에 보호된 앱 테스트
- 비정상 종료가 증가하는지 평소와 같이 통계를 모니터링합니다.
- 앱의 손상된 버전을 Google Play에 신고할 수 있습니다.