Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

DevSecOps on production – part 2

Tiếp tục phần 1

CIS benchmark



CIS benchmark là gì tra Google thì thấy. Còn hiểu nhanh là nó là bộ quy chuẩn bảo mật cho đủ loại từ Cloud (AWS, Azure) đến OS như Linux, Ubuntu, Centos , Windows. Ví dụ, server của anh sử dụng centos thì thì CIS sẽ cung cấp cho anh một bản pdf ghi rõ những rule security cần phải làm cho OS của anh. Ví dụ filesystems thì phải làm sao, firewall config thế nào. Tóm lại là một list dài dằng dặc, có giời mới nhớ nổi

Các hệ thống hiện nay đều cần phải thỏa mãn tiêu chuẩn của CIS benchmark, nếu không phải thực hiện remediation.

Một số nền tảng cloud như AWS cũng đã tích hợp luôn CIS benchmark trong AWS Security Hub, tự động scan luôn infra để tạo Security Reports dựa trên CIS benchmark

Dựa vào reports, SRE team cần thực hiện remediation, được hiểu là quá trình sửa chữa, phục hồi, vá lỗ hổng bảo mật

Ví dụ về Security Reports

Nhiều hệ thống microservice ngày nay được deploy trên k8s , nên CIS cũng cung cấp bộ security benchmark cho k8s . Thật sự thì khi đọc bản benchmark này đảm bảo tẩu hỏa nhập ma vì có quá nhiều thông tin, mà nó hợp với những hệ thống k8s on-premise hơn do có nhiều security config phải thực hiện trên master và node, api-server. Aquasecurity có cung cấp một tool cho phép scan k8s cluster against CIS bench-mark cũng khá hay là kube-bench

Cài đặt cũng dễ dàng, cứ theo guide trên github là xong

$ kubectl apply -f job.yamljob.batch/kube-bench created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kube-bench-j76s9 0/1 ContainerCreating 0 3s

# Wait for a few seconds for the job to complete $ kubectl get pods NAME READY STATUS RESTARTS AGE kube-bench-j76s9 0/1 Completed 0 11s # The results are held in the pod's logs kubectl logs kube-bench-j76s9 [INFO] 1 Master Node Security Configuration [INFO] 1.1 API Server
...

Nhìn chung CIS benchmark nhiều như vậy nhưng cũng không cần phải cố nhớ hết. Vì muốn nhớ được thì não phải to bằng quả dưa hấu hoặc phải chơi tool như bánh mỳ giúp trí nhớ của Doremon. Thực tế là công cụ scan hệ thống theo CIS bench-mark rất nhiều Ví dụ như k8s thì kube-bench, Linux là open-scap scanner, còn nền tàng cloud như AWS thì tích hợp sẵn trong Security Hub, dùng cũng ok

Docker image security

Mô hình deploy application lên server truyền thống nay dần dần chuyển thành đóng gói ứng dụng thành docker image rồi deploy lên container orchestration như ECS, K8s, dẫn tới các nguy cơ hacker tấn công qua docker container. Ví dụ một số docker image cho phép run dưới quyền root hacker có thể lợi dụng để xâm nhập vào hệ thống host

Ví dụ Docker file vô tình để user run as root thì dễ security leak, báo đài nói suốt rồi. Nhưng cụ thể nó như thế nào, hãy xem ví dụ cụ thể sau

Giả sử trên host system, bạn có một file secrets chứa thông tin nhậy cảm “JAV ” lưu ở /root/secrets.txt, file này chỉ có quyền root mới xem được

giaosucan@giaosucan:/root$ sudo ls -la secrets.txt-rw------- 1 root root 4 Thg 9 25 10:17 secrets.txt

Còn nếu view bằng user thông thường sẽ bị access denied

giaosucan@giaosucan:/root$ cat secrets.txtcat: secrets.txt: Permission denied

Giả sử 1 anh dev tạo 1 docker file ,

FROM debian:stretchCMD ["cat", "/tmp/secrets.txt"]

Build thành image docker

Anh hacker giờ chỉ cần run bằng user account trên host để mount file secrets từ root vào container là xem được thông tin bí mật. Thì ra a dev hay xem JAV lưu toàn tên diễn viên JAV nổi tiếng

giaosucan@giaosucan:~/Study$ docker run --name test-container -v  /root/secrets.txt:/tmp/secrets.txt  --rm -i -t d2453fa30c20  bashroot@b5f1016c52a5:/# lsbin   dev  home  lib64	mnt  proc  run	 srv  tmp  varboot  etc  lib	 media	opt  root  sbin  sys  usrroot@b5f1016c52a5:/# cd tmp/root@b5f1016c52a5:/tmp# lssecrets.txtroot@b5f1016c52a5:/tmp# cat secrets.txtYuu Hatano Yuu Mikami Emi fukadaroot@b5f1016c52a5:/tmp# 

Tại sao lại như vậy, trong docker file nếu không định nghĩa user thì mặc định docker sẽ set uid user là 0 root . Khi start container, Linux sẽ sinh ra một process run container đó và process này chạy ở quyền root

ps -aux | grep 1c154c497835root     18582  0.0  0.0 713216  8232 ?        Sl   10:35   0:00 /snap/docker/1779/bin/containerd-shim-runc-v2 -namespace moby -id 1c154c4978357217d58a725072f585e87a913b58f44372dc9fc78d512e7a7240 -address /run/snap.docker/containerd/containerd.sockgiaosuc+ 21979  0.0  0.0  15980  1016 pts/2    S+   10:40   0:00 grep --color=auto 1c154c497835

Đồng nghĩa là root user này có đầy đủ quyền như root trên host machine nên hacker dễ dàng chiếm quyền điều khiển host machine

Đó là một ví dụ về security trên docker file. CIS Benchmark cũng có 1 bản dài như tờ sớ về bảo mật docker file. Ai đọc nhớ hết các rule được thì trùm. Còn không đơn giản thì cứ nắm được docker security best practice  cũng khá ổn

Nhưng giờ thì cũng nhiều tool chuyên scan docker image để detect security dựa trên bộ CIS , hệ thống lớn thì chơi tool xịn commercial , nhỏ nhỏ ít tiền thì dùng một số open source cũng tạm đủ dùng.

Share list vài tool để a e dùng thử , cũng ổn

GitHub – docker/docker-bench-security: The Docker Bench for Security is a script that checks for dozens of common best-practices around deploying Docker containers in production.

GitHub – aquasecurity/trivy: Scanner for vulnerabilities in container images, file systems, and Git repositories, as well as for configuration issues and hard-coded secrets

GitHub – goodwithtech/dockle: Container Image Linter for Security, Helping build the Best-Practice Docker Image, Easy to start

GitHub – hadolint/hadolint: Dockerfile linter, validate inline bash, written in Haskell

Đăng nhận xét

2 Nhận xét

  1. Mình rất quan tâm series này của giaosucan nhưng mong giaosucan có thể add các command của ví dụ rõ ràng hơn được không ạ. Dịch thì vẫn dịch được được nhưng hơi mất thời gian =.= Xin cảm ơn

    Trả lờiXóa