Look into CAST tool
Ở đây mình sẽ dụng Docker để run gitleaks
docker run -v ${path_to_host_folder_to_scan}:/path zricethezav/gitleaks:latest [COMMAND] --source="/path"
Bạn sẽ cần replace: ${path_to_host_folder_to_scan} đây là folder chứa code của bạn.
Và tiếp theo là phần [COMMAND]:
Usage: gitleaks [command] Available Commands: completion generate the autocompletion script for the specified shell detect Detect secrets in code help Help about any command protect Protect secrets in code version Display gitleaks version Flags: -c, --config string config file path order of precedence: 1. --config/-c 2. (--source/-s)/.gitleaks.toml if --config/-c is not set and no .gitleaks.toml/gitleaks.toml present then .gitleaks.toml will be written to (--source/-s)/.gitleaks.toml for future use --exit-code string exit code when leaks have been encountered (default: 1) -h, --help help for gitleaks -l, --log-level string log level (debug, info, warn, error, fatal) (default "info") --redact redact secrets from logs and stdout -f, --report-format string output format (json, csv, sarif) -r, --report-path string report file -s, --source string path to source (git repo, directory, file) -v, --verbose show verbose output from scan
Và bên dưới là phần chúng ta scan, mình sử dụng command detect.
nếu bạn muốn output hiện thị chi tiết hơn thêm –verbose
Để hiểu hơn về rule để detect secret của gitleaks:
https://github.com/gitleaks/gitleaks/blob/master/config/gitleaks.toml
Gitleaks in CI
Run Gitleaks in Gitlab
Bạn có thể thấy ảnh bên dưới
Bạn cũng có thể tưởng tượng ra gitleaks sẽ nằm ở trong workflow CI/CD
Pre-commit Hook for Secret scanning.
Bạn cần edit file ./git/hooks/pre-commit
Handle False Positives
Và thường khi apply mô hình devSecOps vào CI/CD thì:
– Chúng ta sẽ integrate it trong pipeline và để optimize step by step.
– Nhưng chúng ta không interrupt(ngắt) devloper workflow, cho đến khi chúng ta hoàn thiện sản phẩm.
ignore failure in gitlab runner
trong gitlab bạn sẽ thêm allow_failure: true để nếu có lỗi sảy ra thì pipeline vẫn tiếp tục chạy.
Use the ignored configuration in Gitleaks.
Use .gitleaks.toml
in Gitleaks
############## .gitleaks.toml #################.............. [extend] useDefault = true [allowlist] paths = ['meta-structure/kubeshark/dev-staging/values_helm.yaml']
Use .gitleaksignore
in Gitleaks.
Khi bạn scan bạn sẽ gặp issue như dưới.
gitleaks detect --verbose --source . ○ │╲ │ ○ ○ ░ ░ gitleaks Finding: ...EDUY2LDMVXHGZIB76DAAAIDAECEIYLUMEAQUAABAFJAD74IAAAQCUYB76EAA... Secret: AIDAECEIYLUMEAQUAABA RuleID: aws-access-token Entropy: 3.108695 File: meta-structure/kubeshark/dev-staging/values_helm.yaml Line: 1 Commit: f614c67612d9ee7bc6fca2304923b60e8846241c Author: Mr Nim Email: xxx.xxx@xxx.com Date: 2023-11-07T08:03:47Z Fingerprint: f614c67612d9ee7bc6fca2304923b60e8846241c:meta-structure/kubeshark/dev-staging/values_helm.yaml:aws-access-token:1 4:24AM INF 50 commits scanned. 4:24AM INF scan completed in 570ms 4:24AM WRN leaks found: 1
tạo file: .gitleaksignore
vào thêm vào content ở dòng: Fingerprint được copy tử issue
f614c67612d9ee7bc6fca2304923b60e8846241c:meta-structure/kubeshark/dev-staging/values_helm.yaml:aws-access-token:1
Introduce to SAST
Ngoài việc chú động trong việc secure the secret in code.
chúng ta còn cần phải học khá nhiều thứ như là: DDos, xss, …
Chúng ta cần học rất nhiều.
Đơn giản hơn nêu bạn không muốn học quá nhiều nhưng vẫn validate được issues trên thì cũng ta có khái niệm là SAST
Các ngôn ngữ khác nhau thì chúng ta có những SAST tool khách nhau
Using njsscan to made a SAST tool.
Bạn có thể thấy chúng ta có issue với severity là warning về việc sử dụng MD5.
Ngoài ra chúng ta cũng có tool có thể scan multiple languages: sonar qube, synk code.
Look into Semgrep to scan many languages.
https://semgrep.dev/docs/semgrep-ci/running-semgrep-ci-without-semgrep-cloud-platform/
Run Semgrep on gitlab CI
bạn có thể tìm hiểu các setup semgrep với CI.
Bạn có thể tìm hiểu bộ environment của Semgrep
https://semgrep.dev/docs/semgrep-ci/ci-environment-variables/
Run scanning in Docker of Semgrep
Semgrep, a static analysis tool used for code quality and security, operates differently depending on whether you’re using the free (community) edition or the paid (enterprise) edition
Run semgrep without login
Chúng ta có thể chạy đơn thuần với docker:
docker run -e SEMGREP_RULES="p/golang" --rm -v "$(pwd):/src" returntocorp/semgrep semgrep ci
Mình đã có output như sau:
┌────────────────┐ │ Debugging Info │ └────────────────┘ SCAN ENVIRONMENT versions - semgrep 1.50.0 on python 3.11.4 environment - running in environment git, triggering event is unknown ┌─────────────┐ │ Scan Status │ └─────────────┘ Scanning 53 files tracked by git with 37 Code rules: Scanning 19 files with 37 go rules. ┌──────────────┐ │ Scan Summary │ └──────────────┘ Some files were skipped or only partially analyzed. Scan was limited to files tracked by git. (need more rules? `semgrep login` for additional free Semgrep Registry rules) CI scan completed successfully. Found 0 findings (0 blocking) from 37 rules. No blocking findings so exiting with code 0
Bạn sẽ thấy là nó chỉ scan 37 rules và nó gợi ý là login thì sẽ scan với rule hơn.
Run semgrep with token
Để tìm kiếm được ruleset phù hợp bạn sử dụng:
https://semgrep.dev/r?q=golang
với semgrep login.
bạn cần đăng ký tài khoản và login sau đó tạo token.
docker run -e SEMGREP_APP_TOKEN=${{ secrets.SEMGREP_TOKEN }} --rm -v "$(pwd):/src" returntocorp/semgrep semgrep --config "p/golang"
lúc này bạn thấy số rule scan đã được nâng lên là 100
METRICS: Using configs from the Registry (like --config=p/ci) reports pseudonymous rule metrics to semgrep.dev. To disable Registry rule metrics, use "--metrics=off". Using configs only from local files (like --config=xyz.yml) does not enable metrics. More information: https://semgrep.dev/docs/metrics ┌─────────────┐ │ Scan Status │ └─────────────┘ Scanning 53 files tracked by git with 100 Code rules: Scanning 19 files with 100 go rules. ┌──────────────┐ │ Scan Summary │ └──────────────┘ Some files were skipped or only partially analyzed. Scan was limited to files tracked by git. Ran 100 rules on 19 files: 0 findings. If Semgrep missed a finding, please send us feedback to let us know! See https://semgrep.dev/docs/reporting-false-negatives/
Run semgrep wit login and not push data to semgrep
Nếu bạn không muốn push data semgrep vì lý do bảo mật:
thêm –metrics=off hoặc –metrics “off”
docker run -e SEMGREP_APP_TOKEN=${{ secrets.SEMGREP_TOKEN }} --rm -v "$(pwd):/src" returntocorp/semgrep semgrep --config="p/golang" --metrics=off