전체 글 171

인시큐어뱅크 앱 취약점 - 런타임 조작

인시큐어뱅크 앱 취약점 - 런타임 조작 취약점 소개 런타임 조작 취약점이란 앱이 실행되는 도중 메모리상에 악의적인 행동을 하는 취약점이다. 취약점 진단 모든 기능이 메모리상에 올라가야 런타임 조작이 가능하기 떄문에 jdb에 사용할 인시큐어뱅크 앱 디버깅 포트 번호를 확인한다. 인시큐어뱅크 앱을 실행 후 앱 디버깅 포트 번호를 확인하면 다음과 같이 4053 이라는 디버깅 포트가 나왔다. adb를 통해 디버깅 포트를 로컬 포트로 포트포워딩 해준 후 jdb 명령어를 통해 로컬 디버깅 포트로 연결한다. 로그인을 하지 않고 패스워드를 변경하기 위해서는 ChangePassword 액티비티를 컴포넌트 취약점을 사용하여 강제로 실행시켜야 한다. nox_adb shell am start -n com.android.ins..

인시큐어뱅크 앱 취약점 - 앱 디버깅 취약점

인시큐어뱅크 앱 취약점 - 앱 디버깅 취약점 취약점 소개 안드로이드 앱을 구동한 후 런타임 디버깅을 통해 안드로이드 앱을 실행도중 조작할 수 있는 취약점이다. 난독화가 안되어있다면 앱의 흐름을 더욱 쉽게 간파당한다. AndroidManifest.xml 파일에서 android:debuggable 속성이 true로 설정되어 있는 경우 설치된 앱의 보호된 영역까지 접근이 가능하게 된다. 대부분 이러한 취약한 설정은 개발자들의 편의를 위한 설정으로 발생한다. 하지만 이러한 취약한 설정은 배포된 앱의 중대한 보안결함이 발생하므로 반드시 조치해야 한다. 취약점 진단 Drozer 도구로 먼저 insecurebankv2 앱을 진단해보면 is debuggable 이라고 앱 디버깅이 가능하다는 취약점이 나왔다. Andro..

인시큐어뱅크 앱 취약점 - 페이스트보드 취약점

인시큐어뱅크 앱 취약점 - 페이스트보드 취약점 취약점 소개 사용자의 중요한 데이터가 메모리(클립보드)에 노출되어 있는 취약점이다. 클립보드에 저장된 데이터를 별도의 권한 없이 허가되지 않은 사용자에게 노출되어 있는 취약점이다. 취약점 진단 Insecurebankv2 앱의 Transfer 에서 from Account를 클립보드로 복사한다. nox_adb shell 명령어를 사용하여 Insecurebankv2 앱을 실행하는 유저 명을 확인한다. adb shell su 유저명 service call clipboard 2 s16 com.android.insecurebankv2 명령을사용해 클립보드를 검사해보면 복사했던 From Account가 출력되는 것을 확인할 수 있다. 대응 방안 중요한 데이터는 가급적 복..

인시큐어뱅크 앱 취약점 - 취약한 로깅 메커니즘

인시큐어뱅크 앱 취약점 - 취약한 로깅 메커니즘 취약점 소개 로그(Log)는 프로그램 구동 시 프로그램의 현재 상태, 처리하는 데이터 정보를 말한다. 로그를 통해 관리자나 개발자는 중요한 정보를 제공받을 수 있으며, 특히 프로그램에 버그가 있을 때 이를 유지보수 하는데 사용할 수 있다. 취약한 로깅 메커니즘은 이러한 로그에 노출되어서는 안되는 중요한 데이터 또는 민감한 데이터가 로그로 남겨지는 경우를 말한다. 취약점 진단 adb로 로그인 과정을 logcat을 이용해 확인해보면 다음과 같이 로그인 한 계정의 정보가 평문으로 노출되는 것을 확인 가능하다. 대응 방안 다음 DoLogin 소스코드를 살펴보면 로그인이 성공했다면 로그에 Successful Login 다음으로 계정의 아이디와 비밀번호를 출력하는 것..

인시큐어뱅크 앱 취약점 - 중요 정보 메모리 노출 취약점

인시큐어뱅크 앱 취약점 - 중요 정보 메모리 노출 취약점 취약점 소개 앱에서 사용하는 중요한 정보들은 암호화 되어 있으나 메모리로 올라오게 되면 평문으로 노출되는 취약점이다. 중요한 정보가 암호화되어 있더라도 메모리에 올라가면서 복호화 되는 것을 이용한다. 메모리 영역은 변수나 객체가 저장되는 영역으로 스택과 힙 메모리 영역으로 구분된다. 참조 타입은 값이 저장된 위치를 가리키는 변수를 말하며 해당 객체나 배열이 저장된 메모리 영역이 노출될 가능성이 있다. 또한 객체의 생성과 삭제를 관리하기 위해 가바지 컬렉터(GC)가 필요한데 이러한 상황에서 메모리 노출 취약점이 발생할 수 있다. 취약점 진단 다음 코드는 중요 정보인 비밀번호를 String 객체에 저장한다. String은 불변하는 객체이기 때문에 내부..

인시큐어뱅크 앱 취약점 - 앱 패칭 취약점

