Add a deep flag to scan
This commit is contained in:
@@ -35,20 +35,20 @@ import (
|
||||
|
||||
// ScanCmd is Subcommand of host discovery mode
|
||||
type ScanCmd struct {
|
||||
debug bool
|
||||
configPath string
|
||||
resultsDir string
|
||||
logDir string
|
||||
cacheDBPath string
|
||||
httpProxy string
|
||||
askKeyPassword bool
|
||||
containersOnly bool
|
||||
packageListOnly bool
|
||||
skipBroken bool
|
||||
sshNative bool
|
||||
pipe bool
|
||||
timeoutSec int
|
||||
scanTimeoutSec int
|
||||
debug bool
|
||||
configPath string
|
||||
resultsDir string
|
||||
logDir string
|
||||
cacheDBPath string
|
||||
httpProxy string
|
||||
askKeyPassword bool
|
||||
containersOnly bool
|
||||
deep bool
|
||||
skipBroken bool
|
||||
sshNative bool
|
||||
pipe bool
|
||||
timeoutSec int
|
||||
scanTimeoutSec int
|
||||
}
|
||||
|
||||
// Name return subcommand name
|
||||
@@ -61,13 +61,13 @@ func (*ScanCmd) Synopsis() string { return "Scan vulnerabilities" }
|
||||
func (*ScanCmd) Usage() string {
|
||||
return `scan:
|
||||
scan
|
||||
[-deep]
|
||||
[-config=/path/to/config.toml]
|
||||
[-results-dir=/path/to/results]
|
||||
[-log-dir=/path/to/log]
|
||||
[-cachedb-path=/path/to/cache.db]
|
||||
[-ssh-native-insecure]
|
||||
[-containers-only]
|
||||
[-package-list-only]
|
||||
[-skip-broken]
|
||||
[-http-proxy=http://192.168.0.1:8080]
|
||||
[-ask-key-password]
|
||||
@@ -135,10 +135,10 @@ func (p *ScanCmd) SetFlags(f *flag.FlagSet) {
|
||||
)
|
||||
|
||||
f.BoolVar(
|
||||
&p.packageListOnly,
|
||||
"package-list-only",
|
||||
&p.deep,
|
||||
"deep",
|
||||
false,
|
||||
"List all packages without scan")
|
||||
"Deep scan mode. Scan accuracy improves and information becomes richer. Since analysis of changelog, issue commands requiring sudo, but is slower and heavy")
|
||||
|
||||
f.BoolVar(
|
||||
&p.pipe,
|
||||
@@ -231,7 +231,7 @@ func (p *ScanCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{})
|
||||
c.Conf.SSHNative = p.sshNative
|
||||
c.Conf.HTTPProxy = p.httpProxy
|
||||
c.Conf.ContainersOnly = p.containersOnly
|
||||
c.Conf.PackageListOnly = p.packageListOnly
|
||||
c.Conf.Deep = p.deep
|
||||
c.Conf.SkipBroken = p.skipBroken
|
||||
|
||||
util.Log.Info("Validating config...")
|
||||
|
||||
@@ -74,10 +74,10 @@ type Config struct {
|
||||
CvssScoreOver float64
|
||||
IgnoreUnscoredCves bool
|
||||
|
||||
SSHNative bool
|
||||
ContainersOnly bool
|
||||
PackageListOnly bool
|
||||
SkipBroken bool
|
||||
SSHNative bool
|
||||
ContainersOnly bool
|
||||
Deep bool
|
||||
SkipBroken bool
|
||||
|
||||
HTTPProxy string `valid:"url"`
|
||||
LogDir string
|
||||
|
||||
@@ -43,16 +43,9 @@ func formatScanSummary(rs ...models.ScanResult) string {
|
||||
for _, r := range rs {
|
||||
var cols []interface{}
|
||||
if len(r.Errors) == 0 {
|
||||
var cves string
|
||||
if config.Conf.PackageListOnly {
|
||||
cves = fmt.Sprintf("- CVEs")
|
||||
} else {
|
||||
cves = fmt.Sprintf("%d CVEs", len(r.ScannedCves))
|
||||
}
|
||||
cols = []interface{}{
|
||||
r.FormatServerName(),
|
||||
fmt.Sprintf("%s%s", r.Family, r.Release),
|
||||
cves,
|
||||
r.Packages.FormatUpdatablePacksSummary(),
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -177,7 +177,7 @@ func (o *debian) scanPackages() error {
|
||||
}
|
||||
o.setPackages(installed)
|
||||
|
||||
if config.Conf.PackageListOnly {
|
||||
if !config.Conf.Deep {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -250,7 +250,7 @@ func (o *redhat) scanPackages() error {
|
||||
installed.MergeNewVersion(updatable)
|
||||
o.setPackages(installed)
|
||||
|
||||
if config.Conf.PackageListOnly {
|
||||
if !config.Conf.Deep && o.Distro.Family != config.Amazon {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -373,10 +373,11 @@ func (o *redhat) parseUpdatablePacksLine(line string) (models.Package, error) {
|
||||
}
|
||||
|
||||
func (o *redhat) scanUnsecurePackages(updatable models.Packages) (models.VulnInfos, error) {
|
||||
//TODO Cache changelogs to bolt
|
||||
//TODO --with-changelog
|
||||
if err := o.fillChangelogs(updatable); err != nil {
|
||||
return nil, err
|
||||
if config.Conf.Deep {
|
||||
//TODO Cache changelogs to bolt
|
||||
if err := o.fillChangelogs(updatable); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if o.Distro.Family != config.CentOS {
|
||||
|
||||
Reference in New Issue
Block a user