짱짱해커가 되고 싶은 나

[안드로이드 취약점 진단] 3-5. 액티비티 컴포넌트 취약점 본문

모바일

[안드로이드 취약점 진단] 3-5. 액티비티 컴포넌트 취약점

동로시 2022. 6. 11. 03:38

액티비티

액티비티는 AndroidMainfest.xml의 <activity>에 선언하며 하나의 앱은 하나 이상의 액티비티로 구성되어 있다.

이 중 하나의 액티비티를 MainActivity라고 하며 mainfest에 MainActivity로 선언한다.

각 액티비티는 독립적으로 동작하기 때문에 현재 액티비티에서 다음 액티비티를 실행이다.

-> 액티비티가 취약하게 선언되어 있다면 로직을 무시하고 공격자가 강제로 특정 액티비티를 호출하거나 권한이 없는 사용자가 특정 액티비티에 접근해서 권한 없이 특정 기능을 활성화할 수 있다.

 

인시큐어뱅크 - Vulnerable Activity Components

3-3과 동일한 내용이다.

AndroidMainfest.xml

<activity>로 선언되어 있으며 exported=true가 되어 있는 것들이 있다.

intent-filter가 없으면 default는 false지만 intent-filter가 있다면 default는 true가 된다는 것을 명심하자.

 

Exploit

비밀번호 변경을 시도해보자.

am start com.android.insecurebankv2/com.android.insecurebankv2.ChangePassword 로 해당 액티비티를 실행시킬 수 있다. 하지만, username 텍스트 필드가 비활성화되서 username을 입력할 수 없기에 비밀번호 변경이 불가능하다.

 

코드를 분석해보면 ChangePassword는 uname을 받아서 사용한다.

 

따라서 해당 클래스가 호출되는 곳을 찾아보면 (jadx에서 find-usage 기능을 사용할 수 있다.)

PostLogin 클래스에서 사용하는 것을 볼 수 있다.

PostLogin에서 uname 값을 넣어서 전달해준다.

따라서 공격을 할 때 intent로 uname값을 넣어주면 해결할 수 있다.

대응 방안

1. exported=false

2. 퍼미션 추가

3. 사용자 인증 절차를 추가해 인증되지 않은 사용자의 접근 차단

Comments