برنامه نویسی

Devsecops Essentials: کاهش آسیب پذیری های اولیه با Sonarqube و OWASP وابستگی

شرح تصویر
در دنیای رو به رشد اینترنت ، مدیریت آسیب پذیری مؤثر به یک مؤلفه مهم فرآیند Devsecops تبدیل شده است. از آنجا که توسعه دهندگان در تلاش برای ایجاد برنامه های ایمن هستند ، ادغام ابزارهای امنیتی نرم افزاری که می توانند آسیب پذیری ها و آسیب پذیری ها و آسیب پذیری های مشترک (CVE) را در طول چرخه عمر توسعه شناسایی کنند ، ضروری است.

در این مقاله ، ما ابزارهای مختلف منبع باز ، مانند Sonarqube Security و OWASP وابستگی را بررسی خواهیم کرد که می تواند به طور یکپارچه در مراحل مختلف فرآیند توسعه برای تقویت امنیت کد ، به طور خاص با تمرکز روی برنامه های جاوا ، یکپارچه شود.

آسیب پذیری چیست؟

آسیب پذیری به ضعف در یک سیستم توسعه یافته اشاره دارد که می تواند منجر به خرابی سیستم ، اختلالات عملیاتی ، سرقت داده ها ، سازش های امنیتی ، نشت داده ها یا نقض شود. پرداختن به آسیب پذیری ها برای اطمینان از ایمنی و قابلیت اطمینان سیستم های نرم افزاری بسیار مهم است.

در زیر برخی از عوامل مهم وجود دارد که می توانند آسیب پذیری ها را در نرم افزار شما وارد کنند:

شرح تصویر
ابزارهای مختلفی در بازار برای شناسایی آسیب پذیری ها و CEV ها در دسترس است ، اما Sonarqube Security و OWASP وابستگی-Check به عنوان منابع اساسی برای تأمین برنامه ها متمایز می شوند. این ابزارها می توانند یکپارچه در گردش کار توسعه شما ادغام شوند و استراتژی مدیریت آسیب پذیری شما را تقویت کنند.

شرح تصویر

پیش نیازها:

  • اوبونتو
  • نصب برنامه ها (جاوا ، مون)
  • پروژه جاوا
  • سرور سونار (میزبان)
  • اعتبارنامه ورود به سیستم سونار

1. سونارسنر:

  • این ابزار برای ارزیابی کیفیت کد استفاده می شود. این کد را تجزیه و تحلیل می کند و براساس یافته های آن گزارشی تولید می کند.
  • با ادغام یکپارچه با خط لوله CI یا سیستم عامل های پشتیبانی DevOps ، کد شما را در برابر مجموعه ای جامع از قوانین ارزیابی می کند. این قوانین به ویژگی های کلیدی مانند قابلیت حفظ ، قابلیت اطمینان و امنیت می پردازند و از تجزیه و تحلیل کامل برای هر درخواست ادغام یا کشش اطمینان می دهند

قابلیت های اسکن

  • تجزیه و تحلیل کد استاتیک: برای شناسایی خطاهای احتمالی و شیوه های برنامه نویسی ناکارآمد ، کد منبع را بدون اجرای بررسی می کند.
  • تجزیه و تحلیل امنیتی: آسیب پذیری های امنیتی مانند تزریق SQL ، برنامه نویسی متقابل سایت (XSS) و خطرات سرریز بافر را تشخیص می دهد.
  • تشخیص خطای همزمانی: نقص زمان اجرا مانند شرایط مسابقه ، استثنائات ، نشت منابع و حافظه و آسیب پذیری های امنیتی را مشخص می کند.
  • تجزیه و تحلیل عملکرد: برای تشخیص و رفع تنگناهای عملکرد ، برنامه های نرم افزاری را در طول زمان اجرا می کند.
  • تولید گزارش: ویژگی های گزارشگری جامع را برای ارزیابی کیفیت کد و شناسایی مؤثر مسائل ارائه می دهد.

شرح تصویر

چگونه می توانیم آن را در جاوا ادغام کنیم؟

از دستگاه محلی

فرآیند نصب برای سونارسکانر

اگر قبلاً نصب نشده باشد ، اسکنر سونار را در دستگاه خود نصب کنید
مرحله 1: برای یافتن آخرین نسخه Sonarscanner CLI به وب سایت رسمی Sonarsource مراجعه کنید. به دنبال لینک بارگیری برای پرونده ZIP باشید.

⇒ wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip
⇒ unzip sonar-scanner-cli-4.2.0.1873-linux.zip
حالت تمام صفحه را وارد کنید

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

شرح تصویر
مرحله 2: برای تنظیم متغیرهای محیط برای دسترسی به پورتال Sonarqube از دستگاه محلی خود ، در زیر دستورات را اجرا کنید:

⇒ sudo mv sonar-scanner-4.2.0.1873-linux/ /opt/

⇒ sudo nano /opt/sonar-scanner-4.2.0.1873-linux/conf/sonar-scanner.properties
حالت تمام صفحه را وارد کنید

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

