From 39a7587ee06f1eaa16441051c4e9e8ba91f926b5 Mon Sep 17 00:00:00 2001 From: Britton Hayes <46035482+brittonhayes@users.noreply.github.com> Date: Sun, 27 Feb 2022 23:27:55 -0800 Subject: [PATCH] Project Simplification (#58) * Large refactor of pillager application. This refactor prioritizes code readability and modularity. * fix: fixes lint error * fix: more consistent logging * fix: merged go.mod * fix: updated goreleaser build path * fix: update reviewdog * fix: github action and docker build Co-authored-by: brittonhayes --- .github/dependabot.yml | 2 +- .github/workflows/{build.yml => gobuild.yml} | 10 +- .github/workflows/lint.yml | 11 +- .github/workflows/test.yml | 2 +- .golangci.yaml | 15 + .goreleaser.yml | 16 +- Dockerfile | 2 +- Makefile | 3 + README.md | 13 +- _examples/hunter/main.go | 38 ++- _examples/testdata/aws_leak.json | 9 - _examples/testdata/aws_leak.txt | 1 + cmd/pillager/main.go | 9 + config.go | 141 ++++++++ doc.go | 2 +- go.mod | 11 +- go.sum | 17 +- images/brand_image.png | Bin 212368 -> 0 bytes {cmd/pillager => internal/commands}/hunt.go | 59 ++-- {cmd/pillager => internal/commands}/root.go | 7 +- .../pillager => internal/commands}/version.go | 0 internal/validate/path.go | 25 +- images/brand_image_ice.png => logo.png | Bin main.go | 13 - pkg/format/README.md | 74 ++++ pkg/format/format.go | 40 +++ pkg/{hunter => format}/template.go | 18 +- pkg/hunter/README.md | 319 +----------------- pkg/hunter/config.go | 68 ---- pkg/hunter/format.go | 40 --- pkg/hunter/hound.go | 73 ---- pkg/hunter/hound_test.go | 26 -- pkg/hunter/hunter.go | 90 +++-- pkg/hunter/hunter_test.go | 86 ----- pkg/rules/README.md | 112 +++--- pkg/rules/rules.go | 76 ++++- pkg/rules/{default.go => rules_simple.toml} | 10 +- pkg/rules/rules_strict.toml | 226 +++++++++++++ waypoint.hcl | 46 --- 39 files changed, 837 insertions(+), 873 deletions(-) rename .github/workflows/{build.yml => gobuild.yml} (57%) create mode 100644 .golangci.yaml create mode 100644 Makefile delete mode 100644 _examples/testdata/aws_leak.json create mode 100644 _examples/testdata/aws_leak.txt create mode 100644 cmd/pillager/main.go create mode 100644 config.go delete mode 100644 images/brand_image.png rename {cmd/pillager => internal/commands}/hunt.go (59%) rename {cmd/pillager => internal/commands}/root.go (93%) rename {cmd/pillager => internal/commands}/version.go (100%) rename images/brand_image_ice.png => logo.png (100%) delete mode 100644 main.go create mode 100755 pkg/format/README.md create mode 100644 pkg/format/format.go rename pkg/{hunter => format}/template.go (51%) delete mode 100644 pkg/hunter/config.go delete mode 100644 pkg/hunter/format.go delete mode 100644 pkg/hunter/hound.go delete mode 100644 pkg/hunter/hound_test.go delete mode 100644 pkg/hunter/hunter_test.go rename pkg/rules/{default.go => rules_simple.toml} (74%) create mode 100644 pkg/rules/rules_strict.toml delete mode 100644 waypoint.hcl diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f1b219b..202ae23 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,4 +3,4 @@ updates: - package-ecosystem: "gomod" directory: "/" schedule: - interval: "weekly" + interval: "monthly" diff --git a/.github/workflows/build.yml b/.github/workflows/gobuild.yml similarity index 57% rename from .github/workflows/build.yml rename to .github/workflows/gobuild.yml index 4c8e56d..9efdc61 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/gobuild.yml @@ -1,6 +1,6 @@ name: build -on: [ pull_request ] +on: [pull_request] jobs: goreleaser: @@ -16,9 +16,5 @@ jobs: go-version: 1.17 - name: Build executables - uses: goreleaser/goreleaser-action@v2 - with: - version: latest - args: build --rm-dist --skip-validate - env: - GITHUB_TOKEN: ${{ secrets.GORELEASER_TOKEN }} + run: | + go build cmd/pillager/main.go diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index aa01166..04e267b 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,6 +1,6 @@ name: reviewdog -on: [ pull_request ] +on: [pull_request] jobs: reviewdog: @@ -10,11 +10,4 @@ jobs: uses: actions/checkout@v1 - name: golangci-lint - uses: reviewdog/action-golangci-lint@v1 - - - name: misspell - uses: reviewdog/action-golangci-lint@v1 - with: - golangci_lint_flags: "--disable-all -E misspell" - tool_name: misspell - level: info + uses: reviewdog/action-golangci-lint@v2 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 958073b..5cd2b6e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,6 +1,6 @@ name: test -on: [ pull_request ] +on: [pull_request] jobs: test: diff --git a/.golangci.yaml b/.golangci.yaml new file mode 100644 index 0000000..7307ed4 --- /dev/null +++ b/.golangci.yaml @@ -0,0 +1,15 @@ +linters: + enable: + - gofumpt + - gofmt + - gosimple + - godot + - godox + - dupl + - exhaustive + - funlen + - gocritic + - goprintffuncname + - ifshort + presets: + - unused diff --git a/.goreleaser.yml b/.goreleaser.yml index 7402bc5..c3e7545 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -9,10 +9,12 @@ builds: - windows - darwin ldflags: - - -s -w -X github.com/brittonhayes/pillager/cmd/pillager.version={{.Version}} + - -s -w -X github.com/brittonhayes/pillager/internal/commands/version.version={{.Version}} - -X main.commit={{.Commit}} - -X main.date={{.Date}} - -X main.builtBy=goreleaser + main: "./cmd/pillager" + archives: - replacements: darwin: Darwin @@ -21,17 +23,17 @@ archives: 386: i386 amd64: x86_64 checksum: - name_template: 'checksums.txt' + name_template: "checksums.txt" snapshot: name_template: "{{ .Tag }}-next" changelog: sort: asc filters: exclude: - - '^docs:' - - '^test:' - - '^images:' - - '^_examples:' + - "^docs:" + - "^test:" + - "^images:" + - "^_examples:" scoop: # Template for the url which is determined by the given Token (github or gitlab) url_template: "https://github.com/brittonhayes/pillager/releases/download/{{ .Tag }}/{{ .ArtifactName }}" @@ -64,7 +66,7 @@ brews: # GOARM to specify which 32-bit arm version to use if there are multiple versions # from the build section. Brew formulas support atm only one 32-bit version. # Default is 6 for all artifacts or each id if there a multiple versions. - goarm: 6 + goarm: "6" # GitHub/GitLab repository to push the formula to # Gitea is not supported yet, but the support coming diff --git a/Dockerfile b/Dockerfile index a5daad8..2e3b189 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM golang:1.16-alpine AS build WORKDIR /src/ COPY . /src/ -RUN CGO_ENABLED=0 go build -o /bin/pillager +RUN CGO_ENABLED=0 go build cmd/pillager/main.go -o /bin/pillager FROM scratch as prod diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..031d5b5 --- /dev/null +++ b/Makefile @@ -0,0 +1,3 @@ +.PHONY: +lint: + golangci-lint run ./... \ No newline at end of file diff --git a/README.md b/README.md index 4b32074..4e86a26 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Pillager -![Image](./images/brand_image_ice.png) +![Image](./logo.png) [![Go Reference](https://pkg.go.dev/badge/github.com/brittonhayes/pillager.svg)](https://pkg.go.dev/github.com/brittonhayes/pillager) @@ -52,7 +52,7 @@ brew install pillager ### Docker Image ``` -docker run --rm -it bjhayes/pillager hunt . +docker run --rm -it bjhayes/pillager hunt . ``` If you're looking for a binary, check the latest releases for the executable that matches your system @@ -111,9 +111,7 @@ pillager hunt . pillager hunt ./example -f json | jq . ``` -> *JSON output is designed to work seamlessly with* -> *the amazing [jq](https://github.com/stedolan/jq)* -> *utility for easy parsing.* +> _JSON output is designed to work seamlessly with_ > _the amazing [jq](https://github.com/stedolan/jq)_ > _utility for easy parsing._
Click to view more output formats @@ -163,7 +161,6 @@ pillager hunt . -t "$(cat templates/simple.tmpl)"
- ### Custom Templates Pillager allows you to use powerful `go text/template` to customize the output format. Here are a few template examples. @@ -209,7 +206,7 @@ awesome [gomarkdoc](https://github.com/princjef/gomarkdoc) tool. **What is Cobra?** -> Cobra is a library providing a simple interface to create powerful modern CLI interfaces similar to git & go tools. +> Cobra is a library providing a simple interface to create powerful modern CLI interfaces similar to git & go tools. > Cobra is also an application that will generate your application scaffolding to rapidly develop a Cobra-based application. If you've seen a CLI written in Go before, there's a pretty high chance it was built with Cobra. I can't recommend this @@ -245,5 +242,5 @@ Check out the included [rules.toml](./rules.toml) for a baseline ruleset. > by the MITRE ATT&CK framework. > > [MITRE ATT&CK Technique - T1552,003 - Unsecured Credentials: Bash History ](https://attack.mitre.org/techniques/T1552/003/) -> +> > [MITRE ATT&CK Technique - T1552,001 - Unsecured Credentials: Credentials In Files](https://attack.mitre.org/techniques/T1552/001/) diff --git a/_examples/hunter/main.go b/_examples/hunter/main.go index 51a9d0e..a2feaba 100644 --- a/_examples/hunter/main.go +++ b/_examples/hunter/main.go @@ -1,20 +1,42 @@ package main import ( - "runtime" + "os" + "github.com/brittonhayes/pillager" "github.com/brittonhayes/pillager/pkg/hunter" - "github.com/brittonhayes/pillager/pkg/rules" - "github.com/spf13/afero" + "github.com/rs/zerolog" ) func main() { - // Create a new hunter config - c := hunter.NewConfig(afero.NewOsFs(), ".", true, rules.Load(""), hunter.StringToFormat("JSON"), "", runtime.NumCPU()) + err := example() + if err != nil { + panic(err) + } +} + +func example() error { + opts := []pillager.ConfigOption{ + pillager.WithLogLevel(zerolog.DebugLevel), + } - // Create a new hunter from the config - h := hunter.NewHunter(c) + // Create a new hunter config + p, err := hunter.New(opts...) + if err != nil { + return err + } // Start hunting - _ = h.Hunt() + results, err := p.Hunt() + if err != nil { + return err + } + + // Report results + err = p.Report(os.Stdout, results) + if err != nil { + return err + } + + return nil } diff --git a/_examples/testdata/aws_leak.json b/_examples/testdata/aws_leak.json deleted file mode 100644 index e174c08..0000000 --- a/_examples/testdata/aws_leak.json +++ /dev/null @@ -1,9 +0,0 @@ -[ - { - "lineNumber": 5, - "offender": "AKIAIO5FODNN7EXAMPLE", - "rule": "AWS Access Key", - "file": "../test_data/test_repos/test_dir_1/server.test.py", - "tags": "key, AWS" - } -] diff --git a/_examples/testdata/aws_leak.txt b/_examples/testdata/aws_leak.txt new file mode 100644 index 0000000..6409b08 --- /dev/null +++ b/_examples/testdata/aws_leak.txt @@ -0,0 +1 @@ +AKIAIO5FODNN7EXAMPLE \ No newline at end of file diff --git a/cmd/pillager/main.go b/cmd/pillager/main.go new file mode 100644 index 0000000..729ee97 --- /dev/null +++ b/cmd/pillager/main.go @@ -0,0 +1,9 @@ +package main + +import ( + pillager "github.com/brittonhayes/pillager/internal/commands" +) + +func main() { + pillager.Execute() +} diff --git a/config.go b/config.go new file mode 100644 index 0000000..d296e6b --- /dev/null +++ b/config.go @@ -0,0 +1,141 @@ +//go:generate golangci-lint run ./... +//go:generate gomarkdoc ./pkg/hunter/... +//go:generate gomarkdoc ./pkg/rules/... +//go:generate gomarkdoc ./pkg/format/... +package pillager + +import ( + "errors" + "os" + "runtime" + + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" + + "github.com/brittonhayes/pillager/internal/validate" + "github.com/brittonhayes/pillager/pkg/format" + "github.com/brittonhayes/pillager/pkg/rules" + "github.com/spf13/afero" + gitleaks "github.com/zricethezav/gitleaks/v7/config" +) + +// Config takes all of the configurable +// parameters for a Hunter. +type Config struct { + Filesystem afero.Fs + Style format.Style + Gitleaks gitleaks.Config + + ScanPath string + Verbose bool + Debug bool + Workers int + Template string +} + +type ConfigOption func(*Config) + +func NewConfig(opts ...ConfigOption) *Config { + var ( + defaultFS = afero.NewOsFs() + defaultVerbose = false + defaultScanPath = "." + defaultStyle = format.StyleJSON + defaultWorkers = runtime.NumCPU() + defaultGitleaks = rules.NewLoader().Load() + defaultTemplate = "" + defaultLogLevel = zerolog.ErrorLevel + ) + + log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) + zerolog.SetGlobalLevel(defaultLogLevel) + config := &Config{ + ScanPath: defaultScanPath, + Filesystem: defaultFS, + Style: defaultStyle, + Workers: defaultWorkers, + Gitleaks: defaultGitleaks, + Verbose: defaultVerbose, + Template: defaultTemplate, + } + + for _, opt := range opts { + opt(config) + } + + if err := config.validate(); err != nil { + log.Fatal().Err(err).Send() + } + + return config +} + +func WithFS(fs afero.Fs) ConfigOption { + return func(c *Config) { + c.Filesystem = fs + } +} + +func WithScanPath(path string) ConfigOption { + return func(c *Config) { + c.ScanPath = validate.Path(c.Filesystem, c.ScanPath) + } +} + +func WithLogLevel(level string) ConfigOption { + return func(c *Config) { + lvl, err := zerolog.ParseLevel(level) + if err != nil { + log.Fatal().Err(err).Send() + } + zerolog.SetGlobalLevel(lvl) + } +} + +func WithVerbose(verbose bool) ConfigOption { + return func(c *Config) { + c.Verbose = verbose + } +} + +func WithWorkers(count int) ConfigOption { + return func(c *Config) { + c.Workers = count + } +} + +func WithStyle(style format.Style) ConfigOption { + return func(c *Config) { + if c.Template != "" { + c.Style = format.StyleCustom + return + } + + c.Style = style + } +} + +func WithTemplate(template string) ConfigOption { + return func(c *Config) { + c.Style = format.StyleCustom + c.Template = template + } +} + +func WithGitleaksConfig(g gitleaks.Config) ConfigOption { + return func(c *Config) { + c.Gitleaks = g + } +} + +func (c *Config) validate() error { + if c.Filesystem == nil { + return errors.New("missing filesystem in Config") + } + + if c.Gitleaks.Rules == nil { + return errors.New("no gitleaks rules provided") + } + + return nil +} diff --git a/doc.go b/doc.go index 7944fae..947c02b 100644 --- a/doc.go +++ b/doc.go @@ -38,4 +38,4 @@ THE SOFTWARE. // brew tap brittonhayes/homebrew-pillager // brew install pillager // -package main +package pillager diff --git a/go.mod b/go.mod index afcb541..780e309 100644 --- a/go.mod +++ b/go.mod @@ -4,13 +4,15 @@ go 1.17 require ( github.com/BurntSushi/toml v0.4.1 - github.com/ghodss/yaml v1.0.0 - github.com/gookit/color v1.5.0 + github.com/gookit/color v1.4.2 github.com/mitchellh/go-homedir v1.1.0 + github.com/pkg/errors v0.9.1 + github.com/rs/zerolog v1.26.1 github.com/spf13/afero v1.6.0 github.com/spf13/cobra v1.2.1 github.com/spf13/viper v1.9.0 github.com/zricethezav/gitleaks/v7 v7.6.1 + gopkg.in/yaml.v2 v2.4.0 ) require ( @@ -38,12 +40,11 @@ require ( github.com/subosito/gotenv v1.2.0 // indirect github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect - golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect - golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420 // indirect + golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e // indirect + golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf // indirect golang.org/x/text v0.3.6 // indirect gopkg.in/ini.v1 v1.63.2 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index 3967305..2e49880 100644 --- a/go.sum +++ b/go.sum @@ -97,7 +97,6 @@ github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= @@ -185,8 +184,8 @@ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/gookit/color v1.5.0 h1:1Opow3+BWDwqor78DcJkJCIwnkviFi+rrOANki9BUFw= -github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= +github.com/gookit/color v1.4.2 h1:tXy44JFSFkKnELV6WaMo/lLfu/meqITX3iAV52do7lk= +github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hako/durafmt v0.0.0-20191009132224-3f39dc1ed9f4/go.mod h1:5Scbynm8dF1XAPwIwkGPqzkM/shndPm79Jd1003hTjE= @@ -292,6 +291,9 @@ github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSg github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.26.1 h1:/ihwxqH+4z8UxyI70wM1z9yCvkWcfz/a3mj48k/Zngc= +github.com/rs/zerolog v1.26.1/go.mod h1:/wSSJWX7lVrsOwlbyTRSOJvqRlc+WjWlfes+CiJ+tmc= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE= @@ -339,6 +341,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/zricethezav/gitleaks/v7 v7.6.1 h1:SP0loYvBSpy5YjpgC/2fsBEVo4dncks54yEqaesAXZQ= github.com/zricethezav/gitleaks/v7 v7.6.1/go.mod h1:7b5pE0W3dQhdY9+gbgSBEuzjU5wMAepzj2q1HDh8uNo= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= @@ -365,8 +368,9 @@ golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e h1:1SzTfNOXwIS2oWiMF+6qu0OUDKb0dauo6MoDUQyu+yU= +golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -440,8 +444,9 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420 h1:a8jGStKg0XqKDlKqjLrXn0ioF5MH36pT7Z0BRTqLhbk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d h1:20cMwl2fHAzkJMEA+8J4JgqBQcQGzbisXo31MIeenXI= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -529,6 +534,7 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf h1:2ucpDCmfkl8Bd/FsLtiD653Wf96cW37s+iGx93zsu4k= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= @@ -601,6 +607,7 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/images/brand_image.png b/images/brand_image.png deleted file mode 100644 index 42079b3da2524671e1c8a3e4988c618831e7f116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212368 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⁢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

D$N&iPGtHAfK@ipY_Ny)o8#(DA&SkC2-_(l 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 L#+h773Sj>aPtGFs diff --git a/cmd/pillager/hunt.go b/internal/commands/hunt.go similarity index 59% rename from cmd/pillager/hunt.go rename to internal/commands/hunt.go index d631c7e..38e5abd 100644 --- a/cmd/pillager/hunt.go +++ b/internal/commands/hunt.go @@ -4,23 +4,25 @@ package pillager import ( + "os" "runtime" + "github.com/brittonhayes/pillager" + "github.com/brittonhayes/pillager/pkg/format" "github.com/brittonhayes/pillager/pkg/hunter" - "github.com/brittonhayes/pillager/pkg/rules" - "github.com/spf13/afero" "github.com/spf13/cobra" ) var ( verbose bool + level string rulesConfig string - output string + style string templ string workers int ) -// huntCmd represents the hunt command +// huntCmd represents the hunt command. var huntCmd = &cobra.Command{ Use: "hunt [directory]", Short: "Hunt for loot", @@ -51,15 +53,40 @@ var huntCmd = &cobra.Command{ pillager hunt ./example --template "$(cat templates/simple.tmpl)" `, Args: cobra.ExactArgs(1), - RunE: startHunt(), + RunE: func(cmd *cobra.Command, args []string) error { + h, err := hunter.New( + pillager.WithScanPath(args[0]), + pillager.WithWorkers(workers), + pillager.WithVerbose(verbose), + pillager.WithTemplate(templ), + pillager.WithStyle(format.StringToFormat(style)), + pillager.WithLogLevel(level), + ) + if err != nil { + return err + } + + results, err := h.Hunt() + if err != nil { + return err + } + + err = h.Report(os.Stdout, results) + if err != nil { + return err + } + + return nil + }, } func init() { rootCmd.AddCommand(huntCmd) - huntCmd.Flags().IntVarP(&workers, "workers", "w", runtime.NumCPU(), "number of concurrent workers to create") - huntCmd.Flags().BoolVarP(&verbose, "verbose", "v", false, "toggle verbose output") + huntCmd.Flags().IntVarP(&workers, "workers", "w", runtime.NumCPU(), "number of concurrent workers") + huntCmd.Flags().BoolVarP(&verbose, "verbose", "v", false, "enable scanner verbose output") + huntCmd.Flags().StringVarP(&level, "log-level", "l", "error", "set logging level") huntCmd.Flags().StringVarP(&rulesConfig, "rules", "r", "", "path to gitleaks rules.toml config") - huntCmd.Flags().StringVarP(&output, "format", "f", "json", "set output format (json, yaml)") + huntCmd.Flags().StringVarP(&style, "format", "f", "json", "set output format (json, yaml)") huntCmd.Flags().StringVarP( &templ, "template", @@ -68,19 +95,3 @@ func init() { "set go text/template string for output format", ) } - -func startHunt() func(cmd *cobra.Command, args []string) error { - return func(cmd *cobra.Command, args []string) error { - c := hunter.NewConfig( - afero.NewOsFs(), - args[0], - verbose, - rules.Load(rulesConfig), - hunter.StringToFormat(output), - templ, - workers, - ) - h := hunter.NewHunter(c) - return h.Hunt() - } -} diff --git a/cmd/pillager/root.go b/internal/commands/root.go similarity index 93% rename from cmd/pillager/root.go rename to internal/commands/root.go index a772d05..89e67bf 100644 --- a/cmd/pillager/root.go +++ b/internal/commands/root.go @@ -6,13 +6,15 @@ import ( "github.com/gookit/color" "github.com/mitchellh/go-homedir" + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" "github.com/spf13/cobra" "github.com/spf13/viper" ) var cfgFile string -// rootCmd represents the base command when called without any subcommands +// rootCmd represents the base command when called without any subcommands. var rootCmd = &cobra.Command{ Use: "pillager", Short: "Pillage systems for sensitive information", @@ -68,6 +70,7 @@ func initConfig() { // If a config file is found, read it in. if err := viper.ReadInConfig(); err == nil { - fmt.Println("Using config file:", viper.ConfigFileUsed()) + log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) + log.Info().Msgf("Using config file: %q", viper.ConfigFileUsed()) } } diff --git a/cmd/pillager/version.go b/internal/commands/version.go similarity index 100% rename from cmd/pillager/version.go rename to internal/commands/version.go diff --git a/internal/validate/path.go b/internal/validate/path.go index 7de2a5c..df1b680 100644 --- a/internal/validate/path.go +++ b/internal/validate/path.go @@ -1,38 +1,23 @@ package validate import ( - "log" - "os" + "github.com/rs/zerolog/log" "github.com/spf13/afero" ) -var _ Validator = &Validation{} - -type Validation struct{} - -// New creates a new validation -func New() *Validation { - return &Validation{} -} - -type Validator interface { - Path(fs afero.Fs, path string) string -} - // Path checks if a filepath exists and -// returns it if so, otherwise returns a default path -func (v *Validation) Path(fs afero.Fs, path string) string { +// returns it if so, otherwise returns a default path. +func Path(fs afero.Fs, path string) string { ok, err := afero.Exists(fs, path) if err != nil { - log.Printf("ERROR: %s", err.Error()) - os.Exit(1) + log.Fatal().Err(err).Send() } if ok { return path } - log.Fatal("no valid path provided") + log.Fatal().Msg("no valid path provided") return "." } diff --git a/images/brand_image_ice.png b/logo.png similarity index 100% rename from images/brand_image_ice.png rename to logo.png diff --git a/main.go b/main.go deleted file mode 100644 index d68f467..0000000 --- a/main.go +++ /dev/null @@ -1,13 +0,0 @@ -package main - -import ( - "github.com/brittonhayes/pillager/cmd/pillager" -) - -//go:generate golangci-lint run ./... -//go:generate gomarkdoc ./hunter/... -//go:generate gomarkdoc ./rules/... - -func main() { - pillager.Execute() -} diff --git a/pkg/format/README.md b/pkg/format/README.md new file mode 100755 index 0000000..f86e106 --- /dev/null +++ b/pkg/format/README.md @@ -0,0 +1,74 @@ + + +# format + +```go +import "github.com/brittonhayes/pillager/pkg/format" +``` + +## Index + +- [Constants](<#constants>) +- [func RenderTemplate(w io.Writer, tpl string, f scan.Report) error](<#func-rendertemplate>) +- [type Style](<#type-style>) + - [func StringToFormat(s string) Style](<#func-stringtoformat>) + - [func (s Style) String() string](<#func-style-string>) + + +## Constants + +DefaultTemplate is the base template used to format a Finding into the custom output format\. + +```go +const DefaultTemplate = `{{ with . -}} +{{ range .Leaks -}} +Line: {{.LineNumber}} +File: {{ .File }} +Offender: {{ .Offender }} + +{{ end -}}{{- end}}` +``` + +## func [RenderTemplate]() + +```go +func RenderTemplate(w io.Writer, tpl string, f scan.Report) error +``` + +RenderTemplate renders a finding in a custom go template format to the provided writer\. + +## type [Style]() + +```go +type Style int +``` + +```go +const ( + StyleJSON Style = iota + StyleYAML + StyleTable + StyleHTML + StyleHTMLTable + StyleMarkdown + StyleCustom +) +``` + +### func [StringToFormat]() + +```go +func StringToFormat(s string) Style +``` + +StringToFormat takes in a string representation of the preferred output format and returns to enum equivalent\. + +### func \(Style\) [String]() + +```go +func (s Style) String() string +``` + + + +Generated by [gomarkdoc]() diff --git a/pkg/format/format.go b/pkg/format/format.go new file mode 100644 index 0000000..1afbafa --- /dev/null +++ b/pkg/format/format.go @@ -0,0 +1,40 @@ +package format + +import "strings" + +const ( + StyleJSON Style = iota + StyleYAML + StyleTable + StyleHTML + StyleHTMLTable + StyleMarkdown + StyleCustom +) + +type Style int + +func (s Style) String() string { + return [...]string{"json", "yaml", "table", "html", "html-table", "markdown", "custom"}[s] +} + +// StringToFormat takes in a string representation of the preferred +// output format and returns to enum equivalent. +func StringToFormat(s string) Style { + switch strings.ToLower(s) { + case "yaml": + return StyleYAML + case "table": + return StyleTable + case "html": + return StyleHTML + case "html-table": + return StyleHTMLTable + case "markdown": + return StyleMarkdown + case "custom": + return StyleCustom + default: + return StyleJSON + } +} diff --git a/pkg/hunter/template.go b/pkg/format/template.go similarity index 51% rename from pkg/hunter/template.go rename to pkg/format/template.go index 29f8a0d..7c46ffa 100644 --- a/pkg/hunter/template.go +++ b/pkg/format/template.go @@ -1,15 +1,15 @@ -package hunter +package format import ( "html/template" "io" - "log" + "github.com/pkg/errors" "github.com/zricethezav/gitleaks/v7/scan" ) // DefaultTemplate is the base template used to -// format a Finding into the custom output format +// format a Finding into the custom output format. const DefaultTemplate = `{{ with . -}} {{ range .Leaks -}} Line: {{.LineNumber}} @@ -18,16 +18,18 @@ Offender: {{ .Offender }} {{ end -}}{{- end}}` -// RenderTemplate renders a Hound finding in a -// custom go template format to the provided writer -func RenderTemplate(w io.Writer, tpl string, f scan.Report) { +// RenderTemplate renders a finding in a +// custom go template format to the provided writer. +func RenderTemplate(w io.Writer, tpl string, f scan.Report) error { t := template.New("custom") t, err := t.Parse(tpl) if err != nil { - log.Fatal("failed to parse template, ", err.Error()) + return errors.Wrap(err, "failed to parse template") } if err := t.Execute(w, f); err != nil { - log.Fatal("Failed to use custom template, ", err.Error()) + return errors.Wrap(err, "Failed to use custom template") } + + return nil } diff --git a/pkg/hunter/README.md b/pkg/hunter/README.md index 7af0015..c6a7998 100644 --- a/pkg/hunter/README.md +++ b/pkg/hunter/README.md @@ -3,339 +3,52 @@ # hunter ```go -import "github.com/brittonhayes/pillager/hunter" +import "github.com/brittonhayes/pillager/pkg/hunter" ``` Package hunter contains the types\, methods\, and interfaces for the file hunting portion of pillager ## Index -- [Constants](<#constants>) -- [func RenderTemplate(w io.Writer, tpl string, f scan.Report)](<#func-rendertemplate>) -- [type Config](<#type-config>) - - [func NewConfig(fs afero.Fs, path string, verbose bool, gitleaks gitleaks.Config, format Format, template string, workers int) *Config](<#func-newconfig>) - - [func (c *Config) Default() *Config](<#func-config-default>) - - [func (c *Config) Validate() (err error)](<#func-config-validate>) -- [type Configer](<#type-configer>) -- [type Format](<#type-format>) - - [func StringToFormat(s string) Format](<#func-stringtoformat>) - - [func (f Format) String() string](<#func-format-string>) -- [type Hound](<#type-hound>) - - [func NewHound(c *Config) *Hound](<#func-newhound>) - - [func (h *Hound) Howl(findings scan.Report)](<#func-hound-howl>) -- [type Hounder](<#type-hounder>) - [type Hunter](<#type-hunter>) - - [func NewHunter(c *Config) *Hunter](<#func-newhunter>) - - [func (h Hunter) Hunt() error](<#func-hunter-hunt>) -- [type Hunting](<#type-hunting>) + - [func New(opts ...pillager.ConfigOption) (*Hunter, error)](<#func-new>) + - [func (h *Hunter) Hunt() (scan.Report, error)](<#func-hunter-hunt>) + - [func (h *Hunter) Report(w io.Writer, results scan.Report) error](<#func-hunter-report>) -## Constants +## type [Hunter]() -DefaultTemplate is the base template used to format a Finding into the custom output format - -```go -const DefaultTemplate = `{{ with . -}} -{{ range .Leaks -}}Line: {{.LineNumber}} -File: {{ .File }} -Offender: {{ .Offender }} - -{{end}} -{{- end}}` -``` - -## func [RenderTemplate]() - -```go -func RenderTemplate(w io.Writer, tpl string, f scan.Report) -``` - -RenderTemplate renders a Hound finding in a custom go template format to the provided writer - -## type [Config]() - -Config takes all of the configurable parameters for a Hunter - -```go -type Config struct { - System afero.Fs - BasePath string - Verbose bool - Workers int - Gitleaks gitleaks.Config - Format Format - Template string -} -``` - -### func [NewConfig]() - -```go -func NewConfig(fs afero.Fs, path string, verbose bool, gitleaks gitleaks.Config, format Format, template string, workers int) *Config -``` - -NewConfig generates a new config for the Hunter - -### func \(\*Config\) [Default]() - -```go -func (c *Config) Default() *Config -``` - -Default loads the default configuration for the Hunter - -### func \(\*Config\) [Validate]() - -```go -func (c *Config) Validate() (err error) -``` - -## type [Configer]() - -```go -type Configer interface { - Default() *Config - Validate() (err error) -} -``` - -## type [Format]() - -```go -type Format int -``` - -```go -const ( - JSONFormat Format = iota + 1 - YAMLFormat - CustomFormat -) -``` - -### func [StringToFormat]() - -```go -func StringToFormat(s string) Format -``` - -StringToFormat takes in a string representation of the preferred output format and returns to enum equivalent - -### func \(Format\) [String]() - -```go -func (f Format) String() string -``` - -## type [Hound]() - -A Hound performs the file inspection and returns the results - -```go -type Hound struct { - Config *Config - Findings scan.Report `json:"findings"` -} -``` - -### func [NewHound]() - -```go -func NewHound(c *Config) *Hound -``` - -NewHound creates an instance of the Hound type - -### func \(\*Hound\) [Howl]() - -```go -func (h *Hound) Howl(findings scan.Report) -``` - -Howl prints out the Findings from the Hound in the preferred output format - -
Example -

