817
Automated Static Analysis - Source Code
According to SOAR, the following detection techniques may be useful: Cost effective for partial
coverage: Source code Weakness Analyzer Context-configured Source Code Weakness
Analyzer
Effectiveness = SOAR Partial
Architecture or Design Review
According to SOAR, the following detection techniques may be useful: Highly cost effective:
Inspection (IEEE 1028 standard) (can apply to requirements, design, source code, etc.)
Effectiveness = High
Potential Mitigations
Phase: Architecture and Design
Use a well-vetted algorithm that is currently considered to be strong by experts in the field, and
select well-tested implementations with adequate length seeds. In general, if a pseudo-random
number generator is not advertised as being cryptographically secure, then it is probably a
statistical PRNG and should not be used in security-sensitive contexts. Pseudo-random number
generators can produce predictable numbers if the generator is known and the seed can be
guessed. A 256-bit seed is a good starting point for producing a "random enough" number.
Phase: Implementation
Consider a PRNG that re-seeds itself as needed from high quality pseudo-random output
sources, such as hardware devices.
Phase: Testing
Use automated static analysis tools that target this type of weakness. Many modern techniques
use data flow analysis to minimize the number of false positives. This is not a perfect solution,
since 100% accuracy and coverage are not feasible.
Phase: Architecture and Design
Phase: Requirements
Strategy = Libraries or Frameworks
Use products or modules that conform to FIPS 140-2 [REF-267] to avoid obvious entropy
problems. Consult FIPS 140-2 Annex C ("Approved Random Number Generators").
Phase: Testing
Use tools and techniques that require manual (human) analysis, such as penetration testing,
threat modeling, and interactive tools that allow the tester to record and modify an active session.
These may be more effective than strictly automated techniques. This is especially the case with
weaknesses that are related to design and business rules.
Demonstrative Examples
Example 1:
This code attempts to generate a unique random identifier for a user's session.
Example Language: PHP (Bad)
function generateSessionID($userID){
srand($userID);
return rand();
}
Because the seed for the PRNG is always the user's ID, the session ID will always be the same. An
attacker could thus predict any user's session ID and potentially hijack the session.
CWE Version 4.14
CWE-330: Use of Insufficiently Random Values
CWE-330: Use of Insufficiently Random Values