Các phương pháp và ví dụ triển khai tiện ích kiểm tra bảo mật Docker

Các phương pháp và ví dụ triển khai tiện ích kiểm tra bảo mật Docker
Này Habr!

Trong thực tế ngày nay, do vai trò ngày càng tăng của container hóa trong các quá trình phát triển, vấn đề đảm bảo an ninh cho các giai đoạn và thực thể khác nhau liên quan đến container không phải là vấn đề cuối cùng. Thực hiện kiểm tra theo cách thủ công là một nhiệm vụ tốn nhiều công sức, vì vậy sẽ tốt hơn nếu bạn thực hiện ít nhất các bước đầu tiên để tự động hóa quy trình này.

Trong bài viết này, tôi sẽ chia sẻ các tập lệnh được tạo sẵn để triển khai một số tiện ích bảo mật Docker và hướng dẫn cách thiết lập một gian hàng demo nhỏ để kiểm tra quy trình này. Bạn có thể sử dụng tài liệu để thử nghiệm cách tổ chức quy trình kiểm tra tính bảo mật của hình ảnh Dockerfile và hướng dẫn. Rõ ràng là cơ sở hạ tầng phát triển và triển khai là khác nhau đối với mọi người, vì vậy dưới đây tôi sẽ đưa ra một số tùy chọn khả thi.

Tiện ích kiểm tra bảo mật

Có một số lượng lớn các ứng dụng và tập lệnh trợ giúp khác nhau thực hiện kiểm tra các khía cạnh khác nhau của cơ sở hạ tầng Docker. Một số trong số chúng đã được mô tả trong một bài viết trước (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), và trong bài viết này, tôi muốn tập trung vào ba trong số chúng, bao gồm phần lớn các yêu cầu bảo mật cho hình ảnh Docker được xây dựng trong quá trình phát triển. Ngoài ra, tôi cũng sẽ đưa ra một ví dụ về cách kết hợp ba tiện ích này thành một đường ống để thực hiện kiểm tra bảo mật.

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

Một tiện ích bảng điều khiển khá đơn giản giúp đánh giá trước tính chính xác và an toàn của các hướng dẫn Dockerfile (ví dụ: chỉ sử dụng các cơ quan đăng ký hình ảnh được phép hoặc sử dụng sudo).

Các phương pháp và ví dụ triển khai tiện ích kiểm tra bảo mật Docker

bến tàu
https://github.com/goodwithtech/dockle

Tiện ích bảng điều khiển hoạt động trên một hình ảnh (hoặc trên tarball hình ảnh đã lưu) để kiểm tra tính chính xác và bảo mật của một hình ảnh cụ thể bằng cách phân tích các lớp và cấu hình của nó - những người dùng nào được tạo, hướng dẫn nào đang được sử dụng, khối lượng nào được gắn , sự hiện diện của một mật khẩu trống, v.v. e. Mặc dù số lần kiểm tra không lớn lắm và dựa trên một số kiểm tra và đề xuất của riêng Điểm chuẩn CIS (Trung tâm bảo mật Internet) cho docker.
Các phương pháp và ví dụ triển khai tiện ích kiểm tra bảo mật Docker

tầm thường
https://github.com/aquasecurity/trivy

Tiện ích này nhằm mục đích tìm ra hai loại lỗ hổng - sự cố xây dựng hệ điều hành (Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu được hỗ trợ) và sự cố phụ thuộc (Gemfile.lock, Pipfile.lock, composer.lock, package-lock .json , yarn.lock, Cargo.lock). Trivy có thể quét cả hình ảnh trong kho lưu trữ và hình ảnh cục bộ, đồng thời quét dựa trên tệp .tar được chuyển với hình ảnh Docker.

Các phương pháp và ví dụ triển khai tiện ích kiểm tra bảo mật Docker

Tùy chọn triển khai tiện ích

Để dùng thử các ứng dụng được mô tả trong các điều kiện biệt lập, tôi sẽ cung cấp hướng dẫn cài đặt tất cả các tiện ích như một phần của quy trình đơn giản hóa.

Ý tưởng chính là để chứng minh cách bạn có thể triển khai kiểm tra nội dung tự động cho Dockerfiles và Docker image được tạo trong quá trình phát triển.