인시큐어뱅크 앱 취약점 - 앱 패칭 취약점 취약점 소개 앱 패칭 취약점이란 안드로이드의 클라이언트 코드를 변경해 비정상적인 작동을 유도하도록 APK 파일을 변조해 실행되는 취약점을 말한다. 대표적인 예로 배포된 악성코드들이 정상적인 서비스 앱을 조작해 사용자들을 유인함으로 인해서 사용자의 개인 정보, 공인 인증서, 휴대폰 정보 등을 탈취한다. 서버 인증이 아닌 클라이언트 단의 인증을 우회해서 여러가지 인증 절차를 무력화시킬 수 있다. 취약점 진단 릴리즈된 apk 파일을 확인 한 후 명령 프롬포트 창을 연 후 apktool -d app-release.apk 를 입력해 디컴파일한다. 디컴파일을 하면 app-release\smali\com\android\insecurebankv2 경로에 smail 코드가 생성..

인시큐어뱅크 앱 취약점 - 취약한 암호화 구현

인시큐어뱅크 앱 취약점 - 취약한 암호화 구현 취약점 소개 안드로이드 모바일 앱에서 사용되는 금융 정보, 개인 정보, 인증 정보 등의 중요한 정보는 기밀성을 보장할 수 없는 표준 암호화 알고리즘을 사용해 암화를 해야 한다. 하지만, 중요한 정보를 취약한 암호화 알고리즘, 고정적인 대칭키, 짧은 키, 유추하기 쉬운 키를 이용해 암호화를 하면 제 3자가 쉽게 해독이 가능하여 평문의 정보를 획득할 수 있다. 인시큐어뱅크 앱은 대칭키가 항상 고정적이고, 평문의 대칭키를 사용하고 있고, 모든 단말기에 동일한 대칭키를 이용해 암호화를 하므로 취약점이 발생한다. 취약점 진단 인시큐어뱅크 앱 내부 저장소에 저장된 mySharedPreferences.xml 파일을 열어보면 아이디는 Base64 인코딩 되어 있고, 비밀번..

인시큐어뱅크 앱 취약점 - 취약한 웹 뷰 구현

인시큐어뱅크 앱 취약점 - 취약한 웹 뷰 구현 취약점 소개 웹 뷰(안드로이드 앱의 UI 또는 패킷)에서 자바스크립트 코드가 강제로 실행되게 함으로써 다른 사용자의 중요 정보를 탈취하는 취약점(XSS)이다. 인시큐어 뱅크에서는 자바스크립트 코드가 로컬에서만 실행되게 할 수 있는데 만약 다른 사용자에게 자바스크립트 코드를 보낼 수 있다면 타 사용자가 의도하지 않은 코드의 실행 및 특정 중요정보 탈취 등의 행위가 가능한 취약점이다. 취약점 진단 웹 뷰를 어디서 어떻게 사용하는지 확인하기 위해서 안드로이드 스튜디오 → ctrl + shift + f → WebView 검색 위의 화면에서 ctrl + enter를 누르면 메인화면 하단에 검색 결과가 출력된다. Found Occurrences 하단의 Unclassfi..

인시큐어뱅크 앱 취약점 - 취약한 콘텐츠 프로바이더

인시큐어뱅크 앱 취약점 - 취약한 콘텐츠 프로바이더 취약점 소개 콘텐츠 프로바이더(Content Provider)란, 다른 앱이 데이터베이스에 접근할 수 있도록 도와주는 역할을 한다. 컨텐츠 프로바이더는 앞서 살펴본 액티비와 비슷하게 AndroidManifest.xml에 로 선언할 수 있다. 콘텐츠 프로바이더 취약점이 존재하게 되면, 데이터베이스에 접근할 권한이 없는데도 데이터베이스에 접근이 가능할 수 있게 된다. 취약점 진단 액티비티 취약점 진단과 비슷하게 android:exported=”true”로 설정되어 있는지 확인하면 된다. 인시큐어뱅크 앱의 AndroidManifest.xml의 를 살펴보면 아래와 같이 export 여부가 true로 설정되어있다. drozer를 사용해서 run scanner.p..

인시큐어뱅크 앱 취약점 - 취약한 액티비티 컴포넌트

인시큐어뱅크 앱 취약점 - 취약한 액티비티 컴포넌트 취약점 소개 안드로이드 액티비티는 애플리케이션을 구성하는 가장 기본적인 구성 단위 중 하나로 안드로이드 애플리케이션과 사용자 간에 상호 작용에 필요한 기능을 제공한다. 액티비티는 AndroidManifest.xml의 요소에 선언하며 하나의 애플리케이션은 하나 이상의 액티비티로 구성된다. 특정 액티비티는 MainActivity, 매니페스트에 메인 액티비티로 선언한다. MainActivity는 애플리케이션 시작 시 나타나는 화면이며, 애플리케이션 실행 후 조건에 따라 설정된 액티비티가 호출된다. 만약 새로운 액티비티 시작 시 기존에 실행된 액티비티는 시스템에서 스택에 저장되고 새로운 액티비티가 실행된다. 다시 기존에 액티비티를 실행하기 위해 뒤로가기 버튼을..