본문 바로가기
정보보안/안드로이드해킹

안드로이드 모의해킹) 안전하지 않은 콘텐츠 프로바이더 접근

by _miiiiiin_zzang_ 2020. 7. 28.

안드로이드의 모든 앱들은 기본적으로 다른 앱에서 자신의 데이터에 접근하는 것을 금지

그러나 콘텐츠 프로바이더를 이용하여 자신의 데이터에 다른 앱이 접근하거나 부여한 권한대로 이용하도록 있음

콘텐츠 프로바이더

  • 다른 앱의 데이터베이스나 파일에 접근할 있는 인터페이스 제공
  • 주로 프로세스 통신으로 다른 앱과 데이터 공유
  • 기능을 사용하기 위해서는 앱에서 프로바이더가 선언되어야 , Androidmanifest.xml <provider> 요소에 속함
  • content:// 시작
  • 정상적인 경우 : 대상 앱의 데베에 접근하지  못하고 사용자가 원하는 항목에만 접근하도록 하여 공유 가능
  • 비정상적인 경우 : 공격자는 민감 데이터에 접근하여 저장된 데이터를 마음대로 조회하거나 변경할 있게

 

취약점 진단 과정

  1. 앱에 콘텐츠 프로바이더가 선언되어 있는지 확인
  2. adb 취약점을 확인하기 전에 exported 상태를 확인
    1. false : 같은 애플리케이션에서만 해당 요소를 호출하여 사용할 있음
    2. true : 외부 앱에서 해당 요소 사용 가능 > 실습 진행
  3. 콘텐츠 프로바이더를 이용하여 다른 앱의 데이터에 접근하기 위해서는 URL 이용, 내에 content:// 시작하는 항목 있는지 확인
    1. 일단 하기 apktool 디컴파일 필요할 같아서 추가, 다음에 이부분 자세히 쓰기

 

    1. 새로 추가된 디렉터리 이곳에 디컴파일 파일 저장
    2. C:\Android-InsecureBankv2-master\InsecureBankv2\app\app-release\smali\com\android\insecurebankv2
    3. https://programist.tistory.com/entry/Apktool%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-apk-%ED%8C%8C%EC%9D%BC-%EB%94%94%EC%BB%B4%ED%8C%8C%EC%9D%BC-%EB%B0%8F-%EB%A6%AC%ED%8C%A8%ED%82%A4%EC%A7%95 참고
    1. astrogrep 이용하여 특정 폴더의 파일 내용 입력한 단어가 포함된 파일 확인
    1. content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
  1. adb 이용한 콘텐츠 프로바이더 취약점 확인
    1. 공격을 하기 위한 기본 정보가 모이면 앱의 데이터 확인
    2. name=jack : 인시큐어뱅크에서 로그인하는 사용자 id 값으로 보아 사용자가 로그인 내역으로 추측
    3. 값은 해당 앱의 데베에 저장되기 때문에 출력되는 정보는 데베에서 가져와 출력되는 것으로 판단
    4. 위에서 출력된 정보가 데베에 저장되었는지 확인하기 위해 앱에 저장된 데베 파일인 mydb pc 복사하여 확인
      1. DB Browser for SQLite 도구 이용하여 검색
  2. 드로저를 이용하여 취약점 확인
      1. 콘탠츠 프로바이터 취약점 1 존재 확인
      1. 대상 앱의 콘텐츠 프로바이더 정보 확인 가능
      2. 출력되는 정보는 androidmanifest.xml 파일에 선언된 정보와 동일
      1. 드로저의 모듈을 통해 콘텐츠 프로바이더의 URI 주소를 검색하여 접근 가능한 목록을 출력
      2.  content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers/
      1. 콘텐츠 프로바이더는 대상 앱의 데베나 데이터 등을 확인할 있다고 했으므로 드로저를 이용하여 SQL Injection이나 경로 탐색도 가능
    1. SQL injection 실습 : 테이블 목록 컬럼 내용 확인
        1. ' ' 사용하여 취약점 여부 확인, 에러 메시지 출력되면 취약점 있다는
        1. SQLITE 존재하는 테이블 목록 확인
        2. uri 통해 접근한 경우 names라는 항목 존재하는 확인 했으니 names 내용 출력
      1. 현재는 names밖에 중요 정보가 없어서 동일 내용을 출력하지만 테이블의 중요 정보가 있을 경우 공격자가 원하는 정보 얻을 있음

 

취약점 대응 방안

  1. exported = false 설정

댓글