مطالب زیر را در Sonar-Scanner.Properties اضافه کنید

sonar.host.url=
sonar.login=user.name
sonar.password=*****passwd****
حالت تمام صفحه را وارد کنید

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

شرح تصویر
مرحله 3: برای تنظیم یک پروفایل در دستگاه محلی خود برای دسترسی به Sonarqube ، ما باید Sonarpath را در پرونده Sonar-Scanner.sh اضافه کنیم ، برای این کار ، دستورات زیر را اجرا کنید

⇒ sudo nano /etc/profile.d/sonar-scanner.sh
##Add path in sonar-scanner.sh file and save the file : 
export PATH=”/opt/sonar-scanner-4.2.0.1873-linux/bin:$PATH”
حالت تمام صفحه را وارد کنید

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

مرحله 4: برای اعمال تغییراتی که ایجاد کرده اید ، دستور زیر را اجرا کنید:
⇒ source /etc/profile.d/sonar-scanner.sh
مرحله 5: برای تأیید نصب اسکنر سونار ، نسخه آن را بررسی کنید.
⇒ sonar-scanner --version
مرحله 6: پیکربندی Sonarscanner CLI:

  • برای اتصال Sonarscanner CLI به سرور Sonarqube یا Sonarcloud خود ، باید پرونده Sonar-Scanner.Properties را در فهرست ریشه پروژه خود ایجاد و پیکربندی کنید.
  • پرونده sonar-scanner.properties را در یک ویرایشگر متن باز کنید و مطابق با نیاز پروژه خود آن را پیکربندی کنید. در زیر یک پیکربندی مثال وجود دارد:

Sonar-Scanner.Properties

# must be unique in a given SonarQube instance(project_key)
sonar.projectKey=
# This is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=
sonar.projectVersion=0.0.1

# Path is relative to the sonar-project.properties file. Replace "\" by "https://dev.to/" on Windows.
# If not set, SonarQube starts looking for source code from the directory containing 
# the sonar-project.properties file.

sonar.sources=src/main/java
sonar.projectBaseDir=. 
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
sonar.binaries=target/classes/
sonar.java.binaries=target/classes/

حالت تمام صفحه را وارد کنید

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

مرحله 7: Sonarscanner CLI را اجرا کنید
به دایرکتوری پروژه خود در ترمینال بروید و دستور زیر را برای اجرای Sonarscanner CLI اجرا کنید:
⇒ sonar-scanner

چگونه می توانیم آن را در خط لوله CICD ادغام کنیم؟

برای ادغام SonarsCanner در خط لوله CI/CD خود ، می توانید یک اسکریپت ایجاد کنید که قبل از ساخت پروژه خود دستورات SonarsCanner را اجرا کند.
در اسکریپت زیر ، ما از افزونه Maven استفاده می کنیم. اگر می خواهید از Sonar-Scanner CLI استفاده کنید ، دستورالعمل های نصب را دنبال کنید و دستور را در فیلمنامه به جای Maven تهیه کنید.
sonar-scan.sh

#!/bin/bash

# Configuration Variables
SONAR_LOGIN=""
SONAR_PASSWORD="sonar_login_pass"
SONAR_HOST=""
SONAR_SOURCE="src/main/java"
SONAR_BINARIES="target/classes/"
SONAR_JAVA_BINARIES="target/classes/"
SONAR_EXCLUSIONS="**/*DaoImpl.java,**/target/classes/*"

# Run SonarQube analysis
echo "Running SonarQube analysis..."
export _JAVA_OPTIONS="-Xms512m -Xmx1g" # You can set this as per your configuration 

# if you are using cli then below part is not required in script just provide the command: sonar-scanner

if mvn clean verify sonar:sonar \
    -Dsonar.projectKey= \
    -Dsonar.host.url="$SONAR_HOST" \
    -Dsonar.login="$SONAR_LOGIN" \
    -Dsonar.password="$SONAR_PASSWORD" \
    -Dsonar.sources="$SONAR_SOURCE" \
    -Dsonar.binaries="$SONAR_BINARIES" \
    -Dsonar.java.binaries="$SONAR_JAVA_BINARIES" \
    -Dsonar.exclusions="$SONAR_EXCLUSIONS"; then
    echo "SonarQube analysis completed successfully."
else
    echo "SonarQube analysis failed. Please check the errors above."
    exit 1
fi

# Change directory back (if necessary)
cd .. || { echo "Failed to change directory."; exit 1; }
Code language: PHP (php)
Add the Script to Your CI/CD Pipeline:
pipeline {
    agent any    stages {
        stage('SonarQube Analysis') {
            steps {
                script {
                    sh 'chmod +x sonar-scan.sh' // Make the script executable
                    sh './sonar-scan.sh' // Execute the SonarScanner script
                }
            }
        }
        stage('Build') {
            steps {
                // Your build commands here (e.g., mvn clean install)
            }
        }
    }
}

