하드코딩된 비밀정보

Hardcoded Secret

설명

하드코딩된 비밀(Hardcoded Secret)은 애플리케이션 코드 내에 암호, API 키, 인증 토큰 등 민감한 정보를 직접 포함시키는 취약성입니다. 이러한 비밀정보가 소스 코드에 하드코딩되면 코드가 유출될 경우 심각한 보안 위험을 초래할 수 있습니다.

잠재적 영향

  • 비밀정보 유출: 공격자가 소스 코드를 통해 비밀정보에 접근할 수 있습니다.
  • 계정 탈취: 유출된 비밀정보를 이용해 계정을 탈취할 수 있습니다.
  • API 남용: 유출된 API 키를 사용해 API 남용이 발생할 수 있습니다.

해결 방법

  • 환경 변수 사용: 비밀정보를 소스 코드에 하드코딩하지 않고 환경 변수로 관리합니다.
  • 비밀 관리 도구 사용: HashiCorp Vault, AWS Secrets Manager 등과 같은 비밀 관리 도구를 사용하여 비밀을 안전하게 관리합니다.
  • 코드 검토 및 감사: 정기적으로 코드 검토 및 감사를 통해 하드코딩된 비밀이 있는지 확인합니다.

노출된 비밀정보는 폐기하고 새 값으로 교체하세요. 환경 변수도 접근을 제한하고 로그에 기록하지 않도록 관리해야 합니다.

예시

Django

변경 전

python
# Unsafe hardcoded secret in Django settings
SECRET_KEY = 'your-hardcoded-secret-key'
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'myuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

변경 후

python
# Safe secret management in Django settings
import os

SECRET_KEY = os.getenv('DJANGO_SECRET_KEY')
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.getenv('DB_NAME'),
        'USER': os.getenv('DB_USER'),
        'PASSWORD': os.getenv('DB_PASSWORD'),
        'HOST': os.getenv('DB_HOST'),
        'PORT': os.getenv('DB_PORT'),
    }
}

설명:

  • 변경 전: 비밀정보(SECRET_KEY, DATABASE 비밀번호 등)가 소스 코드에 하드코딩되어 있습니다.
  • 변경 후: 환경 변수에서 비밀정보를 읽어와 설정하도록 하여 소스 코드에 비밀정보가 남지 않도록 합니다.

Flask

변경 전

python
# Unsafe hardcoded secret in Flask configuration
class Config:
    SECRET_KEY = 'your-hardcoded-secret-key'
    SQLALCHEMY_DATABASE_URI = 'postgresql://myuser:mypassword@localhost/mydatabase'

변경 후

python
# Safe secret management in Flask configuration
import os

class Config:
    SECRET_KEY = os.getenv('FLASK_SECRET_KEY')
    SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL')

설명:

  • 변경 전: 비밀정보(SECRET_KEY, DATABASE URI 등)가 소스 코드에 하드코딩되어 있습니다.
  • 변경 후: 환경 변수에서 비밀정보를 읽어와 설정하도록 하여 소스 코드에 비밀정보가 남지 않도록 합니다.

FastAPI

변경 전

python
# Unsafe hardcoded secret in FastAPI configuration
from fastapi import FastAPI
from starlette.middleware.sessions import SessionMiddleware

app = FastAPI()
app.add_middleware(SessionMiddleware, secret_key='your-hardcoded-secret-key', https_only=True)

변경 후

python
# Safe secret management in FastAPI configuration
from fastapi import FastAPI
from starlette.middleware.sessions import SessionMiddleware
import os

app = FastAPI()
app.add_middleware(SessionMiddleware, secret_key=os.environ['FASTAPI_SECRET_KEY'], https_only=True)

설명:

  • 변경 전: 비밀정보(secret_key)가 소스 코드에 하드코딩되어 있습니다.
  • 변경 후: 환경 변수에서 비밀정보를 읽어와 설정하도록 하여 소스 코드에 비밀정보가 남지 않도록 합니다.

참조