[모의해킹] 화면 강제실행에 의한 인증단계 우회

cielo ru·2024년 7월 25일
0

모의해킹

목록 보기
7/14

➰ 취약점 개요

'화면 강제실행에 의한 인증단계우회' 취약점은 사용자가 인증 절차를 거치지 않고도 애플리케이션의 주요 기능이나 민감한 정보에 접근할 수 있게 하는 보안 취약점이다. 이는 특정 방법을 통해 앱의 인증 화면을 우회하고, 보호된 기능이나 데이터(개인정보, 금융정보, 계좌번호 등이 포함된 화면)에 무단 접근할 수 있는 가능성을 의미한다.

즉, 로그인 하지 않은 화면에서 인증시에만 접속할 수 있는 화면(Activity)을 강제호출하여 인증을 건너뛰고 접속이 가능하다면 해당 항목이 취약한 것이다.

취약점 내용을 살펴보고 점검을 해보자.

➰ 취약점 내용

화면 강제실행에 의한 인증단계 우회 취약점은 악의적인 사용자가 특정 명령어를 사용하여 인증 절차를 거치지 않고도 기기의 보호된 영역을 우회하여 접근할 수 있게 만드는 보안 취약점을 의미한다.

➰ 점검기준

🌱 양호

  1. 모든 민감한 기능 및 화면은 반드시 인증 절차를 거쳐야 접근할 수 있다.

  2. 앱의 백그라운드 상태에서 강제 실행을 통해 인증 단계를 우회할 수 없다.

📍앱의 백그라운드 상태란?
백그라운드 상태는 앱이 꺼져있거나 앱을 사용하다가 홈 버튼을 눌러서 빠져나온 경우를 의미한다. 음악을 들을 때 홈 버튼을 눌러서 빠져나왔는데도 음악이 계속 나오듯이 백그라운드 상태에는 앱은 온전히 종료되지 않는다.

  1. Activity 간 전환 시 인증 상태를 검증하고, 인증되지 않은 사용자의 접근을 차단한다.

📍안드로이드에서 Activity란?
Android 액티비티(Activity)는 앱의 화면이다. 앱을 켰을 때 홈 화면은 Main Activity 이며 필요에 따라 다른 창 위에 작게 띄울 수도 있다. 그래서 Activity 간 전환이라는 말은 화면 간 전환이라고 이해할 수 있다.
Activity는 UI를 제공하여 사용자와 상호작용을 하며, class에서 activity를 상속받아 사용할 수 있다.

💊 취약

  1. 인증 절차를 거치지 않고 민감한 기능이나 화면에 접근할 수 있다.

  2. 앱이 백그라운드 상태일 때 강제 실행을 통해 인증을 우회할 수 있다.

  3. 인증 상태를 검증하지 않고 Activity 전환이 이루어져 인증되지 않은 접근이 가능하다면 취약이다.

    출처 : Ohbank 모의해킹 진단 가이드

➰ 점검 방법

  1. Jadx 에서 AndroidManifest.xml 파일을 열어 exported="true"인 Activity를 확인한다.


** exported="false"이면 외부에서 호출이 되지 않기 때문에 true인 Activity를 찾아서 점검해야 한다.

  1. adb shell에 접속하여 현재 포커스된 창과 앱 정보를 확인하여, 강제실행하려는 대상이 정확한지 검증한다.
> 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가 활성화되어 있다.

  1. adb shell에 접속하여 아래의 명령어를 이용하여 activity를 강제 호출한다.
> 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가 반복호출된다면 돈이 계속 보내지는 것이니 위험하다.)

  1. 위 명령어를 실행했을 때 SendMoney activity가 실행되는 모습을 확인할 수 있다.

    출처 : Ohbank 모의해킹 진단 가이드

➰ 대응 방안

  1. 다른 App과 연동이 필요한 경우가 아니라면 Activity의 exported ="false"로 변경한다.

  2. 중요 Activity의 경우 화면 호출 조건을 설정하여 특정 조건에 맞지 않을 경우 호출되지 않도록 설정한다.

  3. 모든 민감한 기능 및 화면에 접근하기 전에 인증 절차를 거치도록 한다.

  4. Activity 간 전환 시 항상 현재 인증 상태를 확인하고, 인증되지 않은 접근을 차단한다. ("해당 페이지에 접근하기 위해서는 인증이 필요합니다. 인증을 해주세요" 라는 에러 페이지를 출력하여 차단한다.)

  5. 백그라운드에서 앱이 포그라운드로 전환될 때 인증 상태를 검증한다.


📍 해당 취약점은 처음에는 어렵게 느껴졌던 취약점인데 막상 실습을 해보니 우회가 될 만한 액티비티를 찾아가고, 강제실행을 하는 과정이 재밌었다. 실제로는 인증과 관련된 중요한 액티비티는 모두 검증 단계를 거치기 때문에 화면 강제실행을 통한 인증단계가 우회되는 앱이 많지는 않은 것 같다.


➰ 참고

profile
Cloud Engineer & BackEnd Developer

0개의 댓글