Android/InsecureBankv2

인시큐어뱅크 앱 취약점 - 로컬 암호화 취약점

박연준 2023. 7. 3. 17:22

인시큐어뱅크 앱 취약점 - 로컬 암호화 취약점

취약점 소개

안드로이드 애플리케이션에서 단말기에 주요 정보를 저장하기 위해서는 공격자에게 정보가 노출되지 않도록 평문이 아닌 암호화된 데이터로 저장해야 한다.

이러한 과정에서 발생하는 취약점을 로컬 암호화 취약점 이라고 한다.

암호화 과정에서 대칭키 암호화 방식은 키 배송 문제가 있어 공개키 암호화를 이용하여 수신자의 공개키로 암호화하고, 수신자의 개인키로 복호화하여 정보의 기밀성을 보장할 수 있다.

(키 배송 문제: 대칭 키를 보내야만 복호화가 가능한데, 이 키를 어떻게 사전에 안전하게 배송할 것인가의 문제이다.)

취약점 진단

Autofill Credential 기능 확인

다음 화면은 인시큐어뱅크 앱에서의 초기 로그인 화면이다.

Autofill Credential 기능을 사용하면 사용자가 입력한 아이디와 비밀번호 정보를 단말기 어딘가에 저장해두고, 다음부터는 입력하지 않아도 자동으로 채워지게 된다.

즉, 자동 로그인 기능과 유사한 것이다.

정보 저장 디렉터리 탐색

아이디와 비밀번호 정보가 어디에 저장되는지 탐색해야 한다.

먼저 nox_adb shell 명령어로 쉘에 진입하고 /data/data/com.android.insecurebankv2/ 디렉터리로 접근하여 어떤 데이터가 있는지 알아본다.

/data/data는 안드로이드 애플리케이션에서 필요한 데이터를 저장해놓는 위치이다.

총 6개의 디렉터리가 확인되었다.

 

로컬 pc에 파일 복사

디렉터리에 있는 여러 파일을 한 번에 확인하기 위해 PC 단말로 복사한 후에 확인해본다.

temp 폴더를 만들었고 그 안에 파일을 복사했다.

 

mydb 데이터베이스 파일 확인

databases 디렉터리에 mydb라는 데이터베이스 파일이 있어 SQLite로 3개의 테이블을 확인해보았으나 중요 정보는 존재하지 않는다.

shared_prefs 디렉터리 확인

다음으로 shared_prefs 디렉터리를 탐색한다.

아래와 같이 두 개의 파일이 있는데, 편집기를 통해 확인한다.

이 파일들은 초기 설정값, 자동 로그인 등의 환경 변수를 앱의 저장 공간 내에 파일 형태로 저장하는 안드로이드의 SharedPreferences 객체를 활용한 것이며, 삭제하지 않는 이상 값이 유지되는 특징이 있다.

 

먼저 com.android.insecurebankv2_preferences.xml 파일을 열어보니 아래와 같이 서버의 포트와 ip가 노출되고 있다.

 

다음으로 mySharedPerferences.xml 파일을 열어보니 아래 그림처럼 사용자 아이디와 비밀번호로 추정되는 정보가 저장되어 있다.

 

다음처럼 WebViewChromiumPrefs.xml 파일은 중요한 정보가 아닌 것 같다.

 

위 xml 파일들은 언제 값이 저장되는 것인지 인시큐어뱅크 앱의 코드를 확인한다.

jd-gui를 사용하여 로그인 클래스를 찾았다.

사용자 아이디와 비밀번호를 저장하는 것은 saveCreds(…)함수이다.

유저네임은 base64 암호화를 하고 패스워드는 aesEncrytedString 함수를 사용해 암호화 한다는 것을 알 수 있다.

 

aesEncrytedString 함수를 찾아보면 aes256 함수로 암호화를 수행한 다음 base64로 다시 암호화하고 있다.

 

aes256enrypt가 구현된 클래스로 가보면 대칭키가 하드코딩 되어있다.

 

암호화된 값과 대칭키값을 얻었으므로 Burp Suite 도구를 이용해 복호화가 되는지 확인한다.

이름은 base64로 복호화하면 dinesh가 잘 나오는 것을 확인할 수 있다.

aes256 복호화 사이트에서 비밀번호화 대칭키를 이용해 base64값을 얻어낸다.

Burp Suite 도구를 이용해 다시 base64로 복호화 해주면 비밀번호가 출력되는 것을 확인할 수 있다.

대응방안

  • 유저이름이 base64 로 취약한 암호화 알고리즘을 사용하고 있으므로 패스워드와 같은 암호화 알고리즘을 적용해야 한다.
  • 패스워드는 aes128비트 암호화 알고리즘을 사용하며 대칭키 암호화의 경우 112비트 이상일 경우 안전한다고 판단하므로 취약한 것은 아닌 것으로 판단된다.
  • 하지만 디컴파일 된 jar에서 하드코딩된 대칭키를 발견했고 복호화 된 패스워드를 얻을 수 있으므로 대칭 키를 안전하게 저장 해야 한다.