취약점 개요

안드로이드 앱은 사용자 단에서만 실행되는 앱이 있고, 서버와 통신하는 앱이 있다. 서버와 통신하는 앱은 사용자가 입력한 정보를 HTTP, HTTPS 프로토콜을 사용해 서버로 전달한다.


HTTP 프로토콜은 보안을 고려하지 않고 개발되어 사용자와 서버가 통신하는 모든 과정을 제 3자가 스니핑 공격을 수행하여 훔쳐볼 수 있는 취약점이 존재한다.


반면, HTTPS 프로토콜은 처음부터 보안을 고려하여 개발되었으므로 통신하는 모든 정보를 훔쳐볼 수 없다.

HTTPS 프로토콜은 보안 관점에서 생각할 때 중요 정보를 보호할 수 있다. 하지만, 이용자가 많은 웹 사이트, 모바일 앱의 경우 속도 저하로 중요한 정보를 전송하는 구간만 적용한다.


중요한 정보를 전송하는 구간은 로그인, 회원 가입, 회원정보 수정, 결재, 계좌이체 등 사용자의 정보 및 개인 정보를 다루고 있는 위치이다.


해당 구간에 반드시 HTTPS 프로토콜을 적용해야 하며 강력한 암호화 알고리즘을 적용해야 한다.


SSL v3 : SSL 버전 3.0
SSL/TLS 1.0 : SSL 버전 3.1
SSL/TLS 1.1 : SSL 버전 3.2
SSL/TLS 1.2 : SSL 버전 3.3

TLS 1.3 ...


취약점 진단

HTTP 통신(평문 통신)을 확인하는 프로그램으로 와이어샤크(WireShark)를 자주 이용한다. 하지만, 안드로이드 앱에서 피들러, 버프 스위트와 같은 프록시 환경이 구성되어 있으면 와이어샤크를 이용하지 않아도 평문 통신하는 과정을 확인할 수 있다.

인시큐어뱅크(InsecureBankv2) 앱을 실행 후 로그인, 비밀번호 변경, 계좌이체 등 중요 정보를 다루고 있는 기능을 이용 시 패킷을 캡처한다.


패킷을 보면 요청 헤더(Request Header)가 HTTPS가 아닌 HTTP 프로토콜로 통신하고 있다.



대응 방안 및 검증

HTTP 통신 취약점은 중요 정보 전송 구간에 암호화 통신을 하지 않고 평문으로 전송할 때 발생한다. 이를 해결하려면 중요 정보 전성 구간에 반드시 HTTPS 프로토콜로 암호화를 해야 한다.


HTTP 통신 취약점
중요한 정보를 전송할 때 암호화 통신(SSL/TLS) 적용
중요한 정보를 적용할 때 표준으로 지정된 암호화 알고리즘을 사용하여 적용
요청 및 응답 데이터에 중요한 정보가 존재한다면 암호화하여 적용

▶ Android Drozer 설치 및 사용법

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

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

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

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

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

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

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

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

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

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

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

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

▶ 안드로이드 하드코딩 취약점 (Android Hardcoded Secrets)

▶ 안드로이드 인시큐어뱅크 앱 설치 (Android InsecureBankv2)

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