برنامه نویسی

یک خط لوله DevSecOps را با اقدامات GitHub پیاده سازی کنید

مقدمه – تولد DevSecOps

داستان DevSecOps داستان توسعه نرم افزار را از نزدیک دنبال می کند. ما دیدیم که چگونه صنعت از Waterfall به Agile منتقل شد و همه چیز بعد از Agile تغییر کرد. با چرخه های توسعه بسیار کوتاه تر، نیاز به استقرار سریعتر در تولید نیز وجود داشت.

دیگر برای تیم‌های امنیتی امکان‌پذیر نبود که تیم‌های Dev/Ops منتظر بمانند تا ارزیابی آسیب‌پذیری و تست نفوذ (VAPT) قبل از انجام تغییرات به تولید برسد. اگر نه، برتری تیم را با سرعت و چابکی از بین می بریم.

DevOps مجموعه‌ای از اقدامات است که برای کاهش زمان بین انجام تغییر در یک سیستم و ایجاد تغییر در تولید و در عین حال تضمین کیفیت بالا – Bass، Weber و Zhu در نظر گرفته شده است.

طبق تعریف، DevOps قبلاً امنیت را به عنوان بخشی از عملیات شامل می‌شود، اما صنعت امنیت می‌خواست تمرکز و تاکید بیشتری بر امنیت داشته باشد، از این رو اصطلاح DevSecOps یا Secure DevOps به وجود آمد.

شرایط امنیتی

قبل از ورود به مرحله اجرا، بیایید خود را با این 3 اصطلاح امنیتی آشنا کنیم.

SCA – مخفف عبارت Software Composition Analysis است. این تکنیکی است که برای یافتن آسیب‌پذیری‌های امنیتی در مؤلفه‌های شخص ثالث که در پروژه‌ها/محصولات خود استفاده می‌کنیم، استفاده می‌شود. آنها می توانند کتابخانه ها، بسته هایی باشند که ما نصب می کنیم.

استفاده خواهیم کرد اسنیک (تلفظ به عنوان “Sneak”) برای ابزار SCA ما. Snyk یک راه حل SCA برای توسعه دهندگان است که به توسعه دهندگان کمک می کند تا آسیب پذیری های امنیتی و مسائل مربوط به مجوز را در وابستگی های منبع باز پیدا کنند، اولویت بندی و رفع کنند.

  1. یک حساب SNYK رایگان در SNYK ایجاد کنید
  2. به تنظیمات حساب بروید
  3. توکن Auth را ایجاد کنید
  4. این کلید شما خواهد بود SNYK_TOKEN. آن را در GitHub Actions Secrets خود ذخیره کنید.

SAST – مخفف Static Application Security Testing است. این تکنیکی است که برای تجزیه و تحلیل کدهای منبع، کدهای باینری و بایتی برای آسیب پذیری های امنیتی بدون اجرای کد استفاده می شود. از آنجایی که کدها در حال اجرا نیستند اما در حالت ایستا بررسی می شوند، به آن تحلیل استاتیک می گویند. SAST، SCA و Linting نمونه های معمولی از تجزیه و تحلیل استاتیک هستند

برای SAST، ما استفاده خواهیم کرد ردیاب آوایی. SonarCloud یک ابزار تحلیل استاتیک مبتنی بر ابر برای خط لوله CI/CD شما است. از ده ها زبان محبوب، چارچوب های توسعه و پلتفرم های IaC پشتیبانی می کند.

  1. یک حساب Sonar رایگان در SonarCloud ایجاد کنید
  2. جدید ایجاد کنید سازمان و پروژه
  3. به حساب من، برگه امنیت بروید
  4. یک توکن جدید تولید کنید
  5. این نشانه برای شما خواهد بود SONAR_TOKEN. آن را در GitHub Actions Secrets خود ذخیره کنید.

DAST – مخفف Dynamic Application Security Testing است. این تکنیکی است که برای تجزیه و تحلیل برنامه های در حال اجرا برای آسیب پذیری های امنیتی استفاده می شود. از آنجایی که برنامه در حال اجرا و بررسی پویا است، به آن تحلیل پویا می گویند.

برای DAST، ما استفاده خواهیم کرد OWASP ZAP. ZAP پرکاربردترین اسکنر اپلیکیشن وب در جهان است. این یک ابزار رایگان و منبع باز تست نفوذ است و در هسته آن، ZAP به عنوان یک پروکسی مرد در وسط شناخته می شود. شما می توانید 3 اقدام Github متعلق به OWASP ZAP را در بازار GitHub پیدا کنید.

اقدامات GitHub

GitHub Actions یک پلت فرم CI/CD است که به ما امکان می دهد خط لوله ساخت، آزمایش و استقرار خود را خودکار کنیم.

می توانید آن را در مخزن کد خود در GitHub پیدا کنید. این تب Actions است.

