Android/InsecureBankv2

인시큐어뱅크 앱 취약점 - 중요 정보 하드 코딩 취약점

박연준 2023. 7. 3. 19:18

인시큐어뱅크 앱 취약점 - 중요 정보 하드 코딩 취약점

취약점 소개

하드 코딩은 데이터를 코드 내부에 직접 입력하는 것이다.

즉, 프로그램의 소스 코드에 데이터를 직접 입력해서 저장한 경우를 뜻하여 상수 사용도 하드 코딩에 속한다.

아이디, 비밀번호, 키 등 중요한 정보를 주석 처리하는 것도 모바일 앱에서는 하드코딩 취약점으로 판단되는데, 이는 안드로이드 모바일 앱의 디컴파일이 가능한 이유에서 정보가 노출되므로 그렇다.

아래와 같이 파일 입출력 시 파일의 경로를 직접적으로 입력한 경우도 해당한다.

File file = new File("C:/yeonjun/123/");

취약점 진단

인시큐어뱅크 앱의 하드코드된 데이터들을 찾아본다.

개발 단계에서 사용하는 로그인 계정의 아이디와 비밀번호를 알고 있다.

 

인시큐어뱅크 앱 로그인 계정 정보

  1. ID : dinesh , PW : Dinesh@123$
  2. ID : jack , PW : Jack@123$

 

DoLogin.java 파일과 ChangePassword.java 파일에 jack을 검색하자 소스 코드 내에 주석에 사용자 계정과 패스워드가 평문으로 노출되어 있다.

 

CryptoClass.java 파일에는 사용자에게 입력받은 로그인 비밀번호를 AES 알고리즘으로 암호화 하는 클래스로서 AES 암호화 키가 노출되어 있다. AES 알고리즘은 대칭키 기반 암호화 방식으로 송수신자 사이의 공개키를 가지고 전송된 데이터를 암호화 및 복호화를 한다. 소스코드 내 key라는 변수는 암호화 및 복호화를 할 때 사용되는 중요한 대칭 키 이므로 노출된다면 공격자에 의해 비밀번호가 복호화 될 수 있다.

대응 방안

  1. 개발자용 테스트 계정을 주석으로 남기지 말아야 한다.
  2. 하지만 프로그램이 크고 복잡한 경우, 주석을 하나씩 확인해서 위험한 정보가 포함되었는지 확인하기 어려우므로 주석을 작성할 때에 유의해야 한다.
  3. 암호화 키는 상수로 명시하지 않고 솔트를 사용한 난 수 사용을 하거나 서버에 저장하는 것이 옳다.