ڈوکر سیکیورٹی چیک یوٹیلیٹیز کے نفاذ کے طریقے اور مثالیں۔

ڈوکر سیکیورٹی چیک یوٹیلیٹیز کے نفاذ کے طریقے اور مثالیں۔
ارے حبر!

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

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

سیکیورٹی چیک یوٹیلیٹیز

مختلف مددگار ایپلی کیشنز اور اسکرپٹس کی ایک بڑی تعداد موجود ہے جو ڈوکر انفراسٹرکچر کے مختلف پہلوؤں کی جانچ کرتی ہے۔ ان میں سے کچھ پہلے ہی ایک پچھلے مضمون میں بیان ہو چکے ہیں (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security)، اور اس مضمون میں میں ان میں سے تین پر توجہ مرکوز کرنا چاہوں گا، جو ڈوکر امیجز کے لیے حفاظتی تقاضوں کا ایک بڑا حصہ پورا کرتے ہیں جو ترقی کے عمل کے دوران بنتی ہیں۔ اس کے علاوہ، میں ایک مثال بھی دکھاؤں گا کہ کس طرح ان تینوں یوٹیلیٹیز کو ایک پائپ لائن میں جوڑا جا سکتا ہے تاکہ سیکیورٹی چیک کریں۔

Hadolint
https://github.com/hadolint/hadolint

ایک کافی آسان کنسول یوٹیلیٹی جو پہلے Dockerfile ہدایات کی درستگی اور حفاظت کا اندازہ لگانے میں مدد کرتی ہے (مثال کے طور پر، صرف اجازت شدہ تصویری رجسٹریوں کا استعمال کرنا یا sudo کا استعمال کرنا)۔

ڈوکر سیکیورٹی چیک یوٹیلیٹیز کے نفاذ کے طریقے اور مثالیں۔

ڈوکل
https://github.com/goodwithtech/dockle

ایک کنسول یوٹیلیٹی جو کسی تصویر پر کام کرتی ہے (یا محفوظ کردہ امیج ٹربال پر) جو کسی خاص تصویر کی درستگی اور حفاظت کی جانچ کرتی ہے جیسے کہ اس کی تہوں اور کنفیگریشن کا تجزیہ کر کے - کیا صارف بنائے گئے ہیں، کون سی ہدایات استعمال میں ہیں، کون سی والیوم نصب ہیں۔ ، خالی پاس ورڈ کی موجودگی، وغیرہ۔ جب کہ چیکوں کی تعداد بہت زیادہ نہیں ہے اور یہ کئی اپنے چیک اور سفارشات پر مبنی ہے۔ CIS (سینٹر فار انٹرنیٹ سیکیورٹی) بینچ مارک ڈاکر کے لئے.
ڈوکر سیکیورٹی چیک یوٹیلیٹیز کے نفاذ کے طریقے اور مثالیں۔

ٹریوی
https://github.com/aquasecurity/trivy

اس یوٹیلیٹی کا مقصد دو قسم کے خطرات کو تلاش کرنا ہے - OS کی تعمیر کے مسائل (Alpine، RedHat (EL)، CentOS، Debian GNU، Ubuntu تعاون یافتہ ہیں) اور انحصار کے مسائل (Gemfile.lock، Pipfile.lock، composer.lock، پیکیج لاک) .json , yarn.lock, Cargo.lock)۔ ٹریوی ریپوزٹری میں موجود امیج اور لوکل امیج دونوں کو اسکین کر سکتا ہے، اور ڈوکر امیج کے ساتھ ٹرانسفر شدہ .tar فائل کی بنیاد پر بھی اسکین کر سکتا ہے۔

ڈوکر سیکیورٹی چیک یوٹیلیٹیز کے نفاذ کے طریقے اور مثالیں۔

افادیت کے نفاذ کے اختیارات

بیان کردہ ایپلیکیشنز کو الگ تھلگ حالات میں آزمانے کے لیے، میں ایک آسان عمل کے حصے کے طور پر تمام یوٹیلٹیز کو انسٹال کرنے کے لیے ہدایات فراہم کروں گا۔

مرکزی خیال یہ ظاہر کرنا ہے کہ آپ ڈوکر فائلز اور ڈوکر امیجز کے لیے خودکار مواد کی جانچ کو کیسے لاگو کر سکتے ہیں جو ڈویلپمنٹ کے دوران بنتی ہیں۔

