취약점 개요

하드코딩은 프로그램 개발자가 기억하기 쉽도록 특정한 정보를 소스코드에 그대로 입력된 값을 의미한다.


모바일 앱 실행 시 사용자에게 입력받아야 할 정보를 소스코드에 입력하거나 변수, 아이디, 비밀번호, 대칭키 등 중요 정보를 주석 처리하는 것도 하드코딩이다.


개발자가 자신의 편의성을 위해 중요 정보를 하드코딩했다면 다른 사용자가 해당 앱의 소스코드를 확인하여 중요 정보를 획득할 수 있다. 획득한 정보로 개발자가 의도하지 않는 방향으로 이용할 수 있다.


인시큐어뱅크 모바일 앱은 하드코딩 취약점으로 대칭키, 계정 부분에서 발생한다. 대칭키가 동적으로 생성되지 않고 평문으로 저장되어 있으며 로그인 시 사용할 아이디와 비밀번호가 주석 처리되어 있다.


취약점 진단

CryptoClass.java는 사용자가 로그인 화면에서 아이디와 비밀번호를 입력할 때, 비밀번호를 AES 알고리즘으로 암호화를 하는 클래스이다.


AES 알고리즘은 대칭키 기반 암호화 방식으로 송수신자 사이의 공개키를 가지고 전송된 데이터를 암호화 및 복호화를 한다.


소스코드에서 This is the super secret key 123 문자열을 key 변수에 저장하고 있는데, key 변수가 암호화 및 복호화를 할 때 사용되는 중요한 대칭키이다.


대칭키가 동적으로 생성되지 않고 평문으로 저장되어 있으면 제 3자가 공개키를 탈취당하게 되고, 탈취된 공개키를 가지고 암호화된 데이터를 쉽게 복호화를 할 수 있다.



테스트 계정은 개발자가 프로그램을 개발 시 모든 기능이 정상적으로 동작하는지 확인하기 위한 용도로 생성되는 계정이다.


테스트 계정을 소스코드에 주석 처리를 한 상태에서 모바일 앱을 배포하게 된다면 제 3자에 의해 테스트 계정이 노출되어 악용될 소지가 있다.


실질적으로 노출된 계정으로 로그인을 하면 정상적으로 로그인이 되며, 해당 계정으로 모바일 앱의 모든 기능을 이용할 수 있다. 만약, 테스트 계정이 최고 관리자 권한이라면 수행할 수 있는 공격 범위는 다양하다.


화면에서는 비밀번호만 노출되어 있지만 실제로 노출된 코드를 따라가보면 아이디, 비밀번호가 평문으로 노출되어 있다.



대응 방안 및 검증

하드코딩 취약점은 소스코드에 아이디, 비밀번호, AES 대칭키 등 평문으로 저장하거나 주석으로 처리했을 때 발생한다.


중요 정보를 하드코딩 하지 않도록 수정한다면 제 3자에게 중요 정보가 노출되지 않는다. 하지만, 중요 정보가 하드코딩된 상태에서 모바일 앱을 배포했다면 중요 정보 로직을 변경할 필요가 있다.


하드코딩 취약점
소스코드에 주석처리 되어 있는 테스트 계정의 아이디, 비밀번호를 삭제
소스코드에 평문의 대칭키는 동적으로 생성

▶ Android Drozer 설치 및 사용법

▶ 안드로이드 컴포넌트 취약점 (Android Activity)

▶ 안드로이드 컴포넌트 취약점 (Android Broadcast Receiver)

▶ 안드로이드 컴포넌트 취약점 (Android Content Provider)

▶ 안드로이드 백업 취약점 (Android Backup)

▶ 안드로이드 메모리 노출 취약점 (메모리 덤프)

▶ 안드로이드 키보드캐시 취약점

▶ 안드로이드 난독화 (코드 보호 기법)

▶ 안드로이드 루팅 탐지 우회 (Frida Hooking)

▶ 안드로이드 로컬 암호화 취약점 (Android Local Encryption)

▶ 안드로이드 다중 사용자 로그인 취약점

▶ 안드로이드 웹뷰 취약점 (Android Webview)

▶ 안드로이드 SD카드 저장소 취약점 (Android SDCard Storage)

  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유