Skip to content

NimTechnology

Trình bày các công nghệ CLOUD một cách dễ hiểu.

  • Kubernetes & Container
    • Docker
    • Kubernetes
      • Ingress
      • Pod
    • Helm Chart
    • OAuth2 Proxy
    • Isito-EnvoyFilter
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Vault
    • Longhorn – Storage
    • VictoriaMetrics
    • MetalLB
    • Kong Gateway
  • CI/CD
    • ArgoCD
    • ArgoWorkflows
    • Argo Events
    • Spinnaker
    • Jenkins
    • Harbor
    • TeamCity
    • Git
      • Bitbucket
  • Coding
    • DevSecOps
    • Terraform
      • GCP – Google Cloud
      • AWS – Amazon Web Service
      • Azure Cloud
    • Golang
    • Laravel
    • Python
    • Jquery & JavaScript
    • Selenium
  • Log, Monitor & Tracing
    • DataDog
    • Prometheus
    • Grafana
    • ELK
      • Kibana
      • Logstash
  • BareMetal
    • NextCloud
  • Toggle search form

[Gitleaks/njsscan/semgrep] Secure Your code by CAST and SAST tools

Posted on November 27, 2023December 3, 2024 By nim No Comments on [Gitleaks/njsscan/semgrep] Secure Your code by CAST and SAST tools

Contents

Toggle
  • Look into CAST tool
  • Gitleaks in CI
    • Run Gitleaks in Gitlab
  • Pre-commit Hook for Secret scanning.
  • Handle False Positives
    • ignore failure in gitlab runner
    • Use the ignored configuration in Gitleaks.
      • Use .gitleaks.toml in Gitleaks
      • Use .gitleaksignore in Gitleaks.
  • Introduce to SAST
    • Using njsscan to made a SAST tool.
    • Look into Semgrep to scan many languages.
      • Run Semgrep on gitlab CI
      • Run scanning in Docker of Semgrep
        • Run semgrep without login
        • Run semgrep with token
        • Run semgrep wit login and not push data to semgrep

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
CI/CD, DevSecOps

Post navigation

Previous Post: [K8S] How to distribute pod all over node on K8S
Next Post: [AWS/EKS] Unlocking Simplicity and Security of Amazon EKS Pod Identity.

More Related Articles

[Snyk] Scan your code quickly to prevent attack form Hackers. DevSecOps
[Argo Rollouts] Installing or Applying Argo Rollouts on Kubernetes. CI/CD
[Jenkins] Hướng dẫn kết nối kết nối Jenkins master và Agent CI/CD
Hướng dẫn phần quền user trên Jenkins. CI/CD
[Spinnaker-Github-Helm-K8S]Hướng dẫn cấu hình Spinnaker deploy lên kubernetes dựa vào Helm CI/CD
[DevSecOps] Dependency Check Basics and Vulnerabilities CI/CD

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Tham Gia Group DevOps nhé!
Để Nim có nhiều động lực ra nhiều bài viết.
Để nhận được những thông báo mới nhất.

Recent Posts

  • [Laravel] Laravel Helpful June 26, 2025
  • [VScode] Hướng dẫn điều chỉnh font cho terminal June 20, 2025
  • [WordPress] Hướng dấn gửi mail trên WordPress thông qua gmail. June 15, 2025
  • [Bitbucket] Git Clone/Pull/Push with Bitbucket through API Token. June 12, 2025
  • [Teamcity] How to transfer the value from pipeline A to pipeline B June 9, 2025

Archives

  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021

Categories

  • BareMetal
    • NextCloud
  • CI/CD
    • Argo Events
    • ArgoCD
    • ArgoWorkflows
    • Git
      • Bitbucket
    • Harbor
    • Jenkins
    • Spinnaker
    • TeamCity
  • Coding
    • DevSecOps
    • Golang
    • Jquery & JavaScript
    • Laravel
    • NextJS 14 & ReactJS & Type Script
    • Python
    • Selenium
    • Terraform
      • AWS – Amazon Web Service
      • Azure Cloud
      • GCP – Google Cloud
  • Kubernetes & Container
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Docker
    • Helm Chart
    • Isito-EnvoyFilter
    • Kong Gateway
    • Kubernetes
      • Ingress
      • Pod
    • Longhorn – Storage
    • MetalLB
    • OAuth2 Proxy
    • Vault
    • VictoriaMetrics
  • Log, Monitor & Tracing
    • DataDog
    • ELK
      • Kibana
      • Logstash
    • Fluent
    • Grafana
    • Prometheus
  • Uncategorized
  • Admin

Copyright © 2025 NimTechnology.