تصدیق خود مندرجہ ذیل مراحل پر مشتمل ہے:

  1. لنٹر یوٹیلیٹی کے ساتھ ڈاکر فائل ہدایات کی درستگی اور حفاظت کی جانچ کرنا Hadolint
  2. حتمی اور درمیانی تصاویر کی درستگی اور حفاظت کی جانچ کرنا - ایک افادیت ڈوکل
  3. یوٹیلیٹی کے ذریعہ - بیس امیج میں عام طور پر معلوم کمزوریوں (CVE) کی جانچ کرنا اور متعدد انحصار ٹریوی

بعد میں مضمون میں میں ان اقدامات کو نافذ کرنے کے لیے تین اختیارات دوں گا:
پہلا ایک GitLab کی مثال کا استعمال کرتے ہوئے CI / CD پائپ لائن کو ترتیب دینا ہے (ایک ٹیسٹ مثال کو بڑھانے کے عمل کی وضاحت کے ساتھ)۔
دوسرا شیل اسکرپٹ کا استعمال کر رہا ہے۔
تیسرا ڈوکر امیجز کو اسکین کرنے کے لیے ڈوکر امیج بنانے کے ساتھ ہے۔
آپ اس اختیار کا انتخاب کر سکتے ہیں جو آپ کے لیے موزوں ہو، اسے اپنے بنیادی ڈھانچے میں منتقل کر کے اسے اپنی ضروریات کے مطابق ڈھال سکتے ہیں۔

تمام ضروری فائلیں اور اضافی ہدایات بھی مخزن میں ہیں: https://github.com/Swordfish-Security/docker_cicd

GitLab CI/CD انضمام

پہلے آپشن میں، ہم دیکھیں گے کہ GitLab ریپوزٹری سسٹم کو بطور مثال استعمال کرتے ہوئے سیکیورٹی چیکس کو کیسے لاگو کیا جا سکتا ہے۔ یہاں ہم مراحل سے گزریں گے اور دیکھیں گے کہ GitLab کے ساتھ شروع سے ٹیسٹ ماحول کیسے ترتیب دیا جائے، اسکین کا عمل کیسے بنایا جائے اور ٹیسٹ Dockerfile اور ایک بے ترتیب تصویر - JuiceShop ایپلیکیشن کو جانچنے کے لیے یوٹیلیٹیز چلائیں۔

GitLab انسٹال کرنا
1. ڈوکر انسٹال کریں:

sudo apt-get update && sudo apt-get install docker.io

2. موجودہ صارف کو ڈوکر گروپ میں شامل کریں تاکہ آپ sudo استعمال کیے بغیر docker کے ساتھ کام کر سکیں:

sudo addgroup <username> docker

3. اپنا IP تلاش کریں:

ip addr

4. کنٹینر میں GitLab انسٹال کریں اور چلائیں، میزبان نام میں IP ایڈریس کو اپنے نام سے بدلیں:

docker run --detach 
--hostname 192.168.1.112 
--publish 443:443 --publish 80:80 
--name gitlab 
--restart always 
--volume /srv/gitlab/config:/etc/gitlab 
--volume /srv/gitlab/logs:/var/log/gitlab 
--volume /srv/gitlab/data:/var/opt/gitlab 
gitlab/gitlab-ce:latest

ہم گٹ لیب کے تمام ضروری تنصیب کے طریقہ کار کو مکمل کرنے کا انتظار کر رہے ہیں (آپ لاگ فائل کے آؤٹ پٹ کے ذریعے عمل کی پیروی کر سکتے ہیں: docker logs -f gitlab)۔

5. براؤزر میں اپنا مقامی IP کھولیں اور روٹ صارف کے لیے پاس ورڈ تبدیل کرنے کی پیشکش کرنے والا صفحہ دیکھیں:
ڈوکر سیکیورٹی چیک یوٹیلیٹیز کے نفاذ کے طریقے اور مثالیں۔
نیا پاس ورڈ سیٹ کریں اور GitLab پر جائیں۔

