불충분한 난수값 사용
보안을 결정하는 중요한 값을 생성할 때 예측 가능한 난수 또는 충분히 안전하지 않은 난수를 사용하는 취약점입니다.
이런 난수를 사용하여 세션 ID, 비밀번호 재설정 토큰, 인증 코드, 암호화 키를 생성하면 매우 치명적인 문제가 될 수 있습니다. 공격자가 생성 규칙을 추측할 수 있다면 인증 토큰이나 세션을 예측할 가능성이 생깁니다. 예측 가능한 세션 ID를 통해 다른 사용자의 세션을 탈취할 수 있고 비밀번호 재설정 토큰이 예측 가능하면 계정 탈취로 이어질 수 있습니다. 암호화 키가 예측 가능한 난수로 만들어지면, 공격자가 유출된 기밀 데이터나 통신 패킷을 손쉽게 복호화하여 가로챌 수 있습니다.
일반적인 프로그램용 난수 생성기는 보안 목적으로 사용하기에 충분하지 않을 수 있습니다. 보안 목적으로 사용되는 값은 암호학적으로 안전한 난수 생성기(CSPRNG)를 사용해야 합니다. 또한, 사용자 ID, 연속적인 문자나 숫자 등 단순한 값을 조합하여 보안 토큰을 만들지 않도록 해야 합니다.
대표 사례는 다음과 같습니다. 2008년 Debian 리눅스의 OpenSSL 코드 수정 오류로 인해 난수 생성 범위가 크게 줄어들어, 약 2년간 생성된 암호화 키를 쉽게 추측할 수 있다는 사실이 드러났습니다. 또한 2022년 암호화폐 지갑 주소 생성 도구 Profanity의 약한 난수 생성 방식 때문에 개인키가 복원되어, 가상자산 기업 Wintermute가 약 1억 6천만 달러를 탈취당했습니다.