- -Here is an example of utilizing the Howl function on a slice of findings\. The Howl method is the final method in the hunting process\. It takes whatever has been found and outputs it for the user\. - -```go -{ - h := NewHound(&Config{ - System: afero.NewMemMapFs(), - Gitleaks: rules.Load(""), - Format: JSONFormat, - }) - findings := scan.Report{ - Leaks: []scan.Leak{ - {Line: "person@email.com", LineNumber: 16, Offender: "person@email.com", Rule: "Email Addresses"}, - }, - } - - h.Howl(findings) -} -``` - -

-
- -## type [Hounder]() - -The Hounder interface defines the available methods for instances of the Hound type - -```go -type Hounder interface { - Howl(findings scan.Report) -} -``` - -## type [Hunter]() - -Hunter holds the required fields to implement the Hunting interface and utilize the hunter package +Hunter is the secret scanner\. ```go type Hunter struct { - Config *Config - Hound *Hound + *pillager.Config } ``` -### func [NewHunter]() +### func [New]() ```go -func NewHunter(c *Config) *Hunter +func New(opts ...pillager.ConfigOption) (*Hunter, error) ``` -NewHunter creates an instance of the Hunter type +New creates an instance of the Hunter\. -### func \(Hunter\) [Hunt]() +### func \(\*Hunter\) [Hunt]() ```go -func (h Hunter) Hunt() error +func (h *Hunter) Hunt() (scan.Report, error) ``` -Hunt walks over the filesystem at the configured path\, looking for sensitive information +Hunt walks over the filesystem at the configured path\, looking for sensitive information\. -
Example -