Bản thân việc xác minh bao gồm các bước sau:

  1. Kiểm tra tính chính xác và an toàn của các hướng dẫn Dockerfile bằng tiện ích linter hadolint
  2. Kiểm tra tính chính xác và bảo mật của hình ảnh cuối cùng và trung gian - một tiện ích bến tàu
  3. Kiểm tra các lỗ hổng thường được biết đến (CVE) trong hình ảnh cơ sở và một số phụ thuộc - bằng tiện ích tầm thường

Ở phần sau của bài viết, tôi sẽ đưa ra ba tùy chọn để thực hiện các bước sau:
Đầu tiên là bằng cách định cấu hình đường dẫn CI / CD bằng cách sử dụng ví dụ về GitLab (với mô tả về quy trình tạo phiên bản thử nghiệm).
Thứ hai là sử dụng shell script.
Thứ ba là xây dựng hình ảnh Docker để quét hình ảnh Docker.
Bạn có thể chọn tùy chọn phù hợp nhất với mình, chuyển nó sang cơ sở hạ tầng của bạn và điều chỉnh nó theo nhu cầu của bạn.

Tất cả các tệp cần thiết và hướng dẫn bổ sung cũng có trong kho lưu trữ: https://github.com/Swordfish-Security/docker_cicd

Tích hợp GitLab CI/CD

Trong tùy chọn đầu tiên, chúng ta sẽ xem xét cách thực hiện kiểm tra bảo mật bằng cách sử dụng hệ thống kho lưu trữ GitLab làm ví dụ. Ở đây chúng ta sẽ thực hiện các bước và xem cách thiết lập môi trường thử nghiệm với GitLab từ đầu, tạo quy trình quét và chạy các tiện ích để kiểm tra Dockerfile thử nghiệm và một hình ảnh ngẫu nhiên - ứng dụng JuiceShop.

Cài đặt GitLab
1. Cài đặt Docker:

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

2. Thêm người dùng hiện tại vào nhóm docker để bạn có thể làm việc với docker mà không cần sử dụng sudo:

sudo addgroup <username> docker

3. Tìm IP của bạn:

ip addr

4. Cài đặt và chạy GitLab trong vùng chứa, thay thế địa chỉ IP trong tên máy chủ bằng địa chỉ của riêng bạn:

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

Chúng tôi đang đợi GitLab hoàn thành tất cả các quy trình cài đặt cần thiết (bạn có thể theo dõi quy trình thông qua đầu ra của tệp nhật ký: docker logs -f gitlab).

5. Mở IP cục bộ của bạn trong trình duyệt và xem trang đề nghị thay đổi mật khẩu cho người dùng root:
Các phương pháp và ví dụ triển khai tiện ích kiểm tra bảo mật Docker
Đặt mật khẩu mới và truy cập GitLab.

6. Tạo một dự án mới, ví dụ cicd-test và khởi tạo nó bằng một tệp bắt đầu README.md:
Các phương pháp và ví dụ triển khai tiện ích kiểm tra bảo mật Docker
7. Bây giờ chúng ta cần cài đặt GitLab Runner: một tác nhân sẽ chạy tất cả các hoạt động cần thiết theo yêu cầu.
Tải xuống phiên bản mới nhất (trong trường hợp này là Linux 64-bit):

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

8. Làm cho nó có thể thực thi được:

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

9. Thêm người dùng hệ điều hành cho Runner và bắt đầu dịch vụ:

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

