테크트리(TechTree)

부트로더 언락, 루팅, Widevine, 그리고 Play Integrity에 대하여 본문

기타 정보, 리뷰/모바일

부트로더 언락, 루팅, Widevine, 그리고 Play Integrity에 대하여

Alternative_TechTree 2024. 11. 11. 14:29

안녕하세요, Alternative입니다.

기기 소프트웨어 모딩을 할 때 꼭 나오는 말이 부트로더 언락, 루팅, Widevine, 그리고 Play Integrity입니다.

루팅을 하면 은행 앱들이 루팅 감지를 한다, 부트로더 언락을 하면 뭐가 안된다, Widevine L1이 아니어서 넷플릭스가 안 된다, Play Integrity가 뭐여야 한다 등등 여러 가지 말들이 있고, 여러 개념이 헷갈릴 수 있습니다.

이것들은 전부 '기기 무결성 검사'와 관련이 있는 개념들인데요. 이 글에서 해당 개념들을 정리하도록 하겠습니다.

이 글은 2024년 11월 기준으로 작성되었습니다. 시간이 지남에 따라 개념에 변화가 생기거나 기기 무결성 검증에 새로운 항목이 추가될 수 있어 내용이 틀리게 될 수 있습니다.

 


 

부트로더 언락

부트로더는 기기 파티션에 설치된 소프트웨어가 시작(부팅)될 수 있도록 확인하고 돕는 소프트웨어입니다.

평상시에 부트로더는 설치된 소프트웨어를 시작시키기 전에 해당 소프트웨어가 수정되지 않은 공식(Official)이 맞는지 확인하는 역할도 겸하고 있습니다. 외부 공격자가 임의로 소프트웨어를 수정하진 않았는지 검사하는 dm-Verity라고 하는 기능인데, 컴퓨터로 치면 UEFI의 Secure boot에 해당하는 기능입니다.

하지만 이 때문에 사용자도 자신이 원하는 데로 소프트웨어를 수정할 수 없습니다.

이를 해결하기 위해 하는 작업이 바로 부트로더 언락입니다. 언락을 하면 부트로더의 소프트웨어 체크가 비활성화되어 사용자가 원하는 데로 수정을 하고, 수정된 소프트웨어도 부팅시킬 수 있게 됩니다.

부트로더 언락 시 표시되는 경고문. Pixel 3a

당연히 언락을 하게 되면 기기 소유자가 아닌 다른 사람도 기기에 대한 물리적 접근이 가능할 시 시스템 소프트웨어를 수정할 수 있게 되기 때문에 보안이 취약해지게 됩니다. 따라서 어떤 기기들은 부트로더 언락을 하면 시스템적으로 일부 기능을 비활성화시키거나 제한을 두게 합니다. 대표적으로 구글 픽셀의 경우 최신 픽셀 9에서 부트로더 언락을 하면 카메라 후처리 알고리즘 일부가 사라지고, 삼성 기기들의 경우 Knox(녹스)라는 소프트웨어가 부트로더 언락을 감지해 삼성페이와 보안폴더 등의 기능을 사용할 수 없게 합니다.

또한 앱들도 부트로더 언락을 우회적으로 감지하는 경우가 있습니다. 이 내용은 아래의 Play Integrity로 이어집니다.

 

루팅

루팅(Rooting)은 리눅스 운영체제에서 최고 사용자(Root) 권한을 획득하는 것을 의미합니다.

보통의 리눅스 운영체제에서는 사용자 암호를 입력하면 루트 권한을 획득할 수 있지만, 안드로이드 운영체제에서는 외부 공격자가 루트 권한을 가지는 것을 막기 위해 사용자가 루트 권한을 사용할 수 없게 비활성화시켰습니다. 취약점이나 외부 소프트웨어 등을 통해 이 비활성화된 루트 권한을 사용할 수 있게 하는 것이 루팅입니다.

부트로더 언락과 유사하게, 루팅을 하게 되면 시스템 파일과 사용자 파일을 마음대로 보거나 변경, 삭제, 추가할 수 있습니다. 부트로더 언락된 기기에서는 기기에 물리적인 접근이 가능할 때에만 이런 행위를 할 수 있지만, 루팅된 기기의 경우 시스템이 켜져 있는 상태에서 원격으로도 할 수 있으므로 보안에 더욱 치명적입니다.

이런 보안 문제를 방지하기 위해 루트 권한을 적절히 관리하는 앱이 필요합니다. 예전에는 SuperUser나 SuperSU가 주로 쓰였고, 요즘은 Magisk나 KernelSU, APatch를 주로 사용합니다. 최근 루팅 방법은 고도화되고 보안도 굉장히 강력해짐에 따라 사용자가 정확히 사용한다면 보안 문제는 거의 없습니다.

보통 루팅 여부는 개별 앱들이 각자의 방식으로 감지합니다. 흔히 들어 보셨을 "루팅하면 은행 앱이 감지를 한다" "루팅하면 토스를 못 쓴다"라는 말들이 이런 부분에 해당합니다. 예전에는 루팅 방법이 단순했기 때문에 보안 문제도 많았고 다른 앱들이 루팅 여부를 알기 쉬워 이런 작업이 필요했지만, 요즘에는 루팅 앱의 기술이 좋아져 감지하기 어려워졌습니다. 그럼에도 여러 꼼수에 가까운 방식(루트 권한 관리 앱의 패키지명을 인식하는 등)으로 루팅을 파악하긴 합니다.

