취약한 인증 메커니즘

Gwon SeolHyeong·2021년 1월 14일
0

취약점 소개

취약한 인증 매커니즘(Weak Authorization Mechanism)은 정상적인 인증 절차를 우회하여 잘못된 인증으로 접근 권한을 취득하는 취약점이다.

OWASP Mobile Top 10 2014-M5(현 2017-M4)에 해당하는 취약점으로, 일반적으로 다음과 같은 경우에 해당한다.

  • 적절하지 않은 앱 퍼미션 설정 여부
  • 서비스 권한 상승 행위에 대한 통제 여부
  • 기능에 대한 제한 또는 우회 금지 여부
  • 불필요하거나 사용하지 않는 액티비티 제거 여부
  • 인텐트 사용에 대한 안정성 여부
  • 마스터 키 취약점 대응 여부

해당 챕터에서는 AndroidManifest.xml을 액티비티 속성으로 로그인 인증 없이 권한을 우회해본다.

취약점 진단 과정

다음 코드는 AndroidManifest.xml의 일부다. 코드를 살펴보면 안드로이드 액티비티의 속성이 android:exported="true"로 설정되어 있다는 것을 알 수 있다. 이 경우 다른 액티비티에서 인증 없이 접근할 수 있다.

<activity
        android:name=".FilePrefActivity"
        android:label="@string/title_activity_file_pref"
        android:windowSoftInputMode="stateVisible|adjustResize|adjustPan">
    </activity>
    <activity
        android:name=".DoLogin"
        android:label="@string/title_activity_do_login" >
    </activity>
    <activity
        android:name=".PostLogin"
        android:exported="true"
        android:label="@string/title_activity_post_login" >
    </activity>
    <activity
        android:name=".WrongLogin"
        android:label="@string/title_activity_wrong_login" >
    </activity>
    <activity
        android:name=".DoTransfer"
        android:exported="true"
        android:label="@string/title_activity_do_transfer" >
    </activity>
    <activity
        android:name=".ViewStatement"
        android:exported="true"
        android:label="@string/title_activity_view_statement" >
    </activity>

    <provider
        android:name=".TrackUserContentProvider"
        android:authorities="com.android.insecurebankv2.TrackUserContentProvider"
        android:exported="true" >
    </provider>

    <receiver
        android:name=".MyBroadCastReceiver"
        android:exported="true" >
        <intent-filter>
            <action android:name="theBroadcast" >
            </action>
        </intent-filter>
    </receiver>

    <activity
        android:name=".ChangePassword"
        android:exported="true"
        android:label="@string/title_activity_change_password" >
    </activity>
    

ADB를 이용하여 확인하는 명령어는 다음과 같다.

adb shemm am start [앱이 설치된 주소] / [호출하고 싶은 패키지 주소]

인시큐어뱅크에 위 명령어를 도입하면 다음과 같다.

위 명령어를 입력하면 위의 이미지와 같은 메시지와 함께 로그인 없이 인증을 무시하고 바로 액티비티를 호출할 수 있다.
(PostLogin, WrongLogin, DoTransfer 등 원하는 패키지 입력 후 접속 가능)

(기타 다른 패키지 화면은 생략)

취약점 대응 방안

컴포넌트에 대한 접근은 외부에 허락하지 않는 것이 안전하다.
android:exported는 다른 앱의 컴포넌트에서 현재 액티비티를 불러올 수 있는지를 설정한다. 만약 설정값이 "false"라면 이 액티비티는 같은 앱 혹은 같은 유저 ID를 가진 앱의 컴포넌트만 불러올 수 있다.
즉, 특별한 경우가 아니라면 액티비티 속성은 android:exported="false"로 설정하고, android:exported="true"로 설정할 경우 별도의 인텐트 필터로 검증한다.

해당 취약점도 마찬가지로 간단한 설정을 통해서 개발자가 보안 문제를 간단하게 해결할 수 있는 것으로 필자는 판단했다.

profile
정보보안 공부

0개의 댓글