حالت تمام صفحه را وارد کنید

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

پس از اجرای Sonarscanner در خط لوله CI / CD یا یک دستگاه محلی ، وارد پورتال Sonarqube / Sonarcloud شوید تا وضعیت کد خود را بررسی کنید. شما باید یک مرور کلی شبیه به تصویر زیر را ببینید:

شرح تصویر

2. OWASP وابستگی-چک:

OWASP وابستگی-Check قادر به شناسایی آسیب پذیری در برنامه های وب ، مانند تأیید اعتبار به خطر افتاده ، قرار گرفتن در معرض داده های حساس ، سوء استفاده های نادرست امنیتی ، تزریق SQL ، برنامه نویسی متقابل سایت (XSS) ، ناامنی ناامن و استفاده از مؤلفه هایی با آسیب پذیری های شناخته شده است.

قابلیت های اسکن –

  • تشخیص آسیب پذیری خودکار: برای شناسایی وابستگی های مورد استفاده در پروژه ، کد منبع برنامه و ابرداده را تجزیه و تحلیل می کند.
  • شناسایی وابستگی ها از طریق شمارش بستر های نرم افزاری مشترک (CPE): شناسه CPE مرتبط با هر وابستگی را تشخیص می دهد.
  • تشخیص کتابخانه شخص ثالث: شناسه های CPE را با داده های پایگاه داده آسیب پذیری ملی (NVD) مقایسه می کند تا به طور خودکار کتابخانه های آسیب پذیر مورد استفاده در برنامه را شناسایی و پرچم گذاری کند.
  • نتایج گزارش دهی: گزارش مفصلی را در قالب HTML یا XML ایجاد می کند و کلیه آسیب پذیری های شناسایی شده را تشریح می کند. گزارش شامل:

  • لیستی از کتابخانه ها و وابستگی های آسیب دیده

  • شناسه های CVE و CPE

  • معیارهای نمره شدت

  • پیوندها به راهنمایی اصلاح

چگونه می توانیم آن را در کد ادغام کنیم؟

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

build.sh
#!/bin/bash

# Step 1: Install dependencies and verify Maven installation
echo "Updating system and verifying Maven installation..."
if mvn -v; then
    echo "Maven is installed."
else
    echo "Maven is not installed. Please install Maven to proceed."
    exit 1
fi

# Step 2: Build the Maven project
echo "Building the Maven project and running OWASP dependency check..."
if mvn -B -s pom.xml -Dmaven.test.skip=true -Pdev clean install org.owasp:dependency-check-maven:aggregate; then
    echo "Build successful."
else
    echo "Build failed. Please check the errors above."
    exit 1
fi

حالت تمام صفحه را وارد کنید

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

یک Jenkinsfile بنویسید که شامل اسکریپت فوق است ، اجازه می دهد تا در طول خط لوله CI/CD اجرا شود:

##

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    sh 'chmod +x build.sh' // Make the script executable
                    sh './build.sh' // Execute the build script
                }

            }
        }
    }
}

حالت تمام صفحه را وارد کنید

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

نیازی به نصب وابستگی های اضافی برای ابزار OWASP نیست.

پس از ساخت و اجرای این ابزار ، گزارش را در قالب .html ، .xml و .json دریافت خواهید کرد.
با ترکیب هر دو تجزیه و تحلیل Sonarqube و OWASP وابستگی ، می توانیم به طور موثری تعداد قابل توجهی از آسیب پذیری ها و CEV ها (آسیب پذیری های مشترک و قرار گرفتن در معرض) را در کد بررسی کنیم. در زیر Jenkinsfile برای خط لوله CI/CD وجود دارد که هر دو ابزار را در یک اجرا اجرا می کند:

pipeline {
    agent any
    stages {
        stage('SonarQube Analysis') {
            steps {
                script {
                    sh 'chmod +x sonar-scan.sh' // Make the script executable
                    sh './sonar-scan.sh' // Execute the SonarScanner script
                }
            }
        }
        stage('Build') {
            steps {
                script {
                    sh 'chmod +x build.sh' // Make the script executable
                    sh './build.sh' // Execute the build script
                }
           }
        }
    }
}

حالت تمام صفحه را وارد کنید

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

نتیجه گیری:

در کنار هم ، این ابزارها یک فرهنگ متمرکز بر امنیت را در طول چرخه عمر توسعه نرم افزار تقویت می کنند ، و سازمانها را قادر می سازد تا برنامه های قوی را سازند که مطابق با استانداردهای صنعت باشد و با تهدیدات امنیتی در حال ظهور سازگار شود. با استفاده از این منابع ، توسعه دهندگان می توانند دفاع از برنامه های خود را در برابر حملات مخرب تا حد زیادی افزایش دهند و در نهایت به یک محیط دیجیتالی امن تر کمک کنند.

شرح تصویر
پیوند منبع: ضروری Devsecops: کاهش آسیب پذیری های مرحله اولیه با Sonarqube و OWASP وابستگی

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

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

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

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