-->

[인시큐어뱅크] 로컬 암호화 (Local Encryption) 관련 취약점

로컬 암호화 이슈 (Local Encryption Issue)

인시큐어뱅크에는 몇가지 로컬 암호화 이슈가 존재한다. 로컬 암호화 이슈란 중요정보를 단말기에 저장할 때 취약한 암호화 알고리즘을 사용하거나 평문으로 저장해서 발생하는 이슈를 말한다.

 

먼저 로그인하는 과정이 필요한데 아래 포스팅에서 녹스 에뮬레이터 설정 및 인시큐어뱅크 서버 구동, 로그인 방법을 참고하길 바란다.

 


[인시큐어뱅크] 녹스 에뮬레이터를 사용한 취약점 진단 환경구축

 

[인시큐어뱅크] 녹스 에뮬레이터를 사용한 취약점 진단 환경구축

인시큐어뱅크 앱을 사용해 안드로이드 모바일 취약점 진단 공부를 해보기 위해 녹스 에뮬레이터를 사용해 취약점 진단 환경 구축을 해볼 것이다. 다음과 같은 순서대로 차근차근 진행해보자. 인시큐어뱅크(Insecur..

liveyourit.tistory.com

 

 

계정은 jack / jack@123$ 를 사용했다.

 

 

 

로컬 암호화 이슈 진단

먼저, adb를 통해 쉘을 획득한다.


 

C:\Users\leefo>adb connect 127.0.0.1:62001
already connected to 127.0.0.1:62001

C:\Users\leefo>adb devices
List of devices attached
127.0.0.1:62001 device

C:\Users\leefo>adb shell
root@shamu:/ #

 

 

 

그리고 /data/data 내부에 인시큐어뱅크 앱 디렉토리로 들어가준다. 참고로, /data/data는 안드로이드에서 각 앱별로 필요한 정보들이 저장되는 곳으로 패키지명별로 폴더가 생성되어있다.

 


root@shamu:/ # cd /data/data
root@shamu:/data/data # ls -l | grep insecure
drwxr-x--x u0_a36 u0_a36 2020-04-15 00:55 com.android.insecurebankv2

 

root@shamu:/data/data # cd com.android.insecurebankv2

 

 

 

위에서 확인한 바와 같이, 인시큐어뱅크 내부저장소에는 cache, databases, lib, shared_prefs 폴더가 저장되어 있다. 이 중 shared_prefs 폴더로 들어가보면, 두개의 xml 파일이 저장되어있다.

 

 

 

com.android.insecurebankv2_preferences.xml 파일에는 serverport와 serverip가 각각 평문으로 저장되어있고, mySharedPreferences.xml에는 EncryptedUsername과 superSecurePassword로 각각 암호화된 유저네임과 슈퍼시큐어한패스워드가 저장되어있는데 ==로 끝나는 것으로 보아선 base64 암호화이다.

 

 

 

하지만 확인 결과, 유저네임은 base64가 맞았지만 패스워드는 base64가 아니었다.

 

 

 

소스를 살펴보기 위해, dex2jar를 사용해 InsecureBankv2.apk 디컴파일을 해준다. 아직 apktool을 사용해서 smali 언어로 디컴파일 하는것이 더 좋은건지 어떤건지 잘 감이안오기 때문에 일단 dex2jar를 사용했다.

 

 

 

사용자가 로그인 시 입력한 계정을 서버에서 받으면 암호화를 수행할 것이기 때문에 로그인 관련 함수들을 살펴보다 보면 DoLogin.class의 saveCreds 함수를 볼 수 있다. 그리고 saveCreds 함수를 살펴보면, 유저네임은 base64 암호화를 하고, 패스워드는 aesEncryptedString 함수를 사용해 암호화 한다는 것을 알 수 있다.

 

 

 

aesEncryptedString 함수를 살펴보면, 내부적으로 aes256 암호화를 수행한다음, base64로 다시 암호화하고 있다.

 

 

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

 

 

 

암호화된 값과 대칭키값을 얻었으므로 온라인 복호화 사이트에서 복호화가 되는지 보자.

 


온라인 AES 암호화 & 복호화 사이트

 

Online Tool for AES Encryption and Decryption

AES encryption and decryption online tool for free.It is an aes calculator that performs aes encryption and decryption of image, text and .txt file in ECB and CBC mode with 128, 192,256 bit. The output can be base64 or Hex encoded.

www.devglan.com

 

 

알맞게 값을 넣어준 후 복호화를 수행해보면, base64로 암호화된 결과값이 나온다.

 

 

 

그리고 해당값을 다시 base64로 디코딩해보면 Jack@123$ 패스워드를 얻을 수 있다.

 

 

 

로컬 암호화 이슈 진단결과 및 대응방안

  • 유저네임이 base64로 취약한 암호화 알고리즘을 사용하고 있으므로 패스워드와 같은 암호화 알고리즘을 적용하는 것이 안전하다고 판단됨
  • 패스워드는 aes 128비트 암호화 알고리즘을 사용하며 대칭키 암호화의 경우 112비트 이상일 경우 안전하다고 판단하므로 취약한 것은 아닌 것으로 판단됨 (KISA, 모바일 대민서비스 보안취약점 점검 가이드 참조)
  • 하지만, 디컴파일된 jar 에서 하드코딩된 대칭키를 발견했고 때문에 복호화된 패스워드를 얻을 수 있었으므로 대칭키를 안전하게 저장하는 방법이 필요해보임

댓글

Designed by JB FACTORY