0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hướng Dẫn Tạo Demo DNS Tunneling Trực Tiếp Trên Kubernetes

Đăng vào 5 tháng trước

• 5 phút đọc

Hướng Dẫn Tạo Demo DNS Tunneling Trực Tiếp Trên Kubernetes

Trong bài trình bày tại Hội nghị ContainerDays 2025, chúng ta đã thấy một demo trực tiếp với nhiều hiệu ứng hấp dẫn và các lệnh Kubernetes được thực hiện một cách mượt mà. Bài viết này sẽ hướng dẫn bạn cách tạo ra một demo tương tự, sử dụng script được viết để tạo ra các hiệu ứng đó.

Mục Lục

  1. Giới thiệu về demo-magic.sh
  2. Chuẩn bị Môi Trường
  3. Thiết Lập Các Cửa Sổ tmux
  4. Tương Tác Với Khán Giả
  5. Khởi Tạo Cluster
  6. Thiết Lập Máy Chủ Độc Hại
  7. Điều Chỉnh CoreDNS
  8. Triển Khai Client Độc Hại
  9. Chờ Pod Sẵn Sàng
  10. Thay Đổi Màu Cửa Sổ và Theo Dõi Lưu Lượng
  11. Hiện Thị Quy Trình Exfiltration
  12. Kết Thúc Demo
  13. Tại Sao Nó Hoạt Động?
  14. Bài Học Rút Ra Cho Người Tham Dự

Giới Thiệu Về demo-magic.sh

Script bắt đầu với:

bash Copy
demo-magic.sh

demo-magic.sh là một thư viện Bash nhỏ giúp việc trình diễn trực tiếp trở nên mượt mà hơn:

  • p "text" → in ra một lệnh (chỉ để kể chuyện).
  • pe "command" → in và thực thi lệnh.
  • pei "command" → in, thực thi và giữ cửa sổ mở cho sự tương tác.
  • TYPE_SPEED=20 → điều chỉnh tốc độ hiển thị ký tự (20 ms cho mỗi ký tự).

Điều này tạo ra hiệu ứng “gõ trước mắt bạn” mà không có lỗi gõ từ con người.


Chuẩn Bị Môi Trường

bash Copy
echo "" > ~/kind.log
kind delete cluster > /dev/null 2>&1 || true
docker kill dnscat2-server > /dev/null 2>&1 || true
tmux kill-pane -a

Đoạn mã này giúp khôi phục môi trường để bạn có thể chạy lại demo mà không có các dữ liệu thừa:

  • Xóa các log trước đó.
  • Xóa bất kỳ cluster kind nào cũ.
  • Dừng máy chủ dnscat2 độc hại nếu đang chạy.
  • Đóng tất cả các cửa sổ tmux thừa.

Thiết Lập Các Cửa Sổ Tmux

bash Copy
tmux split-window -v -p 30
tmux select-pane -t 0
tmux split-window -h -p 60
tmux select-pane -t 0
tmux clock-mode -t 2

Đoạn mã này tạo ra “bảng điều khiển” cho demo:

  • Cửa sổ 0 (trên bên trái): khu vực lệnh chính của bạn.
  • Cửa sổ 1 (30% dưới): cho hình ảnh ASCII và sau đó là máy chủ DNS của kẻ tấn công.
  • Cửa sổ 2 (60% bên phải): cho log/trạng thái, với một đồng hồ trực tiếp.

Sau đó:

bash Copy
tmux send-keys -t 1 "watch -t jp2a --width=65 --height=31 Picture1.png | lolcat -a -s 10 -d 60" Enter

Cửa sổ 1 sẽ hiển thị hình ảnh nghệ thuật ASCII đang chạy, được tô màu bằng lolcat.


Tương Tác Với Khán Giả

bash Copy
echo "Are you ready ???"
wait

wait dừng lại cho đến khi bạn nhấn Enter — một thời điểm tự nhiên để nói chuyện với khán giả trước khi bắt đầu các bước nặng nề.


Khởi Tạo Cluster

bash Copy
tmux send-keys -t 2 "tail -f ~/kind.log" Enter
kind create cluster > ~/kind.log 2>&1
kind get kubeconfig > ~/.kube/config
kind load docker-image alialp/dnscat2-client > /dev/null 2>&1
kubectl config set-context --current --namespace demo
  • Cửa sổ 2 theo dõi log, vì vậy khán giả thấy tiến trình tạo cluster.
  • kind create cluster xây dựng cluster Kubernetes-in-Docker.
  • Hình ảnh dnscat2-client được tải vào cluster.
  • Ngữ cảnh được chuyển sang namespace demo.

