|
|
@@ -420,6 +420,30 @@ MatchLoop:
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // check entropy
|
|
|
+ entropy := shannonEntropy(finding.Secret)
|
|
|
+ finding.Entropy = float32(entropy)
|
|
|
+ if r.Entropy != 0.0 {
|
|
|
+ if entropy <= r.Entropy {
|
|
|
+ logger.Trace().
|
|
|
+ Float32("entropy", finding.Entropy).
|
|
|
+ Msg("Skipping finding due to low entropy")
|
|
|
+ // entropy is too low, skip this finding
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ // NOTE: this is a goofy hack to get around the fact there golang's regex engine
|
|
|
+ // does not support positive lookaheads. Ideally we would want to add a
|
|
|
+ // restriction on generic rules regex that requires the secret match group
|
|
|
+ // contains both numbers and alphabetical characters, not just alphabetical characters.
|
|
|
+ // What this bit of code does is check if the ruleid is prepended with "generic" and enforces the
|
|
|
+ // secret contains both digits and alphabetical characters.
|
|
|
+ // TODO: this should be replaced with stop words
|
|
|
+ if strings.HasPrefix(r.RuleID, "generic") {
|
|
|
+ if !containsDigit(finding.Secret) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
// check if the regexTarget is defined in the allowlist "regexes" entry
|
|
|
// or if the secret is in the list of stopwords
|
|
|
globalAllowlistTarget := finding.Secret
|
|
|
@@ -489,29 +513,6 @@ MatchLoop:
|
|
|
continue MatchLoop
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- // check entropy
|
|
|
- entropy := shannonEntropy(finding.Secret)
|
|
|
- finding.Entropy = float32(entropy)
|
|
|
- if r.Entropy != 0.0 {
|
|
|
- if entropy <= r.Entropy {
|
|
|
- // entropy is too low, skip this finding
|
|
|
- continue
|
|
|
- }
|
|
|
- // NOTE: this is a goofy hack to get around the fact there golang's regex engine
|
|
|
- // does not support positive lookaheads. Ideally we would want to add a
|
|
|
- // restriction on generic rules regex that requires the secret match group
|
|
|
- // contains both numbers and alphabetical characters, not just alphabetical characters.
|
|
|
- // What this bit of code does is check if the ruleid is prepended with "generic" and enforces the
|
|
|
- // secret contains both digits and alphabetical characters.
|
|
|
- // TODO: this should be replaced with stop words
|
|
|
- if strings.HasPrefix(r.RuleID, "generic") {
|
|
|
- if !containsDigit(finding.Secret) {
|
|
|
- continue
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
findings = append(findings, finding)
|
|
|
}
|
|
|
return findings
|