그리고 부트로더 언락과 마찬가지로 Play Integrity를 통해 우회적으로 감지하기도 합니다.

 

Play Integrity

Play Integrity API란 구글에서 제공하는 무결성 검증 시스템으로, 사용자의 작업과 요청이 정식 Android 기기에서 실행 중인 수정되지 않은 앱 바이너리(Google Play에서 설치됨)에서 비롯되는지 확인합니다. 즉, 앱을 임의로 변조할 수 있는 환경에서 실행된 것이 아닌지를 확인해 악용과 무단 액세스, 공격을 방지합니다. (출처)

여기서 '앱을 임의로 변조할 수 있는 환경'에는 당연히 부트로더 언락과 루팅도 포함됩니다. 따라서 이 두 가지를 하게 되면 Play Integrity 시스템에서 이를 감지합니다. 앞서 말했던 앱들이 우회적으로 감지를 한다는 것이 바로 Play Integrity를 통해 감지하는 것을 의미합니다.

Play Integrity API는 시스템 무결성 검사를 한 후, 3종류 라벨(Label)의 통과 유무를 앱에 전달해 줍니다.

MEETS_BASIC_INTEGRITY
MEETS_DEVICE_INTEGRITY
MEETS_STRONG_INTEGRITY

예시

부트로더를 언락하게 되면 STRONG에서 Fail이 되고, 루팅을 하거나 커스텀 시스템 소프트웨어를 쓰면 BASIC 또는 DEVICE에서 Fail됩니다.

보통의 경우 BASIC과 DEVICE 두 가지에서만 Pass가 된다면 대부분의 앱을 이용하는 데에 문제가 없습니다. 극히 일부 앱의 경우 STRONG까지 Pass를 요구합니다. 즉, 부트로더만 언락된 순정 상태라면 대체로 이용에 큰 문제가 없습니다.

루팅을 한 후 적절한 시스템 수정 모듈을 설치하면 BASIC과 DEVICE는 쉽게 Pass할 수 있습니다. STRONG의 경우 일부 모듈을 통해 Pass할 순 있지만, Play Integrity의 정책 변경에 따라 다시 Fail하는 경우가 잦기 때문에 불안정합니다.

Play Integrity는 플레이 스토어에서 Play Integrity API checker와 같은 서드파티 앱을 써서 확인하거나, 이 방법을 통해 플레이 스토어 개발자 설정에서 확인할 수 있습니다.

 

Widevine

Widevine(와이드바인)은 구글에서 제작한 동영상 DRM 솔루션입니다. 넷플릭스와 네이버 시리즈온, 쿠팡플레이 등 OTT 서비스들이 해당 기능을 사용해 안드로이드에서 영상을 복호화하고 재생합니다.

Widevine에는 3단계의 Level이 있는데 각각 L1, L2, L3입니다. L1이 가장 높은 보안 수준이고, L3가 가장 낮습니다.

Widevine은 인증을 받는 방식이기 때문에 인증받지 못한 기기는 자동으로 L3가 됩니다. 일부 중국제 태블릿의 경우 Widevine 인증을 받지 않았기 때문에 부트로더 언락이나 루팅을 하지 않은 순정 상태에서도 넷플릭스 고화질 재생이 되지 않습니다.

인증을 받은 기기라도, 부트로더를 언락하게 되면 L1에서 L3로 강등됩니다. 루팅이나 Play Integrity와 달리 Widevine L3는 L1으로 우회하기 매우 어렵습니다. 따라서 부트로더를 언락하면 OTT 사용은 힘듭니다.

단, 일부 기기의 경우 부트로더를 언락해도 Widevine L1이 유지됩니다. 모든 픽셀 기기와 일부 샤오미 기기 등이 이에 해당합니다.

Widevine 레벨의 경우 DRM info 앱을 통해 확인 가능합니다.

 


 

사용자의 관점에서 다시 정리하겠습니다.

시스템 소프트웨어를 모딩하게 되면 무결성이 사라지는데, 앱이 이를 감지해 사용이 불가능해지는 것이 대부분의 문제입니다.

앱이 무결성 여부를 감지하는 방법은
1. 직접 루팅 여부를 확인
2. Play Integrity API 확인
3. Widevine 레벨 감소를 확인
의 3가지입니다. (앱이 직접 부트로더 언락을 확인하는 경우는 거의 없습니다)

'1. 직접 루팅 여부를 확인' 의 경우는 루팅 방법의 발달로 비교적 손쉽게 우회 가능합니다.

'2. Play Integrity API 확인' 의 경우도 적절한 모듈의 사용을 통해 우회 가능합니다.

'3. Widevine 레벨 감소를 확인' 의 경우는 우회가 힘드며, 다시 부트로더 락을 해야 합니다.

 

루팅과 Play Integrity 우회 방법은 이 글에서 간략히 볼 수 있습니다.

 


 

도움이 되셨다면 좋겠습니다!

Comments