استعمال شدہ لائبریریوں کے لیے کمزوری اسکینر کا استعمال کرنا Dependency-Check in GitlabCI

خطرے کے انتظام کا ایک اہم حصہ سافٹ ویئر کے اجزاء کی سپلائی چین کو اچھی طرح سے سمجھنا اور محفوظ کرنا ہے جو جدید نظام بناتے ہیں۔ Agile اور DevOps ٹیمیں ترقیاتی وقت اور لاگت کو کم کرنے کے لیے اوپن سورس لائبریریوں اور فریم ورک کا وسیع استعمال کرتی ہیں۔ لیکن اس تمغے کا ایک منفی پہلو بھی ہے: دوسرے لوگوں کی غلطیوں اور کمزوریوں کا وارث ہونے کا موقع۔

ظاہر ہے، ٹیم کو اس بات کا یقین ہونا چاہیے کہ اس کی ایپلی کیشنز میں کون سے اوپن سورس اجزاء شامل ہیں، اس بات کو یقینی بنانا چاہیے کہ معلوم قابل بھروسہ ورژن معروف معتبر ذرائع سے ڈاؤن لوڈ کیے گئے ہیں، اور نئے دریافت ہونے والے خطرات کو پیچ کرنے کے بعد اجزاء کے اپ ڈیٹ شدہ ورژن ڈاؤن لوڈ کریں۔

اس پوسٹ میں، ہم OWASP Dependency Check کا استعمال کرتے ہوئے دیکھیں گے کہ اگر وہ آپ کے کوڈ کے ساتھ سنگین مسائل کا پتہ لگاتا ہے تو کسی تعمیر کو ختم کرنے کے لیے۔

کتاب "Development Security in Agile Projects" میں اسے اس طرح بیان کیا گیا ہے۔ OWASP Dependency Check ایک مفت اسکینر ہے جو کسی ایپلیکیشن میں استعمال ہونے والے تمام اوپن سورس اجزاء کی فہرست بناتا ہے اور ان میں موجود کمزوریوں کو ظاہر کرتا ہے۔ Java، .NET، Ruby (gemspec)، PHP (composer)، Node.js اور Python کے ساتھ ساتھ کچھ C/C++ پروجیکٹس کے لیے بھی ورژن موجود ہیں۔ انحصار چیک عام تعمیراتی ٹولز کے ساتھ ضم ہوتا ہے، بشمول چیونٹی، ماون اور گریڈل، اور جینکنز جیسے مسلسل انٹیگریشن سرورز۔

ڈیپینڈینسی چیک NIST کے نیشنل ولنریبلٹی ڈیٹا بیس (NVD) سے معلوم کمزوریوں کے ساتھ تمام اجزاء کی رپورٹ کرتا ہے اور NVD نیوز فیڈز کے ڈیٹا کے ساتھ اپ ڈیٹ ہوتا ہے۔

خوش قسمتی سے، یہ سب کچھ OWASP انحصار چیک پروجیکٹ یا تجارتی پروگرام جیسے ٹولز کا استعمال کرکے خود بخود کیا جا سکتا ہے۔ بلیک بتھ, جے فراگ ایکسرے, سنک, Nexus لائف سائیکل سوناٹائپ یا سورس کلیئر.

ان ٹولز کو اوپن سورس انحصارات کو خود بخود انوینٹری کرنے کے لیے پائپ لائنوں کی تعمیر میں شامل کیا جا سکتا ہے، لائبریریوں اور لائبریریوں کے پرانے ورژنوں کی شناخت کی جا سکتی ہے جن میں معلوم خطرات موجود ہیں، اور اگر سنگین مسائل کا پتہ چل جائے تو تعمیرات کو روکا جا سکتا ہے۔

OWASP انحصار کی جانچ

یہ جانچنے اور ظاہر کرنے کے لیے کہ انحصار چیک کیسے کام کرتا ہے، ہم اس ذخیرہ کو استعمال کرتے ہیں۔ انحصار کی جانچ کی مثال.

HTML رپورٹ دیکھنے کے لیے، آپ کو اپنے gitlab-runner پر nginx ویب سرور کو کنفیگر کرنا ہوگا۔

کم سے کم 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 in GitlabCI

لنک پر عمل کریں اور انحصار چیک رپورٹ دیکھیں۔

پہلا اسکرین شاٹ خلاصہ کے ساتھ رپورٹ کا اوپری حصہ ہے۔

استعمال شدہ لائبریریوں کے لیے کمزوری اسکینر کا استعمال کرنا Dependency-Check in GitlabCI

دوسرے اسکرین شاٹ کی تفصیلات CVE-2017-5638۔ یہاں ہم CVE کی سطح اور استحصال کے لنکس دیکھتے ہیں۔

استعمال شدہ لائبریریوں کے لیے کمزوری اسکینر کا استعمال کرنا Dependency-Check in GitlabCI

تیسرا اسکرین شاٹ log4j-api-2.7.jar کی تفصیلات ہے۔ ہم دیکھتے ہیں کہ CVE کی سطحیں 7.5 اور 9.8 ہیں۔

استعمال شدہ لائبریریوں کے لیے کمزوری اسکینر کا استعمال کرنا Dependency-Check in GitlabCI

چوتھا اسکرین شاٹ Commons-fileupload-1.3.2.jar کی تفصیلات ہے۔ ہم دیکھتے ہیں کہ CVE کی سطحیں 7.5 اور 9.8 ہیں۔

استعمال شدہ لائبریریوں کے لیے کمزوری اسکینر کا استعمال کرنا Dependency-Check in 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 in GitlabCI

CVE خطرات کی سطح کو منظم کرنا

gitlab-ci.yaml فائل میں سب سے اہم لائن:

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

failBuildOnCVSS پیرامیٹر کے ساتھ آپ CVE کمزوریوں کی سطح کو ایڈجسٹ کر سکتے ہیں جس پر آپ کو جواب دینے کی ضرورت ہے۔

انٹرنیٹ سے NIST Vulnerability Database (NVD) ڈاؤن لوڈ کرنا

کیا آپ نے دیکھا ہے کہ NIST مسلسل NIST vulnerability database (NVD) کو انٹرنیٹ سے ڈاؤن لوڈ کرتا ہے:

استعمال شدہ لائبریریوں کے لیے کمزوری اسکینر کا استعمال کرنا Dependency-Check in 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

DevOps اور سیکیورٹی کے بارے میں ٹیلیگرام چیٹ
ٹیلیگرام چینل DevSecOps / SSDLC - محفوظ ترقی

ماخذ: www.habr.com

نیا تبصرہ شامل کریں