استخدام أداة فحص الثغرات الأمنية للمكتبات المستخدمة Dependency-Check في GitlabCI

يتمثل جزء مهم من إدارة الثغرات الأمنية في الفهم الشامل لسلسلة التوريد الخاصة بمكونات البرامج التي تشكل الأنظمة الحديثة وتأمينها. تستخدم فرق Agile وDevOps المكتبات وأطر العمل مفتوحة المصدر على نطاق واسع لتقليل وقت التطوير والتكلفة. لكن هذه الميدالية لها أيضا جانب سلبي: فهي فرصة وراثة أخطاء الآخرين ونقاط ضعفهم.

من الواضح أن الفريق يجب أن يتأكد من معرفة المكونات مفتوحة المصدر المضمنة في تطبيقاته، والتأكد من تنزيل الإصدارات الموثوقة المعروفة من مصادر موثوقة معروفة، وتنزيل الإصدارات المحدثة من المكونات بعد تصحيح الثغرات الأمنية المكتشفة حديثًا.

في هذا المنشور، سنلقي نظرة على استخدام OWASP Dependency Check لإلغاء البناء إذا اكتشف مشاكل خطيرة في التعليمات البرمجية الخاصة بك.

في كتاب "أمن التطوير في المشاريع الرشيقة" تم وصفه على النحو التالي. OWASP Dependency Check هو ماسح ضوئي مجاني يقوم بفهرسة جميع المكونات مفتوحة المصدر المستخدمة في التطبيق ويعرض نقاط الضعف التي تحتوي عليها. هناك إصدارات لـ Java و.NET وRuby (gemspec) وPHP (composer) وNode.js وPython، بالإضافة إلى بعض مشاريع C/C++. يتكامل Dependency Check مع أدوات البناء الشائعة، بما في ذلك Ant وMaven وGradle وخوادم التكامل المستمر مثل Jenkins.

يقوم التحقق من التبعية بالإبلاغ عن جميع المكونات ذات الثغرات الأمنية المعروفة من قاعدة بيانات الثغرات الوطنية (NVD) الخاصة بـ NIST ويتم تحديثها بالبيانات من خلاصات أخبار NVD.

ولحسن الحظ، كل هذا يمكن القيام به تلقائيًا باستخدام أدوات مثل مشروع OWASP Dependency Check أو البرامج التجارية مثل البطة السوداء, جي فروج للأشعة السينية, سنيك, دورة حياة نيكزس سوناتايب أو المصدر واضح.

يمكن تضمين هذه الأدوات في مسارات الإنشاء لجرد التبعيات مفتوحة المصدر تلقائيًا، وتحديد الإصدارات القديمة من المكتبات والمكتبات التي تحتوي على ثغرات أمنية معروفة، وإحباط الإنشاءات في حالة اكتشاف مشكلات خطيرة.

التحقق من التبعية OWASP

لاختبار وتوضيح كيفية عمل التحقق من التبعية، نستخدم هذا المستودع مثال للتحقق من التبعية.

لعرض تقرير HTML، تحتاج إلى تكوين خادم الويب nginx على gitlab-runner.

مثال على الحد الأدنى من تكوين nginx:

