하드코딩된 비밀번호 사용 (Hardcoded Password)

Use of Hard-Coded Password

설명

코드 내에 하드코딩된 비밀번호를 포함하면 보안 사고 발생 시 쉽게 유출될 위험이 있습니다. 하드코딩된 비밀번호는 소스 코드 저장소(GitHub, GitLab 등)에 노출될 가능성이 크며, 공격자가 이를 활용하여 시스템에 불법적으로 접근할 수 있습니다.

비밀번호는 코드가 아닌 보안 저장소(예: 환경 변수, 키 관리 시스템)에서 안전하게 로드해야 합니다.

잠재적 영향

  • 비밀번호 노출: 코드가 유출되거나 버전 관리 시스템(Git 등)에 포함되면 비밀번호가 노출될 가능성이 있음.

  • 자동화 공격: 공격자가 코드에서 비밀번호를 추출하여 자동화된 로그인 공격을 수행할 수 있음.

  • 비밀번호 변경 어려움: 코드 내에 하드코딩된 비밀번호를 수정하려면 소스 코드를 변경하고 다시 배포해야 함.

해결 방법

  1. 비밀번호를 코드에 직접 포함하지 않기

    • 대신 환경 변수 또는 키 관리 시스템(KMS)을 사용하여 로드합니다.

  2. 키 관리 시스템(KMS) 사용

    • AWS KMS, Google Cloud KMS, HashiCorp Vault 등 보안 저장소를 활용하여 비밀번호를 관리합니다.

  3. 환경 변수 또는 구성 파일 활용

    • .env 파일이나 OS 환경 변수를 통해 비밀번호를 로드하고, 소스 코드에서는 이를 참조합니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

안전한 코드

설명:

  • 취약한 코드:

    • keyStore.load(null, "hardcoded_password".toCharArray());와 같이 코드 내에 비밀번호를 하드코딩하여 보안 위험을 초래.

  • 안전한 코드:

    • System.getenv("KEYSTORE_PASSWORD")을 사용하여 환경 변수에서 비밀번호를 안전하게 로드.

참조

Last updated