목록Mobile App Penetesting/Android App Vulnerability (23)
외로운 Nova의 작업실
- 취약점 소개 로그는 서비스가 정상작동 하지않을때 고치기위해서 디버깅의 정보로 사용되는 중요한 정보입니다. 하지만, 사용자의 개인정보나 비밀정보를 로깅해버리면, 공격자가 로그를 보고 개인정보를 탈취할 수 있습니다. adb를 통해 로그를 확인할 수 있으며, 안드로이드 커널은 로그와 관련된 4가지 버퍼를 관리하고 있습니다. 그 종류와 특징은 아래와 같습니다. Main : 메인 앱 로그로서 앱이나 플랫폼 내부에서 android.util.Log 클래스로 기록된 로그 Event : 시스템에서 발생하는 이벤트 정보를 위한 로그 Radio : 이동통신망과 관련된 이벤트 정보 system : 안드로이드 플랫폼 내부의 하위 레벨에 있는 시스템이나 디버깅을 위한 로그 - 취약점 진단 먼저, 로그인시 로그인 계정이 남는지..
- 취약점 소개 앱을 실행하고 다양한 작업을 하게되면 힙 영역에 정보들이 남습니다. 이 힙 메모리 영역을 덤프해서 분석하면 유의미한 정보를 얻을 수 있습니다. 즉, 다른 앱이 금융권앱의 힙 메모리 영역을 덤프해서 공격자 서버로 보낸다면 아이디나 패스워드같은 정보를 얻을 수 있습니다. - 취약점 진단 먼저 앱을 켜서 계좌로 송금하는 작업을 해보겠습니다. 이를 해야 힙에 정보가 남습니다. 이후 메모리 덤프를 위해 PID를 알아야합니다. 아래 명령어로 PID를 알아냅니다. adb -e shell ps | grep inse PID가 6494인 것을 알았습니다. 이제 메모리 덤프를 해보겠습니다. adb shell am dumpheap 6494 /sdcard/Download/insecurebankv2_mem 649..
- 취약점 소개 요즘 배포되는 안드로이드 모바일 악성코드는 정상적으로 서비스되고 있는 앱을 조작하여 사용자 개인 정보를 포함해 원하는 데이터를 얻기위한 코드들만 삽입해서 사용하고 있습니다. 따라서 기업들은 조작하지못하도록 자사의 앱 변조방지 솔루션들을 도입하고 있습니다. 만약, 변조방지 솔루션을 사용안한다면 어떻게 조작하는지 알아보겠습니다. - 취약점 진단 과정 먼저 apk 파일을 디컴파일 해줍니다. apktool d app-release.apk app-release 폴더에 들어가게되면 디컴파일된 파일들이 있습니다. 이중에서 not rooted device!! 라는 문구를 위조하기 위해 postLogin.smali 파일을 찾아줍니다. C:\Android-InsecureBankv2-master\Insecu..
- 취약점 소개 해당 취약점은 암호 알고리즘에대한 취약점입니다. 알고리즘을 사용할때는 아래와 같은 것을 고려해야합니다. 어떤 암호알고리즘을 사용할 것 인가 키값은 어떻게 할 것인가 솔트값은 어떻게 할 것 인가 초기화 벡터는 어떻게 할 것인가. 알고리즘에도 취약한 알고리즘이 있을 수 있어서 안전한 알고리즘을 사용해야합니다. 또한, 키값은 하드코딩이 아닌 소프트코딩으로 진행하는 것이 좋으면 항상 변경되야합니다. 솔트값은 항상 사용하는 것이 좋습니다. 초기화 벡터는 알고리즘을 수행한이후 계산해서 사용하고, 끝나면 0으로 채워놓는 것이 좋습니다. insecurebankv2에서는 암호알고리즘을 잘 사용하고 있는지 봐보겠습니다. - 취약점 진단 LoginActivity.class 파일의 일부분을 보겠습니다. pro..
- 취약점 소개 프로바이더는 uri를 가지고 데이터베이스나 파일에 접근할 수 있는인터페이스를 제공합니다. 이때 외부에서 콘텐츠 프로바이더를 통해 중요한 데이터베이스나 파일에 접근할 수 있으므로 항상 검증하고 접근 관리를 해야합니다. 검증하지 않거나 접근 관리를 하지 않을때는 외부에서 중요한 데이터베이스나 파일에 접근할 수 있게 됩니다. - 취약점 진단 과정 먼저 프로바이더를 사용중인지 매니페스트파일을 봐보겠습니다. 위는 매니페스트 파일중 일부분 입니다. 프로바이더 이름과함께 exported속성이 true로 외부 앱에서 콘텐츠 프로바이더를 통해 데이터베이스에 접근할 수 있게 되어있는 것을 확인할 수 있습니다. 드로저를 통해 공격 표면에 포함되는지 확인해보겠습니다. 콘텐츠 프로바이더부분에 공격 표면이 1개 ..
- 취약점 소개 안드로이드 애플리케이션은 보안상의 이유로 루트 권한을 막아놓았습니다. 그래서 애플리케이션들은 각 프로그램마다 권한을 부여받아 독립적으로 동작합니다. 이러한 제한을 풀거나 우회하기 위해서는 시스템 권한을 루팅으로 획득해야합니다. 기기를 루팅하면 슈퍼유저의 권한으로 하드웨어 성능 조작, 기본 애플리케이션 삭제 등등을 할 수 있고, 디바이스 내부의 민감한 정보에 접그할 수도 있습니다. 따라서 금융권 애플리케이션들은 기본적으로 루팅된 기기에서의 앱 실행을 차단합니다. 또한, 최근 카드정보를 디바이스에 저장해 간단하게 결제하는 핀테크기술이 이슈가되면서 루팅된 기기는 보안 위협으로 감지하는 사례가 늘고 있습니다. - 취약점 진단 과정 먼저 앱을 키고 로그인을 하게되면 사전 환경 구축에서 루팅을 해놓..
- 취약점 소개 액티비티는 안드로이드 앱에서 화면을 의미합니다. 사용자가 정상적인 방법으로 로그인 화면 -> 비밀번호 변경 화면 순으로 접속해야하지만, 액티비티 취약점이 있는경우 로그인 화면없이 비밀번호 변경 화면으로 건너뛸 수 있습니다. - 취약점 진단 매니페스트 파일에 activity 선언태그 안에 exported 속성이 true로 되어있다면 다른 외부에서 액티비티 화면을 불러올 수 있음을 의미합니다. 따라서 드로저를 활용해 매니페스트 파일을 봐보겠습니다. dz> run app.package.manifest com.android.insecurebankv2 ChangePassword 액티비티의 경우 exported 속성이 true로 되어있는 것을 확인할 수 있습니다. 드로저로 노출된 액티비티들을 정리해..
- 취약점 소개 안드로이드 애플리케이션은 특정 정보들을 저장해야할때가 있습니다. 이 특정 정보들을 암호화를 적용하여 저장하게되는데, 짧은 키값을 쓰거나, 소스 코드를 얻으면 키값이 노출되는 경우가 있습니다. - 취약점 진단 보통 앱들에는 자동 로그인 기능이 있습니다. insecurebank에서도 Autofill credencial 기능이 있습니다. 이 기능은 최근에 로그인했던 정보를 핸드폰내에 저장하고, 그값을 불러와 로그인을 하는 메커니즘을 가지고 있습니다. 즉, 로그인 했던 정보들이 어딘가에 저장되어있습니다. 보통 공유 프리퍼런스에 저장하니 한번 검사해보겠습니다. 먼저 공유 프리퍼런스 파일이 있는 경로로 들어가줍니다. /data/data/com.android.insecurebankv2/shared_p..
- 취약점 소개 취약한 인증 메커니즘은 정상적인 인증 절차를 우회하여 비정상적인 인증으로 접근권한을 획득하는 취약점입니다. - 취약점 진단 과정 매니페스트파일을 보면 액티비티의 속성중 exported=true 항목이 있는 액티비티들이 있습니다. 이 경우 다른 액티비티에서 인증없이 접근할 수 있습니다. 아래는 매니페스트 파일입니다. 여기서 PostLogin, DoTransfer, ViewStatement 액티비티는 export가 true로 설정되어 있습니다. 이를 통해 로그인 없이 해당 액티비티에 접근이 가능합니다. drozer를 사용하여 접근해보겠습니다. dz> run app.activity.start --component com.android.insecurebankv2 com.android.insecu..
- 취약점 소개 브로드캐스트가 무분별하게 인텐트를 받아들이면 악의적인 애플리케이션에 의해서, 공격자에 의해서 임의대로 실행될 수 있으며 수행을 조작할 수 있습니다. - 취약점 진단 과정 먼저 매니페스트 파일로 리시버를 봐보겠습니다. run app.package.manifest com.android.insecurebankv2 이름과 exported가 true로 되어있다보니 외부 앱의 인텐트를 리시브할 수 있는 것으로 확인됩니다. 실제 리시버가 무엇을 하는지 소스코드를 봐보겠습니다. package com.android.insecurebankv2; import android.content.BroadcastReceiver; import android.content.Context; import android.co..