Thiết Lập Máy Chủ Độc Hại

bash Copy
tmux send-keys -t 1 C-c
tmux send-keys -t 1 "bash ./dns-evil-server.sh" Enter
kubectl create namespace demo
  • Cửa sổ 1 dừng hiển thị hình ảnh ASCII và bắt đầu khởi động máy chủ DNS độc hại của bạn.
  • Namespace demo được tạo ra.

Điều Chỉnh CoreDNS

bash Copy
kubectl wait --namespace kube-system --for=condition=Ready pod --all --timeout=90s
kubectl replace -f coredns-cm.yaml --force
kubectl rollout restart -n kube-system deployment coredns
kubectl wait --namespace kube-system --for=condition=Ready pod --all --timeout=90s

Điều này đảm bảo rằng ConfigMap điều chỉnh DNS được cấu hình để hỗ trợ chuyển tiếp DNS localhost qua Docker và CoreDNS được khởi động lại một cách sạch sẽ.


Triển Khai Client Độc Hại

bash Copy
tmux send-keys -t 2 C-c
tmux send-keys -t 2 "watch -t -d -n 1 -- kubectl get pods -n demo" Enter
pei "cat ./dnscat2-client-pod.yaml"
pe "kubectl apply -f dnscat2-client-pod.yaml"
  • Cửa sổ 2 hiện đang theo dõi các pod trong namespace demo.
  • Manifest được hiển thị (cat) sau đó được áp dụng.
  • Khán giả thấy pod bắt đầu chạy.

Chờ Pod Sẵn Sàng

bash Copy
while ! kubectl get pod dnscat-client -o jsonpath="{.status.phase}" 2>/dev/null | grep -q Running; do sleep 1; done;

Vòng lặp này chặn đến khi pod đang ở trạng thái Running.


Thay Đổi Màu Cửa Sổ và Theo Dõi Lưu Lượng

bash Copy
tmux select-pane -t 1 -P 'bg=#872736';
tmux send-keys -t 2 C-c
tmux send-keys -t 2 "kubectl sniff -n demo dnscat-client -o - | tshark -i -" Enter
  • Màu nền của cửa sổ 1 chuyển sang đỏ để thu hút sự chú ý và cho thấy rằng một phiên tunneling DNS đã được tạo ra giữa pod Kubernetes và máy chủ DNS của kẻ tấn công.
  • Cửa sổ 2 bắt đầu ghi lại gói tin từ pod client, chuyển tiếp vào tshark.

Hiện Thị Quy Trình Exfiltration

bash Copy
kubectl exec -n demo pods/dnscat-client -- watch -t -d -n 1 ls -al /home/

Từ Cửa sổ 0, client được điều khiển thông qua tunneling DNS — khán giả thấy danh sách tệp trực tiếp.


Kết Thúc Demo

bash Copy
p "echo 'Press Enter to end the demo! '"
echo "✅ Demo complete!"
echo "Cleaning up..."
kind delete cluster
docker kill dnscat2-server
tmux kill-pane -a
clear

Việc dọn dẹp là tự động: cluster bị xóa, server bị dừng, các cửa sổ đóng lại, màn hình được làm sạch.


Tại Sao Nó Hoạt Động?

  • demo-magic xử lý thời gian và gõ.
  • tmux cung cấp nhiều góc nhìn: nghệ thuật, log, trạng thái trực tiếp.
  • send-keys cho phép bạn tải trước các lệnh vào các cửa sổ, vì vậy không có gì được gõ lại dưới áp lực.
  • wait cung cấp những khoảng nghỉ tự nhiên cho việc kể chuyện.
  • màu sắc và hình ảnh giữ cho khán giả quan tâm.

Bài Học Rút Ra Cho Người Tham Dự

Bạn có thể áp dụng cùng một phương pháp cho bất kỳ demo trực tiếp nào:

  1. Chuẩn bị trước các lệnh với demo-magic.
  2. Sử dụng tmux để dành các cửa sổ cho hình ảnh, log nền và gõ chính.
  3. Sử dụng nghệ thuật ASCII hoặc màu sắc để giữ cho mọi người nhìn vào màn hình của bạn.
  4. Luôn thêm các bước dọn dẹp để bạn có thể chạy lại một cách đáng tin cậy.

Chúc bạn lập trình vui vẻ :)

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào