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 وابستگی