안드로이드 단말 97%를 위협하는 심각한 취약점 “CVE-2015-1085”

게시일: 2016-04-07 l 작성자: Veo Zhang (Mobile Threats Analyst)

2016년 3월 18일, 구글은 심각한 보안 취약점인 ‘CVE-2015-1085’에 대한 안드로이드 보안 권고사항을 발표했습니다. 루팅 애플리케이션에 활용되는 위 취약점은 2014년 4월 리눅스 커널에서 초기 발견되어 위험도 ‘중’으로 인식되었으나, 2015년 2월 심각도 상승으로 ‘CVE-2015-1805’로 CVE 식별 번호를 할당 받았습니다. 2016년 2월 해당 취약점을 악용한 익스플로잇 코드가 확인되어, 안드로이드 기기 보안 침해 가능성이 높아짐에 따라, 위험도 ‘최상’으로 수정되었습니다. 구글은 3월 16일 해당 취약점에 대한 업데이트를 공개하고, 이를 악용하여 루팅하는 애플리케이션 정보를 삭제하는 등의 조치를 취하고 있습니다.

'CVE-2015-1805'는 커널 버전 3.18 미만의 모든 안드로이드 단말에 영향을 미칩니다. 현재 데스크탑 용 리눅스 커널의 최신 버전은 4.5인 반면, Android OS는 최신 마쉬멜로우만 커널 3.18 버전을 사용하고 있으며, 이전 버전에서는 모두 3.18 미만의 커널을 사용하고 있습니다. 즉, 안드로이드OS를 최신 마쉬멜로우로 업데이트하지 않은 단말기는 보안 위협에 놓이게 됩니다. 구글이 3월 7일 발표한 안드로이드 버전별 점유율 자료에 따르면, 마쉬멜로우의 점유율은 전체 2.3%에 지나지 않습니다. 안드로이드 단말 OS 및 하드웨어 업데이트는 제조사에 의존되어 있는 만큼, 매우 심각한 상황이라 할 수 있습니다.

3월 초 트렌드마이크로는, Snapdragon 프로세서를 탑재한 안드로이드 단말에 루팅을 허용하는 취약점(CVE-2016-0819와 CVE-2016-0805) 을 발표하였습니다. 루트 권한을 얻을 수 있는 Towel 루트(CVE-2014-3153), PingPong 루트(CVE-2015-3636)와 같은 익스플로잇이 확인되는 가운데, 이번에 새롭게 확인된 취약점의 경우 사이버 범죄자가 더 쉽게 침입할 수 있는 보안 취약점입니다. 다양한 루팅 익스플로잇 코드가 알려지면서, 앱 개발자들이 자신들만의 익스플로잇을 개발할 수 있는 기회가 생기고 있습니다.

취약점 세부사항 파헤치기

이번 취약점은 레이스 컨디션(Race Condition)에서 iovec 배열의 오버런을 초래합니다. 특별 구성된 iovec struct을 이용하면 커널에 임의 쓰기가 가능합니다.

그림 1 : 루팅 어플 1,500만 다운로드

그림 1 : 루팅 어플 1,500만 다운로드

악명 높은 루팅 앱 개발팀은, PinPong 루트를 더 이상 사용할 수 없게 되자, 위와 같은 취약점을 이용하였습니다. 당사는 현재 활동 중인 익스플로잇을 지속적으로 모니터링 하고 있으며, 위 취약점을 이용한 공격이 계속될 것이라 예상하고 있습니다.

그림 2. 함수 “pipe_iov_copy_from_user” 재실행을 일으키는 경쟁 조건

그림 2. 함수 “pipe_iov_copy_from_user” 재실행을 일으키는 경쟁 조건

그림 3. 쓰기 대상 커널 주소를 iovec struc에 마킹

그림 3. 쓰기 대상 커널 주소를 iovec struc에 마킹

리눅스 커널 파일 "fs / pipe.c"의 pipe 함수 "pipe_iov_copy_to_user"로부터 유래한 해당 취약점은, "pipe_iov_copy_to_user “이 실패할 경우, 같은 소스 버퍼를 이용한 재실행 루틴 함수를 이용하여 복사에 실패한 위치로 이동하여 다시 복사를 실행합니다. 이 경우, 첫 단계 복사 데이터의 크기는 최종 iovec 배열 오버런이 생성됩니다.

그림 4. iovec 오버런

그림 4. iovec 오버런

상기 오버런 상태는 정의되지 않은 메모리 액세스를 초래하여, "Denial of Service (DoS 서비스 거부)가 발생됩니다. 여기서 익스플로잇은 시스템 오류를 방지하는 기술을 사용합니다. 예를 들어, iovec 배열의 길이가 기본 4,096 바이트 PIPE_BUF 인 소스버퍼보다 길게 설정될 경우, 재실행시 오버런을 방지 할 수 있는 것입니다.

그림 5. 재실행시 오류 방지

그림 5. 재실행시 오류 방지

익스플로잇 코드는 남아있는 데이터를 복사하기 위해 "pipe_iov_copy_to_user"를 3번 반복하여 실행합니다. 그 후 대상 커널 주소로 설정 한 iovec과 iov_base에 마킹한 iovec 버퍼의 마지막 부분에 액세스 오버런을 일으킵니다. 재실행 시와 달리 이 단계에서 커널 메모리 영역에 임의로 쓰기 위해 보호용 "copy_to_user" 대신 "_ copy_to_user_inatomoc"를 이용하기 때문에 다시 재실행시 오버런을 일으키지 않게 됩니다.

그림 6. 취약 코드

그림 6. 취약 코드

트렌드마이크로의 대책

이 취약점은 DoS 공격을 일으키는 오류로 여겨지지만, 해당 취약점을 이용한 익스플로잇 코드가 나올 경우, 안드로이드 단말의 보안이 심각하게 침해될 위험이 있습니다. 사이버 범죄자들은 루트 권한을 얻는 것으로 안드로이드 단말에서 다양한 악의적인 활동을 수행 할 수 있습니다. 단말기를 보호하기 위해 응용 프로그램은 공식 GooglePlay 사이트에서 다운로드하여 설치하는 것을 권장드립니다. 또한 개인 이용자를 위한 트렌드마이크로 모바일 시큐리티는 문제의 취약점을 이용하는 익스플로잇 코드를 사용하는 악성 앱으로부터 사용자를 안전하게 보호합니다.


원문: Critical ‘CVE-2015-1805’ Vulnerability Allows Permanent Rooting of Most Android Phones