암호학적으로 약한 의사 난수 생성기(PRNG) 사용
Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)
설명
암호학적으로 약한 의사 난수 생성기(PRNG)는 보안 목적(예: 토큰, 세션ID, 키 등)에 사용할 때 예측되거나 공격자가 쉽게 값을 유추할 수 있습니다. crypto.pseudoRandomBytes와 같이 불충분하게 난수를 생성하는 함수는 안전하지 않으며, 공격자가 생성된 랜덤 값을 예측하여 인증 우회나 데이터 위조 등 다양한 공격이 가능합니다.
잠재적 영향
예측 가능한 랜덤값 사용(예측 가능한 세션, 토큰 등): 공격자가 난수를 쉽게 예상하여 보안 기능을 우회할 수 있습니다.
치명적인 인증 우회: 공격자가 쉽게 공격 대상의 중요한 정보에 접근할 수 있습니다.
해결 방법
랜덤값이 필요한 경우 반드시 암호학적으로 안전한 PRNG(예:
crypto.randomBytes)를 사용해야 합니다.보안에 관련된 모든 랜덤 데이터(세션, 토큰, 암호화 키 등)는 안전한 난수 생성기로부터 생성해야 합니다.
라이브러리 문서와 보안 권고사항을 항상 확인하세요.
취약한 코드 및 안전한 코드 예시
취약한 코드
const crypto = require('crypto');
// 안전하지 않은 난수 생성기 사용
const weakRandomValue = crypto.pseudoRandomBytes(16);
console.log(weakRandomValue.toString('hex'));안전한 코드
설명:
취약한 코드:
crypto.pseudoRandomBytes함수는 예측 가능한 약한 난수 값을 생성하므로, 공격자가 값을 유추할 가능성이 있습니다.안전한 코드:
crypto.randomBytes함수는 암호학적으로 안전하게 난수 값을 생성하므로, 보안적으로 안전하게 사용할 수 있습니다.
참조
Last updated