Android/InsecureBankv2

인시큐어뱅크 앱 취약점 - 사용자 계정 목록화 취약점

박연준 2023. 7. 3. 21:27

인시큐어뱅크 앱 취약점 - 사용자 계정 목록화 취약점

취약점 소개

사용자 계정 목록화 취약점은 모바일 앱에 가입되어 있는 사용자의 계정 정보가 암호화하지 않고 평문으로 노출되어 있는 취약점이다.

인시큐어 뱅크 앱은 사용자의 아이디를 데이터베이스 파일에 평문으로 저장한다. 평문으로 저장된 아이디를 무작위 대입 공격, 비밀번호 추측 공격을 시도하여 비밀번호를 획득하여 모바일 앱에 로그인한 후 중요 정보를 획득할 수 있다.

인시큐어뱅크 앱은 아이디만 노출되어 있는데, 로그인 중인 사용자의 쿠기 값을 데이터베이스 파일에 저장한다.

쿠키 값은 AES로 암호화되어 있지만 하드 코딩되어 있는 대칭키로 충분히 복호화가 가능하다.

취약점 진단

사용자의 계정 정보는 내부 저장소 내의 database 디렉토리에 저장되므로 “adb pull 패키지 이름” 명령어를 사용하여 로컬 PC로 다운로드한다.

 

adb pull 명령어는 안드로이드 모바일 앱의 파일을 로컬 PC로 다운로드 하는 명령이다.

 

adb pull 명령어 뒤에 패키지 이름을 지정하면 모든 디렉토리를 다운로드하고, database를 지정하면 내부 저장소 내의 해당 디렉토리만 다운로드한다.

 

다운로드한 경로에 databases 파일에 들어가면 mydb라는 파일이 존재한다.

 

mydb 파일은 SQLite 형식의 파일이므로 SQLite Browser, SQLite Expert Personal 등의 프로그램을 설치해서 열어야 한다.

 

해당 mydb 파일을 열어보면 현재 또는 과거에 접속한 사용자의 아이디가 암호화되지 않고 평문으로 저장되어 있다.

 

DoLogin.java 파일의 trackUserLogins() 함수는 로그인에 성공한 사용자의 아이디를 데이터베이스에 추가하는 코드이다. getContentResolver().insert() 메소드는 매개변수로 아이디를 전달하여 데이터베이스에 추가하는 역할을 한다.

 

 

대응 방안

사용자 계정 목록화 취약점은 모바일 앱에 로그인에 성공했던 사용자의 아이디를 암호화하지 않고 평문으로 데이터베이스 파일에 저장할 때 발생한다.

중요 정보는 외부에 노출되지 않도록 내부 저장소에 암호화하여 저장하거나 서버측에서 처리한다.

trackUserLogins() 함수 상단에 암호화 객체를 생성하고 사용자의 아이디를 AES 암호화 할 수 있도록 추가한다.