
يفحص الشيفرة المصدرية بحثًا عن مشكلات أمنية من خلال مسح شجرة AST الخاصة بـ Go وتمثيل الشيفرة SSA.
مرخّص بموجب رخصة Apache، الإصدار 2.0 ("الرخصة"). لا يجوز لك استخدام هذا الملف إلا وفقًا للرخصة. يمكنك الحصول على نسخة من الرخصة هنا.
يمكنك تشغيل gosec كإجراء GitHub على النحو التالي:
استخدم الوسم المُصدَّر بالإصدار مع @master المثبَّت على
أحدث إصدار مستقر. سيوفر هذا سلوكًا مستقرًا.
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 يمتلك صلاحية قراءة
على مستودعاتك الخاصة.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.
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
توفّر حزمة goanalysis
golang.org/x/tools/go/analysis.Analyzer
للتكامل مع الأدوات التي تدعم واجهة تحليل Go
القياسية، مثل إطار عمل
nogo
التابع لـ Bazel:
nogo(
name = "nogo",
deps = [
"@com_github_securego_gosec_v2//goanalysis",
# add more analyzers as needed
],
visibility = ["//visibility:public"],
)
يتطلب gosec الإصدار 1.25 من Go أو أحدث.
go install github.com/securego/gosec/v2/cmd/gosec@latest
# 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 (على سبيل المثال
التسمية البديلة في range وحدود الشرائح)G7xx: قواعد تحليل التلوث (حقن SQL، حقن
الأوامر، اجتياز المسارات، SSRF، XSS، حقن السجلات، حقن SMTP،
SSTI، إلغاء التسلسل غير الآمن، وإعادة التوجيه المفتوح)للاطلاع على القائمة الكاملة وأوصاف القواعد وتهيئة كل قاعدة، راجع RULES.md.
افتراضيًا، سيشغّل gosec جميع القواعد على مسارات الملفات
المقدَّمة. ومع ذلك، من الممكن اختيار مجموعة فرعية من القواعد
لتشغيلها عبر العلامة -include=، أو تحديد مجموعة من القواعد
لاستبعادها صراحةً باستخدام العلامة -exclude=.
# Run a specific set of rules
$ gosec -include=G101,G203,G401 ./...
# Run everything except for rule G303
$ gosec -exclude=G303 ./...