#1 문제 분석
가. 목적
민감정보가 어디에서 어떻게 저장되고 취약한 코드가 어디있는지 알기
나. 활용
소스코드, adb
#2 취약점 정보
가. 취약점
어떤 디렉토리의 어떤 파일에 저장하는지 공개한 점
나. 취약점인 이유
경로 조작 공격(Path Traversal Attack) 또는 디렉토리 탐색 공격(Directory Traversal Attack)에 유용
#3 코드 분석(3과 다른 부분)
1.
import java.io.File;
java.io.File : 자바에서 파일이나 디렉토리를 다루기 위한 클래스, 파일과 디렉토리를 생성삭제하고 파일속성을 읽고 수정할 수 있다.
2.
import java.io.FileWriter;
java.io.FileWriter: 파일에 문자데이터를 작성하기 위한 클래스, 파일에 문자 데이터 쓰는 메서드 제공
3.
File ddir = new File(getApplicationInfo().dataDir);
현재 애플리케이션의 데이터 디렉토리를 나타내는 File 객체를 생성
getApplicationInfo().dataDir은 현재 애플리케이션의 데이터 디렉토리의 경로를 문자열로 반환
File 클래스의 생성자 'ddir'로 전달하여 현재 애플리케이션의 데이터 디렉토리를 나타내게 함
4.
File uinfo = File.createTempFile("uinfo", "tmp", ddir);
uinfo로 시작하고 tmp로 끝나는 임시 파일을 ddir은 파일이 생성될 디렉토리를 나타내는 File 객체 uinfo
생성된 임시 파일은 일시적으로 데이터를 저장할 때 유용하며, 프로그램이 종료되면 자동으로 삭제된다.
임시파일을 생성하는 이유는 데이터 저장하거나 작업을 수행하는 동안 보안,성능을 유지하기 위해서
(그냥 있는 파일이나 디렉터리에 바로 생성해서 넣으면 그 프로그램의 프로세스를 방해하게 되니까..?)
5.
uinfo.setReadable(true);
uinfo.setWritable(true);
디렉토리 객체 uinfo를 읽고 쓸 수 있도록 설정
6.
FileWriter fw = new FileWriter(uinfo);
uinfo라는 File객체를 사용하여 파일에 문자 데이터를 쓰기 위한 FileWriter 객체 fw를 생성하는 것
#4 취약점 예방
1. 사용자 입력을 신뢰할 수 있는 형태로 검증
2. 파일 시스템 경로를 동적으로 구성할 때 안전한 방식을 사용
상위디렉터리 이동을 필터링, 혹은 절대 경로를 사용하여 조작 공격 방지