6. ایک نیا پروجیکٹ بنائیں، مثال کے طور پر cicd-test اور اسے اسٹارٹ فائل کے ساتھ شروع کریں۔ README.md:
ڈوکر سیکیورٹی چیک یوٹیلیٹیز کے نفاذ کے طریقے اور مثالیں۔
7. اب ہمیں GitLab Runner کو انسٹال کرنے کی ضرورت ہے: ایک ایسا ایجنٹ جو درخواست پر تمام ضروری آپریشنز چلائے۔
تازہ ترین ورژن ڈاؤن لوڈ کریں (اس معاملے میں، لینکس 64 بٹ کے تحت):

sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

8. اسے قابل عمل بنائیں:

sudo chmod +x /usr/local/bin/gitlab-runner

9. رنر کے لیے ایک OS صارف شامل کریں اور سروس شروع کریں:

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

اسے کچھ اس طرح نظر آنا چاہئے:

local@osboxes:~$ sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
Runtime platform arch=amd64 os=linux pid=8438 revision=0e5417a3 version=12.0.1
local@osboxes:~$ sudo gitlab-runner start
Runtime platform arch=amd64 os=linux pid=8518 revision=0e5417a3 version=12.0.1

10. اب ہم رنر کو رجسٹر کرتے ہیں تاکہ یہ ہمارے GitLab مثال کے ساتھ تعامل کر سکے۔
ایسا کرنے کے لیے، Settings-CI/CD صفحہ کھولیں (http://OUR_ IP_ADDRESS/root/cicd-test/-/settings/ci_cd) اور رنر ٹیب پر URL اور رجسٹریشن ٹوکن تلاش کریں:
ڈوکر سیکیورٹی چیک یوٹیلیٹیز کے نفاذ کے طریقے اور مثالیں۔
11. یو آر ایل اور رجسٹریشن ٹوکن کو بدل کر رنر کو رجسٹر کریں:

sudo gitlab-runner register 
--non-interactive 
--url "http://<URL>/" 
--registration-token "<Registration Token>" 
--executor "docker" 
--docker-privileged 
--docker-image alpine:latest 
--description "docker-runner" 
--tag-list "docker,privileged" 
--run-untagged="true" 
--locked="false" 
--access-level="not_protected"

نتیجے کے طور پر، ہمیں ایک ریڈی میڈ ورکنگ GitLab ملتا ہے، جس میں ہمیں اپنی یوٹیلیٹیز شروع کرنے کے لیے ہدایات شامل کرنے کی ضرورت ہوتی ہے۔ اس ڈیمو میں، ہمارے پاس ایپلیکیشن بنانے اور کنٹینرائزیشن کے اقدامات نہیں ہیں، لیکن ایک حقیقی ماحول میں وہ اسکین کے مراحل سے پہلے ہوں گے اور تجزیہ کے لیے تصاویر اور ایک ڈاکر فائل تیار کریں گے۔

پائپ لائن کی ترتیب

1. ذخیرہ میں فائلیں شامل کریں۔ mydockerfile.df (یہ ایک ٹیسٹ ڈاکر فائل ہے جس کی ہم جانچ کریں گے) اور GitLab CI/CD پروسیس کنفیگریشن فائل gitlab-cicd.yml، جو اسکینرز کے لیے ہدایات کی فہرست دیتا ہے (فائل کے نام میں ڈاٹ نوٹ کریں)۔

.yaml کنفیگریشن فائل میں تین یوٹیلیٹیز (Hadolint، Dockle، اور Trivy) چلانے کے لیے ہدایات شامل ہیں جو منتخب ڈاکر فائل اور DOCKERFILE متغیر میں بیان کردہ تصویر کو پارس کرے گی۔ تمام ضروری فائلوں کو ذخیرہ سے لیا جا سکتا ہے: https://github.com/Swordfish-Security/docker_cicd/

سے نکالیں۔ mydockerfile.df (یہ ایک خلاصہ فائل ہے جس میں صوابدیدی ہدایات کے ایک سیٹ کے ساتھ صرف یہ ظاہر کرنا ہے کہ افادیت کیسے کام کرتی ہے)۔ فائل سے براہ راست لنک: mydockerfile.df

mydockerfile.df کے مشمولات

FROM amd64/node:10.16.0-alpine@sha256:f59303fb3248e5d992586c76cc83e1d3700f641cbcd7c0067bc7ad5bb2e5b489 AS tsbuild
COPY package.json .
COPY yarn.lock .
RUN yarn install
COPY lib lib
COPY tsconfig.json tsconfig.json
COPY tsconfig.app.json tsconfig.app.json
RUN yarn build
FROM amd64/ubuntu:18.04@sha256:eb70667a801686f914408558660da753cde27192cd036148e58258819b927395
LABEL maintainer="Rhys Arkins <[email protected]>"
LABEL name="renovate"
...
COPY php.ini /usr/local/etc/php/php.ini
RUN cp -a /tmp/piik/* /var/www/html/
RUN rm -rf /tmp/piwik
RUN chown -R www-data /var/www/html
ADD piwik-cli-setup /piwik-cli-setup
ADD reset.php /var/www/html/
## ENTRYPOINT ##
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
USER root

ترتیب YAML اس طرح نظر آتی ہے (فائل خود یہاں براہ راست لنک سے لیا جا سکتا ہے: gitlab-ci.yml):

gitlab-ci.yml کے مشمولات

variables:
    DOCKER_HOST: "tcp://docker:2375/"
    DOCKERFILE: "mydockerfile.df" # name of the Dockerfile to analyse   
    DOCKERIMAGE: "bkimminich/juice-shop" # name of the Docker image to analyse
    # DOCKERIMAGE: "knqyf263/cve-2018-11235" # test Docker image with several CRITICAL CVE
    SHOWSTOPPER_PRIORITY: "CRITICAL" # what level of criticality will fail Trivy job
    TRIVYCACHE: "$CI_PROJECT_DIR/.cache" # where to cache Trivy database of vulnerabilities for faster reuse
    ARTIFACT_FOLDER: "$CI_PROJECT_DIR"
 
services:
    - docker:dind # to be able to build docker images inside the Runner
 
stages:
    - scan
    - report
    - publish
 
HadoLint:
    # Basic lint analysis of Dockerfile instructions
    stage: scan
    image: docker:git
 
    after_script:
    - cat $ARTIFACT_FOLDER/hadolint_results.json
 
    script:
    - export VERSION=$(wget -q -O - https://api.github.com/repos/hadolint/hadolint/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/hadolint/hadolint/releases/download/v${VERSION}/hadolint-Linux-x86_64 && chmod +x hadolint-Linux-x86_64
     
    # NB: hadolint will always exit with 0 exit code
    - ./hadolint-Linux-x86_64 -f json $DOCKERFILE > $ARTIFACT_FOLDER/hadolint_results.json || exit 0
 
    artifacts:
        when: always # return artifacts even after job failure       
        paths:
        - $ARTIFACT_FOLDER/hadolint_results.json
 
Dockle:
    # Analysing best practices about docker image (users permissions, instructions followed when image was built, etc.)
    stage: scan   
    image: docker:git
 
    after_script:
    - cat $ARTIFACT_FOLDER/dockle_results.json
 
    script:
    - export VERSION=$(wget -q -O - https://api.github.com/repos/goodwithtech/dockle/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.tar.gz && tar zxf dockle_${VERSION}_Linux-64bit.tar.gz
    - ./dockle --exit-code 1 -f json --output $ARTIFACT_FOLDER/dockle_results.json $DOCKERIMAGE   
     
    artifacts:
        when: always # return artifacts even after job failure       
        paths:
        - $ARTIFACT_FOLDER/dockle_results.json
 
Trivy:
    # Analysing docker image and package dependencies against several CVE bases
    stage: scan   
    image: docker:git
 
    script:
    # getting the latest Trivy
    - apk add rpm
    - export VERSION=$(wget -q -O - https://api.github.com/repos/knqyf263/trivy/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/knqyf263/trivy/releases/download/v${VERSION}/trivy_${VERSION}_Linux-64bit.tar.gz && tar zxf trivy_${VERSION}_Linux-64bit.tar.gz
     
    # displaying all vulnerabilities w/o failing the build
    - ./trivy -d --cache-dir $TRIVYCACHE -f json -o $ARTIFACT_FOLDER/trivy_results.json --exit-code 0 $DOCKERIMAGE    
    
    # write vulnerabilities info to stdout in human readable format (reading pure json is not fun, eh?). You can remove this if you don't need this.
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 0 $DOCKERIMAGE    
 
    # failing the build if the SHOWSTOPPER priority is found
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 1 --severity $SHOWSTOPPER_PRIORITY --quiet $DOCKERIMAGE
         
    artifacts:
        when: always # return artifacts even after job failure
        paths:
        - $ARTIFACT_FOLDER/trivy_results.json
 
    cache:
        paths:
        - .cache
 
Report:
    # combining tools outputs into one HTML
    stage: report
    when: always
    image: python:3.5
     
    script:
    - mkdir json
    - cp $ARTIFACT_FOLDER/*.json ./json/
    - pip install json2html
    - wget https://raw.githubusercontent.com/shad0wrunner/docker_cicd/master/convert_json_results.py
    - python ./convert_json_results.py
     
    artifacts:
        paths:
        - results.html

اگر ضروری ہو تو، آپ محفوظ شدہ تصاویر کو .tar آرکائیو کے طور پر بھی اسکین کر سکتے ہیں (تاہم، آپ کو YAML فائل میں یوٹیلیٹیز کے لیے ان پٹ پیرامیٹرز کو تبدیل کرنے کی ضرورت ہوگی)

نوٹ: ٹریوی کو انسٹال کرنے کی ضرورت ہے۔ RPM и گٹ. بصورت دیگر، یہ RedHat پر مبنی امیجز کو اسکین کرنے اور کمزور ڈیٹا بیس میں اپ ڈیٹ حاصل کرنے کے دوران غلطیاں پیدا کرے گا۔

2. فائلوں کو ریپوزٹری میں شامل کرنے کے بعد، ہماری کنفیگریشن فائل میں دی گئی ہدایات کے مطابق، GitLab خود بخود تعمیر اور اسکین کا عمل شروع کر دے گا۔ CI/CD → پائپ لائنز ٹیب پر، آپ ہدایات کی پیشرفت دیکھ سکتے ہیں۔

نتیجے کے طور پر، ہمارے پاس چار کام ہیں. ان میں سے تین براہ راست اسکیننگ میں ملوث ہیں، اور آخری ایک (رپورٹ) اسکین کے نتائج کے ساتھ بکھری فائلوں سے ایک سادہ رپورٹ جمع کرتی ہے۔
ڈوکر سیکیورٹی چیک یوٹیلیٹیز کے نفاذ کے طریقے اور مثالیں۔
پہلے سے طے شدہ طور پر، اگر تصویر یا انحصار میں CRITICAL کمزوریاں پائی جاتی ہیں تو Trivy اس پر عمل درآمد روک دیتا ہے۔ ایک ہی وقت میں، Hadolint ہمیشہ کامیابی کا کوڈ لوٹاتا ہے، کیونکہ اس پر عمل درآمد میں ہمیشہ ریمارکس ہوتے ہیں، جو کہ تعمیر کو روکنے کا باعث بنتے ہیں۔

آپ کی مخصوص ضروریات پر منحصر ہے، آپ ایک ایگزٹ کوڈ کو ترتیب دے سکتے ہیں تاکہ یہ یوٹیلیٹیز تعمیراتی عمل کو بھی روک دیں جب کسی خاص تنقید کے مسائل کا پتہ چل جائے۔ ہمارے معاملے میں، تعمیر صرف اس صورت میں رکے گی جب ٹریوی کو اس شدت کے ساتھ کسی کمزوری کا پتہ چلے جس کی ہم نے SHOWSTOPPER متغیر میں وضاحت کی ہے۔ gitlab-ci.yml.
ڈوکر سیکیورٹی چیک یوٹیلیٹیز کے نفاذ کے طریقے اور مثالیں۔

ہر یوٹیلیٹی کے آپریشن کا نتیجہ ہر اسکیننگ ٹاسک کے لاگ میں، براہ راست آرٹفیکٹس سیکشن میں json فائلوں میں، یا ایک سادہ ایچ ٹی ایم ایل رپورٹ میں دیکھا جا سکتا ہے (اس پر مزید ذیل میں):
ڈوکر سیکیورٹی چیک یوٹیلیٹیز کے نفاذ کے طریقے اور مثالیں۔

3. یوٹیلیٹی رپورٹس کو قدرے زیادہ انسانی پڑھنے کے قابل شکل میں پیش کرنے کے لیے، ایک چھوٹا Python اسکرپٹ استعمال کیا جاتا ہے تاکہ تین json فائلوں کو ایک HTML فائل میں نقائص کی میز کے ساتھ تبدیل کیا جا سکے۔
یہ اسکرپٹ ایک علیحدہ رپورٹ ٹاسک کے ذریعے شروع کیا گیا ہے، اور اس کا حتمی نمونہ رپورٹ کے ساتھ ایک HTML فائل ہے۔ اسکرپٹ کا ذریعہ بھی ذخیرہ میں ہے اور اسے آپ کی ضروریات، رنگوں وغیرہ کے مطابق ڈھالا جا سکتا ہے۔
ڈوکر سیکیورٹی چیک یوٹیلیٹیز کے نفاذ کے طریقے اور مثالیں۔

شیل اسکرپٹ

دوسرا آپشن ان صورتوں کے لیے موزوں ہے جہاں آپ کو Docker امیجز کو چیک کرنے کی ضرورت ہے جو CI/CD سسٹم کے اندر نہیں ہیں، یا آپ کے پاس تمام ہدایات ایسی شکل میں ہونی چاہئیں جو براہ راست میزبان پر لاگو کی جا سکیں۔ یہ آپشن ایک ریڈی میڈ شیل اسکرپٹ سے ڈھکا ہوا ہے جسے کلین ورچوئل (یا اصلی) مشین پر چلایا جا سکتا ہے۔ اسکرپٹ انہی ہدایات پر عمل کرتا ہے جیسا کہ اوپر gitlab-runner ہے۔

اسکرپٹ کے کامیابی سے کام کرنے کے لیے، ڈوکر کا سسٹم پر انسٹال ہونا ضروری ہے اور موجودہ صارف کا ڈوکر گروپ میں ہونا ضروری ہے۔

اسکرپٹ خود یہاں پایا جا سکتا ہے: docker_sec_check.sh

فائل کے شروع میں، متغیرات بتاتے ہیں کہ کون سی تصویر کو اسکین کیا جانا چاہیے اور خرابیوں کی کون سی شدت ٹریوی یوٹیلیٹی کو مخصوص ایرر کوڈ کے ساتھ باہر جانے کا سبب بنے گی۔

اسکرپٹ پر عمل درآمد کے دوران، تمام افادیت کو ڈائرکٹری میں ڈاؤن لوڈ کیا جائے گا۔ docker_tools، ان کے کام کے نتائج - ڈائریکٹری میں docker_tools/json، اور رپورٹ کے ساتھ HTML فائل میں ہوگا۔ results.html.

اسکرپٹ آؤٹ پٹ کی مثال

~/docker_cicd$ ./docker_sec_check.sh

[+] Setting environment variables
[+] Installing required packages
[+] Preparing necessary directories
[+] Fetching sample Dockerfile
2020-10-20 10:40:00 (45.3 MB/s) - ‘Dockerfile’ saved [8071/8071]
[+] Pulling image to scan
latest: Pulling from bkimminich/juice-shop
[+] Running Hadolint
...
Dockerfile:205 DL3015 Avoid additional packages by specifying `--no-install-recommends`
Dockerfile:248 DL3002 Last USER should not be root
...
[+] Running Dockle
...
WARN    - DKL-DI-0006: Avoid latest tag
        * Avoid 'latest' tag
INFO    - CIS-DI-0005: Enable Content trust for Docker
        * export DOCKER_CONTENT_TRUST=1 before docker pull/build
...
[+] Running Trivy
juice-shop/frontend/package-lock.json
=====================================
Total: 3 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 2, CRITICAL: 0)

+---------------------+------------------+----------+---------+-------------------------+
|       LIBRARY       | VULNERABILITY ID | SEVERITY | VERSION |             TITLE       |
+---------------------+------------------+----------+---------+-------------------------+
| object-path         | CVE-2020-15256   | HIGH     | 0.11.4  | Prototype pollution in  |
|                     |                  |          |         | object-path             |
+---------------------+------------------+          +---------+-------------------------+
| tree-kill           | CVE-2019-15599   |          | 1.2.2   | Code Injection          |
+---------------------+------------------+----------+---------+-------------------------+
| webpack-subresource | CVE-2020-15262   | LOW      | 1.4.1   | Unprotected dynamically |
|                     |                  |          |         | loaded chunks           |
+---------------------+------------------+----------+---------+-------------------------+

juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)

...

juice-shop/package-lock.json
============================
Total: 5 (CRITICAL: 5)

...
[+] Removing left-overs
[+] Making the output look pretty
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html

تمام افادیت کے ساتھ ڈوکر امیج

تیسرے متبادل کے طور پر، میں نے سیکیورٹی افادیت کے ساتھ ایک تصویر بنانے کے لیے دو آسان ڈاکر فائلز مرتب کیں۔ ایک ڈاکر فائل ریپوزٹری سے امیج کو اسکین کرنے کے لیے ایک سیٹ بنانے میں مدد کرے گی، دوسری (Dockerfile_tar) تصویر کے ساتھ ٹار فائل کو اسکین کرنے کے لیے ایک سیٹ بنائے گی۔

1. ہم ریپوزٹری سے مناسب ڈوکر فائل اور اسکرپٹ لیتے ہیں۔ https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. اسے اسمبلی کے لیے چلائیں:

docker build -t dscan:image -f docker_security.df .

3. تعمیر مکمل ہونے کے بعد، تصویر سے ایک کنٹینر بنائیں۔ اسی وقت، ہم DOCKERIMAGE ماحولیاتی متغیر کو اس تصویر کے نام کے ساتھ پاس کرتے ہیں جس میں ہماری دلچسپی ہے اور Dockerfile کو ماؤنٹ کرتے ہیں جس کا ہم اپنی مشین سے فائل میں تجزیہ کرنا چاہتے ہیں۔ /ڈاکر فائل (نوٹ کریں کہ اس فائل کے لیے ایک مطلق راستہ درکار ہے):

docker run --rm -v $(pwd)/results:/results -v $(pwd)/docker_security.df:/Dockerfile -e DOCKERIMAGE="bkimminich/juice-shop" dscan:image


[+] Setting environment variables
[+] Running Hadolint
/Dockerfile:3 DL3006 Always tag the version of an image explicitly
[+] Running Dockle
WARN    - DKL-DI-0006: Avoid latest tag
        * Avoid 'latest' tag
INFO    - CIS-DI-0005: Enable Content trust for Docker
        * export DOCKER_CONTENT_TRUST=1 before docker pull/build
INFO    - CIS-DI-0006: Add HEALTHCHECK instruction to the container image
        * not found HEALTHCHECK statement
INFO    - DKL-LI-0003: Only put necessary files
        * unnecessary file : juice-shop/node_modules/sqlite3/Dockerfile
        * unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm64/Dockerfile
        * unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm/Dockerfile
[+] Running Trivy
...
juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
[+] Making the output look pretty
[+] Starting the main module ============================================================
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html

نتائج

ہم نے ڈوکر آرٹفیکٹ اسکیننگ یوٹیلیٹی کے صرف ایک بنیادی سیٹ کا احاطہ کیا ہے، جو میرے خیال میں امیج سیکیورٹی کی ضروریات کے ایک اچھے حصے کا کافی مؤثر طریقے سے احاطہ کرتا ہے۔ بہت سے دوسرے بامعاوضہ اور مفت ٹولز ہیں جو ایک جیسے چیک کر سکتے ہیں، خوبصورت رپورٹیں تیار کر سکتے ہیں یا خالصتاً کنسول موڈ، کور کنٹینر مینجمنٹ سسٹم وغیرہ میں کام کر سکتے ہیں۔ ان ٹولز کا ایک جائزہ اور ان کو مربوط کرنے کا طریقہ کچھ دیر بعد ظاہر ہو سکتا ہے۔

آرٹیکل میں بیان کردہ ٹولز کے سیٹ کا مثبت پہلو یہ ہے کہ وہ سبھی اوپن سورس پر بنائے گئے ہیں اور آپ ان اور اسی طرح کے دوسرے ٹولز کے ساتھ تجربہ کر سکتے ہیں تاکہ یہ معلوم کیا جا سکے کہ آپ کی ضروریات اور بنیادی ڈھانچے کی خصوصیات کے مطابق کیا ہے۔ بلاشبہ، پائی جانے والی تمام کمزوریوں کا مخصوص حالات میں قابل اطلاق ہونے کے لیے مطالعہ کیا جانا چاہیے، لیکن یہ مستقبل کے بڑے مضمون کے لیے ایک موضوع ہے۔

مجھے امید ہے کہ یہ ہدایات، اسکرپٹس اور یوٹیلیٹیز آپ کی مدد کریں گی اور کنٹینرائزیشن کے میدان میں زیادہ محفوظ انفراسٹرکچر بنانے کا نقطہ آغاز بنیں گی۔

ماخذ: www.habr.com

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