
gosec v2.28.0
Go सुरक्षा जाँचकर्ता
gosec - Go सुरक्षा जाँचकर्ता
Go AST और SSA कोड प्रतिनिधित्व को स्कैन करके स्रोत कोड में सुरक्षा समस्याओं की जाँच करता है।
त्वरित लिंक
विशेषताएँ
- पैटर्न-आधारित नियम Go कोड में सामान्य सुरक्षा समस्याओं का पता लगाने के लिए
- SSA-आधारित विश्लेषक प्रकार रूपांतरण, स्लाइस सीमाएँ और क्रिप्टो समस्याओं के लिए
- दूषण विश्लेषण उपयोगकर्ता इनपुट से खतरनाक कार्यों (SQL इंजेक्शन, कमांड इंजेक्शन, पथ ट्रैवर्सल, SSRF, XSS, लॉग इंजेक्शन, SMTP इंजेक्शन, SSTI, असुरक्षित डी-सीरियलाइज़ेशन, ओपन रीडायरेक्ट) में डेटा प्रवाह को ट्रैक करने के लिए
लाइसेंस
Apache लाइसेंस, संस्करण 2.0 ("लाइसेंस") के तहत लाइसेंस प्राप्त। आप इस फ़ाइल का उपयोग केवल लाइसेंस के अनुपालन में कर सकते हैं। आप लाइसेंस की एक प्रति यहाँ प्राप्त कर सकते हैं।
परियोजना स्थिति
स्थापना
GitHub एक्शन
आप gosec को GitHub एक्शन के रूप में निम्नानुसार चला सकते हैं:
@master के साथ संस्करणित टैग का उपयोग करें जो नवीनतम स्थिर रिलीज़ पर पिन किया गया है। यह स्थिर व्यवहार प्रदान करेगा।```yaml
name: Run Gosec
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
env:
GO111MODULE: on
steps:
- name: Checkout Source
uses: actions/checkout@v3
- name: Run Gosec Security Scanner
uses: securego/gosec@master
with:
args: ./...
#### निजी मॉड्यूल वाले प्रोजेक्ट्स की स्कैनिंग
यदि आपका प्रोजेक्ट निजी Go मॉड्यूल आयात करता है, तो आपको प्रमाणीकरण कॉन्फ़िगर करना होगा ताकि `gosec` निर्भरताओं को प्राप्त कर सके। अपने वर्कफ़्लो में निम्नलिखित पर्यावरण चर सेट करें:
- `GOPRIVATE`: मॉड्यूल पथ उपसर्गों की अल्पविराम से अलग की गई सूची जिन्हें निजी माना जाना चाहिए
(जैसे, `github.com/your-org/*`)।
- `GITHUB_AUTHENTICATION_TOKEN`: आपके निजी रिपॉजिटरी तक पढ़ने की पहुंच वाला एक GitHub टोकन।```yaml
name: Run Gosec
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
env:
GO111MODULE: on
GOPRIVATE: github.com/your-org/*
GITHUB_AUTHENTICATION_TOKEN: ${{ secrets.PRIVATE_REPO_TOKEN }}
steps:
- name: Checkout Source
uses: actions/checkout@v3
- name: Run Gosec Security Scanner
uses: securego/gosec@v2
with:
args: ./...
कोड स्कैनिंग के साथ एकीकरण
आप तीसरे पक्ष के कोड विश्लेषण उपकरणों को एकीकृत कर सकते हैं GitHub कोड स्कैनिंग के साथ SARIF फ़ाइलों के रूप में डेटा अपलोड करके।
वर्कफ़्लो GitHub एक्शन वर्कफ़्लो में एक चरण के रूप में gosec चलाने का एक उदाहरण दिखाता है जो results.sarif
फ़ाइल आउटपुट करता है। वर्कफ़्लो फिर upload-sarif एक्शन का उपयोग करके results.sarif फ़ाइल को
GitHub पर अपलोड करता है।```yaml
name: "Security Scan"
Run workflow each time code is pushed to your repository and on a schedule.
The scheduled workflow runs every at 00:00 on Sunday UTC time.
on: push: schedule:
- cron: '0 0 * * 0'
jobs: tests: runs-on: ubuntu-latest env: GO111MODULE: on steps: - name: Checkout Source uses: actions/checkout@v3 - name: Run Gosec Security Scanner uses: securego/gosec@v2 with: # we let the report trigger content trigger a failure using the GitHub Security features. args: '-no-fail -fmt sarif -out results.sarif ./...' - name: Upload SARIF file uses: github/codeql-action/upload-sarif@v2 with: # Path to SARIF file relative to the root of the repository sarif_file: results.sarif
### Go Analysis
`goanalysis` पैकेज एक
[`golang.org/x/tools/go/analysis.Analyzer`](https://pkg.go.dev/golang.org/x/tools/go/analysis)
प्रदान करता है जो मानक Go analysis इंटरफ़ेस का समर्थन करने वाले उपकरणों के साथ एकीकरण के लिए है, जैसे कि Bazel के
[nogo](https://github.com/bazelbuild/rules_go/blob/master/go/nogo.rst)
फ्रेमवर्क:```starlark
nogo(
name = "nogo",
deps = [
"@com_github_securego_gosec_v2//goanalysis",
# add more analyzers as needed
],
visibility = ["//visibility:public"],
)
स्थानीय स्थापना
gosec को Go 1.25 या नए संस्करण की आवश्यकता है।```bash go install github.com/securego/gosec/v2/cmd/gosec@latest
## त्वरित शुरुआत```bash
# Scan all packages in current module
gosec ./...
# Write JSON report
gosec -fmt json -out results.json ./...
# Write SARIF report for code scanning
gosec -fmt sarif -out results.sarif ./...
निकास कोड
0: स्कैन बिना दबाए गए निष्कर्षों/त्रुटियों के समाप्त हुआ1: कम से कम एक अनदबाया गया निष्कर्ष या प्रसंस्करण त्रुटि- हमेशा
0लौटाने के लिए-no-failका उपयोग करें
उपयोग
Gosec को केवल नियमों के एक उपसमूह को चलाने, कुछ फ़ाइल पथों को बाहर करने, और विभिन्न प्रारूपों में रिपोर्ट तैयार करने के लिए कॉन्फ़िगर किया जा सकता है। डिफ़ॉल्ट रूप से सभी नियम प्रदान की गई इनपुट फ़ाइलों के विरुद्ध चलाए जाएंगे। वर्तमान निर्देशिका से पुनरावृत्तीय रूप से स्कैन करने के लिए आप इनपुट तर्क के रूप में ./... प्रदान कर सकते हैं।
उपलब्ध नियम
gosec इन श्रेणियों में नियम शामिल करता है:
G1xx: सामान्य सुरक्षित कोडिंग मुद्दे (उदाहरण के लिए हार्डकोडेड क्रेडेंशियल, असुरक्षित उपयोग, HTTP हार्डनिंग, कुकी सुरक्षा)G2xx: क्वेरी/टेम्पलेट/कमांड निर्माण में इंजेक्शन जोखिमG3xx: फ़ाइल और पथ हैंडलिंग जोखिम (अनुमतियाँ, ट्रैवर्सल, अस्थायी फ़ाइलें, आर्काइव निष्कर्षण)G4xx: क्रिप्टो और TLS कमजोरियाँG5xx: ब्लॉकलिस्टेड आयातG6xx: Go-विशिष्ट शुद्धता/सुरक्षा जाँच (उदाहरण के लिए रेंज एलियासिंग और स्लाइस बाउंड्स)G7xx: टेंट विश्लेषण नियम (SQL इंजेक्शन, कमांड इंजेक्शन, पथ ट्रैवर्सल, SSRF, XSS, लॉग, SMTP इंजेक्शन, SSTI, असुरक्षित डिसीरियलाइज़ेशन, और ओपन रीडायरेक्ट)
पूरी सूची, नियम विवरण और प्रति-नियम कॉन्फ़िगरेशन के लिए, RULES.md देखें।
सेवानिवृत्त नियम
- G105: math/big.Int.Exp के उपयोग का ऑडिट करें - CVE तय हो गया है
- G307: एक विधि को स्थगित करना जो एक त्रुटि लौटाता है - इस ब्लॉग पोस्ट के विवरण के बावजूद, सुरक्षा मुद्दे को ठीक करने की तुलना में अधिक असुविधा पैदा करना