و وقتی روی هر یک از این گردش‌های کاری کلیک می‌کنید، می‌توانید کارهایی را که در آن گردش کار اجرا می‌شوند، ببینید.

نمونه گردش کار GitHub Actions

در بالا یک نمونه گردش کار است.

گردش کار فرآیندهای خودکاری هستند که می توانید برای اجرای یک یا چند کار پیکربندی کنید. گردش کار توسط فایل های YAML که در مخزن شما بررسی می شوند، تعریف می شوند. این فایل های yaml در ذخیره می شوند .github/workflows فهرست راهنما. شما می‌توانید گردش‌های کاری متعددی داشته باشید که هر کدام مجموعه‌ای از وظایف را انجام می‌دهند

گردش کار می تواند توسط یک رویداد (به عنوان مثال یک درخواست کشش / زمانی که یک توسعه دهنده یک تغییر را به مخزن کد فشار می دهد) راه اندازی شود.

وقتی این اتفاق بیفتد، یک یا چند شغل شروع به اجرا می کنند.

شغل ها مراحل به ترتیب اجرا می شوند و به یکدیگر وابسته هستند. شما می توانید داده ها را از یک مرحله به مرحله دیگر به اشتراک بگذارید زیرا آنها روی یک رانر اجرا می شوند.

دونده ها سرورهایی هستند که هنگام راه‌اندازی، گردش‌های کاری شما را اجرا می‌کنند و Github ماشین‌های مجازی لینوکس، ویندوز و MacOS را برای اجرای گردش‌های کاری خود در اختیار شما قرار می‌دهد.

گردش کار ما

خط لوله DevSecOps ما از 3 کار تشکیل شده است.

ساختن – درخواست آخرین سرور اوبونتو، نصب آخرین اقدامات github (v4)، نصب nodeJS نسخه 20، نصب وابستگی های پروژه ما npm run install، تست واحد ما را اجرا می کند npm run test و SAST را با استفاده از سونار انجام می دهد.

SCA – درخواست برای آخرین سرور اوبونتو و برای شروع اجرای این کار، آن نیاز دارد کار ساخت کامل شود آخرین اقدامات github (v4) را نصب می کند و Snyk را در مقابل مخزن کد ما اجرا می کند.

DAST – آخرین سرور اوبونتو را درخواست می‌کند، منتظر می‌ماند تا کار SCA کامل شود، آخرین گیت‌هاب اکشن (v4) را بررسی می‌کند و OWASP ZAP را بر روی یک وب‌سایت نمونه (example.com) اجرا می‌کند.

کل خط لوله CICD را می توان تنها در 50 خط کد زیر پیاده سازی کرد.

name: Build code, run unit test, run SAST, SCA, DAST security scans for NodeJs App
on: push

jobs:
  Build:
    runs-on: ubuntu-latest
    name: Unit Test and SAST
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
      with:
        node-version: '20.x'
        cache: npm
    - name: Install dependencies
      run: npm install
    - name: Test and coverage
      run: npm run test
    - name: SonarCloud Scan
      uses: sonarsource/sonarcloud-github-action@master
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
      with:
        args: >
          -Dsonar.organization=[YOUR_SONAR_ORGANISATION]
          -Dsonar.projectKey=[YOUR_SONAR_PROJECT]
  SCA:
    runs-on: ubuntu-latest
    needs: Build
    name: SCA - SNYK
    steps:
      - uses: actions/checkout@v4
      - name: Run Snyk to check for vulnerabilities
        uses: snyk/actions/node@master
        continue-on-error: true
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
  DAST:
    runs-on: ubuntu-latest
    needs: SCA
    name: DAST - ZAP
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          ref: main
      - name: ZAP Scan
        uses: zaproxy/action-baseline@v0.11.0
        with:
          target: 'http://example.com/'
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

عیب یابی

متوجه خواهید شد که گزارش پوشش تست واحد شما در SonarCloud آپلود نمی شود. برای رفع این مشکل، یک فایل sonar-project.properties در ریشه مخزن خود ایجاد کنید. این فایل به سونار اطلاع می‌دهد که گزارش‌های پوشش کد شما را کجا بازیابی کند.

sonar.organization=[INPUT_YOUR_ORGANISATION]
sonar.projectKey=[INPUT_YOUR_PROJECT_KEY]

# relative paths to source directories. More details and properties are described
# in https://sonarcloud.io/documentation/project-administration/narrowing-the-focus/
sonar.sources=.
sonar.exclusions=**/tests/*.js
sonar.language=js

sonar.javascript.lcov.reportPaths=./coverage/lcov.info
sonar.testExecutionReportPaths=./test-report.xml

sonar.sourceEncoding=UTF-8
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

منابع

برای مثال کار می توانید به مخزن من مراجعه کنید

به سلامتی!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا