'화면 강제실행에 의한 인증단계우회' 취약점은 사용자가 인증 절차를 거치지 않고도 애플리케이션의 주요 기능이나 민감한 정보에 접근할 수 있게 하는 보안 취약점이다. 이는 특정 방법을 통해 앱의 인증 화면을 우회하고, 보호된 기능이나 데이터(개인정보, 금융정보, 계좌번호 등이 포함된 화면)에 무단 접근할 수 있는 가능성을 의미한다.
즉, 로그인 하지 않은 화면에서 인증시에만 접속할 수 있는 화면(Activity)을 강제호출하여 인증을 건너뛰고 접속이 가능하다면 해당 항목이 취약한 것이다.
취약점 내용을 살펴보고 점검을 해보자.
화면 강제실행에 의한 인증단계 우회 취약점은 악의적인 사용자가 특정 명령어를 사용하여 인증 절차를 거치지 않고도 기기의 보호된 영역을 우회하여 접근할 수 있게 만드는 보안 취약점을 의미한다.
🌱 양호
모든 민감한 기능 및 화면은 반드시 인증 절차를 거쳐야 접근할 수 있다.
앱의 백그라운드 상태에서 강제 실행을 통해 인증 단계를 우회할 수 없다.
📍앱의 백그라운드 상태란?
백그라운드 상태는 앱이 꺼져있거나 앱을 사용하다가 홈 버튼을 눌러서 빠져나온 경우를 의미한다. 음악을 들을 때 홈 버튼을 눌러서 빠져나왔는데도 음악이 계속 나오듯이 백그라운드 상태에는 앱은 온전히 종료되지 않는다.
📍안드로이드에서 Activity란?
Android 액티비티(Activity)는 앱의 화면이다. 앱을 켰을 때 홈 화면은 Main Activity 이며 필요에 따라 다른 창 위에 작게 띄울 수도 있다. 그래서 Activity 간 전환이라는 말은 화면 간 전환이라고 이해할 수 있다.
Activity는 UI를 제공하여 사용자와 상호작용을 하며, class에서 activity를 상속받아 사용할 수 있다.
💊 취약
인증 절차를 거치지 않고 민감한 기능이나 화면에 접근할 수 있다.
앱이 백그라운드 상태일 때 강제 실행을 통해 인증을 우회할 수 있다.
인증 상태를 검증하지 않고 Activity 전환이 이루어져 인증되지 않은 접근이 가능하다면 취약이다.
출처 : Ohbank 모의해킹 진단 가이드
** exported="false"이면 외부에서 호출이 되지 않기 때문에 true인 Activity를 찾아서 점검해야 한다.
> adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'"
결과창
ex) mCurrentFocus=Window{9dff664 u0 StatusBar}
ex) mFocusedApp=AppWindowToken{7d916f3 token=Token{cc9c562 ActivityRecord{157c2d u0 [패키지명]/.ui.mainnew.MainAccountActivity t74}}}
현재 window 창이 포커스되어 있고, 포커스되어 있는 앱의 정보는 위와 같으면 MainAccountActivity가 활성화되어 있다.
> adb shell "am start -a android.intent.action.MAIN -n [패키지명]/[호출할 Activity명]"
> am start -n com.app.damnvulnerablebank/com.app.damnvulnerablebank.SendMoney
** 웹 프록시 도구를 활용한다면 위 단계를 Ctrl + R(repeater)를 실행하여 반복 호출할 수 있다.
(SendMoney가 반복호출된다면 돈이 계속 보내지는 것이니 위험하다.)
다른 App과 연동이 필요한 경우가 아니라면 Activity의 exported ="false"로 변경한다.
중요 Activity의 경우 화면 호출 조건을 설정하여 특정 조건에 맞지 않을 경우 호출되지 않도록 설정한다.
모든 민감한 기능 및 화면에 접근하기 전에 인증 절차를 거치도록 한다.
Activity 간 전환 시 항상 현재 인증 상태를 확인하고, 인증되지 않은 접근을 차단한다. ("해당 페이지에 접근하기 위해서는 인증이 필요합니다. 인증을 해주세요" 라는 에러 페이지를 출력하여 차단한다.)
백그라운드에서 앱이 포그라운드로 전환될 때 인증 상태를 검증한다.
📍 해당 취약점은 처음에는 어렵게 느껴졌던 취약점인데 막상 실습을 해보니 우회가 될 만한 액티비티를 찾아가고, 강제실행을 하는 과정이 재밌었다. 실제로는 인증과 관련된 중요한 액티비티는 모두 검증 단계를 거치기 때문에 화면 강제실행을 통한 인증단계가 우회되는 앱이 많지는 않은 것 같다.