DirtyC0w(더티카우) 취약점 (CVE-2016-5195)

  1. 개요
         1) DirtyC0w (더티카우) 취약점이란?
            : 2016년 10월 CVE-2016-5195 취약점
            : 루트 권한으로도 변경할 수 없었던 default.prop 파일을 익스플로잇을 통해 수정 가능하도록 하는 취약점
            : 디바이스를 재시작하는 경우, default.prop이 초기 설정으로 돌아가기 때문에 다시 수정해주어야함.

  1. 필요성
        1) 안드로이드 apk 파일 동적 디버깅 시, Manifest.xml 파일에 android:debuggable="true"라는 옵션이 있어야 디버깅이 가능하다.
            무결성 검증을 하는 앱의 경우, Manifest.xml 파일만 변경해도 무결성 탐지가 일어나므로 무결성 우회를 하지 않는 이상 디버깅이 불가능하다.
            따라서, 더티카우 취약점을 이용해 default.prop 파일 변경

        2) 매번 Manifest.xml파일을 변경하기 귀찮으므로 수월하게 default.prop 파일 변경


  1. 방법
        ** <안드로이드 애플리케이션 리버스 엔지니어링 - 남대현, 류재형 저>책에 나와 있는대로 시도해 보았지만 
계속 에러가 나서 익스플로잇 코드로는 실행해보지 못함..ㅠㅠ
             → 안드로이드 애플리케이션의 기본적인 점검 방법부터 약간의 후킹 방법까지 잘 나와있는 책이므로 추천

         그래서 인터넷 검색 도중 앱으로 쉽게 default.prop을 바꿀 수 있는 방법을 찾아냈당!! (그러면 결론적으로 dirtyC0w 익스플로잇을 한것과 동일해짐)



       

         1)  플레이스토어에서 Root Explorer를 다운받는다.
             ** 유료 앱이므로 http://ko.apkhere.com/app/com.speedsoftware.rootexplorer 에서 apk를 다운받아 디바이스로 옮기는 것을 추천
             ** 비슷하게 생긴 Explorer 앱이랑은 다른 기능을 가지고 있으므로 다운 시 유의! 



       2) 앱을 실행시킨 후 default.prop 파일의 ro.debuggable 속성 정보 확인

        → ro.debuggable의 속성값이 1이 되면 디버깅이 가능해짐
        → 처음에는 해당 파일의 권한이 644가 아니라 444로 설정되어있던것 것으로 기억하므로 3)번 과정을 수행해야 파일 수정이 가능할 것이다...
        


       3) 파일 권한 바꾸기 (최소 600)


       4) 이제 default.prop 파일 편집이 가능하다! 편집기로 텍스트를 열고 ro.debuggable=1로 변경하고 저장하면 끝!!!






2020-01-30 수정

해당 내용으로 인터넷 검색 도중 과거에 포스팅한 내용이 현재에는 실행이 불가능한 것을 알게되어 수정한다. 


어느 중국인이 포스팅한 내용이다. 


#0. mprop 파일 다운로드

https://github.com/wpvsyou/mprop에 들어가 mprop 파일을 다운받는다. 


이제 다운받은 mprop 파일을 디바이스에 삽입하고 실행 권한을 준뒤 실행시키면 익스플로잇 코드가 실행되면서 ro.debuggable이 0에서 1로 변경된다. 


#1. 현재 설정값 확인

일단 getprop ro.debuggable 명령어를 통해 현재 값을 확인한다.

   ※ 익스플로잇 전에는 설정값이 0임


#2. mprop 파일 기기에 설치 후 권한 변경

> adb push mprop /data/local/tmp     //mprop 파일 기기로 이동

> adb shell    // adb 연결


shell@b1:/$ su   // 루트 접근

root@b1:/# chmod 777 /data/local/tmp/mprop     // mprop 권한 변경


root@b1:/# cd /data/local/tmp              // 현재 위치 이동

root@b1:/# ./mprop ro.debuggable 1     // mprop 실행


mprop 실행 시 익스플로잇이 실행되면서 다음과 같은 결과를 출력하며 끝난다. 

이 때, patched ~ 이부분이 뜨지 않는 경우 마지막 명령어를 다시한번 실행시켜준다.


0001ffa0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

0001ffb0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

0001ffc0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

0001ffd0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

0001ffe0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

0001fff0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

patching it at:0xb6e81904[0xb6f388fc], value:[0x00000030 -> 0x00000031]

patching it at:0xb6e81900[0xb6f388f8], value:[0x01000000 -> 0x01000000]

patched, reread: [0xb6f388fc] => 0x00000031

patched, reread: [0xb6f388f8] => 0x01000000


#3. 변경된 설정값 확인

이제 ro.debuggable 값이 1로 변경된 것을 확인할 수 있을 것이다!!

하지만 이전에 설명한 root explorer로 default.prop 파일을 확인하면 값이 변하지 않았으므로 getprop ro.debuggable 명령어로 꼭 확인할것!!


그리고 디바이스를 재실행하면 해당 값도 다시 0으로 초기화되므로 주의하자



더 자세한 설명은 https://www.bodkin.ren/index.php/archives/533/ 참조.....(중국어임.....)


+ Recent posts