설명
rand 같은 예측 가능한 난수 생성기를 보안 토큰, 세션 식별자, 키 재료에 사용하면 값을 추측할 수 있습니다.
잠재적 영향
- 토큰 예측, 세션 탈취, 암호학적 보호 약화가 발생할 수 있습니다.
해결 방법
운영체제 CSPRNG 또는 검증된 암호학적 난수 API를 사용하세요. 요청한 바이트를 모두 얻었는지 확인하고, 실패한 버퍼를 토큰이나 키로 사용하지 마세요.
예시
변경 전
c
int token = rand();
변경 후
Linux에서 <sys/random.h>를 포함한, 오류 시 -1을 반환하는 함수 내부의 발췌입니다.
c
unsigned char token[32];
if (getrandom(token, sizeof(token), 0) != (ssize_t)sizeof(token)) {
return -1;
}
설명:
- 변경 전: 보안에 민감한 값에 예측 가능한 일반 목적 PRNG를 사용합니다.
- 변경 후: 운영체제의 암호학적 난수 소스를 사용하고, 32바이트를 얻지 못하면 처리를 중단합니다.