Self-Improvement
안전하지 않은 콘텐츠 프로바이더 취약점 본문
■ 안전하지 않은 콘텐츠 프로바이더 취약점
콘텐츠 프로바이더를 이용하면 자신의 데이터에 다른 애플리케이션이 접근하거나 부여한 권한대로 이용하도록 할 수 있다. 또한 다른 애플리케이션의 데이터베이스나 파일에 접근 할 수 있는 인터페이스를 제공하며 주로 프로세스 간 통신으로 다른 애플리케이션과 데이터를 공유한다. 콘텐츠 프로바이더는 AndroidManifest.xml 파일에 <provider></provider>로 선언이 되어진다.
먼저 콘텐츠 프로바이더에 접근하기 위해서는 콘텐츠 프로바이더의 주소인 URI와 콘텐츠 리졸버가 필요하다. 콘텐츠 리졸버는 다른 애플리케이션의 콘텐츠 프로바이더에 접근할 수 있게 해주며 이때 콘텐츠 프로바이더의 주소인 URI가 필요하게 되어진다.
drozer을 통해 외부로 노출되어있는 콘텐츠 프로바이더를 확인해본다.
dz> run app.package.attacksurface com.android.insecurebankv2
확인을 해보니 한 개의 콘텐츠 프로바이더가 노출되어 있는 것을 확인할 수 있다.
노출된 콘텐츠 프로바이더의 URI 주소를 얻기 위해 아래의 명령어를 실행한다.
dz> run scanner.provider.finduris –a com.android.insecurebankv2
명령어의 결과로 접근 가능한 항목이 동일한 2개가 출력이 되었다. 이러한 URI를 통해 Insecurebankv2의 데이터를 조회해본다.
결과로 id와 name의 데이터를 출력하는 걸로 보아 로그인한 내역을 나타내는 것 같다.
더 나아가 콘텐츠 프로바이더는 대상 애플리케이션의 데이터베이스나 데이터 등을 확인할 수 있음으로 SQL Injection또한 공격이 가능한지 여부를 확인해본다.
dz> run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackusers —projection “’”
데이터베이스의 일부 쿼리가 메시지에 포함되어 출력이 되어짐으로 이를 통해 SQL Injection또한 공격이 가능해지는 취약점이 존재한다.
■ 대응방안
콘텐츠 프로바이더가 AndroidManifest.xml 파일에 exported가 true로 되어 있으면 외부로 노출이 되어져 데이터 유출의 위험이 존재하게 된다. 그래서 애플리케이션의 데이터가 유출되지 않도록 하기 위해서는 Androidmanifest.xml 파일에 exported를 false로 선언을 해야 한다.
drozer로 확인해보면 콘텐츠 프로바이더이 외부로 노출되어 있는게 존재하지 않는다.
'AOS' 카테고리의 다른 글
애플리케이션 디버깅 취약점 (0) | 2018.10.22 |
---|---|
취약한 웹 뷰 구현 (0) | 2018.10.22 |
로컬 암호화 취약점 (0) | 2018.10.22 |
액티비티 컴포넌트 취약점 (0) | 2018.10.22 |
브로드캐스트 리시버 취약점 (0) | 2018.10.22 |