From 5e336b59286dcccf7ef811fe2dee9d24ce8f0138 Mon Sep 17 00:00:00 2001 From: kota kanbe Date: Sat, 30 Apr 2016 10:58:24 +0900 Subject: [PATCH] Add docker container support --- Makefile | 9 +- README.md | 58 ++- commands/discover.go | 5 + commands/scan.go | 2 +- config/config.go | 29 +- config/tomlloader.go | 5 + db/db.go | 22 +- img/vuls-architecture.graphml | 731 +++++++++++++++++++--------------- img/vuls-architecture.png | Bin 61821 -> 74901 bytes models/models.go | 82 +++- report/mail.go | 2 +- report/slack.go | 9 +- report/tui.go | 10 +- report/util.go | 11 +- scan/linux.go | 90 ++++- scan/linux_test.go | 40 ++ scan/redhat.go | 4 + scan/serverapi.go | 200 +++++++++- scan/sshutil.go | 9 +- util/logutil.go | 11 +- 20 files changed, 958 insertions(+), 371 deletions(-) diff --git a/Makefile b/Makefile index b4199289..306dfb8d 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,6 @@ fmtcheck \ pretest \ test \ - integration \ cov \ clean @@ -16,16 +15,16 @@ PKGS = ./. ./db ./config ./models ./report ./cveapi ./scan ./util ./commands all: test -vendor: - @ go get -v github.com/mjibson/party - party -d external -c -u +# vendor: +# @ go get -v github.com/mjibson/party +# party -d external -c -u lint: @ go get -v github.com/golang/lint/golint $(foreach file,$(SRCS),golint $(file) || exit;) vet: - @-go get -v golang.org/x/tools/cmd/vet + # @-go get -v golang.org/x/tools/cmd/vet $(foreach pkg,$(PKGS),go vet $(pkg);) fmt: diff --git a/README.md b/README.md index de1ce3bb..62c66a7f 100644 --- a/README.md +++ b/README.md @@ -253,7 +253,9 @@ see https://github.com/future-architect/vuls/tree/master/docker ## Vuls - Scan vulnerabilities on the servers and create a list of the CVE ID -- For more detailed information of the detected CVE, send HTTP request to go-cve-dictinary + - To scan Docker containers, Vuls connect via ssh to the Docker host and then `docker exec` to the containers. So, no need to run sshd daemon on the containers. +- Fetch more detailed information of the detected CVE from go-cve-dictionary +- Insert scan result into SQLite3 - Send a report by Slack, Email - System operator can view the latest report by terminal @@ -335,6 +337,7 @@ host = "172.31.4.82" #cpeNames = [ # "cpe:/a:rubyonrails:ruby_on_rails:4.2.1", #] +#containers = ["${running}"] ``` You can customize your configuration using this template. @@ -400,6 +403,10 @@ You can customize your configuration using this template. #port = "22" #user = "username" #keyPath = "/home/username/.ssh/id_rsa" + #cpeNames = [ + # "cpe:/a:rubyonrails:ruby_on_rails:4.2.1", + #] + #containers = ["${running}"] ``` Items of the default section will be used if not specified. @@ -415,6 +422,7 @@ You can customize your configuration using this template. #cpeNames = [ # "cpe:/a:rubyonrails:ruby_on_rails:4.2.1", #] + #containers = ["${running}"] ``` You can overwrite the default value specified in default section. Vuls supports multiple SSH authentication methods. @@ -578,6 +586,43 @@ To detect the vulnerbility of Ruby on Rails v4.2.1, cpeNames needs to be set in "cpe:/a:rubyonrails:ruby_on_rails:4.2.1", ] ``` + +# Usage: Scan Docker containers + +It is common that keep Docker containers runnning without SSHd daemon. +see [Docker Blog:Why you don't need to run SSHd in your Docker containers](https://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/) + +Vuls scans Docker containers via `docker exec` instead of SSH. +For more details, see [Architecture section](https://github.com/future-architect/vuls#architecture) + +- To scan all of running containers + "${running}" needs to be set in the containers item. + ``` + [servers] + + [servers.172-31-4-82] + host = "172.31.4.82" + user = "ec2-user" + keyPath = "/home/username/.ssh/id_rsa" + containers = ["${running}"] + ``` + +- To scan specific containers + The container ID or container name needs to be set in the containers item. + In the following example, only "container_name_a" and "4aa37a8b63b9" will be scanned. + Be sure to check these containers are running state before scanning. + If specified containers are exited, vuls gives up scanning with printing error message. + ``` + [servers] + + [servers.172-31-4-82] + host = "172.31.4.82" + user = "ec2-user" + keyPath = "/home/username/.ssh/id_rsa" + containers = ["container_name_a", "4aa37a8b63b9"] + ``` + + # Usage: Update NVD Data. @@ -616,6 +661,10 @@ $ go-cve-dictionary fetchnvd -last2y # Misc +- Unable to go get vuls +Update git to the latest version. Old version of git can't get some repositories. +see https://groups.google.com/forum/#!topic/mgo-users/rO1-gUDFo_g + - HTTP Proxy Support If your system is behind HTTP proxy, you have to specify --http-proxy option. @@ -653,6 +702,13 @@ Use Microsoft Baseline Security Analyzer. [MBSA](https://technet.microsoft.com/e ---- +# Related Projects + +- [k1LoW/ssh_config_to_vuls_config](https://github.com/k1LoW/ssh_config_to_vuls_config) +ssh_config to vuls config TOML format + +---- + # Data Source - [NVD](https://nvd.nist.gov/) diff --git a/commands/discover.go b/commands/discover.go index ed3ed081..c900ba45 100644 --- a/commands/discover.go +++ b/commands/discover.go @@ -112,6 +112,10 @@ subjectPrefix = "[vuls]" #port = "22" #user = "username" #keyPath = "/home/username/.ssh/id_rsa" +#cpeNames = [ +# "cpe:/a:rubyonrails:ruby_on_rails:4.2.1", +#] +#containers = ["${running}"] [servers] {{- $names:= .Names}} @@ -124,6 +128,7 @@ host = "{{$ip}}" #cpeNames = [ # "cpe:/a:rubyonrails:ruby_on_rails:4.2.1", #] +#containers = ["${running}"] {{end}} ` diff --git a/commands/scan.go b/commands/scan.go index c637c1f0..7302dd1b 100644 --- a/commands/scan.go +++ b/commands/scan.go @@ -231,7 +231,7 @@ func (p *ScanCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) return subcommands.ExitFailure } - Log.Info("Detecting the type of OS... ") + Log.Info("Detecting Server OS... ") err = scan.InitServers(Log) if err != nil { Log.Errorf("Failed to init servers. Check the configuration. err: %s", err) diff --git a/config/config.go b/config/config.go index 97171a09..68d512a5 100644 --- a/config/config.go +++ b/config/config.go @@ -188,8 +188,6 @@ func (c *SlackConf) Validate() (errs []error) { errs = append(errs, err) } - // TODO check if slack configration is valid - return } @@ -202,12 +200,33 @@ type ServerInfo struct { Port string KeyPath string KeyPassword string - SudoOpt SudoOption CpeNames []string - // DebugLog Color - LogMsgAnsiColor string + // Container Names or IDs + Containers []string + + // userd internal + LogMsgAnsiColor string // DebugLog Color + SudoOpt SudoOption + Container Container +} + +// IsContainer returns whether this ServerInfo is about container +func (s ServerInfo) IsContainer() bool { + return 0 < len(s.Container.ContainerID) +} + +// SetContainer set container +func (s *ServerInfo) SetContainer(d Container) { + s.Container = d +} + +// Container has Container information. +type Container struct { + ContainerID string + Name string + Type string } // SudoOption is flag of sudo option. diff --git a/config/tomlloader.go b/config/tomlloader.go index 81471685..172b7dd1 100644 --- a/config/tomlloader.go +++ b/config/tomlloader.go @@ -101,6 +101,11 @@ func (c TOMLLoader) Load(pathToToml, keyPass, sudoPass string) (err error) { s.CpeNames = d.CpeNames } + s.Containers = v.Containers + if len(s.Containers) == 0 { + s.Containers = d.Containers + } + s.LogMsgAnsiColor = Colors[i%len(Colors)] i++ diff --git a/db/db.go b/db/db.go index 3bc1d2a1..516fba7c 100644 --- a/db/db.go +++ b/db/db.go @@ -49,6 +49,7 @@ func MigrateDB() error { &m.ScanHistory{}, &m.ScanResult{}, // &m.NWLink{}, + &m.Container{}, &m.CveInfo{}, &m.CpeName{}, &m.PackageInfo{}, @@ -67,6 +68,10 @@ func MigrateDB() error { // AddIndex("idx_n_w_links_scan_result_id", "scan_result_id").Error; err != nil { // return fmt.Errorf(errMsg, err) // } + if err := db.Model(&m.Container{}). + AddIndex("idx_containers_scan_result_id", "scan_result_id").Error; err != nil { + return fmt.Errorf(errMsg, err) + } if err := db.Model(&m.CveInfo{}). AddIndex("idx_cve_infos_scan_result_id", "scan_result_id").Error; err != nil { return fmt.Errorf(errMsg, err) @@ -85,11 +90,11 @@ func MigrateDB() error { return fmt.Errorf(errMsg, err) } if err := db.Model(&cve.CveDetail{}). - AddIndex("idx_cve_detail_cve_info_id", "cve_info_id").Error; err != nil { + AddIndex("idx_cve_details_cve_info_id", "cve_info_id").Error; err != nil { return fmt.Errorf(errMsg, err) } if err := db.Model(&cve.CveDetail{}). - AddIndex("idx_cve_detail_cveid", "cve_id").Error; err != nil { + AddIndex("idx_cve_details_cveid", "cve_id").Error; err != nil { return fmt.Errorf(errMsg, err) } if err := db.Model(&cve.Nvd{}). @@ -141,6 +146,10 @@ func Insert(results []m.ScanResult) error { if err := db.Create(&scanResult).Error; err != nil { return err } + scanResult.Container.ScanResultID = scanResult.ID + if err := db.Create(&scanResult.Container).Error; err != nil { + return err + } if err := insertCveInfos(scanResult.ID, scanResult.KnownCves); err != nil { return err } @@ -229,7 +238,8 @@ func SelectLatestScanHistory() (m.ScanHistory, error) { return m.ScanHistory{}, fmt.Errorf("No scanHistory records") } - results := []m.ScanResult{} + // results := []m.ScanResult{} + results := m.ScanResults{} db.Model(&scanHistory).Related(&results, "ScanResults") scanHistory.ScanResults = results @@ -238,10 +248,16 @@ func SelectLatestScanHistory() (m.ScanHistory, error) { // db.Model(&r).Related(&nw, "NWLinks") // scanHistory.ScanResults[i].NWLinks = nw + di := m.Container{} + db.Model(&r).Related(&di, "Container") + scanHistory.ScanResults[i].Container = di + knownCves := selectCveInfos(&r, "KnownCves") sort.Sort(m.CveInfos(knownCves)) scanHistory.ScanResults[i].KnownCves = knownCves } + + sort.Sort(scanHistory.ScanResults) return scanHistory, nil } diff --git a/img/vuls-architecture.graphml b/img/vuls-architecture.graphml index 9eb4713f..2059a71c 100644 --- a/img/vuls-architecture.graphml +++ b/img/vuls-architecture.graphml @@ -17,7 +17,7 @@ - + @@ -37,14 +37,14 @@ - + - Vulnerbility Database + Vulnerbility Database - + @@ -63,7 +63,7 @@ - + JVN @@ -81,7 +81,7 @@ - + NVD @@ -103,14 +103,14 @@ - + Linux Support - + @@ -129,7 +129,7 @@ - + apptitude @@ -147,7 +147,7 @@ changelog - + yum @@ -165,7 +165,7 @@ changelog - + RHSA (RedHat) @@ -185,10 +185,10 @@ ALAS (Amazon) - + - + @@ -199,48 +199,20 @@ ALAS (Amazon) - - - - - - - servers - - - - - - - - - - - - - - - - - - - - - - + - + - Vuls + Vuls - + @@ -255,11 +227,11 @@ ALAS (Amazon) - - + + - + Report @@ -273,10 +245,10 @@ ALAS (Amazon) - + - + TUI View @@ -290,11 +262,11 @@ ALAS (Amazon) - + - - + + Scan @@ -309,10 +281,10 @@ ALAS (Amazon) - + - + System Operator @@ -324,15 +296,15 @@ ALAS (Amazon) - + - + - + @@ -353,24 +325,24 @@ ALAS (Amazon) - + - + - + - + - + @@ -390,20 +362,20 @@ ALAS (Amazon) - + - + - go-cve-dictionary + go-cve-dictionary - + @@ -418,11 +390,11 @@ ALAS (Amazon) - - + + - + @@ -443,10 +415,10 @@ ALAS (Amazon) - + - + HTTP server @@ -460,10 +432,10 @@ ALAS (Amazon) - + - + Fetcher @@ -479,28 +451,151 @@ ALAS (Amazon) - - - - - - - - + + + + + + + + + + + Docker Containers + + + + + + + + + + Folder 5 + + + + + + + - - + + + + + + + + DockerHost + + + + + + + + + + + + + + + + + Docker +Container + + + + + + + + + + + + + + + + + + + + + + + Linux Servers + + + + + + + + + + Folder 6 + + + + + + + + + + + + + + + + Server + + + + + + + + + + + + + + + + + Server + + + + + + + + + + + + + - Fetch + Fetch Vulnerability data - + @@ -514,17 +609,7 @@ Vulnerability data - - - - - - - - - - - HTTP + HTTP @@ -536,67 +621,17 @@ Vulnerability data - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SSH + HTTP - + @@ -604,7 +639,137 @@ Vulnerability data - + + + + + + + HTTP + + + + + + + + + + + + + + + + + + send + + + + + + + + + + + + + + + + + + Generate + + + + + + + + + + + + + + + + + + Detail Information + + + + + + + + + + + + + + + + + + + SSH + + + + + + + + + + + + + + + + + + + SSH + + + + + + + + + + + + + + + + + + + docker exec + + + + + + + + + + + + + @@ -614,22 +779,120 @@ Vulnerability data - + + - + - + + - + + Insert + + + + + + + + + + + + + + + + + + + Select + + + + + + + + + + + + + + + + + + + Insert +Scan Result + + + + + + + + + + + + + + + + + + + Select + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Notify + + + + + + + @@ -638,162 +901,6 @@ Vulnerability data <?xml version="1.0" encoding="utf-8"?> -<svg version="1.1" - xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" - x="0px" y="0px" width="68px" height="60px" viewBox="-0.435 -0.869 68 60" enable-background="new -0.435 -0.869 68 60" - xml:space="preserve"> -<defs> -</defs> -<path fill="#666666" d="M52.462,30.881c-0.021,0-0.037,0.01-0.059,0.012c-0.021-0.002-0.037-0.012-0.059-0.012h-18.5v-7.555 - c0-0.414-0.335-0.75-0.75-0.75c-0.414,0-0.75,0.336-0.75,0.75v7.555h-18.5c-0.02,0-0.037,0.01-0.057,0.012 - c-0.02-0.002-0.037-0.012-0.057-0.012c-0.414,0-0.75,0.336-0.75,0.75v3.834c0,0.414,0.336,0.75,0.75,0.75s0.75-0.336,0.75-0.75 - v-3.084H51.71v3.084c0,0.414,0.336,0.75,0.75,0.75s0.75-0.336,0.75-0.75v-3.834C53.212,31.217,52.876,30.881,52.462,30.881z"/> -<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="130.7236" y1="-184.1631" x2="130.7236" y2="-191.9565" gradientTransform="matrix(1 0 0 -1 -97.6001 -158.6377)"> - <stop offset="0" style="stop-color:#9CD7FF"/> - <stop offset="1" style="stop-color:#3C89C9"/> -</linearGradient> -<path fill="url(#SVGID_1_)" d="M36.296,29.976c-0.832,0-1.513-0.681-1.513-1.513v-1.424c0-0.832-0.681-1.513-1.513-1.513h-0.214 - c-0.832,0-1.513,0.681-1.513,1.513v1.424c0,0.832-0.681,1.513-1.513,1.513h-2.499c-0.832,0-1.513,0.681-1.513,1.513v0.317 - c0,0.832,0.681,1.513,1.513,1.513h11.187c0.832,0,1.513-0.681,1.513-1.513v-0.317c0-0.833-0.681-1.513-1.513-1.513H36.296z"/> -<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="605.8877" y1="2040.6665" x2="593.1709" y2="2040.6665" gradientTransform="matrix(1 0 0 1 -585.5996 -1982.4023)"> - <stop offset="0" style="stop-color:#4D4D4D"/> - <stop offset="1" style="stop-color:#999999"/> -</linearGradient> -<path fill="url(#SVGID_2_)" d="M20.205,57.452c0,0.519-3.619,0.752-6.627,0.752c-2.083,0-5.846-0.186-6.089-0.678 - c0,0.238,0,0.806,0,0.89c0,0.389,2.573,0.661,6.084,0.661c3.511,0,6.632-0.344,6.632-0.729C20.205,58.264,20.205,57.7,20.205,57.452 - z"/> -<path fill="#808080" d="M13.846,56.806c3.512,0,6.358,0.313,6.358,0.699s-2.846,0.763-6.358,0.763c-3.59,0-6.358-0.375-6.358-0.763 - S10.335,56.806,13.846,56.806z"/> -<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="600.833" y1="2037.4702" x2="598.1563" y2="2037.4702" gradientTransform="matrix(1 0 0 1 -585.5996 -1982.4023)"> - <stop offset="0" style="stop-color:#999999"/> - <stop offset="0.0417" style="stop-color:#8D8D8D"/> - <stop offset="0.1617" style="stop-color:#717171"/> - <stop offset="0.2821" style="stop-color:#5D5D5D"/> - <stop offset="0.4021" style="stop-color:#515151"/> - <stop offset="0.5212" style="stop-color:#4D4D4D"/> - <stop offset="0.6202" style="stop-color:#565656"/> - <stop offset="0.7817" style="stop-color:#6E6E6E"/> - <stop offset="0.9844" style="stop-color:#969696"/> - <stop offset="1" style="stop-color:#999999"/> -</linearGradient> -<path fill="url(#SVGID_3_)" d="M15.215,57.657c0,0-0.792,0.053-1.339,0.053s-1.338-0.053-1.338-0.053v-5.231h2.677V57.657z"/> -<radialGradient id="SVGID_4_" cx="465.1113" cy="2023.4497" r="12.8975" gradientTransform="matrix(1.15 0 0 1 -526.6041 -1982.4023)" gradientUnits="userSpaceOnUse"> - <stop offset="0" style="stop-color:#F2F2F2"/> - <stop offset="1" style="stop-color:#666666"/> -</radialGradient> -<path fill="url(#SVGID_4_)" d="M0.065,36.888c0-0.59,0.482-1.071,1.072-1.071H26.98c0.589,0,1.071,0.481,1.071,1.071v16.108 - c0,0.589-0.482,1.07-1.071,1.07H1.137c-0.59,0.002-1.072-0.481-1.072-1.07V36.888z"/> -<path fill="none" stroke="#666666" stroke-width="0.1305" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" - M0.065,36.888c0-0.59,0.482-1.071,1.072-1.071H26.98c0.589,0,1.071,0.481,1.071,1.071v16.108c0,0.589-0.482,1.07-1.071,1.07H1.137 - c-0.59,0.002-1.072-0.481-1.072-1.07V36.888z"/> -<radialGradient id="SVGID_5_" cx="439.1309" cy="2019.0845" r="28.5715" fx="461.6079" fy="2015.234" gradientTransform="matrix(1.1935 0 0 1 -509.6013 -1982.4023)" gradientUnits="userSpaceOnUse"> - <stop offset="0" style="stop-color:#4D4D4D"/> - <stop offset="1" style="stop-color:#999999"/> -</radialGradient> -<path fill="url(#SVGID_5_)" d="M0.613,37.436c0-0.591,0.482-1.072,1.071-1.072h24.871c0.589,0,1.071,0.481,1.071,1.072v14.893 - c0,0.59-0.482,1.072-1.071,1.072H1.685c-0.589,0-1.071-0.482-1.071-1.072V37.436z"/> -<radialGradient id="SVGID_6_" cx="440.0439" cy="2019.1304" r="18.3134" gradientTransform="matrix(1.1923 0 0 1 -510.0601 -1982.4023)" gradientUnits="userSpaceOnUse"> - <stop offset="0" style="stop-color:#9CD7FF"/> - <stop offset="1" style="stop-color:#3C89C9"/> -</radialGradient> -<path fill="url(#SVGID_6_)" d="M0.917,37.679c0-0.59,0.482-1.071,1.072-1.071h24.262c0.589,0,1.071,0.481,1.071,1.071v14.406 - c0,0.588-0.482,1.069-1.071,1.069H1.989c-0.59,0-1.072-0.481-1.072-1.069V37.679z"/> -<path opacity="0.24" fill="#F2F2F2" d="M0.917,49.11V37.679c0-0.59,0.482-1.071,1.072-1.071h24.262c0.589,0,1.071,0.481,1.071,1.071 - v7.252l-12.407,2.646c-0.57,0.146-1.52,0.293-2.107,0.326L0.917,49.11z"/> -<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="644.3887" y1="2040.6665" x2="631.6719" y2="2040.6665" gradientTransform="matrix(1 0 0 1 -585.5996 -1982.4023)"> - <stop offset="0" style="stop-color:#4D4D4D"/> - <stop offset="1" style="stop-color:#999999"/> -</linearGradient> -<path fill="url(#SVGID_7_)" d="M58.706,57.452c0,0.518-3.621,0.752-6.627,0.752c-2.084,0-5.848-0.186-6.09-0.678 - c0,0.237,0,0.805,0,0.889c0,0.389,2.572,0.662,6.084,0.662s6.633-0.344,6.633-0.729C58.706,58.263,58.706,57.7,58.706,57.452z"/> -<path fill="#808080" d="M52.347,56.805c3.512,0,6.357,0.313,6.357,0.699s-2.847,0.762-6.357,0.762c-3.59,0-6.357-0.373-6.357-0.762 - C45.989,57.118,48.837,56.805,52.347,56.805z"/> -<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="639.333" y1="2037.4683" x2="636.6553" y2="2037.4683" gradientTransform="matrix(1 0 0 1 -585.5996 -1982.4023)"> - <stop offset="0" style="stop-color:#999999"/> - <stop offset="0.0417" style="stop-color:#8D8D8D"/> - <stop offset="0.1617" style="stop-color:#717171"/> - <stop offset="0.2821" style="stop-color:#5D5D5D"/> - <stop offset="0.4021" style="stop-color:#515151"/> - <stop offset="0.5212" style="stop-color:#4D4D4D"/> - <stop offset="0.6202" style="stop-color:#565656"/> - <stop offset="0.7817" style="stop-color:#6E6E6E"/> - <stop offset="0.9844" style="stop-color:#969696"/> - <stop offset="1" style="stop-color:#999999"/> -</linearGradient> -<path fill="url(#SVGID_8_)" d="M53.716,57.657c0,0-0.791,0.052-1.34,0.052c-0.547,0-1.338-0.052-1.338-0.052v-5.232h2.678V57.657z" - /> -<radialGradient id="SVGID_9_" cx="498.5898" cy="2023.4487" r="12.8975" gradientTransform="matrix(1.15 0 0 1 -526.6041 -1982.4023)" gradientUnits="userSpaceOnUse"> - <stop offset="0" style="stop-color:#F2F2F2"/> - <stop offset="1" style="stop-color:#666666"/> -</radialGradient> -<path fill="url(#SVGID_9_)" d="M38.566,36.887c0-0.59,0.481-1.072,1.071-1.072h25.844c0.589,0,1.07,0.482,1.07,1.072v16.107 - c0,0.59-0.481,1.072-1.07,1.072H39.638c-0.59,0-1.071-0.482-1.071-1.072V36.887z"/> -<path fill="none" stroke="#666666" stroke-width="0.1305" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" - M38.566,36.887c0-0.59,0.481-1.072,1.071-1.072h25.844c0.589,0,1.07,0.482,1.07,1.072v16.107c0,0.59-0.481,1.072-1.07,1.072H39.638 - c-0.59,0-1.071-0.482-1.071-1.072V36.887z"/> -<radialGradient id="SVGID_10_" cx="471.3896" cy="2019.0845" r="28.5697" fx="493.8652" fy="2015.2343" gradientTransform="matrix(1.1935 0 0 1 -509.6013 -1982.4023)" gradientUnits="userSpaceOnUse"> - <stop offset="0" style="stop-color:#4D4D4D"/> - <stop offset="1" style="stop-color:#999999"/> -</radialGradient> -<path fill="url(#SVGID_10_)" d="M39.114,37.434c0-0.59,0.482-1.072,1.071-1.072h24.87c0.589,0,1.07,0.482,1.07,1.072v14.895 - c0,0.589-0.481,1.07-1.07,1.07h-24.87c-0.589,0-1.071-0.481-1.071-1.07V37.434z"/> -<radialGradient id="SVGID_11_" cx="472.334" cy="2019.1294" r="18.3139" gradientTransform="matrix(1.1923 0 0 1 -510.0601 -1982.4023)" gradientUnits="userSpaceOnUse"> - <stop offset="0" style="stop-color:#9CD7FF"/> - <stop offset="1" style="stop-color:#3C89C9"/> -</radialGradient> -<path fill="url(#SVGID_11_)" d="M39.419,37.678c0-0.59,0.481-1.072,1.07-1.072h24.264c0.588,0,1.07,0.482,1.07,1.072v14.406 - c0,0.588-0.482,1.07-1.07,1.07H40.489c-0.589,0-1.07-0.482-1.07-1.07V37.678z"/> -<path opacity="0.24" fill="#F2F2F2" d="M39.419,49.108v-11.43c0-0.59,0.481-1.072,1.07-1.072h24.264c0.588,0,1.07,0.482,1.07,1.072 - v7.252l-12.408,2.645c-0.57,0.146-1.52,0.295-2.106,0.326L39.419,49.108z"/> -<linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="624.8936" y1="2004.9155" x2="612.1787" y2="2004.9155" gradientTransform="matrix(1 0 0 1 -585.5996 -1982.4023)"> - <stop offset="0" style="stop-color:#4D4D4D"/> - <stop offset="1" style="stop-color:#999999"/> -</linearGradient> -<path fill="url(#SVGID_12_)" d="M39.212,21.701c0,0.518-3.621,0.752-6.626,0.752c-2.083,0-5.847-0.186-6.089-0.678 - c0,0.238,0,0.805,0,0.889c0,0.389,2.573,0.662,6.084,0.662c3.51,0,6.631-0.344,6.631-0.729 - C39.212,22.513,39.212,21.949,39.212,21.701z"/> -<path fill="#808080" d="M32.854,21.055c3.511,0,6.358,0.313,6.358,0.699c0,0.386-2.848,0.762-6.358,0.762 - c-3.589,0-6.358-0.374-6.358-0.762C26.496,21.367,29.342,21.055,32.854,21.055z"/> -<linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="619.8379" y1="2001.7183" x2="617.1611" y2="2001.7183" gradientTransform="matrix(1 0 0 1 -585.5996 -1982.4023)"> - <stop offset="0" style="stop-color:#999999"/> - <stop offset="0.0417" style="stop-color:#8D8D8D"/> - <stop offset="0.1617" style="stop-color:#717171"/> - <stop offset="0.2821" style="stop-color:#5D5D5D"/> - <stop offset="0.4021" style="stop-color:#515151"/> - <stop offset="0.5212" style="stop-color:#4D4D4D"/> - <stop offset="0.6202" style="stop-color:#565656"/> - <stop offset="0.7817" style="stop-color:#6E6E6E"/> - <stop offset="0.9844" style="stop-color:#969696"/> - <stop offset="1" style="stop-color:#999999"/> -</linearGradient> -<path fill="url(#SVGID_13_)" d="M34.222,21.906c0,0-0.791,0.052-1.338,0.052c-0.547,0-1.338-0.052-1.338-0.052v-5.232h2.677 - L34.222,21.906L34.222,21.906z"/> -<radialGradient id="SVGID_14_" cx="481.6387" cy="1987.6978" r="12.8975" gradientTransform="matrix(1.15 0 0 1 -526.6041 -1982.4023)" gradientUnits="userSpaceOnUse"> - <stop offset="0" style="stop-color:#F2F2F2"/> - <stop offset="1" style="stop-color:#666666"/> -</radialGradient> -<path fill="url(#SVGID_14_)" d="M19.072,1.137c0-0.59,0.482-1.072,1.071-1.072h25.843c0.589,0,1.071,0.482,1.071,1.072v16.108 - c0,0.589-0.482,1.071-1.071,1.071H20.145c-0.589,0-1.071-0.482-1.071-1.071L19.072,1.137L19.072,1.137z"/> -<path fill="none" stroke="#666666" stroke-width="0.1305" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" - M19.072,1.137c0-0.59,0.482-1.072,1.071-1.072h25.843c0.589,0,1.071,0.482,1.071,1.072v16.108c0,0.589-0.482,1.071-1.071,1.071 - H20.145c-0.589,0-1.071-0.482-1.071-1.071L19.072,1.137L19.072,1.137z"/> -<radialGradient id="SVGID_15_" cx="455.0566" cy="1983.3345" r="28.5689" fx="477.5316" fy="1979.4844" gradientTransform="matrix(1.1935 0 0 1 -509.6013 -1982.4023)" gradientUnits="userSpaceOnUse"> - <stop offset="0" style="stop-color:#4D4D4D"/> - <stop offset="1" style="stop-color:#999999"/> -</radialGradient> -<path fill="url(#SVGID_15_)" d="M19.621,1.685c0-0.59,0.482-1.072,1.072-1.072h24.87c0.589,0,1.071,0.482,1.071,1.072v14.894 - c0,0.589-0.482,1.071-1.071,1.071h-24.87c-0.589,0-1.072-0.482-1.072-1.071V1.685z"/> -<radialGradient id="SVGID_16_" cx="455.9854" cy="1983.3784" r="18.3134" gradientTransform="matrix(1.1923 0 0 1 -510.0601 -1982.4023)" gradientUnits="userSpaceOnUse"> - <stop offset="0" style="stop-color:#9CD7FF"/> - <stop offset="1" style="stop-color:#3C89C9"/> -</radialGradient> -<path fill="url(#SVGID_16_)" d="M19.924,1.928c0-0.59,0.482-1.072,1.072-1.072h24.262c0.589,0,1.07,0.482,1.07,1.072v14.406 - c0,0.588-0.481,1.07-1.07,1.07H20.997c-0.589,0-1.072-0.482-1.072-1.07V1.928z"/> -<path opacity="0.24" fill="#F2F2F2" d="M19.924,13.358V1.928c0-0.59,0.482-1.072,1.072-1.072h24.262c0.589,0,1.07,0.482,1.07,1.072 - V9.18l-12.408,2.646c-0.569,0.146-1.519,0.294-2.106,0.326L19.924,13.358z"/> -</svg> - - <?xml version="1.0" encoding="utf-8"?> <svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="57px" height="65px" viewBox="0 0 57 65" enable-background="new 0 0 57 65" xml:space="preserve"> <g> @@ -871,7 +978,7 @@ Vulnerability data </g> </svg> - <?xml version="1.0" encoding="UTF-8" standalone="no"?> + <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" diff --git a/img/vuls-architecture.png b/img/vuls-architecture.png index 9a2de58fa2210551579c620c0020c8054c917bc8..cb4302c7105e2b5c4607a784cf80be674a6fa329 100644 GIT binary patch literal 74901 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 C^mq^e diff --git a/models/models.go b/models/models.go index 05a99318..114af15f 100644 --- a/models/models.go +++ b/models/models.go @@ -30,16 +30,34 @@ import ( // ScanHistory is the history of Scanning. type ScanHistory struct { gorm.Model - ScanResults []ScanResult + ScanResults ScanResults ScannedAt time.Time } // ScanResults is slice of ScanResult. type ScanResults []ScanResult +// Len implement Sort Interface +func (s ScanResults) Len() int { + return len(s) +} + +// Swap implement Sort Interface +func (s ScanResults) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +// Less implement Sort Interface +func (s ScanResults) Less(i, j int) bool { + if s[i].ServerName == s[j].ServerName { + return s[i].Container.ContainerID < s[i].Container.ContainerID + } + return s[i].ServerName < s[j].ServerName +} + // FilterByCvssOver is filter function. -func (results ScanResults) FilterByCvssOver() (filtered ScanResults) { - for _, result := range results { +func (s ScanResults) FilterByCvssOver() (filtered ScanResults) { + for _, result := range s { cveInfos := []CveInfo{} for _, cveInfo := range result.KnownCves { if config.Conf.CvssScoreOver < cveInfo.CveDetail.CvssScore(config.Conf.Lang) { @@ -61,12 +79,60 @@ type ScanResult struct { // Hostname string Family string Release string + + Container Container + // Fqdn string // NWLinks []NWLink KnownCves []CveInfo UnknownCves []CveInfo } +// ServerInfo returns server name one line +func (r ScanResult) ServerInfo() string { + hostinfo := "" + if r.Container.ContainerID == "" { + hostinfo = fmt.Sprintf( + "%s (%s%s)", + r.ServerName, + r.Family, + r.Release, + ) + } else { + hostinfo = fmt.Sprintf( + "%s / %s (%s%s) on %s", + r.Container.Name, + r.Container.ContainerID, + r.Family, + r.Release, + r.ServerName, + ) + } + return hostinfo +} + +// ServerInfoTui returns server infromation for TUI sidebar +func (r ScanResult) ServerInfoTui() string { + hostinfo := "" + if r.Container.ContainerID == "" { + hostinfo = fmt.Sprintf( + "%s (%s%s)", + r.ServerName, + r.Family, + r.Release, + ) + } else { + hostinfo = fmt.Sprintf( + "|-- %s (%s%s)", + r.Container.Name, + r.Family, + r.Release, + // r.Container.ContainerID, + ) + } + return hostinfo +} + // CveSummary summarize the number of CVEs group by CVSSv2 Severity func (r ScanResult) CveSummary() string { var high, middle, low, unknown int @@ -232,7 +298,6 @@ func (p PackageInfo) ToStringNewVersion() string { } // DistroAdvisory has Amazon Linux AMI Security Advisory information. -//TODO Rename to DistroAdvisory type DistroAdvisory struct { gorm.Model CveInfoID uint @@ -242,3 +307,12 @@ type DistroAdvisory struct { Issued time.Time Updated time.Time } + +// Container has Container information +type Container struct { + gorm.Model + ScanResultID uint + + ContainerID string + Name string +} diff --git a/report/mail.go b/report/mail.go index 5ee6793d..34cd3feb 100644 --- a/report/mail.go +++ b/report/mail.go @@ -40,7 +40,7 @@ func (w MailWriter) Write(scanResults []models.ScanResult) (err error) { subject := fmt.Sprintf("%s%s %s", conf.Mail.SubjectPrefix, - s.ServerName, + s.ServerInfo(), s.CveSummary(), ) m.SetHeader("Subject", subject) diff --git a/report/slack.go b/report/slack.go index 6a575b10..064850de 100644 --- a/report/slack.go +++ b/report/slack.go @@ -103,13 +103,8 @@ func msgText(r models.ScanResult) string { notifyUsers = getNotifyUsers(config.Conf.Slack.NotifyUsers) } - hostinfo := fmt.Sprintf( - "*%s* (%s %s)", - r.ServerName, - r.Family, - r.Release, - ) - return fmt.Sprintf("%s\n%s\n>%s", notifyUsers, hostinfo, r.CveSummary()) + serverInfo := fmt.Sprintf("*%s*", r.ServerInfo()) + return fmt.Sprintf("%s\n%s\n>%s", notifyUsers, serverInfo, r.CveSummary()) } func toSlackAttachments(scanResult models.ScanResult) (attaches []*attachment) { diff --git a/report/tui.go b/report/tui.go index 6f8bc595..9f38d7f2 100644 --- a/report/tui.go +++ b/report/tui.go @@ -410,7 +410,7 @@ func changeHost(g *gocui.Gui, v *gocui.View) error { serverName := strings.TrimSpace(l) for _, r := range scanHistory.ScanResults { - if serverName == r.ServerName { + if serverName == strings.TrimSpace(r.ServerInfoTui()) { currentScanResult = r break } @@ -509,14 +509,14 @@ func layout(g *gocui.Gui) error { func setSideLayout(g *gocui.Gui) error { _, maxY := g.Size() - if v, err := g.SetView("side", -1, -1, 30, maxY); err != nil { + if v, err := g.SetView("side", -1, -1, 40, maxY); err != nil { if err != gocui.ErrUnknownView { return err } v.Highlight = true for _, result := range scanHistory.ScanResults { - fmt.Fprintln(v, result.ServerName) + fmt.Fprintln(v, result.ServerInfoTui()) } currentScanResult = scanHistory.ScanResults[0] if err := g.SetCurrentView("side"); err != nil { @@ -528,7 +528,7 @@ func setSideLayout(g *gocui.Gui) error { func setSummaryLayout(g *gocui.Gui) error { maxX, maxY := g.Size() - if v, err := g.SetView("summary", 30, -1, maxX, int(float64(maxY)*0.2)); err != nil { + if v, err := g.SetView("summary", 40, -1, maxX, int(float64(maxY)*0.2)); err != nil { if err != gocui.ErrUnknownView { return err } @@ -616,7 +616,7 @@ func setDetailLayout(g *gocui.Gui) error { _, oy := summaryView.Origin() currentCveInfo = cy + oy - if v, err := g.SetView("detail", 30, int(float64(maxY)*0.2), maxX, maxY); err != nil { + if v, err := g.SetView("detail", 40, int(float64(maxY)*0.2), maxX, maxY); err != nil { if err != gocui.ErrUnknownView { return err } diff --git a/report/util.go b/report/util.go index d3e87639..6982e19e 100644 --- a/report/util.go +++ b/report/util.go @@ -28,18 +28,13 @@ import ( ) func toPlainText(scanResult models.ScanResult) (string, error) { - hostinfo := fmt.Sprintf( - "%s (%s %s)", - scanResult.ServerName, - scanResult.Family, - scanResult.Release, - ) + serverInfo := scanResult.ServerInfo() var buffer bytes.Buffer - for i := 0; i < len(hostinfo); i++ { + for i := 0; i < len(serverInfo); i++ { buffer.WriteString("=") } - header := fmt.Sprintf("%s\n%s", hostinfo, buffer.String()) + header := fmt.Sprintf("%s\n%s", serverInfo, buffer.String()) if len(scanResult.KnownCves) == 0 && len(scanResult.UnknownCves) == 0 { return fmt.Sprintf(` diff --git a/scan/linux.go b/scan/linux.go index 14861a2b..57c538fe 100644 --- a/scan/linux.go +++ b/scan/linux.go @@ -20,6 +20,7 @@ package scan import ( "fmt" "sort" + "strings" "github.com/Sirupsen/logrus" "github.com/future-architect/vuls/config" @@ -34,6 +35,8 @@ type linux struct { Release string osPackages log *logrus.Entry + + errs []error } func (l *linux) ssh(cmd string, sudo bool) sshResult { @@ -44,7 +47,7 @@ func (l *linux) setServerInfo(c config.ServerInfo) { l.ServerInfo = c } -func (l *linux) getServerInfo() config.ServerInfo { +func (l linux) getServerInfo() config.ServerInfo { return l.ServerInfo } @@ -57,6 +60,77 @@ func (l *linux) getDistributionInfo() string { return fmt.Sprintf("%s %s", l.Family, l.Release) } +func (l linux) allContainers() (containers []config.Container, err error) { + switch l.ServerInfo.Container.Type { + case "", "docker": + stdout, err := l.dockerPs("-a --format '{{.ID}} {{.Names}}'") + if err != nil { + return containers, err + } + return l.parseDockerPs(stdout) + default: + return containers, fmt.Errorf( + "Not supported yet: %s", l.ServerInfo.Container.Type) + } +} + +func (l *linux) runningContainers() (containers []config.Container, err error) { + switch l.ServerInfo.Container.Type { + case "", "docker": + stdout, err := l.dockerPs("--format '{{.ID}} {{.Names}}'") + if err != nil { + return containers, err + } + return l.parseDockerPs(stdout) + default: + return containers, fmt.Errorf( + "Not supported yet: %s", l.ServerInfo.Container.Type) + } +} + +func (l *linux) exitedContainers() (containers []config.Container, err error) { + switch l.ServerInfo.Container.Type { + case "", "docker": + stdout, err := l.dockerPs("--filter 'status=exited' --format '{{.ID}} {{.Names}}'") + if err != nil { + return containers, err + } + return l.parseDockerPs(stdout) + default: + return containers, fmt.Errorf( + "Not supported yet: %s", l.ServerInfo.Container.Type) + } +} + +func (l *linux) dockerPs(option string) (string, error) { + cmd := fmt.Sprintf("docker ps %s", option) + r := l.ssh(cmd, noSudo) + if !r.isSuccess() { + return "", fmt.Errorf( + "Failed to %s. status: %d, stdout: %s, stderr: %s", + cmd, r.ExitStatus, r.Stdout, r.Stderr) + } + return r.Stdout, nil +} + +func (l *linux) parseDockerPs(stdout string) (containers []config.Container, err error) { + lines := strings.Split(stdout, "\n") + for _, line := range lines { + fields := strings.Fields(line) + if len(fields) == 0 { + break + } + if len(fields) != 2 { + return containers, fmt.Errorf("Unknown format: %s", line) + } + containers = append(containers, config.Container{ + ContainerID: fields[0], + Name: fields[1], + }) + } + return +} + func (l *linux) convertToModel() (models.ScanResult, error) { var cves, unknownScoreCves []models.CveInfo for _, p := range l.UnsecurePackages { @@ -84,10 +158,16 @@ func (l *linux) convertToModel() (models.ScanResult, error) { cves = append(cves, cve) } + container := models.Container{ + ContainerID: l.ServerInfo.Container.ContainerID, + Name: l.ServerInfo.Container.Name, + } + return models.ScanResult{ ServerName: l.ServerInfo.ServerName, Family: l.Family, Release: l.Release, + Container: container, KnownCves: cves, UnknownCves: unknownScoreCves, }, nil @@ -132,3 +212,11 @@ func (l *linux) scanVulnByCpeName() error { l.setUnsecurePackages(unsecurePacks) return nil } + +func (l *linux) setErrs(errs []error) { + l.errs = errs +} + +func (l linux) getErrs() []error { + return l.errs +} diff --git a/scan/linux_test.go b/scan/linux_test.go index ef421884..c2a6ccf2 100644 --- a/scan/linux_test.go +++ b/scan/linux_test.go @@ -16,3 +16,43 @@ along with this program. If not, see . */ package scan + +import ( + "reflect" + "testing" + + "github.com/future-architect/vuls/config" +) + +func TestParseDockerPs(t *testing.T) { + + var test = struct { + in string + expected []config.Container + }{ + `c7ca0992415a romantic_goldberg +f570ae647edc agitated_lovelace`, + []config.Container{ + { + ContainerID: "c7ca0992415a", + Name: "romantic_goldberg", + }, + { + ContainerID: "f570ae647edc", + Name: "agitated_lovelace", + }, + }, + } + + r := newRedhat(config.ServerInfo{}) + actual, err := r.parseDockerPs(test.in) + if err != nil { + t.Errorf("Error occurred. in: %s, err: %s", test.in, err) + return + } + for i, e := range test.expected { + if !reflect.DeepEqual(e, actual[i]) { + t.Errorf("expected %v, actual %v", e, actual[i]) + } + } +} diff --git a/scan/redhat.go b/scan/redhat.go index 1c024f67..298b633f 100644 --- a/scan/redhat.go +++ b/scan/redhat.go @@ -861,3 +861,7 @@ func (o *redhat) parseYumUpdateinfoListAvailable(stdout string) (advisoryIDPacks } return result, nil } + +func (o *redhat) clone() osTypeInterface { + return o +} diff --git a/scan/serverapi.go b/scan/serverapi.go index dccecd74..8e18f5bc 100644 --- a/scan/serverapi.go +++ b/scan/serverapi.go @@ -26,6 +26,13 @@ type osTypeInterface interface { scanVulnByCpeName() error install() error convertToModel() (models.ScanResult, error) + + runningContainers() ([]config.Container, error) + exitedContainers() ([]config.Container, error) + allContainers() ([]config.Container, error) + + getErrs() []error + setErrs([]error) } // osPackages included by linux struct @@ -94,49 +101,68 @@ func (s CvePacksList) Less(i, j int) bool { return s[i].CveDetail.CvssScore("en") > s[j].CveDetail.CvssScore("en") } -func detectOs(c config.ServerInfo) (osType osTypeInterface) { +func detectOS(c config.ServerInfo) (osType osTypeInterface) { var itsMe bool itsMe, osType = detectDebian(c) if itsMe { return } itsMe, osType = detectRedhat(c) + if itsMe { + return + } + + osType.setErrs([]error{fmt.Errorf("Unknown OS Type")}) return } // InitServers detect the kind of OS distribution of target servers -func InitServers(localLogger *logrus.Entry) (err error) { +func InitServers(localLogger *logrus.Entry) error { Log = localLogger - if servers, err = detectServersOS(); err != nil { - err = fmt.Errorf("Failed to detect the type of OS. err: %s", err) + + hosts, err := detectServerOSes() + if err != nil { + return fmt.Errorf("Failed to detect server OSes. err: %s", err) } - return + servers = hosts + + Log.Info("Detecting Container OS...") + containers, err := detectContainerOSes() + if err != nil { + return fmt.Errorf("Failed to detect Container OSes. err: %s", err) + } + servers = append(servers, containers...) + return nil } -func detectServersOS() (osi []osTypeInterface, err error) { +func detectServerOSes() (oses []osTypeInterface, err error) { osTypeChan := make(chan osTypeInterface, len(config.Conf.Servers)) defer close(osTypeChan) for _, s := range config.Conf.Servers { go func(s config.ServerInfo) { - osTypeChan <- detectOs(s) + //TODO handling Unknown OS + osTypeChan <- detectOS(s) }(s) } - timeout := time.After(60 * time.Second) + timeout := time.After(300 * time.Second) for i := 0; i < len(config.Conf.Servers); i++ { select { case res := <-osTypeChan: - Log.Infof("(%d/%d) Successfully detected. %s: %s", + if 0 < len(res.getErrs()) { + continue + } + Log.Infof("(%d/%d) Detected %s: %s", i+1, len(config.Conf.Servers), res.getServerInfo().ServerName, res.getDistributionInfo()) - osi = append(osi, res) + oses = append(oses, res) case <-timeout: - Log.Error("Timeout occured while detecting") - err = fmt.Errorf("Timeout") + msg := "Timeout occurred while detecting" + Log.Error(msg) for servername := range config.Conf.Servers { found := false - for _, o := range osi { + for _, o := range oses { if servername == o.getServerInfo().ServerName { found = true break @@ -146,12 +172,158 @@ func detectServersOS() (osi []osTypeInterface, err error) { Log.Errorf("Failed to detect. servername: %s", servername) } } - return + return oses, fmt.Errorf(msg) } } + + errorOccurred := false + for _, osi := range oses { + if errs := osi.getErrs(); 0 < len(errs) { + errorOccurred = true + Log.Errorf("Some errors occurred on %s", + osi.getServerInfo().ServerName) + for _, err := range errs { + Log.Error(err) + } + } + } + if errorOccurred { + return oses, fmt.Errorf("Some errors occurred") + } return } +func detectContainerOSes() (oses []osTypeInterface, err error) { + osTypesChan := make(chan []osTypeInterface, len(servers)) + defer close(osTypesChan) + for _, s := range servers { + go func(s osTypeInterface) { + osTypesChan <- detectContainerOSesOnServer(s) + }(s) + } + + timeout := time.After(300 * time.Second) + for i := 0; i < len(config.Conf.Servers); i++ { + select { + case res := <-osTypesChan: + for _, osi := range res { + if 0 < len(osi.getErrs()) { + continue + } + sinfo := osi.getServerInfo() + Log.Infof("Detected %s/%s on %s: %s", + sinfo.Container.ContainerID, sinfo.Container.Name, + sinfo.ServerName, osi.getDistributionInfo()) + } + oses = append(oses, res...) + case <-timeout: + msg := "Timeout occurred while detecting" + Log.Error(msg) + for servername := range config.Conf.Servers { + found := false + for _, o := range oses { + if servername == o.getServerInfo().ServerName { + found = true + break + } + } + if !found { + Log.Errorf("Failed to detect. servername: %s", servername) + } + } + return oses, fmt.Errorf(msg) + } + } + + errorOccurred := false + for _, osi := range oses { + if errs := osi.getErrs(); 0 < len(errs) { + errorOccurred = true + Log.Errorf("Some errors occurred on %s", + osi.getServerInfo().ServerName) + for _, err := range errs { + Log.Error(err) + } + } + } + if errorOccurred { + return oses, fmt.Errorf("Some errors occurred") + } + return +} + +func detectContainerOSesOnServer(containerHost osTypeInterface) (oses []osTypeInterface) { + containerHostInfo := containerHost.getServerInfo() + if len(containerHostInfo.Containers) == 0 { + return + } + + running, err := containerHost.runningContainers() + if err != nil { + containerHost.setErrs([]error{fmt.Errorf( + "Failed to get running containers on %s. err: %s", + containerHost.getServerInfo().ServerName, err)}) + return append(oses, containerHost) + } + + if containerHostInfo.Containers[0] == "${running}" { + for _, containerInfo := range running { + copied := containerHostInfo + copied.SetContainer(config.Container{ + ContainerID: containerInfo.ContainerID, + Name: containerInfo.Name, + }) + os := detectOS(copied) + oses = append(oses, os) + } + return oses + } + + exitedContainers, err := containerHost.exitedContainers() + if err != nil { + containerHost.setErrs([]error{fmt.Errorf( + "Failed to get exited containers on %s. err: %s", + containerHost.getServerInfo().ServerName, err)}) + return append(oses, containerHost) + } + + var exited, unknown []string + for _, container := range containerHostInfo.Containers { + found := false + for _, c := range running { + if c.ContainerID == container || c.Name == container { + copied := containerHostInfo + copied.SetContainer(c) + os := detectOS(copied) + oses = append(oses, os) + found = true + break + } + } + + if !found { + foundInExitedContainers := false + for _, c := range exitedContainers { + if c.ContainerID == container || c.Name == container { + exited = append(exited, container) + foundInExitedContainers = true + break + } + } + if !foundInExitedContainers { + unknown = append(unknown, container) + } + } + } + if 0 < len(exited) || 0 < len(unknown) { + containerHost.setErrs([]error{fmt.Errorf( + "Some containers on %s are exited or unknown. exited: %s, unknown: %s", + containerHost.getServerInfo().ServerName, exited, unknown)}) + return append(oses, containerHost) + } + return oses +} + // Prepare installs requred packages to scan vulnerabilities. func Prepare() []error { return parallelSSHExec(func(o osTypeInterface) error { diff --git a/scan/sshutil.go b/scan/sshutil.go index d9ea4fbc..6f4a6280 100644 --- a/scan/sshutil.go +++ b/scan/sshutil.go @@ -124,7 +124,7 @@ func sshExec(c conf.ServerInfo, cmd string, sudo bool, log ...*logrus.Entry) (re } c.SudoOpt.ExecBySudo = true var err error - if sudo && c.User != "root" { + if sudo && c.User != "root" && !c.IsContainer() { switch { case c.SudoOpt.ExecBySudo: cmd = fmt.Sprintf("echo %s | sudo -S %s", c.Password, cmd) @@ -140,6 +140,13 @@ func sshExec(c conf.ServerInfo, cmd string, sudo bool, log ...*logrus.Entry) (re logger.Debugf("Command: %s", strings.Replace(maskPassword(cmd, c.Password), "\n", "", -1)) + if c.IsContainer() { + switch c.Container.Type { + case "", "docker": + cmd = fmt.Sprintf(`docker exec %s /bin/bash -c "%s"`, c.Container.ContainerID, cmd) + } + } + var client *ssh.Client client, err = sshConnect(c) defer client.Close() diff --git a/util/logutil.go b/util/logutil.go index 25cbc58d..74900f6b 100644 --- a/util/logutil.go +++ b/util/logutil.go @@ -53,11 +53,16 @@ func NewCustomLogger(c config.ServerInfo) *logrus.Entry { whereami := "localhost" if 0 < len(c.ServerName) { - whereami = fmt.Sprintf("%s:%s", c.ServerName, c.Port) - + if 0 < len(c.Container.ContainerID) { + whereami = fmt.Sprintf( + "%s_%s", c.ServerName, c.Container.Name) + } else { + whereami = fmt.Sprintf("%s", c.ServerName) + } } + if _, err := os.Stat(logDir); err == nil { - path := fmt.Sprintf("%s/%s.log", logDir, whereami) + path := filepath.Join(logDir, whereami) log.Hooks.Add(lfshook.NewHook(lfshook.PathMap{ logrus.DebugLevel: path, logrus.InfoLevel: path,