خطرے کے انتظام کا ایک اہم حصہ سافٹ ویئر کے اجزاء کی سپلائی چین کو اچھی طرح سے سمجھنا اور محفوظ کرنا ہے جو جدید نظام بناتے ہیں۔ 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 انحصار چیک پروجیکٹ یا تجارتی پروگرام جیسے ٹولز کا استعمال کرکے خود بخود کیا جا سکتا ہے۔
ان ٹولز کو اوپن سورس انحصارات کو خود بخود انوینٹری کرنے کے لیے پائپ لائنوں کی تعمیر میں شامل کیا جا سکتا ہے، لائبریریوں اور لائبریریوں کے پرانے ورژنوں کی شناخت کی جا سکتی ہے جن میں معلوم خطرات موجود ہیں، اور اگر سنگین مسائل کا پتہ چل جائے تو تعمیرات کو روکا جا سکتا ہے۔
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 {
}
}
اسمبلی کے آخر میں آپ یہ تصویر دیکھ سکتے ہیں:
لنک پر عمل کریں اور انحصار چیک رپورٹ دیکھیں۔
پہلا اسکرین شاٹ خلاصہ کے ساتھ رپورٹ کا اوپری حصہ ہے۔
دوسرے اسکرین شاٹ کی تفصیلات CVE-2017-5638۔ یہاں ہم CVE کی سطح اور استحصال کے لنکس دیکھتے ہیں۔
تیسرا اسکرین شاٹ log4j-api-2.7.jar کی تفصیلات ہے۔ ہم دیکھتے ہیں کہ CVE کی سطحیں 7.5 اور 9.8 ہیں۔
چوتھا اسکرین شاٹ Commons-fileupload-1.3.2.jar کی تفصیلات ہے۔ ہم دیکھتے ہیں کہ CVE کی سطحیں 7.5 اور 9.8 ہیں۔
اگر آپ gitlab صفحات استعمال کرنا چاہتے ہیں، تو یہ کام نہیں کرے گا - گرا ہوا کام ایک نمونہ نہیں بنائے گا۔
مثال یہاں
آؤٹ پٹ بنائیں: کوئی نمونے نہیں، مجھے HTML رپورٹ نظر نہیں آ رہی۔ آپ کو آرٹیفیکٹ کو آزمانا چاہئے: ہمیشہ
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) کو انٹرنیٹ سے ڈاؤن لوڈ کرتا ہے:
ڈاؤن لوڈ کرنے کے لیے، آپ یوٹیلیٹی استعمال کر سکتے ہیں۔
آئیے اسے انسٹال اور لانچ کریں۔
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
ماخذ: www.habr.com