Làm thế nào để bảo mật Docker cho môi trường sản xuất?

Hãy cùng xem xét cách làm cứng và bảo vệ Docker cho môi trường sản xuất.


Mặc du Docker đã giúp các nhà phát triển phần mềm và kỹ sư DevOps có thể xây dựng và triển khai các ứng dụng một cách nhanh chóng, nó cũng đi kèm với một bề mặt tấn công lớn để tin tặc mạng tận dụng.

Chúng tôi sẽ xem xét cách bảo mật Docker trên nền tảng Linux từ sau.

  • Lỗi cấu hình
  • Thực thi mã từ xa
  • Bộ đệm tràn
  • Hình ảnh giả mạo và như vậy.

Chúng tôi sẽ sử dụng các công cụ sau đây, chẳng hạn như Docker từ máy chủ công chứng ký tên và Docker an ninh băng ghế để kiểm tra máy chủ, cấu hình daemon, v.v..

Trước khi chúng tôi tiến hành bảo mật, hãy để liên lạc cơ bản với cơ sở.

Công nghệ container là gì?

Công nghệ container cho phép các nhà phát triển hoặc kỹ sư DevOps đóng gói một ứng dụng để nó có thể chạy với các phụ thuộc được phân lập từ các quy trình khác.

Có một số công nghệ container trên thị trường, chẳng hạn như Mesos Apache, Tên lửa, lxc, và Docker. Mặc dù chúng nằm trong danh mục công nghệ container, chúng hoạt động khác nhau.

Sự khác biệt giữa VM & ĐÃ

Một máy chủ ảo hoàn toàn khác với máy chủ môi trường ảo. Trên các máy ảo, mỗi ứng dụng được đóng gói đi kèm với bộ thư viện và hệ điều hành riêng, trong khi các ứng dụng, theo mặc định, trên một máy chủ môi trường ảo như lxc và docker chia sẻ kernel Linux.

Docker là gì?

Docker là một công nghệ container được hàng triệu người sử dụng để tạo một ứng dụng web và triển khai nó từ thử nghiệm đến môi trường sản xuất.

Động cơ Docker

Docker Engine được tạo thành từ ba thành phần.

  • Máy chủ: Thành phần này là một quy trình dài hoặc daemon chịu trách nhiệm quản lý hình ảnh và vùng chứa.
  • API REST: Giao diện này giúp cho trình nền của docker và công cụ máy khách docker có thể giao tiếp.
  • Công cụ máy khách Docker: Công cụ máy khách Docker sử dụng thành phần API REST để thông báo cho trình nền của docker để vận hành một ứng dụng được đóng gói.

Docker Đăng ký đáng tin cậy

Docker Trusted Registry là một giải pháp lưu trữ hình ảnh từ Docker cho doanh nghiệp nền tảng doanh nghiệp. Nó khác với trung tâm bến tàu.  Trong khi trung tâm docker được lưu trữ trên đám mây, đăng ký tin cậy docker là một giải pháp lưu trữ tại chỗ cho Docker phiên bản doanh nghiệp.

Docker Nội dung tin cậy

Docker Content Trust cung cấp khả năng sử dụng chữ ký dữ liệu cho hình ảnh được gửi và nhận đến và từ các cơ quan đăng ký docker từ xa như docker hub.

Không gian tên Linux

Không gian tên Linux là một tính năng nhân Linux, cô lập một ứng dụng được đóng gói hoặc tiến trình đang chạy trên máy chủ môi trường ảo từ các quy trình khác.

Nhóm kiểm soát Linux (Cgroups)

Nhóm điều khiển Linux là một tính năng nhân Linux cho phép bạn phân bổ các tài nguyên như thời gian CPU, băng thông mạng, bộ nhớ hệ thống, v.v. cho các quy trình hoạt động trên máy chủ.

Khả năng

