Apa itu eBPF, XDP

Akhir-akhir ini sedang trending pertanyaan apa itu eBPF dan XDP. Di Herza Cloud, Salah satu inovasi terbaru untuk solusi Anti DDoS adalah pengembangan kami untuk Firewall Filter Layer 7 dengan eBPF dan XDP.

Kami tidak takut merusak barang dan bergerak cepat. Kami telah memupuk budaya teknik yang kuat yang mendorong inovasi dan kami yakin ini penting, karena memungkinkan anggota tim kami melakukan yang lebih baik waktu demi waktu.

eBPF dan XDP adalah teknologi terbaru yang perlu Anda tambahkan ke kosakata tren teknologi trending saat ini, bersama dengan Blockchain dan Cyberwarfare.

Dalam artikel ini, kami akan menyelami sedikit tentang kegunaan eBPF dan XDP, namun kami akan berfokus pada bagaimana kami menggabungkan teknologi menarik ini kedalam keamanan jaringan kami, terkhusus layanan keamanan Anti DDoS dan berbagi bagian dari perjalanan kami melakukannya.

Apa itu eBPF?

Apa yang dimulai dengan tujuan sederhana dari pemfilteran paket jaringan, eBPF dengan cepat berkembang menjadi salah satu alat paling kuat yang tersedia untuk Linux. Diadopsi oleh orang-orang seperti Netflix, Amazon, Google, Microsoft dll dan dijuluki “Kekuatan super untuk Linux” oleh beberapa orang, ini memungkinkan Anda untuk menjalankan “ring 3 user-space code” dalam kernel pada ring 0, di dalam mesin virtual.

eBPF telah terbukti menjadi alat yang sangat berharga untuk pemfilteran serta klasifikasi paket, diagnostik dan pelacakan jaringan, serta analisis kinerja antara lain di dalam Herza Cloud.

Artikel ini https://lwn.net/Articles/740157/ dapat memberikan informasi lebih lanjut tentang eBPF.

Apa itu XDP?

“XDP atau eXpress Data Path memberikan performa tinggi, jalur data jaringan yang dapat diprogram di kernel Linux sebagai bagian dari IO Visor Project. XDP menyediakan pemrosesan paket bare metal pada titik terendah dalam tumpukan perangkat lunak yang menjadikannya ideal untuk kecepatan tanpa mengurangi kemampuan pemrograman. Selain itu, fungsi baru dapat diimplementasikan secara dinamis dengan jalur cepat terintegrasi tanpa modifikasi kernel” – iovisor.org

Lihat https://www.iovisor.org/technology/xdp untuk informasi lebih lanjut tentang XDP.

eBPF dan XDP untuk Keamanan Jaringan

Mengapa kita ingin menggunakan eBPF dan XDP?

Hanya karena itu sangat memperkuat kemampuan Deteksi, Analisis, dan Mitigasi serangan DDoS dengan lebih terarah. Dengan memfilter paket pada tingkat silikon dengan perangkat keras seperti Mellanox Connect-X5, kami dapat mengungguli solusi lain yang telah kami uji secara andal.

Selain manfaat kinerja yang jelas, eBPF dan XDP bersama-sama memungkinkan kami menambahkan lapisan keamanan tambahan pada tingkat serendah mungkin. Hal ini bersama-sama dengan teknologi keamanan jaringan milik kami lainnya menambahkan hingga melebihi persyaratan Keamanan dari setiap Pemerintah, Perusahaan atau organisasi mana pun dengan data sensitif, dan platform Herza Cloud Network Intelligence & Analytics menyediakan analitik berkelanjutan secara real-time, memberi pelanggan visibilitas yang tak tertandingi dan wawasan yang dibutuhkan melalui jaringan dan infrastruktur.

Tapi seperti teknologi baru lainnya, ini bukannya tanpa masalah dan bahkan kadang-kadang kita merasa seperti kita memotong diri kita sendiri di ujung tombak, karena area yang kita injak benar-benar belum dieksplorasi.

Mari ambil cuplikan kode untuk menemukan data header IP terkait dengan header ETH (kode ini dapat ditemukan di beberapa contoh eBPF, dan kami juga menggunakan versinya):

static __always_inline bool parse_eth(struct ethhdr* eth,
                                      void* data_end,
                                      u16* eth_proto,
                                      u64* l3_offset) {
    u16 eth_type = eth->h_proto;
    u64 offset = 0;

    if ((void*)(eth + 1) > data_end)
        return false;

    /* Skip non 802.3 Ethertypes */
    if (unlikely(ntohs(eth_type) < ETH_P_802_3_MIN))
        return false;

        /* Handle (double) VLAN tagged packet */
#pragma unroll
    for (int i = 0; i < 2; ++i) {
        if (eth_type == htons(ETH_P_8021Q) || eth_type == htons(ETH_P_8021AD)) {
            struct vlan_hdr* vlan_hdr;

            vlan_hdr = (void*)eth + offset;
            offset += sizeof(*vlan_hdr);
            if ((void*)(eth + 1) + offset > data_end)
                return false;
            eth_type = vlan_hdr->h_vlan_encapsulated_proto;
        }
    }

    *eth_proto = ntohs(eth_type);
    *l3_offset = offset;
    return true;
}

Dalam hal ini offset memiliki salah satu dari 3 nilai constant values: 0, sizeof(struct vlan_hdr) atau 2 * sizeof(struct vlan_hdr), yang terlihat saat melihat bytecode yang dikompilasi. offset disimpan dalam register r4, dan inilah yang terjadi padanya:

$ llvm-objdump -S -no-show-raw-insn xdp_l3offset_kern.o

; offset = 0;
      15:       r4 = 0
; offset += sizeof(*vlan_hdr);
      20:       r4 = 4
; offset += sizeof(*vlan_hdr);
      26:       r5 = r4
      27:       r5 += 4
      // ...
      35:       r4 = r5

We know that the value is [0-8], and the in-kernel eBPF verifier knows it too, as it tracks registers’ values to make sure that operations on the packet are well defined:

    if (eth_proto == ETH_P_IP) {
        struct iphdr* ip = (void*)(eth + 1) + l3_offset;
        if ((void*)(ip + 1) > data_end)
            return XDP_DROP;

        // Will print the protocol number to /sys/kernel/debug/tracing/trace_pipe
        bpf_trace_printk("ipproto: %u\n", ip->protocol);
    }
$ llvm-objdump -S -no-show-raw-insn xdp_l3offset_kern.o

; struct iphdr* ip = (void*)(eth + 1) + l3_offset;
; r2 contains the packet pointer
      42:       r2 += r4

Pada hari-hari awal pengembangan kami dengan XDP dan eBPF, kami mengalami banyak masalah dan karenanya kami dengan senang hati membagikan informasi ini dengan komunitas open source yang lebih luas dengan harapan dapat membantu seseorang di luar sana.

Kami juga senang untuk membagikan informasi ini sebagai pembaruan dan bersemangat untuk memberi tahu Anda berita dan berbagi pembaruan sepanjang perjalanan teknologi kami, dan saat kami merilis fitur dan produk baru, kami akan terus mengabari Anda.