외로운 Nova의 작업실
insecurebankv2 - 취약한 인증 메커니즘 취약점 본문
Mobile App Penetesting/Android App Vulnerability
insecurebankv2 - 취약한 인증 메커니즘 취약점
Nova_ 2023. 5. 7. 20:03- 취약점 소개
취약한 인증 메커니즘은 정상적인 인증 절차를 우회하여 비정상적인 인증으로 접근권한을 획득하는 취약점입니다.
- 취약점 진단 과정
매니페스트파일을 보면 액티비티의 속성중 exported=true 항목이 있는 액티비티들이 있습니다. 이 경우 다른 액티비티에서 인증없이 접근할 수 있습니다. 아래는 매니페스트 파일입니다.
<manifest versionCode="1"
versionName="1.0"
package="com.android.insecurebankv2"
platformBuildVersionCode="22"
platformBuildVersionName="5.1.1-1819727">
<uses-sdk minSdkVersion="15"
targetSdkVersion="22">
</uses-sdk>
<uses-permission name="android.permission.INTERNET">
</uses-permission>
<uses-permission name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
<uses-permission name="android.permission.SEND_SMS">
</uses-permission>
<uses-permission name="android.permission.USE_CREDENTIALS">
</uses-permission>
<uses-permission name="android.permission.GET_ACCOUNTS">
</uses-permission>
<uses-permission name="android.permission.READ_PROFILE">
</uses-permission>
<uses-permission name="android.permission.READ_CONTACTS">
</uses-permission>
<uses-permission name="android.permission.READ_PHONE_STATE">
</uses-permission>
<uses-permission name="android.permission.READ_EXTERNAL_STORAGE"
maxSdkVersion="18">
</uses-permission>
<uses-permission name="android.permission.READ_CALL_LOG">
</uses-permission>
<uses-permission name="android.permission.ACCESS_NETWORK_STATE">
</uses-permission>
<uses-permission name="android.permission.ACCESS_COARSE_LOCATION">
</uses-permission>
<uses-feature glEsVersion="0x20000"
required="true">
</uses-feature>
<application theme="@16974105"
label="@2131165248"
icon="@2130903040"
debuggable="true"
allowBackup="true">
<activity label="@2131165248"
name="com.android.insecurebankv2.LoginActivity">
<intent-filter>
<action name="android.intent.action.MAIN">
</action>
<category name="android.intent.category.LAUNCHER">
</category>
</intent-filter>
</activity>
<activity label="@2131165271"
name="com.android.insecurebankv2.FilePrefActivity"
windowSoftInputMode="0x34">
</activity>
<activity label="@2131165268"
name="com.android.insecurebankv2.DoLogin">
</activity>
<activity label="@2131165275"
name="com.android.insecurebankv2.PostLogin"
exported="true">
</activity>
<activity label="@2131165278"
name="com.android.insecurebankv2.WrongLogin">
</activity>
<activity label="@2131165269"
name="com.android.insecurebankv2.DoTransfer"
exported="true">
</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>
<receiver name="com.android.insecurebankv2.MyBroadCastReceiver"
exported="true">
<intent-filter>
<action name="theBroadcast">
</action>
</intent-filter>
</receiver>
<activity label="@2131165267"
name="com.android.insecurebankv2.ChangePassword"
exported="true">
</activity>
<activity theme="@16973839"
name="com.google.android.gms.ads.AdActivity"
configChanges="0xfb0">
</activity>
<activity theme="@2131296479"
name="com.google.android.gms.ads.purchase.InAppPurchaseActivity">
</activity>
<meta-data name="com.google.android.gms.version"
value="@2131427332">
</meta-data>
<meta-data name="com.google.android.gms.wallet.api.enabled"
value="true">
</meta-data>
<receiver name="com.google.android.gms.wallet.EnableWalletOptimizationReceiver"
exported="false">
<intent-filter>
<action name="com.google.android.gms.wallet.ENABLE_WALLET_OPTIMIZATION">
</action>
</intent-filter>
</receiver>
</application>
</manifest>
여기서 PostLogin, DoTransfer, ViewStatement 액티비티는 export가 true로 설정되어 있습니다. 이를 통해 로그인 없이 해당 액티비티에 접근이 가능합니다. drozer를 사용하여 접근해보겠습니다.
dz> run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.PostLogin
dz> run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.DoTransfer
dz> run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.ViewStatement
이렇게 로그인 과정없이 불러내서 인증을 우회할 수 있습니다.
- 취약점 대응 방안
exported 속성을 false로 변경하여 같은 앱 혹은 같은 유저 id를 가진 앱의 컴포넌트만 불러올 수 있게합니다. 또한 만약 true로 설정할 경우 별도의 인텐트 필터로 검증해야합니다.
'Mobile App Penetesting > Android App Vulnerability' 카테고리의 다른 글
insecurebankv2 - 액티비티 컴포넌트 취약점 (0) | 2023.05.11 |
---|---|
insecurebankv2 - 로컬 암호화 이슈 취약점 (0) | 2023.05.08 |
insecurebankv2 - 브로드캐스트 리시버 결함 (0) | 2023.05.06 |
insecurebankv2 - 취약점 진단 및 분석 도구 (1) | 2023.05.05 |
insecurebankv2 - 기본적인 명령어 정리 (0) | 2023.05.02 |
Comments