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