LA NINA // BLOG
Kembali ke Indeks Catatan

Rekayasa Traffic & Security F5 BIG-IP: Arsitektur TMOS Full-Proxy, Mitigasi False-Positive WAF/ASM, dan Data Plane Programmability via iRules

Paradigma High-Availability & Inspeksi Layer 7 pada Enterprise Ingress

Dalam lanskap infrastruktur mission-critical, pemisahan beban komputasi antara transmisi paket jaringan L4 dan inspeksi keamanan Layer 7 (L7) menjadi fondasi keandalan sistem. Aplikasi modern berhadapan dengan spektrum ancaman yang bervariasiβ€”mulai dari volumetric Layer 4 floods, eksploitasi parameter HTTP (Server-Side Request Forgery / SSRF, SQL Injection, Remote Code Execution), hingga anomali protokol pada API gateway.

F5 BIG-IP dengan arsitektur Traffic Management Operating System (TMOS) membedakan dirinya dari load balancer berbasis Linux kernel konvensional (seperti iptables/IPVS atau HAProxy standar) melalui pendekatan Dual-Stack Full-Proxy dan Traffic Management Microkernel (TMM).

Artikel ini mengupas anatomi internal TMOS, siklus evaluasi paket pada Application Security Manager (ASM / Advanced WAF), strategi penanganan false-positive krusial di lini produksi, serta data plane programmability menggunakan TCL-based iRules dengan data sintetis sesuai standar RFC 5737.


1. Arsitektur Inti TMOS: Dual-Plane Separation & Full-Proxy Engine

Sistem operasi F5 BIG-IP TMOS tidak mengeksekusi packet forwarding melalui networking stack kernel Linux standar. Sebaliknya, arsitektur TMOS membagi kontrol sistem menjadi dua domain independen:

TEXT
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ CONTROL / MANAGEMENT PLANE (Host Linux OS / CentOS-hardened)             β”‚
β”‚  - Web GUI (Apache/Tomcat)        - REST API (iControl REST)            β”‚
β”‚  - System Daemons (mcpd, sod)     - Telemetry & SNMP / High Availabilityβ”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                     β”‚ Inter-Process Communication (IPC)
                                     β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ DATA PLANE (TMM - Traffic Management Microkernel)                       β”‚
β”‚  - Direct hardware / SR-IOV bypass (Zero-Copy Ring Buffers)             β”‚
β”‚  - Non-preemptive, run-to-completion real-time worker cores             β”‚
β”‚  - Dual-Stack TCP Express (Independent Client-Side & Server-Side Stacks)β”‚
β”‚  - Hardware SSL/TLS Acceleration Engine (Crypto Offload)                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

1.1 TMM vs Linux Kernel Networking

  1. Bypass Kernel: TMM mengambil alih Network Interface Card (NIC) secara eksklusif menggunakan mekanisme polling driver berkecepatan tinggi (analog dengan DPDK), menghilangkan latensi alokasi sk_buff dan interrupt context-switching pada CPU Linux.
  2. Run-to-Completion Execution: Setiap thread TMM dikunci (pinned) pada core CPU fisik tertentu, memproses paket dari ingress fisik hingga egress tanpa thread preemption.
  3. Dual-Stack TCP Express: Pada model Full-Proxy, koneksi TCP sisi klien (Client-Side) dan koneksi TCP sisi server (Server-Side) diisolasi sepenuhnya. Handshake TCP klien diselesaikan oleh Virtual Server F5 dengan optimasi window sizing independen. Jika klien mengalami packet loss, retransmisi diselesaikan di segmen klien tanpa membebani backend pod/server.
TEXT
[ Client Workload ]                 [ F5 BIG-IP TMOS ]                [ Backend Farm ]
  203.0.113.45:54210                 VIP: 198.51.100.10:443            Pool: 192.0.2.50:8443
         β”‚                                   β”‚                                   β”‚
         β”œβ”€β”€β”€ SYN (Window Scale 8) ─────────►│                                   β”‚
         │◄── SYN-ACK (TCP Express Opt) ────── (Client-Side Handshake Selesai)   β”‚
         β”œβ”€β”€β”€ ACK ──────────────────────────►│                                   β”‚
         β”‚                                   β”‚                                   β”‚
         β”œβ”€β”€β”€ TLS 1.3 ClientHello ──────────►│ (Offload SSL Hardware)            β”‚
         │◄── TLS 1.3 Finished ───────────────                                   β”‚
         β”‚                                   β”‚                                   β”‚
         β”œβ”€β”€β”€ HTTP/2 GET /api/v1/telemetry ─►│─── SYN (Server-Side TCP) ────────►│
         β”‚    (L7 Inspection & ASM WAF)      │◄── SYN-ACK ────────────────────────
         β”‚                                   │─── ACK ──────────────────────────►│
         β”‚                                   │─── HTTP/1.1 GET /api/v1/telemetryβ–Ίβ”‚

