Q. UUID 사용할 때 고려해야 하는 보안 사항에 대한 문의

구체적인 문의 내용

SaaS형태로 클라우드 상에서 streaming service를 제공하고 있는 회사에서 개발팀을 담당하고 있습니다.
UUID를 사용하게 됐는데요, 설계나 구현할 때 보안상 고려해야 GK는 사항은 무엇이 있는지 알려주십시오

1. 보안 고려 사항
  • UUID는 안전한 방식으로 생성하되, 예측 공격과 변조 공격을 방지하기 위해 Client측이 아니라 Server측에서 생성해야 한다.
  • 안전한 난수 생성 알고리즘을 사용하여 생성되어야 한다.(Python의 uuid모듈의 uuid4() 함수 또는 secret 모듈이 이런 기능을 제공함)
  • UUID 보안을 위해서는 authentication, encryption, access control과 같은 다른 보안 수단을 함께 조합하여 사용되어야 한다.
  • UUID를 database 또는 기타 저장장치에 저장하기 전에 hashing과 salting을 이용하여 안전하게 저장되어야 한다.
  • 악의적 목적의 입력값을 방지하고 올바른 형식인지 확인하기 위하여 수신 된 UUID값을 Server측에서 그 유효성 검사를 해야 한다.
  • UUID가 Session Hijacking 또는 중요 정보 유출에 악용되지 않도록 UUID를 URL에서 또는 URL의 파라미터로 사용하지 말아야 한다.
2. UUID생성 Python 예제

# 예제 코드 -1 uuid4()함수를 이용한 랜덤 UUID 생성 예제 코드

import uuid

new_uuid = uuid.uuid4()
print(f"The generated UUID is : {new_uuid}")

# 예제 코드 -2 secrets모듈을 이용한 랜덤 UUID생성 예제 코드

import secrets

def generated_uuid():
   return secrets.token_hex(16)

# 예제 코드 -3 OWASP의 ESAPI 프레임워크를 이용한 예제 코드
ESAPI randomizer는 랜덤 UUID를 생성하기 위해 사용되고, ESAPI encoder는 안전한 저장을 위해 UUID를 인코딩하기 위해 사용

from esapi.encoder import Encoder
from esapi.randomizer import Randomizer

def generate_secure_uuid():
  # ESAPI encoder instance
  encoder = Encoder.get_instance()

  # ESAPI randomizer instance
  randomizer = Randomizer.get_instance()

  # ESAPI randomizer로 랜덤 UUID생성
  uuid = encoder.encode_for_string(randomizer.get_random_uuid().hex)

  return uuid

print(generate_secure_uuid())

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다