🔓 암호화되지 않은 중요 정보 - 실습 시뮬레이터

CWE-312: Cleartext Storage of Sensitive Information

✅ 학습 진행도
  • 진단 시작
  • 평문 저장 제거
  • 암호화 함수 호출
  • 암호문 저장
✏️ Java 코드 에디터 취약한 코드
ConfigSaver.java 💡 비밀번호를 암호화하여 저장하세요
import java.io.FileOutputStream;
import java.util.Properties;

public class ConfigSaver {
    // Encryptor 유틸리티 클래스가 있다고 가정
    // 사용법: Encryptor.encrypt(String text)
    
    public void saveConfig(String password) throws Exception {
        Properties prop = new Properties();
        prop.setProperty("db.user", "admin");
        
        // [취약점] 중요 정보(비밀번호)를 암호화하지 않고 평문으로 저장
        // 공격자가 파일을 획득하면 비밀번호가 즉시 노출됩니다.
        prop.setProperty("db.password", password);
        
        prop.store(new FileOutputStream("database.properties"), null);
    }
}
💡 수정 가이드
1. 암호화 적용

비밀번호 문자열을 암호화 유틸리티를 통해 암호화합니다.

String encrypted = Encryptor.encrypt(password);
2. 암호문 저장

평문 password 대신 암호화된 문자열을 저장합니다.

prop.setProperty("db.password", encrypted);
📊 분석 결과 및 설명
🎯 목표

설정 파일이나 데이터베이스에 비밀번호, 주민번호 등 중요 정보를 저장할 때는 반드시 암호화하여 저장해야 합니다. 현재 평문으로 저장되는 로직을 수정하세요.

⚠️ 현재 취약점

Cleartext Storage

prop.setProperty("db.password", password) 코드는 비밀번호를 그대로 파일에 씁니다. 서버 침해 사고 발생 시 정보 유출의 직접적인 원인이 됩니다.

✅ 학습 진행도
  • 진단 시작
  • 평문 저장 제거
  • 해시/암호화 적용
🐍 Python 코드 에디터 취약한 코드
save_user.py 💡 비밀번호를 해시 처리하여 저장하세요
import json
# [가정] hash_password(pwd) 함수가 정의되어 있다고 가정

def save_user_credentials(username, password):
    # [취약점] 사용자 비밀번호를 평문(Cleartext) 그대로 저장
    # JSON 파일이 유출되면 계정이 탈취됨
    data = {
        'username': username,
        'password': password
    }
    
    with open('users.json', 'w') as f:
        json.dump(data, f)
💡 수정 가이드
1. 해시 함수 적용

비밀번호는 복호화가 불가능한 해시 함수(SHA-256 등)를 사용하거나, 안전한 암호화 함수를 사용해야 합니다.

'password': hash_password(password)
📊 분석 결과 및 설명
🎯 목표

사용자 자격 증명을 저장할 때는 평문이 아닌 해시(Hash) 처리된 값을 저장하거나, 복호화가 필요한 경우 암호화하여 저장해야 합니다. 여기서는 hash_password 함수를 사용한다고 가정하고 코드를 수정하세요.

⚠️ 현재 취약점

Unencrypted Sensitive Data

'password': password와 같이 입력받은 값을 그대로 저장하면, 내부자 위협이나 파일 유출 시 치명적인 보안 사고로 이어집니다.