Trong Linux, có một tính năng bảo mật trong hệ thống con kernel có thể được thiết lập hoặc thi hành để giới hạn quy trình đặc quyền như một quy trình được thực thi bởi người dùng với UID 1. Mặc dù các quy trình đặc quyền hoặc người dùng có thể bỏ qua các quyền kiểm soát truy cập tùy ý, họ không thể bỏ qua quyền kiểm soát truy cập tùy ý, họ không thể bỏ qua quy tắc khả năng.

Giờ hãy tập trung vào bảo mật.

Bảo mật máy chủ Docker

Trong phần này, chúng tôi sẽ xem xét cách bảo mật máy chủ lưu trữ nơi Docker cư trú.

Quét nhân Linux

Trước khi bạn lưu trữ một docker trên nền tảng Linux, trước tiên bạn cần kiểm tra kernel. Có một số công cụ nguồn mở như LynisOpenVAS bạn có thể sử dụng để quét kernel Linux.

Sao chép hoặc sao chép dự án Lynis từ Github bằng lệnh git clone.

git clone https://github.com/CISOfy/lynis.git

Tiếp theo, sử dụng lệnh bên dưới để điều hướng đến thư mục lynis và kiểm tra hệ thống Linux.

cd lynis; ./lynis hệ thống kiểm toán

Nhân Linux cứng

Sau khi bạn đã quét kernel Linux để tìm các lỗ hổng dựa trên hệ thống, bạn có thể thêm một lớp bảo vệ bổ sung khác vào kernel thông qua sự an toàn. Nó cung cấp các tính năng bảo mật như sau.

  • Bộ đệm chống tràn khai thác
  • / tmp cuộc đua phòng chống lỗ hổng
  • / Proc hạn chế mà don don rò rỉ thông tin về chủ sở hữu quy trình.
  • Ngăn chặn thực thi mã tùy ý trong kernel và như vậy.

Ban đầu, bạn có thể Tải xuống bản vá miễn phí từ grsecurance và áp dụng nó cho kernel hiện tại của bạn. Nhưng nó không cho phép vá miễn phí nữa.

Cài đặt Docker trong VM

Thay vì cài đặt Docker trực tiếp trên máy chủ Linux, bạn có thể thêm một lớp bảo vệ bổ sung bằng cách cài đặt nó bên trong một máy ảo. Bằng cách đó, ngay cả khi có vấn đề về lỗ hổng với hạt nhân máy chủ, nó đã giành được ảnh hưởng đến các thùng chứa docker.

Bảo vệ đặc quyền gốc

Theo mặc định, Docker yêu cầu quyền root để tạo và quản lý container. Tập lệnh độc hại có thể tận dụng bề mặt tấn công này để leo thang lên siêu người dùng trên máy chủ Linux và cuối cùng truy cập các tệp / thư mục nhạy cảm, hình ảnh, chứng chỉ, v.v..

Để ngăn chặn nó, chúng ta có thể sử dụng lệnh sau. Chúng tôi có thể quyết định bỏ các khả năng như setgid và setuid để ngăn các chương trình hoặc quy trình khác thay đổi GID của chúng sang GID khác có thể dẫn đến đặc quyền leo thang. Bạn cũng có thể kiểm tra đây để biết danh sách các định nghĩa về khả năng của Linux.

Lệnh bên dưới chạy bộ chứa máy chủ web apache và loại bỏ các khả năng setgid và setuid thông qua –cap-drop để ngăn bộ chứa apache thay đổi GID và UID của nó thành một UID và GID khác.

GID và UID trong ngữ cảnh này tương ứng với ID nhóm và ID người dùng.

docker chạy -d –cap-drop SETGID – apap-drop SETUID apache

Người dùng Docker

Ngoài việc ngăn chặn các chương trình hoặc quy trình khác, bạn cũng có thể tạo người dùng để quản lý các hoạt động của docker như docker chạy thay vì quản lý nó thông qua một siêu người dùng.

