메뉴 건너뛰기

app

열려있는 비밀의 문: CWE-732 중요한 자원에 대한 잘못된 권한 설정

suritam92026.01.17 21:27조회 수 0댓글 0

    • 글자 크기

1. 잘못된 권한 설정의 위험성

CWE-732는 애플리케이션이 생성하거나 사용하는 파일, 디렉터리, 실행 프로세스 등의 자원에 대해 보안상 안전하지 않은 접근 권한을 부여할 때 발생합니다. 예를 들어, 민감한 사용자 정보가 담긴 로그 파일이나 설정 파일(config)이 '모든 사용자(EveryOne)'에게 읽기/쓰기 권한이 부여되어 있다면, 동일한 서버를 사용하는 다른 프로세스나 공격자가 해당 정보를 가로채거나 위조할 수 있습니다. 이는 시스템의 기밀성과 무결성을 근본적으로 위협하는 설정 오류입니다.

2. 흔히 발생하는 취약한 패턴

가장 빈번한 실수는 개발 편의를 위해 권한을 너무 넓게 설정하는 습관에서 비롯됩니다.

임시 파일 권한 남발: 임시 파일을 생성할 때 권한을 777 또는 666으로 설정하여 시스템의 다른 사용자도 읽을 수 있게 하는 경우.

설정 파일 노출: DB 접속 정보가 담긴 properties나 xml 파일의 권한을 제한하지 않아, 웹 취약점을 통해 침투한 공격자가 이를 쉽게 읽어가는 경우.

불필요한 실행 권한: 실행될 필요가 없는 데이터 파일에 실행(Execute) 권한을 부여하여 악성 스크립트 실행의 경로를 제공하는 경우.

3. 실무적 대응: 최소 권한 부여와 안전한 API 활용

자원을 생성할 때부터 보안을 고려한 엄격한 권한 설정이 필요합니다.

최소 권한 원칙 적용: 해당 자원을 사용하는 특정 계정(Owner) 외에는 접근을 차단하는 권한(예: 리눅스 기준 600 또는 700)을 기본값으로 사용합니다.

자바 PosixFilePermissions 활용: 자바 7 이후 제공되는 NIO.2 API를 사용하여 파일 생성 시점에 즉시 권한을 제한합니다.

기본 마스크(Umask) 확인: 서버 운영체제 수준에서 기본적으로 생성되는 파일의 권한이 너무 느슨하지 않은지 점검합니다.

4. CWE-732 대응 및 안전한 자원 생성 자바 코드 예시

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.Set;
 
public class ResourceSecurityManager {
    private static final Logger logger = LoggerFactory.getLogger(ResourceSecurityManager.class);
 
    // [CWE-732 조치] 파일 생성 시 소유자만 접근 가능한 엄격한 권한 설정
    public void createSecureLogFile(String filePath) {
        try {
            Path path = new File(filePath).toPath();
 
            // 1. 소유자에게만 읽기/쓰기 권한 부여 (rw-------)
            Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rw-------");
            
            // 2. 파일 생성 시점에 권한 속성 적용
            if (!Files.exists(path)) {
                Files.createFile(path, PosixFilePermissions.asFileAttribute(perms));
                logger.debug("Secure file created with restricted permissions: {}", filePath);
            } else {
                // 이미 존재하는 파일의 권한을 안전하게 변경
                Files.setPosixFilePermissions(path, perms);
                logger.debug("Permissions updated for existing file: {}", filePath);
            }
 
        } catch (UnsupportedOperationException e) {
            // POSIX 권한을 지원하지 않는 OS(예: Windows)에 대한 예외 처리
            logger.debug("POSIX permissions not supported on this OS. Using fallback security.");
        } catch (Exception e) {
            // [CWE-754, CWE-390] 예외 처리
            logger.debug("Error during secure file creation: {}", e.getMessage());
        }
    }
}

코멘트: 자원에 대한 권한 설정은 보안의 '기초 공사'와 같습니다. 코드 로직이 아무리 완벽해도 그 결과물이 저장되는 파일이 방치되어 있다면 보안은 완성될 수 없습니다. 자바의 File.setReadable(false, false) 등을 활용하여 소유자 외의 접근을 명시적으로 차단하십시오. logger.debug()를 통해 자원 생성 과정을 기록하되, 우리 시스템의 중요한 자산이 누군가에게 '공유 폴더'처럼 열려있지 않도록 관리하는 것이 시큐어 코딩의 핵심입니다.

 
    • 글자 크기
깨진 방패를 들고 싸우지 마라: CWE-327 취약한 암호화 알고리즘 사용 (by suritam9) 보이지 않는 권한의 경계: CWE-285 부적절한 인가 (by suritam9)

댓글 달기

첨부 (0)
위로