Nó sẽ trông giống như thế này:

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. Bây giờ chúng ta đăng ký Runner để nó có thể tương tác với phiên bản GitLab của chúng ta.
Để thực hiện việc này, hãy mở trang Cài đặt-CI/CD (http://OUR_ IP_ADDRESS/root/cicd-test/-/settings/ci_cd) và trên tab Người chạy tìm URL và Mã thông báo đăng ký:
Các phương pháp và ví dụ triển khai tiện ích kiểm tra bảo mật Docker
11. Đăng ký Người chạy bằng cách thay thế URL và mã thông báo Đăng ký:

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"

Kết quả là, chúng tôi có một GitLab hoạt động sẵn sàng, trong đó chúng tôi cần thêm hướng dẫn để bắt đầu các tiện ích của mình. Trong bản demo này, chúng tôi không có các bước xây dựng và chứa ứng dụng, nhưng trong môi trường thực, chúng sẽ đi trước các bước quét và tạo hình ảnh cũng như Dockerfile để phân tích.

cấu hình đường ống

1. Thêm tệp vào kho lưu trữ mydockerfile.df (đây là Dockerfile thử nghiệm mà chúng tôi sẽ kiểm tra) và tệp cấu hình quy trình GitLab CI/CD .gitlab-cicd.yml, liệt kê các hướng dẫn dành cho máy quét (lưu ý dấu chấm trong tên tệp).

Tệp cấu hình .yaml chứa các hướng dẫn để chạy ba tiện ích (Hadolint, Dockle và Trivy) sẽ phân tích cú pháp Dockerfile đã chọn và hình ảnh được chỉ định trong biến DOCKERFILE. Tất cả các tệp cần thiết có thể được lấy từ kho lưu trữ: https://github.com/Swordfish-Security/docker_cicd/

Trích xuất từ mydockerfile.df (đây là một tệp trừu tượng với một tập hợp các hướng dẫn tùy ý chỉ để minh họa cách thức hoạt động của tiện ích). Liên kết trực tiếp đến tập tin: mydockerfile.df

Nội dung của 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

Cấu hình YAML trông như thế này (bản thân tệp có thể được lấy từ liên kết trực tiếp tại đây: .gitlab-ci.yml):

Nội dung của .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

Nếu cần, bạn cũng có thể quét các hình ảnh đã lưu dưới dạng kho lưu trữ .tar (tuy nhiên, bạn sẽ cần thay đổi thông số đầu vào cho các tiện ích trong tệp YAML)

Lưu ý: Trivy yêu cầu cài đặt rpm и git. Nếu không, nó sẽ tạo ra lỗi khi quét các hình ảnh dựa trên RedHat và nhận các bản cập nhật cho cơ sở dữ liệu dễ bị tổn thương.

2. Sau khi thêm các tệp vào kho lưu trữ, theo hướng dẫn trong tệp cấu hình của chúng tôi, GitLab sẽ tự động bắt đầu quá trình xây dựng và quét. Trên tab CI/CD → Đường ống, bạn có thể xem tiến trình của các hướng dẫn.

Kết quả là, chúng tôi có bốn nhiệm vụ. Ba trong số chúng trực tiếp tham gia vào quá trình quét và cái cuối cùng (Báo cáo) thu thập một báo cáo đơn giản từ các tệp rải rác có kết quả quét.
Các phương pháp và ví dụ triển khai tiện ích kiểm tra bảo mật Docker
Theo mặc định, Trivy dừng thực thi nếu tìm thấy các lỗ hổng NGHIÊM TRỌNG trong hình ảnh hoặc các phần phụ thuộc. Đồng thời, Hadolint luôn trả về Thành công trong mã thực thi, vì quá trình thực thi của nó luôn có nhận xét khiến quá trình xây dựng dừng lại.

Tùy thuộc vào các yêu cầu cụ thể của bạn, bạn có thể định cấu hình mã thoát để các tiện ích này cũng dừng quá trình xây dựng khi phát hiện các vấn đề nghiêm trọng nhất định. Trong trường hợp của chúng tôi, quá trình xây dựng sẽ chỉ dừng lại nếu Trivy phát hiện lỗ hổng có mức độ nghiêm trọng mà chúng tôi đã chỉ định trong biến SHOWSTOPPER trong .gitlab-ci.yml.
Các phương pháp và ví dụ triển khai tiện ích kiểm tra bảo mật Docker

Kết quả hoạt động của từng tiện ích có thể được xem trong nhật ký của từng tác vụ quét, trực tiếp trong các tệp json trong phần tạo phẩm hoặc trong một báo cáo HTML đơn giản (thêm về điều đó bên dưới):
Các phương pháp và ví dụ triển khai tiện ích kiểm tra bảo mật Docker

3. Để trình bày các báo cáo tiện ích ở dạng dễ đọc hơn một chút, một tập lệnh Python nhỏ được sử dụng để chuyển đổi ba tệp json thành một tệp HTML có bảng lỗi.
Tập lệnh này được khởi chạy bởi một tác vụ Báo cáo riêng biệt và phần tạo tác cuối cùng của nó là một tệp HTML có báo cáo. Nguồn tập lệnh cũng nằm trong kho lưu trữ và có thể được điều chỉnh theo nhu cầu, màu sắc, v.v. của bạn.
Các phương pháp và ví dụ triển khai tiện ích kiểm tra bảo mật Docker

kịch bản vỏ

Tùy chọn thứ hai phù hợp với trường hợp bạn cần kiểm tra hình ảnh Docker không nằm trong hệ thống CI / CD hoặc bạn cần có tất cả các hướng dẫn ở dạng có thể thực hiện trực tiếp trên máy chủ. Tùy chọn này được bao phủ bởi tập lệnh shell được tạo sẵn có thể chạy trên máy ảo sạch (hoặc thậm chí là máy thực). Tập lệnh tuân theo các hướng dẫn tương tự như gitlab-runner ở trên.

Để tập lệnh hoạt động thành công, Docker phải được cài đặt trên hệ thống và người dùng hiện tại phải thuộc nhóm docker.

Bản thân kịch bản có thể được tìm thấy ở đây: docker_sec_check.sh

Ở phần đầu của tệp, các biến chỉ định hình ảnh nào sẽ được quét và mức độ nghiêm trọng của các lỗi sẽ khiến tiện ích Trivy thoát ra với mã lỗi được chỉ định.

Trong quá trình thực thi tập lệnh, tất cả các tiện ích sẽ được tải xuống thư mục docker_tools, kết quả công việc của họ - trong thư mục docker_tools/jsonvà HTML có báo cáo sẽ nằm trong tệp kết quả.html.

Đầu ra tập lệnh ví dụ

~/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

Hình ảnh Docker với tất cả các tiện ích

Là một giải pháp thay thế thứ ba, tôi đã biên dịch hai Dockerfiles đơn giản để tạo một hình ảnh với các tiện ích bảo mật. Một Dockerfile sẽ giúp xây dựng một bộ để quét hình ảnh từ kho lưu trữ, thứ hai (Dockerfile_tar) sẽ xây dựng một bộ để quét tệp tar cùng với hình ảnh.

1. Chúng tôi lấy tệp Docker và tập lệnh thích hợp từ kho lưu trữ https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. Chạy nó để lắp ráp:

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

3. Sau khi quá trình xây dựng hoàn tất, hãy tạo vùng chứa từ hình ảnh. Đồng thời, chúng tôi chuyển biến môi trường DOCKERIMAGE với tên của hình ảnh mà chúng tôi quan tâm và gắn Dockerfile mà chúng tôi muốn phân tích từ máy của mình vào tệp /tệp docker (lưu ý rằng đường dẫn tuyệt đối đến tệp này là bắt buộc):

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

Những phát hiện

Chúng tôi chỉ đề cập đến một bộ công cụ quét tạo tác Docker cơ bản, mà tôi nghĩ rằng nó đáp ứng khá hiệu quả các yêu cầu bảo mật hình ảnh. Có nhiều công cụ trả phí và miễn phí khác có thể thực hiện kiểm tra tương tự, vẽ các báo cáo đẹp mắt hoặc hoạt động hoàn toàn ở chế độ bảng điều khiển, bao gồm các hệ thống quản lý vùng chứa, v.v. Tổng quan về các công cụ này và cách tích hợp chúng có thể xuất hiện sau một chút.

Mặt tích cực của bộ công cụ được mô tả trong bài viết là tất cả chúng đều được xây dựng trên nguồn mở và bạn có thể thử nghiệm chúng cũng như các công cụ tương tự khác để tìm ra thứ phù hợp chính xác với yêu cầu và tính năng cơ sở hạ tầng của mình. Tất nhiên, tất cả các lỗ hổng được tìm thấy nên được nghiên cứu để áp dụng trong các điều kiện cụ thể, nhưng đây là chủ đề cho một bài báo lớn trong tương lai.

Tôi hy vọng những hướng dẫn, tập lệnh và tiện ích này sẽ giúp ích cho bạn và trở thành điểm khởi đầu để tạo cơ sở hạ tầng an toàn hơn trong lĩnh vực container hóa.

Nguồn: www.habr.com

Thêm một lời nhận xét