
gosec v2.28.0
أداة تحليل ساكنة تفحص كود مصدر Go بحثًا عن الثغرات الأمنية باستخدام AST وSSA وتحليل التلوث، مع تكامل CI/CD وربط CWE.
gosec - مدقق أمان Go
يفحص الكود المصدري بحثًا عن مشاكل أمنية من خلال مسح تمثيل AST و SSA لكود Go.
روابط سريعة
الميزات
- قواعد قائمة على الأنماط لاكتشاف المشاكل الأمنية الشائعة في كود Go
- محللات قائمة على SSA لتحويلات الأنواع، وحدود الشرائح، ومشاكل التشفير
- تحليل التلوث لتتبع تدفق البيانات من إدخال المستخدم إلى الدوال الخطرة (حقن SQL، حقن الأوامر، اجتياز المسار، SSRF، XSS، حقن السجلات، حقن SMTP، SSTI، إلغاء التسلسل غير الآمن، إعادة التوجيه المفتوحة)
الترخيص
مرخص بموجب رخصة أباتشي، الإصدار 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.
يوضح سير العمل مثالًا على تشغيل gosec كخطوة
في سير عمل GitHub Action الذي يُنتج ملف results.sarif
ملف. يقوم سير العمل بعد ذلك برفع ملف results.sarif إلى
GitHub باستخدام إجراء upload-sarif.```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
توفر حزمة `goanalysis`
[`golang.org/x/tools/go/analysis.Analyzer`](https://pkg.go.dev/golang.org/x/tools/go/analysis)
للتكامل مع الأدوات التي تدعم Go القياسي
واجهة التحليل، مثل إطار Bazel's
[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: وجود نتيجة واحدة على الأقل غير مكبوتة أو خطأ في المعالجة- استخدم
-no-failلإرجاع0دائمًا
الاستخدام
يمكن تكوين Gosec لتشغيل مجموعة فرعية فقط من القواعد، لاستبعاد مسارات ملفات معينة، وإنتاج تقارير بتنسيقات مختلفة. بشكل افتراضي، سيتم تشغيل جميع القواعد على ملفات الإدخال المقدمة. للمسح بشكل متكرر من الدليل الحالي، يمكنك تقديم ./... كوسيطة إدخال.
القواعد المتاحة
تتضمن Gosec قواعد عبر هذه الفئات:
G1xx: مشكلات الترميز الآمن العامة (على سبيل المثال بيانات اعتماد مكتوبة بشكل ثابت، استخدام غير آمن، تقوية HTTP، أمان الكوكيز)G2xx: مخاطر الحقن في بناء الاستعلام/القالب/الأمرG3xx: مخاطر معالجة الملفات والمسارات (الأذونات، التجوال، الملفات المؤقتة، استخراج الأرشيف)G4xx: نقاط ضعف التشفير و TLSG5xx: واردات مدرجة في القائمة المحظورةG6xx: فحوصات الصحة/الأمان الخاصة بـ Go (على سبيل المثال، تسمية النطاق وحدود الشرائح)G7xx: قواعد تحليل التلوث (حقن SQL، حقن الأوامر، تجوال المسار، SSRF، XSS، السجل، حقن SMTP، SSTI، إلغاء التسلسل غير الآمن، وإعادة التوجيه المفتوحة)
للحصول على القائمة الكاملة، أوصاف القواعد، والتكوين لكل قاعدة، انظر RULES.md.
القواعد المتقاعدة
- G105: تدقيق استخدام math/big.Int.Exp - تم إصلاح CVE
- G307: تأجيل طريقة ترجع خطأ - يتسبب في إزعاج أكبر من إصلاح مشكلة أمنية، على الرغم من التفاصيل الواردة في منشور المدونة
تحديد القواعد
بشكل افتراضي، ستقوم Gosec بتشغيل جميع القواعد على مسارات الملفات المقدمة. ومع ذلك، من الممكن تحديد مجموعة فرعية من القواعد لتشغيلها عبر علم -include=، أو تحديد مجموعة من القواعد لاستبعادها صراحة باستخدام علم -exclude=.```bash
Run a specific set of rules
$ gosec -include=G101,G203,G401 ./...
Run everything except for rule G303
$ gosec -exclude=G303 ./...
### تعيين CWE