ஹே ஹப்ர்!
இன்றைய யதார்த்தத்தில், வளர்ச்சி செயல்முறைகளில் கொள்கலன்மயமாக்கலின் பங்கு அதிகரித்து வருவதால், கொள்கலன்களுடன் தொடர்புடைய பல்வேறு நிலைகள் மற்றும் நிறுவனங்களின் பாதுகாப்பை உறுதி செய்யும் பிரச்சினை கடைசி இடத்தில் இல்லை. காசோலைகளை கைமுறையாகச் செய்வது கடினமான பணியாகும், எனவே இந்த செயல்முறையை தானியங்குபடுத்துவதற்கான ஆரம்ப நடவடிக்கைகளையாவது எடுப்பது நல்லது.
இந்தக் கட்டுரையில், பல டோக்கர் பாதுகாப்புப் பயன்பாடுகளைச் செயல்படுத்துவதற்கான ஆயத்த ஸ்கிரிப்ட்களையும், இந்தச் செயல்முறையைச் சோதிக்க ஒரு சிறிய டெமோ ஸ்டாண்டை எவ்வாறு அமைப்பது என்பதற்கான வழிமுறைகளையும் பகிர்ந்து கொள்கிறேன். Dockerfile படங்கள் மற்றும் வழிமுறைகளின் பாதுகாப்பை சோதிக்கும் செயல்முறையை எவ்வாறு ஒழுங்கமைப்பது என்பதை பரிசோதிக்க நீங்கள் பொருட்களைப் பயன்படுத்தலாம். வளர்ச்சி மற்றும் செயல்படுத்தல் உள்கட்டமைப்பு அனைவருக்கும் வேறுபட்டது என்பது தெளிவாகிறது, எனவே கீழே நான் பல சாத்தியமான விருப்பங்களை தருகிறேன்.
பாதுகாப்பு சோதனை பயன்பாடுகள்
டோக்கர் உள்கட்டமைப்பின் பல்வேறு அம்சங்களைச் சரிபார்க்கும் பல்வேறு உதவி பயன்பாடுகள் மற்றும் ஸ்கிரிப்ட்கள் அதிக எண்ணிக்கையில் உள்ளன. அவற்றில் சில ஏற்கனவே முந்தைய கட்டுரையில் விவரிக்கப்பட்டுள்ளன (
ஹாடோலின்ட்
Dockerfile வழிமுறைகளின் சரியான தன்மை மற்றும் பாதுகாப்பை முதலில் மதிப்பிட உதவும் மிகவும் எளிமையான கன்சோல் பயன்பாடு (உதாரணமாக, அனுமதிக்கப்பட்ட படப் பதிவேடுகளை மட்டுமே பயன்படுத்துதல் அல்லது சூடோவைப் பயன்படுத்துதல்).
டாக்கிள்
ஒரு படத்தில் (அல்லது சேமித்த பட டார்பாலில்) வேலை செய்யும் ஒரு கன்சோல் பயன்பாடு, ஒரு குறிப்பிட்ட படத்தின் லேயர்கள் மற்றும் உள்ளமைவை பகுப்பாய்வு செய்வதன் மூலம் அதன் சரியான தன்மை மற்றும் பாதுகாப்பை சரிபார்க்கிறது - என்ன பயனர்கள் உருவாக்கப்படுகிறார்கள், என்ன வழிமுறைகள் பயன்பாட்டில் உள்ளன, என்ன தொகுதிகள் ஏற்றப்படுகின்றன , ஒரு வெற்று கடவுச்சொல்லின் இருப்பு, முதலியன. காசோலைகளின் எண்ணிக்கை மிகப் பெரியதாக இல்லாவிட்டாலும், பல சொந்த காசோலைகள் மற்றும் பரிந்துரைகளை அடிப்படையாகக் கொண்டது
ட்ரிவி
இந்த பயன்பாடு இரண்டு வகையான பாதிப்புகளைக் கண்டறிவதை நோக்கமாகக் கொண்டுள்ளது - OS உருவாக்க சிக்கல்கள் (Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu ஆதரிக்கப்படுகின்றன) மற்றும் சார்பு சிக்கல்கள் (Gemfile.lock, Pipfile.lock, composer.lock, pack-lock .json , yarn.lock, Cargo.lock). டிரிவி களஞ்சியத்தில் உள்ள படம் மற்றும் உள்ளூர் படம் இரண்டையும் ஸ்கேன் செய்யலாம், மேலும் டோக்கர் படத்துடன் மாற்றப்பட்ட .tar கோப்பின் அடிப்படையில் ஸ்கேன் செய்யலாம்.
பயன்பாடுகள் செயல்படுத்தல் விருப்பங்கள்
விவரிக்கப்பட்ட பயன்பாடுகளை தனிமைப்படுத்தப்பட்ட நிலைகளில் முயற்சிக்க, எளிமைப்படுத்தப்பட்ட செயல்முறையின் ஒரு பகுதியாக அனைத்து பயன்பாடுகளையும் நிறுவுவதற்கான வழிமுறைகளை வழங்குவேன்.
மேம்பாட்டின் போது உருவாக்கப்பட்ட டாக்கர்ஃபைல்கள் மற்றும் டோக்கர் படங்களுக்கான தானியங்கு உள்ளடக்கச் சரிபார்ப்பை நீங்கள் எவ்வாறு செயல்படுத்தலாம் என்பதை நிரூபிப்பதே முக்கிய யோசனை.
சரிபார்ப்பு பின்வரும் படிகளைக் கொண்டுள்ளது:
- ஒரு லிண்டர் பயன்பாட்டுடன் Dockerfile வழிமுறைகளின் சரியான தன்மையையும் பாதுகாப்பையும் சரிபார்க்கிறது ஹாடோலின்ட்
- இறுதி மற்றும் இடைநிலை படங்களின் சரியான தன்மை மற்றும் பாதுகாப்பை சரிபார்த்தல் - ஒரு பயன்பாடு டாக்கிள்
- அடிப்படைப் படத்தில் பொதுவாக அறியப்பட்ட பாதிப்புகள் (CVE) மற்றும் பல சார்புகள் - பயன்பாட்டின் மூலம் சரிபார்த்தல் ட்ரிவி
பின்னர் கட்டுரையில் இந்த வழிமுறைகளை செயல்படுத்த மூன்று விருப்பங்களை தருகிறேன்:
முதலாவது GitLab இன் உதாரணத்தைப் பயன்படுத்தி CI / CD பைப்லைனை உள்ளமைப்பதாகும் (சோதனை நிகழ்வை உயர்த்தும் செயல்முறையின் விளக்கத்துடன்).
இரண்டாவது ஷெல் ஸ்கிரிப்டைப் பயன்படுத்துகிறது.
மூன்றாவது, டோக்கர் படங்களை ஸ்கேன் செய்ய டோக்கர் படத்தை உருவாக்குவது.
உங்களுக்கு மிகவும் பொருத்தமான விருப்பத்தை நீங்கள் தேர்வு செய்யலாம், அதை உங்கள் உள்கட்டமைப்புக்கு மாற்றலாம் மற்றும் உங்கள் தேவைகளுக்கு ஏற்ப மாற்றலாம்.
தேவையான அனைத்து கோப்புகளும் கூடுதல் வழிமுறைகளும் களஞ்சியத்தில் உள்ளன:
GitLab CI/CD ஒருங்கிணைப்பு
முதல் விருப்பத்தில், GitLab களஞ்சிய அமைப்பை உதாரணமாகப் பயன்படுத்தி பாதுகாப்புச் சோதனைகளை எவ்வாறு செயல்படுத்தலாம் என்பதைப் பார்ப்போம். இங்கே நாம் படிகள் வழியாகச் சென்று, புதிதாக GitLab உடன் சோதனை சூழலை எவ்வாறு அமைப்பது, ஸ்கேன் செயல்முறையை உருவாக்குவது மற்றும் சோதனை Dockerfile மற்றும் ஒரு சீரற்ற படத்தை - JuiceShop பயன்பாடு ஆகியவற்றைச் சோதிக்க பயன்பாடுகளை இயக்குவது எப்படி என்பதைப் பார்ப்போம்.
GitLab ஐ நிறுவுகிறது
1. டோக்கரை நிறுவவும்:
sudo apt-get update && sudo apt-get install docker.io
2. தற்போதைய பயனரை டோக்கர் குழுவில் சேர்க்கவும், இதன் மூலம் நீங்கள் சூடோவைப் பயன்படுத்தாமல் டோக்கருடன் வேலை செய்யலாம்:
sudo addgroup <username> docker
3. உங்கள் ஐபியைக் கண்டறியவும்:
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
தேவையான அனைத்து நிறுவல் செயல்முறைகளையும் GitLab முடிக்க நாங்கள் காத்திருக்கிறோம் (பதிவு கோப்பின் வெளியீடு மூலம் நீங்கள் செயல்முறையைப் பின்பற்றலாம்: docker logs -f gitlab).
5. உலாவியில் உங்கள் உள்ளூர் ஐபியைத் திறந்து, ரூட் பயனருக்கான கடவுச்சொல்லை மாற்றுவதற்கான ஒரு பக்கத்தைப் பார்க்கவும்:
புதிய கடவுச்சொல்லை அமைத்து, 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 நிகழ்வுடன் தொடர்பு கொள்ள முடியும்.
இதைச் செய்ய, அமைப்புகள்-CI/CD பக்கத்தைத் திறக்கவும் (http://OUR_ IP_ADDRESS/root/cicd-test/-/settings/ci_cd) மற்றும் ரன்னர்ஸ் தாவலில் URL மற்றும் பதிவு டோக்கனைக் கண்டறியவும்:
11. URL மற்றும் பதிவு டோக்கனை மாற்றுவதன் மூலம் ரன்னர் பதிவு செய்யவும்:
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 (இது ஒரு சோதனை Dockerfile ஆகும், அதை நாங்கள் சோதிப்போம்) மற்றும் GitLab CI/CD செயல்முறை உள்ளமைவு கோப்பு .gitlab-cicd.yml, இது ஸ்கேனர்களுக்கான வழிமுறைகளை பட்டியலிடுகிறது (கோப்பின் பெயரில் உள்ள புள்ளியை கவனிக்கவும்).
தேர்ந்தெடுக்கப்பட்ட Dockerfile மற்றும் DOCKERFILE மாறியில் குறிப்பிடப்பட்டுள்ள படத்தைப் பாகுபடுத்தும் மூன்று பயன்பாடுகளை (Hadolint, Dockle மற்றும் Trivy) இயக்குவதற்கான வழிமுறைகளை .yaml உள்ளமைவு கோப்பில் கொண்டுள்ளது. தேவையான அனைத்து கோப்புகளையும் களஞ்சியத்திலிருந்து எடுக்கலாம்:
இருந்து பிரித்தெடுக்கவும் 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 இன் உள்ளடக்கங்கள்
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 கோப்பில் உள்ள பயன்பாடுகளுக்கான உள்ளீட்டு அளவுருக்களை நீங்கள் மாற்ற வேண்டும்)
குறிப்பு: ட்ரிவி நிறுவப்பட வேண்டும் ஆர்பிஎம் и Git. இல்லையெனில், RedHat-அடிப்படையிலான படங்களை ஸ்கேன் செய்யும் போது மற்றும் பாதிப்பு தரவுத்தளத்தில் புதுப்பிப்புகளைப் பெறும்போது அது பிழைகளை உருவாக்கும்.
2. கோப்புகளை களஞ்சியத்தில் சேர்த்த பிறகு, எங்கள் உள்ளமைவு கோப்பில் உள்ள வழிமுறைகளின்படி, GitLab தானாகவே உருவாக்க மற்றும் ஸ்கேன் செயல்முறையைத் தொடங்கும். CI / CD → பைப்லைன்ஸ் தாவலில், நீங்கள் வழிமுறைகளின் முன்னேற்றத்தைக் காணலாம்.
இதன் விளைவாக, எங்களுக்கு நான்கு பணிகள் உள்ளன. அவற்றில் மூன்று ஸ்கேனிங்கில் நேரடியாக ஈடுபட்டுள்ளன, கடைசியாக (அறிக்கை) ஸ்கேன் முடிவுகளுடன் சிதறிய கோப்புகளிலிருந்து எளிய அறிக்கையை சேகரிக்கிறது.
இயல்பாக, படம் அல்லது சார்புகளில் முக்கியமான பாதிப்புகள் கண்டறியப்பட்டால், டிரிவி அதன் செயல்பாட்டை நிறுத்துகிறது. அதே நேரத்தில், ஹாடோலின்ட் எப்பொழுதும் எக்ஸிகியூஷன் குறியீட்டில் வெற்றியைத் தருகிறது, ஏனெனில் அதன் செயல்பாட்டில் எப்போதும் கருத்துகள் இருக்கும், இதனால் உருவாக்கம் நிறுத்தப்படும்.
உங்கள் குறிப்பிட்ட தேவைகளைப் பொறுத்து, நீங்கள் ஒரு வெளியேறும் குறியீட்டை உள்ளமைக்கலாம், இதனால் ஒரு குறிப்பிட்ட சிக்கலான சிக்கல்கள் கண்டறியப்படும்போது இந்த பயன்பாடுகளும் உருவாக்க செயல்முறையை நிறுத்தும். எங்கள் விஷயத்தில், SHOWSTOPPER மாறியில் நாம் குறிப்பிட்டுள்ள தீவிரத்தன்மையுடன் கூடிய பாதிப்பை Trivy கண்டறிந்தால் மட்டுமே உருவாக்கம் நிறுத்தப்படும். .gitlab-ci.yml.
ஒவ்வொரு பயன்பாட்டின் செயல்பாட்டின் முடிவையும் ஒவ்வொரு ஸ்கேனிங் பணியின் பதிவிலும், நேரடியாக கலைப்பொருட்கள் பிரிவில் உள்ள json கோப்புகளிலும் அல்லது ஒரு எளிய HTML அறிக்கையிலும் (கீழே உள்ளவற்றில் மேலும்) பார்க்கலாம்:
3. மனிதனால் படிக்கக்கூடிய வடிவத்தில் பயன்பாட்டு அறிக்கைகளை வழங்க, ஒரு சிறிய பைதான் ஸ்கிரிப்ட் மூன்று json கோப்புகளை ஒரு HTML கோப்பாக குறைபாடுகளின் அட்டவணையுடன் மாற்ற பயன்படுகிறது.
இந்த ஸ்கிரிப்ட் ஒரு தனி அறிக்கை பணி மூலம் தொடங்கப்பட்டது, மேலும் அதன் இறுதி கலைப்பொருள் ஒரு அறிக்கையுடன் கூடிய HTML கோப்பாகும். ஸ்கிரிப்ட் மூலமும் களஞ்சியத்தில் உள்ளது மற்றும் உங்கள் தேவைகள், வண்ணங்கள் போன்றவற்றுக்கு ஏற்றவாறு மாற்றியமைக்க முடியும்.
ஷெல் ஸ்கிரிப்ட்
CI / CD அமைப்பிற்குள் இல்லாத Docker படங்களை நீங்கள் சரிபார்க்க வேண்டிய சந்தர்ப்பங்களில் இரண்டாவது விருப்பம் பொருத்தமானது, அல்லது ஹோஸ்டில் நேரடியாக செயல்படுத்தக்கூடிய வடிவத்தில் அனைத்து வழிமுறைகளையும் நீங்கள் வைத்திருக்க வேண்டும். இந்த விருப்பம் ஒரு ஆயத்த ஷெல் ஸ்கிரிப்ட் மூலம் மூடப்பட்டிருக்கும், இது சுத்தமான மெய்நிகர் (அல்லது உண்மையான) கணினியில் இயக்கப்படலாம். மேலே உள்ள கிட்லாப்-ரன்னர் போன்ற வழிமுறைகளையே ஸ்கிரிப்ட் பின்பற்றுகிறது.
ஸ்கிரிப்ட் வெற்றிகரமாக வேலை செய்ய, டோக்கர் கணினியில் நிறுவப்பட்டிருக்க வேண்டும் மற்றும் தற்போதைய பயனர் டோக்கர் குழுவில் இருக்க வேண்டும்.
ஸ்கிரிப்டை இங்கே காணலாம்:
கோப்பின் தொடக்கத்தில், எந்தப் படத்தை ஸ்கேன் செய்ய வேண்டும் என்பதை மாறிகள் குறிப்பிடுகின்றன மற்றும் எந்த அளவு குறைபாடுகளின் தீவிரம் குறிப்பிட்ட பிழைக் குறியீட்டுடன் ட்ரிவி பயன்பாடு வெளியேறும்.
ஸ்கிரிப்ட் செயல்படுத்தும் போது, அனைத்து பயன்பாடுகளும் கோப்பகத்தில் பதிவிறக்கம் செய்யப்படும் docker_tools, அவர்களின் வேலையின் முடிவுகள் - கோப்பகத்தில் docker_tools/json, மற்றும் அறிக்கையுடன் கூடிய HTML கோப்பில் இருக்கும் முடிவுகள்.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, களஞ்சியத்திலிருந்து படத்தை ஸ்கேன் செய்ய ஒரு தொகுப்பை உருவாக்க உதவும், இரண்டாவது (Dockerfile_tar) படத்துடன் தார் கோப்பை ஸ்கேன் செய்ய ஒரு தொகுப்பை உருவாக்கும்.
1. நாங்கள் களஞ்சியத்தில் இருந்து பொருத்தமான Docker கோப்பு மற்றும் ஸ்கிரிப்ட்களை எடுக்கிறோம்
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