server {
    listen       9999;
    listen       [::]:9999;
    server_name  _;
    root         /home/gitlab-runner/builds;

    location / {
        autoindex on;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

وفي نهاية التجمع يمكنك رؤية هذه الصورة:

استخدام أداة فحص الثغرات الأمنية للمكتبات المستخدمة Dependency-Check في GitlabCI

اتبع الرابط وشاهد تقرير التحقق من التبعية.

لقطة الشاشة الأولى هي الجزء العلوي من التقرير مع ملخص.

استخدام أداة فحص الثغرات الأمنية للمكتبات المستخدمة Dependency-Check في GitlabCI

تفاصيل لقطة الشاشة الثانية CVE-2017-5638. نرى هنا مستوى مكافحة التطرف العنيف وروابط لبرامج استغلال الثغرات.

استخدام أداة فحص الثغرات الأمنية للمكتبات المستخدمة Dependency-Check في GitlabCI

لقطة الشاشة الثالثة هي تفاصيل log4j-api-2.7.jar. نرى أن مستويات CVE هي 7.5 و9.8.

استخدام أداة فحص الثغرات الأمنية للمكتبات المستخدمة Dependency-Check في GitlabCI

لقطة الشاشة الرابعة هي تفاصيل commons-fileupload-1.3.2.jar. نرى أن مستويات CVE هي 7.5 و9.8.

استخدام أداة فحص الثغرات الأمنية للمكتبات المستخدمة Dependency-Check في GitlabCI

إذا كنت ترغب في استخدام صفحات gitlab، فلن ينجح ذلك - لن تؤدي المهمة المسقطة إلى إنشاء قطعة أثرية.

مثال هنا https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

إخراج البناء: لا توجد عناصر، ولا أرى تقرير html. يجب أن تجرب قطعة أثرية: دائمًا

https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages/-/jobs/400004246

استخدام أداة فحص الثغرات الأمنية للمكتبات المستخدمة Dependency-Check في GitlabCI

تنظيم مستوى نقاط الضعف في مجال مكافحة التطرف العنيف

السطر الأكثر أهمية في ملف gitlab-ci.yaml:

mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7

باستخدام المعلمة FailBuildOnCVSS، يمكنك ضبط مستوى نقاط الضعف في CVE التي تحتاج إلى الاستجابة لها.

تنزيل قاعدة بيانات NIST للثغرات الأمنية (NVD) من الإنترنت

هل لاحظت أن NIST يقوم باستمرار بتنزيل قواعد بيانات الثغرات الأمنية NIST (NVD) من الإنترنت:

استخدام أداة فحص الثغرات الأمنية للمكتبات المستخدمة Dependency-Check في GitlabCI

للتنزيل، يمكنك استخدام الأداة المساعدة nist_data_mirror_golang

لنقم بتثبيته وتشغيله.

yum -y install yum-plugin-copr
yum copr enable antonpatsev/nist_data_mirror_golang
yum -y install nist-data-mirror
systemctl start nist-data-mirror

يقوم Nist-data-mirror بتحميل NIST JSON CVE إلى /var/www/repos/nist-data-mirror/ عند بدء التشغيل ويقوم بتحديث البيانات كل 24 ساعة.

لتنزيل CVE JSON NIST، تحتاج إلى تكوين خادم الويب nginx (على سبيل المثال، على gitlab-runner).

مثال على الحد الأدنى من تكوين nginx:

server {
    listen       12345;
    listen       [::]:12345;
    server_name  _;
    root         /var/www/repos/nist-data-mirror/;

    location / {
        autoindex on;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

}

لكي لا نجعل خطًا طويلًا حيث يتم تشغيل mvn، سنقوم بنقل المعلمات إلى متغير منفصل DEPENDENCY_OPTS.

سيبدو الحد الأدنى النهائي من التكوين .gitlab-ci.yml كما يلي:

variables:
  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
  DEPENDENCY_OPTS: "-DfailBuildOnCVSS=7 -DcveUrlModified=http://localhost:12345/nvdcve-1.1-modified.json.gz -DcveUrlBase=http://localhost:12345/nvdcve-1.1-%d.json.gz"

cache:
  paths:
    - .m2/repository

verify:
  stage: test
  script:
    - set +e
    - mvn $MAVEN_CLI_OPTS install org.owasp:dependency-check-maven:check $DEPENDENCY_OPTS || EXIT_CODE=$?
    - export PATH_WITHOUT_HOME=$(pwd | sed -e "s//home/gitlab-runner/builds//g")
    - echo "************************* URL Dependency-check-report.html *************************"
    - echo "http://$HOSTNAME:9999$PATH_WITHOUT_HOME/target/dependency-check-report.html"
    - set -e
    - exit ${EXIT_CODE}
  tags:
    - shell

دردشة Telegram حول DevOps والأمن
قناة Telegram DevSecOps / SSDLC - التطوير الآمن

المصدر: www.habr.com

إضافة تعليق