Magisk는 더 이상 앱에서 부트로더 잠금 해제를 숨길 수 없습니다.

Magisk 개발자는 Google이 기기의 부트로더 잠금이 해제되었는지 확인하기 위해 하드웨어 검사를 사용하기 시작했을 수 있음을 발견했습니다.

XDA 인정 개발자 탑존우의 "Magisk" 프로젝트는 본질적으로 Android 커뮤니티에서 "루트"와 동의어가 되었습니다. 이 기능이 인기를 끄는 주된 이유 중 하나는 사용자가 장치를 개조했다는 사실을 숨길 수 있기 때문입니다. 그러나 Google은 애플리케이션에서 부트로더 잠금 해제 상태를 숨기는 Magisk의 기능을 단속할 수 있습니다.

휴대폰을 루팅하려면 일반적으로 수정된 부팅 이미지를 플래시할 수 있는 부트로더를 잠금 해제해야 합니다. 이는 Magisk가 부팅 이미지를 스푸핑 부트로더 상태 및/또는 자체 검사 부팅 상태 확인으로 수정하기 때문에 필요합니다. Google Play 서비스의 일부인 Google SafetyNet Attestation API는 앱이 변조된 기기에서 실행되고 있는지 알려주는 데 사용됩니다. SafetyNet API가 부트로더가 잠금 해제되었음을 감지하면 "기본 무결성" 검사에 대한 실패 상태를 반환합니다. 이 검사에 실패한 장치는 SafetyNet API를 사용하여 장치 무결성을 확인하는 앱에서 잠길 수 있습니다. 이러한 앱에는 일반적으로 은행 앱, 결제 앱(Google Pay 등), 다양한 온라인 게임(Pokémon Go 등)이 포함됩니다. 그러나 SafetyNet API는 지금까지 장치가 변조되었는지 확인하기 위해 소프트웨어 검사만 사용했기 때문에 Magisk는 간단히 Google Play 서비스 및 기타 사용자 공간보다 낮은 수준과 높은 권한으로 설치되므로 부트로더 및/또는 자체 검사 부팅 상태 응용 프로그램. topjohnwu가 설명했듯이 MagiskHide는 "탐지 프로세스를 위해 격리된 '안전한 환경'을 [만들고] Google의 API를 통해 합법적인 기기의 실제 상태를 반영하지 않는 SafetyNet 결과입니다."

그러나 최근 사용자들은 Magisk를 사용하여 부팅 이미지를 패치했음에도 불구하고 부트로더 잠금 해제 장치가 SafetyNet의 기본 무결성 검사에 실패한다는 사실을 발견했습니다. topjohnwu에 따르면 이는 Google이 부팅 이미지가 변조되지 않았는지 확인하기 위해 하드웨어 수준 키 증명을 구현했을 수 있기 때문입니다. 구체적으로 이는 Google Play 서비스가 "수정되지 않은 키 저장소 인증서를 SafetyNet 서버에 [전송]하고 적법성을 확인한 후 확인함을 의미합니다. 장치에서 자체 검사 부팅이 활성화되었는지(부트로더 상태) 여부를 확인하기 위해 인증서 확장 데이터를 사용합니다." 즉, 더 이상 활성화되지 않을 수 있음을 의미합니다. 부트로더가 잠금 해제되었다는 사실을 숨길 수 있으며 이로 인해 Google Pay 및 Pokémon Go와 같은 애플리케이션이 작동하지 않게 됩니다. 보통.

topjohnwu가 언급한 것처럼 SafetyNet이 부트로더 잠금 해제 상태를 확인하는 방식에 대한 이러한 변경은 Google Play 서비스에 포함된 SafetyNet API에 대한 서버 측 업데이트를 통해 이루어집니다. 그러나 모든 사용자가 업데이트된 SafetyNet 검사에 실패하는 것은 아니므로 새로운 하드웨어 수준 키 증명이 아직 널리 시행되지 않을 수 있습니다.

