🔐 중요한 자원에 대한 잘못된 권한 설정 - 실습 시뮬레이터

CWE-732: Incorrect Permission Assignment for Critical Resource

✅ 학습 진행도
  • 진단 시작
  • 실행 권한 제거
  • 소유자 전용 읽기 설정
  • 소유자 전용 쓰기 설정
✏️ Java 코드 에디터 취약한 코드
ConfigFileMaker.java 💡 소유자(Owner)만 접근 가능하도록 수정하세요
import java.io.File;
import java.io.IOException;

public class ConfigFileMaker {
    public void createConfigFile() {
        File file = new File("/app/config/db.properties");
        
        try {
            if (file.exists()) {
                file.delete();
            }
            if (file.createNewFile()) {
                System.out.println("설정 파일 생성 완료");
                
                // [취약점] 모든 사용자에게 읽기/쓰기/실행 권한 부여 (World Writable/Readable)
                // true, false -> false는 ownerOnly를 의미. false면 모든 사용자 대상임.
                file.setExecutable(true, false);
                file.setReadable(true, false);
                file.setWritable(true, false);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
💡 수정 가이드
1. 실행 권한 제거

설정 파일은 실행될 필요가 없습니다.

file.setExecutable(false);
2. 읽기 권한 강화 (소유자만)

두 번째 인자를 true로 설정하여 소유자만 읽도록 제한합니다.

file.setReadable(true, true);
3. 쓰기 권한 강화 (소유자만)

다른 사용자가 파일을 변조하지 못하도록 합니다.

file.setWritable(true, true);
📊 분석 결과 및 설명
🎯 목표

설정 파일(db.properties)은 데이터베이스 접속 정보 등 민감한 정보를 담고 있습니다. 이 파일이 소유자(Owner) 외에는 읽거나 쓸 수 없도록 권한을 수정하세요.

⚠️ 현재 취약점

World Writable / Readable

현재 코드는 setReadable(true, false)를 사용하고 있습니다. 두 번째 인자가 false이면 모든 사용자(Anyone)에게 권한이 부여됩니다. 이는 공격자가 설정 파일을 읽어 비밀번호를 탈취하거나, 악성 설정을 주입할 수 있게 합니다.

✅ 학습 진행도
  • 진단 시작
  • 777 권한 제거
  • 소유자 전용 권한(600) 설정
🐍 Python 코드 에디터 취약한 코드
set_permissions.py 💡 0o600 또는 stat 모듈을 사용하세요
import os
import stat

def init_secret_file():
    secret_file = '/etc/myapp/secret_token.txt'
    
    # 파일이 없으면 생성
    if not os.path.exists(secret_file):
        with open(secret_file, 'w') as f:
            f.write("SUPER_SECRET_TOKEN=12345")
    
    print(f"파일 생성 완료: {secret_file}")
    
    # [취약점] 모든 사용자에게 읽기/쓰기/실행 권한 부여 (rwxrwxrwx)
    # 0o777은 누구나 파일을 수정하고 삭제할 수 있음을 의미함
    os.chmod(secret_file, 0o777)
💡 수정 가이드
방법 1: 8진수 사용 (간단)

소유자 읽기(4) + 쓰기(2) = 6, 나머지는 0

os.chmod(secret_file, 0o600)
방법 2: stat 모듈 사용 (권장)

가독성이 높은 상수를 사용합니다.

os.chmod(secret_file, stat.S_IRUSR | stat.S_IWUSR)
📊 분석 결과 및 설명
🎯 목표

비밀 토큰이 담긴 파일입니다. 0o777(모든 권한 허용)은 매우 위험하므로, 소유자만 읽고 쓸 수 있는 권한으로 변경하세요.

⚠️ 현재 취약점

Excessive Permissions (0o777)

0o777 권한은 시스템의 모든 사용자가 해당 파일을 읽고, 수정하고, 실행할 수 있음을 의미합니다. 중요 자원(설정 파일, 키 파일 등)은 반드시 최소한의 권한(Least Privilege)만 부여해야 합니다.