2. Ingress Pipeline & F5 ASM/Advanced WAF Evaluation Lifecycle

Saat modul Application Security Manager (ASM) diaktifkan pada Virtual Server, setiap payload L7 diinspeksi secara deterministik melalui decision tree multi-tahap sebelum dialihkan ke backend:

TEXT
[ Ingress HTTP Request: 203.0.113.45 -> 198.51.100.10 ]
                       β”‚
                       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Phase 1: HTTP Protocol Compliance                     β”‚
β”‚ Validasi kepatuhan RFC (Bad HTTP Methods, Header Case, β”‚
β”‚ Null Bytes, Request Smuggling Delimiters)              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚ PASS
                       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Phase 2: Normalisasi Evasion & Decoding Pipeline       β”‚
β”‚ Multi-pass URL decoding, Hex, Unicode, Base64 decoding β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚ PASS
                       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Phase 3: Whitelist & Explicit Entity Constraints       β”‚
β”‚ Validasi skema URL, Query Parameters, File Extensions  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚ PASS
                       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Phase 4: Threat Signatures Engine (Regex & AST Model)  β”‚
β”‚ Pencocokan signature CVE, SQLi, SSRF, Command Injection β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚ PASS
                       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Phase 5: Behavioral Threat Engine & Bot Defense        β”‚
β”‚ Analisis CAPTCHA, Headless Fingerprinting, Brute-Force  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚ PASS -> Forward ke Backend 192.0.2.50
                       β–Ό
[ Backend Response: 192.0.2.50 -> F5 TMOS ]
                       β”‚
                       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Phase 6: Egress Inspection (Data Guard & Status Code)  β”‚
β”‚ Cek status HTTP, kebocoran PII/Kartu Kredit, Exception β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚ PASS
                       β–Ό
[ Egress Response ke Client 203.0.113.45 ]

3. Investigasi & Remediasi False-Positive Kritis

Pada lingkungan produksi perbankan atau microservices terdistribusi, penerapan WAF sering kali terbentur oleh false positive yang mengganggu ketersediaan layanan (high-impact incident). Berikut panduan mitigasi teknis terhadap dua kasus paling sering ditemui:

3.1 Resolusi Status HTTP Tidak Terdaftar (VIOLATION_HTTP_STATUS_IN_RESPONSE)

Secara default, F5 ASM membatasi status HTTP respon backend ke himpunan standar (200, 301, 302, 404). Ketika API backend mengembalikan status rate-limiting modern seperti 429 Too Many Requests, ASM mengkategorikannya sebagai anomali fatal, memutus aliran data, dan mengembalikan halaman penolakan (Request Rejected).

BASH
# 1. Periksa daftar response status codes yang diizinkan pada policy
tmsh list asm policy /Common/Enterprise_Security_Policy response-statuses

# 2. Tambahkan status HTTP 429 ke dalam policy whitelist
tmsh modify asm policy /Common/Enterprise_Security_Policy response-statuses add { 429 }

# 3. Publikasikan perubahan konfigurasi ke TMM Data Plane
tmsh publish asm policy /Common/Enterprise_Security_Policy

3.2 Penanganan False-Positive Parameter SSRF/Metacharacter