우리는 topjohnwu가 기술적 장애물을 몇 번이고 극복하는 것을 보았습니다. Google은 topjohnwu가 Magisk에서 발견하고 우회하는 SafetyNet의 새로운 검사를 자주 출시합니다. Android의 새로운 버전마다 파티션 구조나 부팅 이미지가 변경되므로 topjohnwu는 변경 사항을 연구한 다음 새로운 패치 방법을 구현해야 합니다. 그러나 topjohnwu조차도 이번에는 우회로를 찾는 데 어려움을 겪을 수 있습니다.

이번 해결 방법에는 개인 키를 검색하기 위해 장치의 TEE(Trusted Execution Environment) 펌웨어를 해킹하는 것이 포함되기 때문입니다. 그러나 이는 믿을 수 없을 정도로 안전하도록 설계된 펌웨어의 취약점을 찾아야 하기 때문에 매우 어렵습니다. 실제로 많은 회사에서는 이러한 취약점이 발견될 경우 수십만 달러를 지불하겠다고 제안합니다. 예를 들어 Google은 Pixel의 Trusted Execution Environment의 원격 코드 실행 취약점에 대해 250,000달러를 지불합니다. 최대 $1,000,000 취약점에 대한 타이탄M 보안 칩. 개인 키가 어떻게든 유출되더라도 별로 쓸모가 없을 것 같습니다. Google은 원격으로 키를 취소할 수 있습니다. 따라서 장치의 무결성을 확인하는 데 사용할 수 없습니다.

SafetyNet에 대해 하드웨어 수준 키 증명이 광범위하게 시행되면 Android 8.0 Oreo 이상을 실행하는 잠금 해제된 부트로더가 있는 대부분의 장치는 SafetyNet의 기본 무결성 검사를 통과하지 못합니다. Android 8.0 Oreo 이상으로 출시된 모든 기기는 TEE에 하드웨어 키 저장소를 구현해야 하기 때문입니다. 요즘 특정 장치에는 TEE를 메인 프로세서에서 멀리 이동시켜 악용을 더욱 어렵게 만드는 전용 하드웨어 보안 모듈(HSM)도 있습니다. Pixel 4의 Titan M과 삼성의 새로운 보안 칩 Galaxy S20이 이에 대한 예입니다.

톱존우 또한 설명한다 다른 잠재적 해결 방법은 불가능하거나 매우 어렵습니다. Google Play 서비스에서 SafetyNet Attestation API를 수정하기 위해 Xposed Framework를 사용하는 것은 "적절한 SafetyNet 검사가 [the]가 아닌 원격 서버에서 결과를 확인하기 때문에" 작동하지 않을 가능성이 높습니다. 코드 삽입 프레임워크로 조작할 수 있는 장치." 또한 Google Play 서비스는 매우 난독화되어 있어 처음에 이러한 Xposed 모듈을 생성하는 것이 엄청나게 어렵습니다. 장소. SafetyNet 테스트 결과를 스푸핑하는 것도 불가능합니다. 왜냐하면 SafetyNet 응답은 'Google 서버에서 나오고 Google의 개인 키로 서명'되기 때문입니다.

Google은 몇 년 동안 하드웨어 지원 키 증명을 사용하여 SafetyNet 검사를 강화해 왔습니다. 3년 동안 이를 자제함으로써 사용자는 뱅킹 앱 사용 능력을 희생하지 않고도 루트 및 Magisk 모듈을 즐길 수 있었습니다. 그러나 부트로더 잠금 해제 상태를 효과적으로 숨기는 Magisk의 기능은 곧 종료될 것으로 보입니다. 이는 우리가 수년 동안 기대해 왔던 변화인데, 마침내 그 변화가 시행되는 것을 보니 안타깝습니다. Google은 상태 확인이 하드웨어 기반을 사용했는지 여부를 반환하도록 SafetyNet Attestation API를 업데이트하기를 바랍니다. 이를 통해 앱 개발자는 잠금을 해제한 모든 사용자를 차단할지 여부를 결정할 수 있습니다. 부트로더.


Daniel Micay에게 감사드립니다(@다니엘마이케이) 이 문제에 대한 그의 의견에 감사드립니다!