Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.

Announcement

Collapse
No announcement yet.

eBPF

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • eBPF

    Bộ lọc Gói tin Berkeley Mở rộng (eBPF) cho An ninh Mạng

    1. Tổng quan về eBPF trong Bảo mật


    eBPF (extended Berkeley Packet Filter) là một công nghệ kernel-level mạnh mẽ trong Linux, cho phép chạy các đoạn mã bytecode trong không gian kernel một cách an toàn và hiệu quả. Nó cung cấp cơ chế lập trình động để quan sát, lọc và tương tác với các sự kiện hệ thống và mạng mà không cần chỉnh sửa kernel hoặc gây gián đoạn dịch vụ. Ứng dụng bảo mật chính:
    • 🎯 Phát hiện mối đe dọa thời gian thực thông qua giám sát hành vi kernel hoặc mạng.
    • 🔒 Thực thi chính sách bảo mật tùy chỉnh trên gói tin hoặc syscall.
    • 🚫 Chặn truy cập trái phép hoặc hành vi bất thường mà không cần firewall truyền thống.
    • 🧠 Thu thập dữ liệu quan sát chuyên sâu (deep observability) về process, container, syscall, và network flow.
    2. Kiến trúc Môi trường Thử nghiệm


    Mục tiêu: Dùng eBPF để lọc gói tin, chặn hoàn toàn ping và SSH từ một máy nguồn đến một máy đích. Cấu hình Lab:


    Nguồn 198.18.161.6 Phát sinh lưu lượng (ping, SSH)
    Đích 198.18.128.3 Áp dụng chương trình eBPF để lọc gói tin
    💡 eBPF được chạy trên máy đích (198.18.128.3) để chặn lưu lượng đến từ máy nguồn.
    3. Mục tiêu Tác vụ


    Sau khi triển khai chương trình eBPF thành công:
    • ❌ Ping từ 198.18.161.6 đến 198.18.128.3 sẽ không có phản hồi.
    • ❌ Kết nối SSH từ 198.18.161.6 đến 198.18.128.3 sẽ bị từ chối hoặc không thành công.
    4. eBPF: Cơ chế lọc mạng


    Bạn có thể dùng eBPF kết hợp với:
    • XDP (eXpress Data Path): Lọc gói tin ở tầng NIC (trước IP stack), tốc độ cao, dùng cho các tác vụ lọc thô.
    • TC (Traffic Control): Lọc gói tin ở tầng cao hơn, phù hợp với chính sách phức tạp hơn như phân loại QoS hoặc lọc theo port.
    • Socket filters (classic BPF): Áp dụng tại tầng socket, phù hợp khi cần kiểm soát ứng dụng layer.
    5. Ví dụ Triển khai


    Dưới đây là sơ đồ hành vi:
    sql

    Copy


    Edit


    +-------------------+ +-------------------+ | Source (Client) | ping/ssh ---> X | Target (Linux) | | 198.18.161.6 |--------------------->| 198.18.128.3 | | | | eBPF XDP filter | +-------------------+ +-------------------+



    Chương trình eBPF sẽ được gắn vào interface mạng của máy 198.18.128.3 để chặn:
    • ICMP Echo Request từ 198.18.161.6
    • TCP kết nối đến cổng 22 từ 198.18.161.6
    6. Gợi ý mã eBPF cơ bản (XDP)


    Dưới đây là đoạn code eBPF mẫu sử dụng libbpf và XDP để chặn IP cụ thể:
    c

    Copy


    Edit


    SEC("xdp") int block_ip(struct xdp_md *ctx) { void *data_end = (void *)(long)ctx->data_end; void *data = (void *)(long)ctx->data; struct ethhdr *eth = data; if ((void *)eth + sizeof(*eth) > data_end) return XDP_PASS; if (eth->h_proto != htons(ETH_P_IP)) return XDP_PASS; struct iphdr *ip = data + sizeof(*eth); if ((void *)ip + sizeof(*ip) > data_end) return XDP_PASS; // Check source IP: 198.18.161.6 if (ip->saddr == htonl(0xC612A106)) { // Drop ICMP and TCP (e.g., SSH) if (ip->protocol == IPPROTO_ICMP || ip->protocol == IPPROTO_TCP) { return XDP_DROP; } } return XDP_PASS; }
    ⚠️ Gắn chương trình vào interface với: ip link set dev eth0 xdp obj block_ip.o
    7. Kết luận


    Việc triển khai eBPF để kiểm soát an ninh mạng cho phép:
    • Tùy biến chính sách bảo mật sát thực tế
    • Giảm độ trễ so với firewall truyền thống
    • Khả năng mở rộng mạnh trong môi trường container/Kubernetes



    Click image for larger version

Name:	eBPF.png
Views:	3
Size:	24.8 KB
ID:	429722
    Đặng Quang Minh, CCIEx2#11897 (Enterprise Infrastructure, Wireless), DEVNET, CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X