SV.RANDOM
このエラーは、'java.util.Random' タイプのオブジェクトの初期化が使用されている場合に表示されます。
脆弱性とリスク
'java.util.Random' を使用する場合、きわめて予測可能な結果となる可能性があります。Random の 2 つのインスタンスが同じシードとメソッド呼び出しのシーケンスで作成される場合、これらはまったく同じ結果を生成します。
Klocwork セキュリティ脆弱性 (SV) チェッカーは、潜在的に危険なデータを生成する呼び出しを特定します。このような呼び出しは安全でないソースと考えられます。ユーザーは攻撃者になる可能性があり、ヒューマンエラーを取り込む可能性があるため、安全でないソースはユーザーが指定した任意のデータである可能性があります。
軽減と防止
代わりに、'java.security.SecureRandom' を使用します。このクラスは、暗号用に強化された乱数ジェネレータを提供します。さらに、SecureRandom は PRNG を使用します。 これは、決定性アルゴリズムを使用して真の乱数シードから擬似乱数を生成することを意味します。SecureRandom は、非決定的な出力を生成します。
例 1
コピー
public String generateRandomSessionId() {
Random random = new Random();
random.setSeed(System.currentTimeMillis());
return ("sessionId=" + random.nextInt(2000000000));
}
public String generateRandomNumberUsingMath() {
double randomNum = Math.random();
return (String.valueOf(randomNum));
}
SV.RANDOM が 13 行目および 18 行目に対して報告されています。安全ではない乱数ジェネレータ 'Random' が使用されています。
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。