Bạn có thể thêm hoặc tạo người dùng docker thông qua các cách sau:

bến tàu sudo

Lệnh trên tạo một nhóm được gọi là docker

Tiếp theo, tạo người dùng bằng lệnh bên dưới:

sudo useradd mike

Cuối cùng sử dụng lệnh dưới đây để thêm một người dùng mike vào docker nhóm để quản lý các hoạt động của docker.

sudo usermod -aG docker mike

Quản lý Container với Cgroups

Trong môi trường sản xuất, bạn có thể có nhiều hơn một container.

Nếu bạn không cài đặt các nhóm trên máy chủ của mình, bạn có thể sử dụng lệnh sau để cài đặt nó và sau đó kiểm tra đây (cho Ubuntu) về cách định cấu hình nó.

sudo apt-get cài đặt cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

Chúng tôi có thể phân bổ các thùng chứa cho tài nguyên CPU bị giới hạn thông qua –cpu-Shares và –cpuset-cpus

Ví dụ lệnh sau đây cho thấy quy trình chứa prodnginx chỉ được thực hiện trên lõi đầu tiên thông qua –cpuset-cpus và được phân bổ 20 CPU thông qua –cpu-Shares trong khi quy trình chứa proxnginx được thực thi trên hai lõi CPU đầu tiên và cũng được phân bổ 20 CPU.

docker chạy -d –name prodnginx –cpuset-cpus = 0 –cpu-Shares = 20 nginx
docker chạy -d –name testnginx –cpuset-cpus = 2 –cpu-Shares = 20 nginx

Sau đó nhập số liệu thống kê docker lệnh để xem mức độ sử dụng CPU của các thùng chứa prodnginx và testnginx

ID CONTAINER TÊN CPU% SỬ DỤNG MEM / GIỚI HẠN MEM% NET I / O BLOCK I / O
845bea7263fb prodnginx 57,69% 1.258MiB / 985.2MiB 0.13% 578B / 0B 1.33MB / 0B
189ba15e8258 testnginx 55,85% 1,25MiB / 985,2MiB 0,13% 578b / 0B 1,33MB / 0B

Đó là một ý tưởng tốt để xác định chia sẻ CPU cho máy chủ docker khi bạn có nhiều hơn một container chạy trên nó.

Quản lý container với không gian tên

Một không gian tên có thể ngăn các container chạy như những người dùng đặc quyền, điều này có thể giúp tránh các cuộc tấn công leo thang đặc quyền.

Chúng tôi có thể kích hoạt không gian tên trong docker bằng cách sử dụng các tập tin / etc / subuid và / etc / subgid như dưới đây.

  • tạo người dùng bằng lệnh adduser

sudo adduser bản đồ

  • Thiết lập một subuid cho dockremap người dùng

sudo sh -c ‘echo dockremap: 400000: 65536 > / etc / subuid ‘

  • Sau đó thiết lập subgid cho dockremap của người dùng

sudo sh -c ‘echo dockremap: 400000: 65536 > / etc / subgid ‘

  • Mở tệp daemon.json và điền nó với nội dung sau đây để liên kết thuộc tính userns-remap với dockremap của người dùng

vi /etc/docker/daemon.json
{

"userns-remap": "bản đồ"

}

  • Nhấn: wq để lưu và đóng tệp daemon.json và cuối cùng khởi động lại docker để bật không gian tên trên máy chủ docker

sudo /etc/init.d/docker khởi động lại

Bảo vệ Docker Daemon

Cũng cần phải cấu hình daemon Docker để đảm bảo liên lạc an toàn giữa docker client và docker daemon qua TLS.

Sử dụng lệnh sau để mở tệp daemon.json và sao chép và dán nội dung sau (thay thế IP bằng thực tế của bạn) như hiển thị bên dưới

