Q> UUID 사용할때 고려해야 하는 보안사항에 대한 문의
SaaS형태로 클라우드상에서 streaming service를 제공하고 있는 회사에서 개발팀을 담당하고 있습니다.
UUID를 사용하게 됐는데요, 설계나 구현할때 보안상 고려해야 햐는 사항은 무엇이 있는지 알려주십시오
A>
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())