Ketika klien mengirimkan URL penuh sebagai parameter (misalnya webhook payload: target_url=https://198.51.100.88/hook), karakter titik dua (:) dan garis miring (/) sering kali memicu VIOLATION_PARAMETER_VALUE_METACHAR atau signature SSRF ID 200000xxx.

Untuk memperbaikinya tanpa melemahkan postur keamanan aplikasi:

  1. Buat definisi parameter eksplisit pada path /api/v1/webhook.
  2. Ubah tipe parameter menjadi User-input dengan validasi regex khusus atau setel tipe data ke Ignore value.
  3. Kecualikan attack signature SSRF hanya pada parameter tersebut melalui perintah TMSH:
BASH
# Modifikasi parameter eksplisit agar tidak mengevaluasi attack signature tertentu
tmsh modify asm policy /Common/Enterprise_Security_Policy \
  parameters modify { "target_url" { \
    attack-signatures modify { 200001432 { enabled false } } \
  } }
tmsh publish asm policy /Common/Enterprise_Security_Policy

3.3 Bedah Forensik Root Cause Analysis via Support ID

Saat F5 memblokir trafik klien, layar browser atau respon API menerima ID numerik unik: The requested URL was rejected. Please consult with your administrator. Your support ID is: 1893332588460657089.

Support ID ini merupakan indeks kunci 64-bit yang tersimpan dalam tabel audit internal ASM. Berikut teknik ekstraksi instan dari terminal Linux host:

BASH
# Metode A: Melalui TMSH audit log filter
tmsh show sys log asm filter-fields { support-id 1893332588460657089 }

# Metode B: Query langsung ke database SQLite/MySQL internal PRX ASM
mysql -u root -p$(perl -MPasswd -e 'print Passwd::get_asmpass()') -e \
  "SELECT support_id, violation_name, remote_addr, uri, blocking_status \
   FROM PRX.REQUEST_LOG \
   WHERE support_id = '1893332588460657089'\G"

4. Programmability Data Plane: Implementasi iRules Tingkat Lanjut

iRules memberikan fleksibilitas komputasi event-driven langsung di TMM kernel. Contoh implementasi berikut mendemonstrasikan orkestrasi trafik cerdas: mengarahkan trafik API berbeban tinggi ke pool mikroservis khusus, melakukan bypass ASM selektif pada endpoint tepercaya, serta menginjeksi header keamanan standar secara zero-latency.

TCL
# ==============================================================================
# iRule Name : Rule_Enterprise_Traffic_Governor
# Purpose    : Dynamic L7 routing, selective WAF bypass, and security telemetry
# Context    : Bound to Virtual Server 198.51.100.10:443
# ==============================================================================

when CLIENT_ACCEPTED {
    # Logging koneksi TCP L4 dari subnet RFC 5737
    set client_ip [IP::client_addr]
    set client_port [TCP::client_port]
}

when HTTP_REQUEST {
    set uri_path [string tolower [HTTP::path]]
    set req_method [HTTP::method]

    # Injeksi header forensik X-Forwarded-For dan X-Request-Start
    HTTP::header remove "X-Forwarded-For"
    HTTP::header insert "X-Forwarded-For" $client_ip
    HTTP::header insert "X-Request-Start" [clock clicks -milliseconds]

    # Kasus 1: Bypass inspeksi WAF khusus untuk internal metrics endpoint
    if { $uri_path equals "/internal/metrics" and [IP::addr $client_ip equals 192.0.2.0/24] } {
        ASM::disable
        pool pool_monitoring_internal
        return
    }

    # Kasus 2: Microsegmentation routing untuk API webhook
    if { $uri_path starts_with "/api/v2/webhooks" } {
        # Validasi metode HTTP
        if { !($req_method equals "POST" or $req_method equals "PUT") } {
            HTTP::respond 405 content "{\"error\":\"Method Not Allowed\"}" "Content-Type" "application/json"
            return
        }
        pool pool_microservices_webhook
        return
    }

    # Default pool assignment
    pool pool_app_primary
}

when HTTP_RESPONSE {
    # Penanganan respons rate-limit jika backend mengembalikan status 429
    if { [HTTP::status] equals "429" } {
        HTTP::header insert "Retry-After" "30"
        HTTP::header insert "X-RateLimit-Violation" "Enforced-By-Edge"
    }

    # Hardening Response Security Headers (Zero Trust Baseline)
    HTTP::header insert "X-Content-Type-Options" "nosniff"
    HTTP::header insert "X-Frame-Options" "DENY"
    HTTP::header insert "X-XSS-Protection" "1; mode=block"
    HTTP::header insert "Strict-Transport-Security" "max-age=31536000; includeSubDomains"
    HTTP::header insert "Referrer-Policy" "strict-origin-when-cross-origin"
}

5. Packet Capture Diagnostik pada TMM Interface

Untuk membedah aliran paket yang melintasi hardware microkernel tanpa terhalang isolasi Linux stack, F5 menyediakan interface virtual 0.0. Opsi noise amplitude :nnn menyertakan metadata internal TMOS seperti Virtual Server ID, nama Pool Member, serta status TCP reset:

BASH
# Capture paket masuk dan keluar pada Virtual Server 198.51.100.10 lengkap dengan metadata TMM
tcpdump -ni 0.0:nnn -s0 -w /var/tmp/f5_asm_analysis.pcap host 198.51.100.10 and port 443

# Inspeksi payload ASCII dan pemecahan TLS secara real-time pada interface klien 203.0.113.45
tcpdump -ni 0.0:n -X -vvv -s0 "host 203.0.113.45 and (port 80 or port 443)"

Tabel berikut merangkum matriks evaluasi dan strategi eskalasi insiden pada klaster F5 BIG-IP:

Status Gejala / ViolationDomain PenyebabMekanisme ResolusiEfek Samping
Illegal HTTP status in response (429)Egress RFC FilterTambahkan kode ke response-statusesMengizinkan status 429 tanpa pemblokiran
Parameter value metacharactersL7 Ingress SignatureKonfigurasi tipe parameter User-inputValidasi metakarakter diabaikan pada field
TMM High Memory / Swap UsageResource ExhaustionTuning profile OneConnect & TCP timeoutMengurangi konsumsi memori koneksi idle
SYN Flood / Connection SaturationL4 Volumetric FloodAktifkan Hardware SYN Check ActivationMenyerap SYN request pada FPGA/Switch Fabric

Melalui penerapan arsitektur dual-plane TMOS dan kalibrasi parameter ASM yang tepat, stabilitas operasional serta proteksi perimeter Layer 7 skala enterprise dapat dicapai secara optimal tanpa mengorbankan performa transmisi data.

Kembali ke Atas ↑