- -This method also accepts custom output formats using go template/html\. So if you don't like yaml or json\, you can format to your heart's content\. +### func \(\*Hunter\) [Report]() ```go -{ - fs := afero.NewMemMapFs() - f, err := fs.Create("example.yaml") - if err != nil { - panic(err) - } - defer f.Close() - - _, err = f.Write([]byte(`https://github.com/brittonhayes/pillager`)) - if err != nil { - panic(err) - } - - config := NewConfig(fs, "./", true, rules.Load(""), CustomFormat, DefaultTemplate, 5) - h := NewHunter(config) - _ = h.Hunt() -} +func (h *Hunter) Report(w io.Writer, results scan.Report) error ``` -

-
- -
Example -

- -This is an example of how to run a scan on a single file to look for email addresses\. We're using an in\-memory file system for simplicity\, but this supports using an actual file system as well\. - -```go -{ - fs := afero.NewMemMapFs() - f, err := fs.Create("example.toml") - if err != nil { - panic(err) - } - defer f.Close() - - _, err = f.Write([]byte(`example@email.com`)) - if err != nil { - panic(err) - } - - config := NewConfig(fs, "./", true, rules.Load(""), StringToFormat("yaml"), DefaultTemplate, 5) - h := NewHunter(config) - _ = h.Hunt() -} -``` - -