vi daemon.json
{
"gỡ lỗi": sai,
"tls": thật,
"tlscert": "/var/docker/server.pem",
"tlskey": "/var/docker/serverkey.pem",
"máy chủ": ["tcp: //192.168.16.5: 2376"]
}

Đảm bảo các thành phần Docker

Hãy cùng xem xét cách sử dụng các công cụ như Mã sốmáy chủ công chứng để ký hình ảnh để tránh giả mạo hình ảnh. Ngoài ra, cũng cần phải quét hình ảnh để đảm bảo hình ảnh không bị đóng gói với lỗ hổng

Chúng tôi sẽ sử dụng máy chủ công chứng Dockeriên để ký và xác minh hình ảnh và sử dụng Động cơ neo để quét hình ảnh cho các lỗ hổng.

Xác minh hình ảnh với máy chủ công chứng

Trước khi chúng tôi có thể sử dụng máy chủ Công chứng để ký ảnh, chúng tôi cần tải xuống và cài đặt docker-compose. Chúng tôi sẽ sử dụng Docker Compose để thiết lập máy chủ công chứng.

  • Chạy lệnh bên dưới để tải xuống phiên bản mới nhất của Docker Compose

sudo curl -L "https://github.com/docker/compose/release/doad/1.25.4/docker-compose-$(uname -s) – $ (uname -m)" -o / usr / local / bin / docker-compose

  • Áp dụng quyền thực thi cho docker-compose như hiển thị bên dưới

sudo chmod 700 / usr / local / bin / docker-compose

  • Bạn có thể kiểm tra nếu bạn đã cài đặt thành công docker-compose thông qua lệnh sau

docker-compose –version

  • Bây giờ chúng ta có thể cài đặt máy chủ công chứng thông qua docker-compose

git clone https://github.com/theupdateframework/notary.git

  • Lệnh trên nhân bản hoặc sao chép máy chủ công chứng từ kho công chứng
  • Bắt đầu máy chủ công chứng và người ký thông qua các lệnh dưới đây:

xây dựng docker-compose
docker-soạn lên -d

  • Sau đó sao chép cấu hình và kiểm tra chứng chỉ vào thư mục công chứng cục bộ của bạn bằng lệnh bên dưới

mkdir -p ~ /. && cp cmd / notary / config.json cmd / notary / root-ca.crt ~ / .notary

  • Bây giờ hãy chạy lệnh sau để kết nối máy chủ công chứng với máy khách docker

xuất DOCKER_CONTENT_TRUST = 1
xuất DOCKER_CONTENT_TRUST_SERVER = https: // notaryserver: 4443

  • Tạo cặp khóa ủy nhiệm thông qua lệnh bên dưới

khóa tin cậy docker tạo mike –dir ~. / docker / tin cậy

  • Bây giờ, hãy để cùng nhau tạo ra một khóa mới đích trong trường hợp kho lưu trữ không tồn tại

người ký tin cậy docker thêm –key ~ / .docker / trust / mike.pub mike mikedem0 / whalesay

  • Sau đó, bạn có thể ký hình ảnh docker của bạn bằng cách sử dụng dấu hiệu tin cậy docker lệnh. Bạn cần phải kéo hình ảnh docker từ hub docker và gắn thẻ lại bằng cách sử dụng lệnh docker pull và docker tương ứng.

ký hiệu tin cậy docker mikedem0 / nginx: mới nhất

Bạn cũng có thể quét hình ảnh docker để tìm lỗ hổng và lỗi cấu hình. Bạn có thể kiểm tra tại đây để tìm hiểu cách bạn sử dụng Anchor Engine để quét các lỗ hổng và Docker băng ghế an ninh để kiểm tra lỗi cấu hình.

Tôi hy vọng ở trên cung cấp cho bạn một ý tưởng về Docker bảo mật cho môi trường sản xuất. Bạn cũng có thể muốn kiểm tra khóa học Udemy này về hack và bảo mật container Docker.

THẺ

  • Docker

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map