본문 바로가기

모바일 앱 해킹

[DIVA] Input Validation Issues - Part 1 (입력값 검증 부재) | 안드로이드 앱 취약점 실습

입력값 검증 부재 취약점은 사용자로부터 입력받은 데이터를 제대로 검증하지 않아 발생하는 보안 취약점이다. 악의적인 사용자가 의도적으로 조작된 데이터를 입력하여 시스템 오류, 데이터 유출 등 다양한 문제를 일으킬 수 있다.

입력값 검증 부재의 대표적인 취약점으로 웹 해킹때 배웠던 SQL Injection과 XSS가 있다. 

취약점을 찾아보자

목표 : 유저 이름을 모르는 상태로 모든 유저의 정보를 access 해야 한다. 유저는 총 3명이고, 단 한 번의 검색으로 모두 확인해야 한다.

의미 없이 123을 입력했떠니 not found라고 뜬다. 이 상태에서는 유저 정보도 모르고 아무것도 확인할 수 없으니  로그캣 정보를 이용해보기로 한다.

싱글쿼터를 넣고 검색했더니 로그캣에 SQL 쿼리문이 그대로 뜬다. 조건절을 참으로 만들면 모든 정보를 확인할 수 있을 것이다.

' or '1'='1를 검색해보자 (쿼리는 SELECT * FROM sqliuser WHERE user = '' or '1'='1'이 된다.)

세 명의 유저 정보가 모두 출력되었다.

apk 파일을 디컴파일해서 SQLInjectionActivity 파일을 확인해보니

모든 유저의 계정 정보가 하드코딩 되어있다.

 

대응방안

  • Prepared Statement를 사용해서 SQL 쿼리와 입력 데이터를 분리하여 처리함으로써 악의적인 SQL 문이 실행되는 것을 방지