Widevine L3 DRM, Qiling과 DFA로 파헤치다

by DD
1일 전
조회수 0

Qiling 에뮬레이터를 활용하여 Widevine L3 라이브러리를 분석 환경으로 구축함

차분 오류 분석(DFA) 기법을 적용하여 암호화된 키박스(Keybox)를 복호화하는 데 성공함

난독화된 가상 머신(VM) 코드를 분석하여 DRM 로직의 작동 방식을 규명함

분석 결과를 바탕으로 커스텀 키박스 생성 가능성을 제시함

Qiling 에뮬레이터를 통한 Widevine L3 환경 구축

분석가는 Qiling 프레임워크를 사용하여 Widevine L3 라이브러리(libwvhidl.so)를 에뮬레이션 환경에서 실행하는 데 성공했습니다. 초기에는 라이브러리 로딩 및 재배치(Relocation) 과정에서 문제가 발생했으나, LIEF 라이브러리를 이용한 ELF 파일 수정과 시스템 속성(System Property) 후킹을 통해 재현 가능한 분석 환경(Reproducible Analysis Environment)을 구축했습니다. 특히, `/dev/random`을 `/dev/zero`에 연결하고 `getrandom`, `clock_gettime`, `gettimeofday` 시스템 콜을 고정된 값으로 반환하도록 하여 결정론적 실행(Deterministic Execution)을 확보한 점이 주목할 만합니다.

차분 오류 분석(DFA)을 이용한 키박스 복호화

키박스 보호에 사용된 화이트박스 AES(White-box AES)를 깨기 위해 차분 오류 분석(Differential Fault Analysis, DFA) 기법이 적용되었습니다. 분석가는 AES 연산 중 특정 지점에서 의도적으로 오류를 주입하여 상태를 약간 손상시킨 후, 다수의 오류 주입 결과를 수집했습니다. 이 데이터를 phoenixAES와 같은 도구를 사용하여 분석함으로써, AES 키의 일부를 복구하고 최종적으로 키박스를 복호화하는 데 성공했습니다. 이 과정은 정확한 오류 주입 시점 식별결과 분석이 핵심이었습니다.

난독화된 가상 머신(VM) 코드 분석 및 재구현

Widevine L3의 난독화된 코드는 자체 가상 머신(VM) 위에서 실행되는 것으로 분석되었습니다. 분석가는 `zmpczfhk` 함수와 관련 VM 컨텍스트 구조체(`VM_CTX_STRUCT`)를 역분석하여, 암호화된 함수 코드를 동적으로 복호화하고 실행하는 메커니즘을 파악했습니다. `rfdncxfe` 함수를 후킹하여 복호화된 함수들을 덤프하고, 이를 기반으로 전체 VM 코드의 제어 흐름(Control Flow)을 재구성했습니다. 이 분석을 통해 난독화 기법의 작동 방식을 이해하고, 실제 복호화 로직을 파이썬으로 재현할 수 있었습니다.

키박스 구조 및 암호화 메커니즘 분석

분석 결과, 키박스(Keybox)는 디바이스 ID, 디바이스 키, 암호화된 데이터 등으로 구성되며, 특히 `ay64.dat` 파일은 SHA1 해시를 이용한 AES CBC 모드 암호화로 보호됨을 확인했습니다. 또한, `wvoec3::getUniqueID` 함수가 디바이스 ID를 생성하는 방식을 파악하여, 커스텀 키박스 생성 가능성을 시사했습니다. 이는 특정 벤더 키를 확보하면 새로운 키박스를 만들 수 있음을 의미하며, 데이터 격리 아키텍처(Data Isolation Architecture)의 근본적인 취약점을 보여줍니다.

Diving into the depths of Widevine L3