-
- -
Example -

- -This method accepts json output format as well - -```go -{ - fs := afero.NewMemMapFs() - f, err := fs.Create("fake.json") - if err != nil { - panic(err) - } - defer f.Close() - _, err = f.Write([]byte(`git@github.com:brittonhayes/pillager.git`)) - if err != nil { - panic(err) - } - - config := NewConfig(fs, ".", true, rules.Load(""), JSONFormat, DefaultTemplate, 5) - h := NewHunter(config) - _ = h.Hunt() -} -``` - -

-
- -
Example -

- -Hunter will also look personally identifiable info in TOML - -```go -{ - fs := afero.NewMemMapFs() - f, err := fs.Create("fake.toml") - if err != nil { - panic(err) - } - defer f.Close() - _, err = f.Write([]byte(`fakeperson@example.com`)) - if err != nil { - panic(err) - } - - config := NewConfig(fs, ".", true, rules.Load(""), JSONFormat, DefaultTemplate, 5) - - h := NewHunter(config) - _ = h.Hunt() -} -``` - -

-
- -## type [Hunting]() - -Hunting is the primary API interface for the hunter package - -```go -type Hunting interface { - Hunt() error -} -``` +Report prints out the Findings in the preferred output format\. diff --git a/pkg/hunter/config.go b/pkg/hunter/config.go deleted file mode 100644 index 0284d5f..0000000 --- a/pkg/hunter/config.go +++ /dev/null @@ -1,68 +0,0 @@ -package hunter - -import ( - "fmt" - - "github.com/brittonhayes/pillager/internal/validate" - "github.com/brittonhayes/pillager/pkg/rules" - "github.com/spf13/afero" - gitleaks "github.com/zricethezav/gitleaks/v7/config" -) - -var _ Configer = &Config{} - -// Config takes all of the configurable -// parameters for a Hunter -type Config struct { - System afero.Fs - BasePath string - Verbose bool - Workers int - Gitleaks gitleaks.Config - Format Format - Template string -} - -type Configer interface { - Default() *Config - Validate() (err error) -} - -// NewConfig generates a new config for the Hunter -func NewConfig(fs afero.Fs, path string, verbose bool, gitleaks gitleaks.Config, format Format, template string, workers int) *Config { - p := validate.New().Path(fs, path) - return &Config{ - System: fs, - BasePath: p, - Verbose: verbose, - Gitleaks: gitleaks, - Format: format, - Template: template, - Workers: workers, - } -} - -// Default loads the default configuration -// for the Hunter -func (c *Config) Default() *Config { - fs := afero.NewOsFs() - v := validate.New() - return &Config{ - System: fs, - BasePath: v.Path(fs, "."), - Verbose: false, - Gitleaks: rules.Load(""), - Format: JSONFormat, - } -} - -func (c *Config) Validate() (err error) { - if c.System == nil { - err = fmt.Errorf("missing filesystem in Hunter Config") - } - - if c.Gitleaks.Rules == nil { - err = fmt.Errorf("no gitleaks config provided") - } - return -} diff --git a/pkg/hunter/format.go b/pkg/hunter/format.go deleted file mode 100644 index a0e839d..0000000 --- a/pkg/hunter/format.go +++ /dev/null @@ -1,40 +0,0 @@ -package hunter - -import "strings" - -const ( - JSONFormat Format = iota + 1 - YAMLFormat - TableFormat - HTMLFormat - HTMLTableFormat - MarkdownFormat - CustomFormat -) - -type Format int - -func (f Format) String() string { - return [...]string{"json", "yaml", "table", "html", "html-table", "markdown", "custom"}[f] -} - -// StringToFormat takes in a string representation of the preferred -// output format and returns to enum equivalent -func StringToFormat(s string) Format { - switch strings.ToLower(s) { - case "yaml": - return YAMLFormat - case "table": - return TableFormat - case "html": - return HTMLFormat - case "html-table": - return HTMLTableFormat - case "markdown": - return MarkdownFormat - case "custom": - return CustomFormat - default: - return JSONFormat - } -} diff --git a/pkg/hunter/hound.go b/pkg/hunter/hound.go deleted file mode 100644 index 04ad31f..0000000 --- a/pkg/hunter/hound.go +++ /dev/null @@ -1,73 +0,0 @@ -package hunter - -import ( - "encoding/json" - "fmt" - "log" - "os" - - "github.com/brittonhayes/pillager/templates" - "github.com/ghodss/yaml" - "github.com/zricethezav/gitleaks/v7/scan" -) - -var _ Hounder = &Hound{} - -// The Hounder interface defines the available methods -// for instances of the Hound type -type Hounder interface { - Howl(findings scan.Report) -} - -// A Hound performs the file inspection and returns the results -type Hound struct { - Config *Config - Findings scan.Report `json:"findings"` -} - -// NewHound creates an instance of the Hound type -func NewHound(c *Config) *Hound { - if c == nil { - var config Config - return &Hound{config.Default(), scan.Report{}} - } - if c.System == nil { - log.Fatal("Missing filesystem in Hunter Config") - } - - return &Hound{c, scan.Report{}} -} - -// Howl prints out the Findings from the Hound in the preferred output format -func (h *Hound) Howl(findings scan.Report) { - if h.Config.Template != "" { - h.Config.Format = CustomFormat - } - switch h.Config.Format { - case JSONFormat: - b, err := json.Marshal(&findings.Leaks) - if err != nil { - log.Fatal("Failed to unmarshal findings") - } - fmt.Println(string(b)) - case YAMLFormat: - b, err := yaml.Marshal(&findings.Leaks) - if err != nil { - fmt.Printf("err: %v\n", err) - return - } - fmt.Println(string(b)) - case HTMLFormat: - RenderTemplate(os.Stdout, templates.HTML, findings) - case HTMLTableFormat: - RenderTemplate(os.Stdout, templates.HTMLTable, findings) - case MarkdownFormat: - RenderTemplate(os.Stdout, templates.Markdown, findings) - case TableFormat: - RenderTemplate(os.Stdout, templates.Table, findings) - case CustomFormat: - RenderTemplate(os.Stdout, h.Config.Template, findings) - default: - RenderTemplate(os.Stdout, templates.Simple, findings) - } -} diff --git a/pkg/hunter/hound_test.go b/pkg/hunter/hound_test.go deleted file mode 100644 index 725f619..0000000 --- a/pkg/hunter/hound_test.go +++ /dev/null @@ -1,26 +0,0 @@ -package hunter - -import ( - "github.com/brittonhayes/pillager/pkg/rules" - "github.com/spf13/afero" - "github.com/zricethezav/gitleaks/v7/scan" -) - -// Here is an example of utilizing the Howl function -// on a slice of findings. The Howl method is the final -// method in the hunting process. It takes whatever -// has been found and outputs it for the user. -func ExampleHound_Howl_json() { - h := NewHound(&Config{ - System: afero.NewMemMapFs(), - Gitleaks: rules.Load(""), - Format: JSONFormat, - }) - findings := scan.Report{ - Leaks: []scan.Leak{ - {Line: "person@email.com", LineNumber: 16, Offender: "person@email.com", Rule: "Email Addresses"}, - }, - } - - h.Howl(findings) -} diff --git a/pkg/hunter/hunter.go b/pkg/hunter/hunter.go index 4e8673a..6d3606e 100644 --- a/pkg/hunter/hunter.go +++ b/pkg/hunter/hunter.go @@ -1,62 +1,82 @@ package hunter import ( + "encoding/json" "fmt" - "os" + "io" + "github.com/brittonhayes/pillager" + "github.com/brittonhayes/pillager/pkg/format" + "github.com/brittonhayes/pillager/templates" + "github.com/rs/zerolog/log" "github.com/zricethezav/gitleaks/v7/config" "github.com/zricethezav/gitleaks/v7/options" "github.com/zricethezav/gitleaks/v7/scan" + "gopkg.in/yaml.v2" ) -// Hunter holds the required fields to implement -// the Hunting interface and utilize the hunter package +// Hunter is the secret scanner. type Hunter struct { - Config *Config - Hound *Hound + *pillager.Config } -var _ Hunting = Hunter{} - -// Hunting is the primary API interface for the hunter package -type Hunting interface { - Hunt() error +// New creates an instance of the Hunter. +func New(opts ...pillager.ConfigOption) (*Hunter, error) { + return &Hunter{ + Config: pillager.NewConfig(opts...), + }, nil } -// NewHunter creates an instance of the Hunter type -func NewHunter(c *Config) *Hunter { - if c == nil { - var conf Config - return &Hunter{conf.Default(), NewHound(conf.Default())} - } +// Hunt walks over the filesystem at the configured path, looking for sensitive information. +func (h *Hunter) Hunt() (scan.Report, error) { + opt := options.Options{Path: h.ScanPath, Verbose: h.Verbose, Threads: h.Workers} + conf := config.Config{Allowlist: h.Gitleaks.Allowlist, Rules: h.Gitleaks.Rules} + + scanner := scan.NewNoGitScanner(opt, conf) + log.Debug().Str("style", h.Style.String()).Bool("verbose", h.Verbose).Msg("scanner created") - err := c.Validate() + report, err := scanner.Scan() if err != nil { - fmt.Println(err.Error()) - os.Exit(1) + return scan.Report{}, err } - return &Hunter{c, NewHound(c)} + return report, nil } -// Hunt walks over the filesystem at the configured path, looking for sensitive information -func (h Hunter) Hunt() error { - h.Hound = NewHound(h.Config) - if _, err := os.Stat(h.Config.BasePath); os.IsNotExist(err) { - return fmt.Errorf("config file does not exist") - } +// Report prints out the Findings in the preferred output format. +func (h *Hunter) Report(w io.Writer, results scan.Report) error { + switch h.Style { + case format.StyleJSON: + encoder := json.NewEncoder(w) + err := encoder.Encode(&results.Leaks) + if err != nil { + return err + } - opt := options.Options{Path: h.Config.BasePath, Verbose: h.Config.Verbose, Threads: h.Config.Workers} - conf := config.Config{Allowlist: h.Config.Gitleaks.Allowlist, Rules: h.Config.Gitleaks.Rules} + case format.StyleYAML: + b, err := yaml.Marshal(&results.Leaks) + if err != nil { + return err + } + fmt.Fprintf(w, "%s\n", string(b)) - scanner := scan.NewNoGitScanner(opt, conf) - report, err := scanner.Scan() - if err != nil { - return err - } + case format.StyleHTML: + return format.RenderTemplate(w, templates.HTML, results) + + case format.StyleHTMLTable: + return format.RenderTemplate(w, templates.HTMLTable, results) + + case format.StyleMarkdown: + return format.RenderTemplate(w, templates.Markdown, results) + + case format.StyleTable: + return format.RenderTemplate(w, templates.Table, results) + + case format.StyleCustom: + return format.RenderTemplate(w, h.Template, results) - if !opt.Verbose { - h.Hound.Howl(report) + default: + return format.RenderTemplate(w, templates.Simple, results) } return nil diff --git a/pkg/hunter/hunter_test.go b/pkg/hunter/hunter_test.go deleted file mode 100644 index a70b865..0000000 --- a/pkg/hunter/hunter_test.go +++ /dev/null @@ -1,86 +0,0 @@ -package hunter - -import ( - "github.com/brittonhayes/pillager/pkg/rules" - "github.com/spf13/afero" -) - -// This is an example of how to run a scan on a single file to look for -// email addresses. We're using an in-memory file system for simplicity, -// but this supports using an actual file system as well. -func ExampleHunter_Hunt_email() { - fs := afero.NewMemMapFs() - f, err := fs.Create("example.toml") - if err != nil { - panic(err) - } - defer f.Close() - - _, err = f.Write([]byte(`example@email.com`)) - if err != nil { - panic(err) - } - - config := NewConfig(fs, "./", true, rules.Load(""), StringToFormat("yaml"), DefaultTemplate, 5) - h := NewHunter(config) - _ = h.Hunt() -} - -// This method also accepts custom output formats using -// go template/html. So if you don't like yaml or json, -// you can format to your heart's content. -func ExampleHunter_Hunt_custom_output() { - fs := afero.NewMemMapFs() - f, err := fs.Create("example.yaml") - if err != nil { - panic(err) - } - defer f.Close() - - _, err = f.Write([]byte(`https://github.com/brittonhayes/pillager`)) - if err != nil { - panic(err) - } - - config := NewConfig(fs, "./", true, rules.Load(""), CustomFormat, DefaultTemplate, 5) - h := NewHunter(config) - _ = h.Hunt() -} - -// This method accepts json output format -// as well -func ExampleHunter_Hunt_json() { - fs := afero.NewMemMapFs() - f, err := fs.Create("fake.json") - if err != nil { - panic(err) - } - defer f.Close() - _, err = f.Write([]byte(`git@github.com:brittonhayes/pillager.git`)) - if err != nil { - panic(err) - } - - config := NewConfig(fs, ".", true, rules.Load(""), JSONFormat, DefaultTemplate, 5) - h := NewHunter(config) - _ = h.Hunt() -} - -// Hunter will also look personally identifiable info in TOML -func ExampleHunter_Hunt_toml() { - fs := afero.NewMemMapFs() - f, err := fs.Create("fake.toml") - if err != nil { - panic(err) - } - defer f.Close() - _, err = f.Write([]byte(`fakeperson@example.com`)) - if err != nil { - panic(err) - } - - config := NewConfig(fs, ".", true, rules.Load(""), JSONFormat, DefaultTemplate, 5) - - h := NewHunter(config) - _ = h.Hunt() -} diff --git a/pkg/rules/README.md b/pkg/rules/README.md index c025c2e..e3239dc 100755 --- a/pkg/rules/README.md +++ b/pkg/rules/README.md @@ -3,56 +3,86 @@ # rules ```go -import "github.com/brittonhayes/pillager/rules" +import "github.com/brittonhayes/pillager/pkg/rules" ``` ## Index - [Constants](<#constants>) -- [func Load(filepath string) gitleaks.Config](<#func-load>) +- [Variables](<#variables>) +- [type Loader](<#type-loader>) + - [func NewLoader(opts ...LoaderOption) *Loader](<#func-newloader>) + - [func (l *Loader) Load() gitleaks.Config](<#func-loader-load>) + - [func (l *Loader) WithStrict() LoaderOption](<#func-loader-withstrict>) +- [type LoaderOption](<#type-loaderoption>) + - [func FromFile(file string) LoaderOption](<#func-fromfile>) ## Constants -DefaultConfig is the default ruleset for pillager's hunting parameters\. This can be overridden by providing a rules\.toml file as an argument\. - -```go -const DefaultConfig = ` -title = "pillager config" -[[rules]] - description = "AWS Access Key" - regex = '''(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}''' - tags = ["key", "AWS"] -[[rules]] - description = "AWS Secret Key" - regex = '''(?i)aws(.{0,20})?(?-i)['\"][0-9a-zA-Z\/+]{40}['\"]''' - tags = ["key", "AWS"] -[[rules]] - description = "Github" - regex = '''(?i)github(.{0,20})?(?-i)[0-9a-zA-Z]{35,40}''' - tags = ["key", "Github"] -[[rules]] - description = "Slack" - regex = '''xox[baprs]-([0-9a-zA-Z]{10,48})?''' - tags = ["key", "Slack"] -[[rules]] - description = "Asymmetric Private Key" - regex = '''-----BEGIN ((EC|PGP|DSA|RSA|OPENSSH) )?PRIVATE KEY( BLOCK)?-----''' - tags = ["key", "AsymmetricPrivateKey"] -[[rules]] - description = "Slack Webhook" - regex = '''https://hooks.slack.com/services/T[a-zA-Z0-9_]{8}/B[a-zA-Z0-9_]{8}/[a-zA-Z0-9_]{24}''' - tags = ["key", "slack"] -` -``` - -## func [Load]() - -```go -func Load(filepath string) gitleaks.Config -``` - -Load loads the config file into an array of gitleaks rules +```go +const ( + ErrReadConfig = "Failed to read config" +) +``` + +## Variables + +```go +var ( + //go:embed rules_simple.toml + RulesDefault string + + //go:embed rules_strict.toml + RulesStrict string +) +``` + +## type [Loader]() + +```go +type Loader struct { + // contains filtered or unexported fields +} +``` + +### func [NewLoader]() + +```go +func NewLoader(opts ...LoaderOption) *Loader +``` + +NewLoader creates a configuration loader\. + +### func \(\*Loader\) [Load]() + +```go +func (l *Loader) Load() gitleaks.Config +``` + +Load parses the gitleaks configuration\. + +### func \(\*Loader\) [WithStrict]() + +```go +func (l *Loader) WithStrict() LoaderOption +``` + +WithStrict enables more strict pillager scanning\. + +## type [LoaderOption]() + +```go +type LoaderOption func(*Loader) +``` + +### func [FromFile]() + +```go +func FromFile(file string) LoaderOption +``` + +FromFile decodes the configuration from a local file\. diff --git a/pkg/rules/rules.go b/pkg/rules/rules.go index 1ead21f..f676c6c 100644 --- a/pkg/rules/rules.go +++ b/pkg/rules/rules.go @@ -1,32 +1,74 @@ package rules import ( - "log" + _ "embed" "github.com/BurntSushi/toml" + "github.com/rs/zerolog/log" gitleaks "github.com/zricethezav/gitleaks/v7/config" ) -// Load loads the config file into an array of gitleaks rules -func Load(filepath string) gitleaks.Config { - var ( - config gitleaks.TomlLoader - err error - ) - - if filepath != "" { - _, err = toml.DecodeFile(filepath, &config) - } else { - _, err = toml.Decode(DefaultConfig, &config) - } +const ( + ErrReadConfig = "Failed to read config" +) + +var ( + //go:embed rules_simple.toml + RulesDefault string + + //go:embed rules_strict.toml + RulesStrict string +) + +type Loader struct { + loader gitleaks.TomlLoader +} + +type LoaderOption func(*Loader) + +// NewLoader creates a configuration +// loader. +func NewLoader(opts ...LoaderOption) *Loader { + var loader Loader + _, err := toml.Decode(RulesDefault, &loader.loader) if err != nil { - log.Fatal("Failed to read in config ", err.Error()) + log.Fatal().Err(err).Msg(ErrReadConfig) } - c, err := config.Parse() + for _, opt := range opts { + opt(&loader) + } + + return &loader +} + +// WithStrict enables more strict pillager scanning. +func (l *Loader) WithStrict() LoaderOption { + return func(l *Loader) { + _, err := toml.Decode(RulesStrict, &l.loader) + if err != nil { + log.Fatal().Err(err).Msg(ErrReadConfig) + } + } +} + +// Load parses the gitleaks configuration. +func (l *Loader) Load() gitleaks.Config { + config, err := l.loader.Parse() if err != nil { - log.Fatal("Failed to parse in toml config") + log.Fatal().Err(err).Msg(ErrReadConfig) } - return c + return config +} + +// FromFile decodes the configuration +// from a local file. +func FromFile(file string) LoaderOption { + return func(l *Loader) { + _, err := toml.DecodeFile(file, &l.loader) + if err != nil { + log.Fatal().Err(err).Msg(ErrReadConfig) + } + } } diff --git a/pkg/rules/default.go b/pkg/rules/rules_simple.toml similarity index 74% rename from pkg/rules/default.go rename to pkg/rules/rules_simple.toml index e57d833..f0fc62d 100644 --- a/pkg/rules/default.go +++ b/pkg/rules/rules_simple.toml @@ -1,8 +1,3 @@ -package rules - -// DefaultConfig is the default ruleset for pillager's hunting parameters. -// This can be overridden by providing a rules.toml file as an argument. -const DefaultConfig = ` title = "pillager config" [[rules]] description = "AWS Access Key" @@ -31,7 +26,4 @@ title = "pillager config" [allowlist] description = "Allowlisted files" - files = ['''^\.?gitleaks.toml$''', - '''(.*?)(png|jpg|gif|doc|docx|pdf|bin|xls|pyc|zip)$''', - '''(go.mod|go.sum)$'''] -` + files = ['''^\.?gitleaks.toml$''', '''(.*?)(png|jpg|gif|doc|docx|pdf|bin|xls|pyc|zip)$''', '''(go.mod|go.sum)$'''] diff --git a/pkg/rules/rules_strict.toml b/pkg/rules/rules_strict.toml new file mode 100644 index 0000000..32d4a0c --- /dev/null +++ b/pkg/rules/rules_strict.toml @@ -0,0 +1,226 @@ +title = "Global gitleaks config" + +[allowlist] + description = "Allowlisted files" + files = ['''^\.?gitleaks.toml$''', # Ignoring this file + '''(.*?)(jpg|gif|doc|pdf|bin)$''', # Ignoring common binaries + '''^(.*?)_test\.go$''', # Ignoring Go test files + '''^(.*?)\.(spec|test)\.(j|t)s$''', # Ignoring JavaScript and TypeScript test files + '''(go.mod|go.sum)$''', # Ignoring Go manifests + '''vendor\.json''', + '''Gopkg\.(lock|toml)''', + '''package-lock\.json''', # Ignoring Node/JS manifests + '''package\.json''', + '''composer\.json''', + '''composer\.lock''', #Ignoring PHP manifests + '''yarn\.lock'''] + paths = ["node_modules", # Ignoring Node dependencies + "vendor", # Ignoring Go dependencies + "test", # Ignoring test directories + "tests"] + regexes = ['''test'''] # Ignoring lines with test + + +[[rules]] + description = "AWS Secret Key" + regex = '''(?i)aws(.{0,20})?(?-i)[0-9a-zA-Z\/+]{40}''' + tags = ["key", "AWS"] + +[[rules]] + description = "AWS MWS key" + regex = '''amzn\.mws\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}''' + tags = ["key", "AWS", "MWS"] + +[[rules]] + description = "Facebook Secret Key" + regex = '''(?i)(facebook|fb)(.{0,20})?(?-i)[0-9a-f]{32}''' + tags = ["key", "Facebook"] + +[[rules]] + description = "Facebook Client ID" + regex = '''(?i)(facebook|fb)(.{0,20})?[0-9]{13,17}''' + tags = ["key", "Facebook"] + +[[rules]] + description = "Twitter Secret Key" + regex = '''(?i)twitter(.{0,20})?[0-9a-z]{35,44}''' + tags = ["key", "Twitter"] + +[[rules]] + description = "Twitter Client ID" + regex = '''(?i)twitter(.{0,20})?[0-9a-z]{18,25}''' + tags = ["client", "Twitter"] + +[[rules]] + description = "Github" + regex = '''(?i)github(.{0,20})?(?-i)[0-9a-zA-Z]{35,40}''' + tags = ["key", "Github"] + +[[rules]] + description = "LinkedIn Client ID" + regex = '''(?i)linkedin(.{0,20})?(?-i)[0-9a-z]{12}''' + tags = ["client", "LinkedIn"] + +[[rules]] + description = "LinkedIn Secret Key" + regex = '''(?i)linkedin(.{0,20})?[0-9a-z]{16}''' + tags = ["secret", "LinkedIn"] + +[[rules]] + description = "Slack" + regex = '''xox[baprs]-([0-9a-zA-Z]{10,48})?''' + tags = ["key", "Slack"] + +[[rules]] + description = "Asymmetric Private Key" + regex = '''-----BEGIN ((EC|PGP|DSA|RSA|OPENSSH) )?PRIVATE KEY( BLOCK)?-----''' + tags = ["key", "AsymmetricPrivateKey"] + +[[rules]] + description = "Google API key" + regex = '''AIza[0-9A-Za-z\\-_]{35}''' + tags = ["key", "Google"] + +[[rules]] + description = "Google (GCP) Service Account" + regex = '''"type": "service_account"''' + tags = ["key", "Google"] + +[[rules]] + description = "Heroku API key" + regex = '''(?i)heroku(.{0,20})?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}''' + tags = ["key", "Heroku"] + +[[rules]] + description = "MailChimp API key" + regex = '''(?i)(mailchimp|mc)(.{0,20})?[0-9a-f]{32}-us[0-9]{1,2}''' + tags = ["key", "Mailchimp"] + +[[rules]] + description = "Mailgun API key" + regex = '''((?i)(mailgun|mg)(.{0,20})?)?key-[0-9a-z]{32}''' + tags = ["key", "Mailgun"] + +[[rules]] + description = "PayPal Braintree access token" + regex = '''access_token\$production\$[0-9a-z]{16}\$[0-9a-f]{32}''' + tags = ["key", "Paypal"] + +[[rules]] + description = "Picatic API key" + regex = '''sk_live_[0-9a-z]{32}''' + tags = ["key", "Picatic"] + +[[rules]] + description = "SendGrid API Key" + regex = '''SG\.[\w_]{16,32}\.[\w_]{16,64}''' + tags = ["key", "SendGrid"] + +[[rules]] + description = "Slack Webhook" + regex = '''https://hooks.slack.com/services/T[a-zA-Z0-9_]{8}/B[a-zA-Z0-9_]{8}/[a-zA-Z0-9_]{24}''' + tags = ["key", "slack"] + +[[rules]] + description = "Stripe API key" + regex = '''(?i)stripe(.{0,20})?[sr]k_live_[0-9a-zA-Z]{24}''' + tags = ["key", "Stripe"] + +[[rules]] + description = "Square access token" + regex = '''sq0atp-[0-9A-Za-z\-_]{22}''' + tags = ["key", "square"] + +[[rules]] + description = "Square OAuth secret" + regex = '''sq0csp-[0-9A-Za-z\\-_]{43}''' + tags = ["key", "square"] + +[[rules]] + description = "Twilio API key" + regex = '''(?i)twilio(.{0,20})?SK[0-9a-f]{32}''' + tags = ["key", "twilio"] + +# The following rules check for credentials assigned to variables that its value has an entropy of more than 3 bits. +# To achieve this there's a regexp for each language. The regexp checks for a variable with a suspicious name followed +# by a value assignation (for example, := in Go, = in JS, etc.). Then, looks for a group of non-space characters enclosed +# between quotes. If that group has an entropy higher than 3 bits the rule will trigger. + +[[rules]] + description = "Hardcoded credentials in Go files" + file = '''^(.*?)\.go$''' + regex = '''(?i)(?:secret|key|signature|password|pwd|pass|token)(?:\w|\s*?)(?:=|:=)(?:\s*?)[\"'`](.{4,120}?)[\"'`]''' + tags = ["credentials", "hardcoded", "go"] + [[rules.Entropies]] + Min = "3" + Max = "7" + Group = "1" + +[[rules]] + description = "Hardcoded credentials in JavaScript or TypeScript files" + file = '''^(.*?)\.(?:j|t)s$''' + regex = '''(?i)(?:secret|key|signature|password|pwd|pass|token)(?:\w|\s*?)(?:=){1}(?:\s{0,10})[\"'`](.*?)[\"'`]''' + tags = ["credentials", "hardcoded", "js"] + [[rules.Entropies]] + Min = "3" + Max = "7" + Group = "1" + +[[rules]] + description = "Hardcoded credentials in PHP files" + file = '''^(.*?)\.php$''' + regex = '''(?i)(?:secret|key|signature|password|pwd|pass|token)(?:.{0,20})(?:=){1}(?:.{0,10})[\"'`](.{4,120})[\"'`]''' + tags = ["credentials", "hardcoded", "php"] + [[rules.Entropies]] + Min = "3" + Max = "7" + Group = "1" + +[[rules]] + description = "Hardcoded credentials in YAML files as quoted strings" + file = '''^(.*?)\.y(a|)ml$''' + regex = '''(?i)(?:secret|key|signature|password|pwd|pass|token)(?:.{0,20})(?::){1}(?:\s{0,10})(?:[\"'](.{4,120})[\"'])''' + tags = ["credentials", "hardcoded", "yaml"] + [[rules.Entropies]] + Min = "3" + Max = "7" + Group = "1" + [rules.allowlist] + description = "Skip YAML Serverless variables, grabbed and concated values, encrypted secrets, and values with jinja2 placeholders" + regexes = ['''\${(?:.)+}''', '''(?i)\(\((?:\s)*?(?:grab|concat)(?:.)*?(?:\s)*?\)\)''', '''(?i)!!enveloped:(?:\S)+''', '''(?:.)*?{{(?:.)*?}}'''] + +[[rules]] + description = "Hardcoded credentials in YAML files as unquoted strings" + file = '''^(.*?)\.y(a|)ml$''' + regex = '''(?i)(?:secret|key|signature|password|pwd|pass|token)(?:.{0,20})(?::){1}(?:\s{0,10})(\S{4,120})''' + tags = ["credentials", "hardcoded", "yaml"] + [[rules.Entropies]] + Min = "3.5" # A higher entropy is required for this type of match, as unquoted can trigger many false positives + Max = "7" + Group = "1" + [rules.allowlist] + description = "Skip YAML Serverless variables, grabbed and concated values, encrypted secrets, and values with jinja2 placeholders" + regexes = ['''\${(?:.)+}''', '''(?i)\(\((?:\s)*?(?:grab|concat)(?:.)*?(?:\s)*?\)\)''', '''(?i)!!enveloped:(?:\S)+''', '''(?:.)*?{{(?:.)*?}}'''] + +[[rules]] + description = "Hardcoded credentials in YAML files as multiline strings" + file = '''^(.*?)\.y(a|)ml$''' + regex = '''(?i)(?:secret|key|signature|password|pwd|pass|token)(?:.{0,20})(?::){1}(?:\s{0,10})(?:\|(?:-|))\n(?:\s{0,10})(\S{4,120})''' + tags = ["credentials", "hardcoded", "yaml"] + [[rules.Entropies]] + Min = "4" + Max = "7" + Group = "1" + +[[rules]] + description = "Hardcoded credentials in HCL files (*.tf)" + file = '''^(.*?)\.tf$''' + regex = '''(?i)(?:secret|key|signature|password|pwd|pass|token)(?:.{0,20})(?:=){1}(?:\s)*?"(.{4,120})"''' + tags = ["credentials", "hardcoded", "hcl"] + [[rules.Entropies]] + Min = "3" + Max = "7" + Group = "1" + [rules.allowlist] + description = "Skip variable substitution" + regexes = ['''\${(?:.)*?}'''] diff --git a/waypoint.hcl b/waypoint.hcl deleted file mode 100644 index fb78d68..0000000 --- a/waypoint.hcl +++ /dev/null @@ -1,46 +0,0 @@ -project = "pillager" - -app "cli" { - - labels = { - "maintainer" = "Britton Hayes" - "github" = "https://github.com/brittonhayes/pillager" - } - - build { - use "docker" {} - - registry { - use "docker" { - image = "bjhayes/pillager" - tag = "latest" - } - } - hook { - when = "before" - command = [ - "golangci-lint", - "run", - "./..."] - on_failure = "fail" - } - - hook { - when = "before" - command = [ - "go", - "test", - "-v", - "./..."] - on_failure = "fail" - } - } - - deploy { - use "docker" {} - } - - url { - auto_hostname = false - } -}