설명
애플리케이션이 파일 또는 디렉터리의 권한을 과도하게 허용하면, 공격자가 중요 파일을 읽거나 수정할 수 있는 보안 취약점이 발생할 수 있습니다.
특히, java.nio.file.Files.setPosixFilePermissions() 메서드를 사용할 때 적절한 권한을 설정하지 않으면 민감한 데이터가 노출될 수 있습니다.
잠재적 영향
- 민감한 정보 노출: 공격자가 파일을 읽을 수 있으면 암호, API 키, 사용자 정보 등의 중요 데이터가 유출될 수 있습니다.
- 파일 조작: 과도한 쓰기 권한(
rw-rw-rw-등)이 있으면 파일 내용을 변경할 수 있습니다. 파일 삭제 가능성은 부모 디렉터리 권한 등도 함께 결정합니다. - 권한 상승: 악의적인 사용자가 중요한 실행 파일을 수정하여 악성 코드를 삽입할 수 있습니다.
해결 방법
-
최소 권한 원칙 적용
- 파일 및 디렉터리에는 필요한 최소한의 권한만 부여합니다.
- 민감한 일반 파일은 필요한 경우 소유자만 읽고 쓰도록 설정하세요(
rw-------). 디렉터리에는 탐색을 위한 실행 권한이 필요하므로 같은 권한 문자열을 일괄 적용하지 마세요.
-
파일 권한을 명확하게 제한
java.nio.file.attribute.PosixFilePermissions.fromString("rw-------")를 사용하여 소유자만 읽고 쓸 수 있도록 설정합니다.
-
민감한 데이터가 포함된 파일 보호
- 설정 파일, 로그 파일, 임시 파일 등이 외부에 노출되지 않도록 주의합니다.
예시
POSIX 권한을 지원하는 파일 시스템에서 이미 존재하는 일반 파일의 권한을 변경하는 예시입니다. 실제로는 애플리케이션이 관리하는 경로를 사용하고, 다른 사용자가 파일이나 부모 디렉터리를 바꾸거나 심볼릭 링크로 대체할 수 없게 하세요.
변경 전
java
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.io.IOException;
import java.util.Set;
public class InsecureFilePermission {
public static void main(String[] args) throws IOException {
Path path = Paths.get("/tmp/sensitive-data.txt");
// 과도하게 허용된 파일 권한 (모든 사용자에게 읽기/쓰기 허용)
Set<PosixFilePermission> permissions = PosixFilePermissions.fromString("rw-rw-rw-");
Files.setPosixFilePermissions(path, permissions);
}
}
변경 후
java
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.io.IOException;
import java.util.Set;
public class SecureFilePermission {
public static void main(String[] args) throws IOException {
Path path = Paths.get("/tmp/sensitive-data.txt");
// 소유자만 읽기/쓰기 가능하도록 설정 (rw-------)
Set<PosixFilePermission> permissions = PosixFilePermissions.fromString("rw-------");
Files.setPosixFilePermissions(path, permissions);
}
}
설명:
- 변경 전:
rw-rw-rw-권한을 설정하여 모든 사용자가 파일을 읽고 쓸 수 있도록 허용.
- 변경 후:
rw-------권한을 설정하여 소유자만 접근 가능하도록 제한.