Bali, Indonesia
Insights

Mengunci Egress Apple HomeView: Arsitektur Isolasi IoT Kamera dengan nftables dan eBPF

October 14, 2026
0:00
Mengintegrasikan kamera pengawas berbasis IP ke ekosistem Apple HomeView dan HomeKit Secure Video (HKSV) menawarkan kemudahan enkripsi end-to-end langsung ke iCloud. Namun, pada level infrastruktur jaringan, arsitektur ini memicu ilusi keamanan. Di balik antarmuka Apple Home yang mulus, kamera-kamera IP komersial—baik yang terhubung langsung via HomeKit Accessory Protocol (HAP) maupun melalui bridge seperti Scrypted dan go2rtc—secara rutin menjalankan firmware tertutup (proprietary) yang sarat telemetri invasif, panggilan STUN/TURN yang tidak terdokumentasi, dan percobaan koneksi outbound ke server vendor pihak ketiga. Jika kamera IP dibiarkan berada di subnet datar atau diberi akses internet terbuka, perimeter keamanan internal praktis runtuh. Kamera dapat menjadi vektor pivoting yang sempurna jika terjadi eksploitasi zero-day pada stack RTSP atau HTTP daemon lokalnya. Artikel ini membedah konfigurasi pertahanan perimeter dan lockdown egress deterministik untuk Apple HomeView menggunakan nftables, perutean multi-VLAN, dan kontrol soket berbasis eBPF pada gateway Linux edge.
Dalam implementasi HomeKit Secure Video, kamera tidak pernah diizinkan berbicara langsung ke Apple Cloud secara terbuka. Aliran video lokal harus diambil oleh Apple Home Hub lokal (Apple TV 4K atau HomePod) melalui protokol RTSP atau SRTP internal. Apple Hub bertindak sebagai cryptographic boundary yang menganalisis frame (motion detection, facial recognition), mengenkripsi segmen video dengan kunci publik pengguna, lalu mengirimkannya ke iCloud melalui port HTTPS/TLS standar.
TEXT
+-----------------------+             RTSP (TCP 554)              +-----------------------+
|     Kamera IP IoT     | --------------------------------------> |    HomeView Bridge    | 
| (VLAN 30: 10.30.0.0)  |                                         | (Scrypted / go2rtc)   |
+-----------------------+                                         +-----------------------+
       |           ^                                                          |
   [DROP WAN]      | Return Traffic                                           |
       |           |                                                          v
       x     +----------------------------------------------------+   HAP/SRTP (TCP/UDP)
             |                 Linux Edge Gateway                 |           |
             |  - nftables Egress Filter                          |           v
             |  - eBPF Socket Filtering via sockops               | +-----------------------+
             +----------------------------------------------------+ |       Apple Hub       |
                                       |                            | (VLAN 20: 10.20.0.50) |
                            Encrypted iCloud Egress                 +-----------------------+
                                       |                                      |
                                       v                                      |
                            +---------------------+                           |
                            |   Apple WAN Relay   | <-------------------------+
                            +---------------------+    Egress TLS (TCP 443)
Berdasarkan topologi di atas, kamera IP di VLAN 30 wajib diisolasi secara mutlak dari akses WAN. Seluruh paket TCP SYN atau UDP outbound menuju internet publik harus di-drop di layer kernel gateway, tanpa mengirimkan respons ICMP Destination Unreachable yang dapat memicu perilaku brute-force agresif dari firmware kamera.
Untuk menyusun aturan firewall yang granular tanpa merusak fungsi streaming HomeView, kita harus membedah port yang digunakan oleh protokol HAP, RTSP, mDNS, dan SRTP.
ProtokolPort & TransportArah TrafikPerilaku & Risiko Keamanan
mDNS / Bonjour5353/UDPMulticast (224.0.0.251)Wajib untuk discovery HomeKit. Rawan disalahgunakan untuk pemetaan host internal jika bocor antar-VLAN.
RTSP Stream554/TCPKamera -> BridgeMengirim payload video mentah H.264/H.265. Rentan credential sniffing jika Basic Auth tidak di-tunnel.
HAP Pairing51827/TCP (Dinamis)Bridge -> Apple HubHandshake Curve25519 dan kontrol stream. Wajib dikunci hanya ke IP Apple Hub.
SRTP Media49152-65535/UDPBridge <-> Apple HubVoice interkom dua arah dan relay video terenkripsi AES-128-GCM. Memerlukan penanganan conntrack presisi.
Vendor TelemetryBeragam (TCP 80/443, UDP)Kamera -> WAN PublikUpaya phoning-home ke AWS/P2P cloud vendor. Ancaman kritis eksfiltrasi snapshot dan metadata.
Berikut adalah konfigurasi kernel netfilter menggunakan nftables pada Linux edge router. Konfigurasi ini memberlakukan isolasi ketat pada interface vlan30 (Kamera) dan membatasi vlan20 (IoT Hub & Apple TV).
BASH
# Simpan konfigurasi ini pada /etc/nftables.conf
flush ruleset

table inet security_defense {
    # Set IP untuk perangkat terverifikasi
    set apple_hubs {
        type ipv4_addr
        flags constant
        elements = { 10.20.0.50, 10.20.0.51 }
    }

    set camera_ips {
        type ipv4_addr
        flags dynamic
        elements = { 10.30.0.10, 10.30.0.11, 10.30.0.12 }
    }

    chain prerouting {
        type filter hook prerouting priority mangle; policy accept;
        # Cegah serangan IP spoofing dari interface VLAN Kamera
        iifname 'vlan30' ip saddr != 10.30.0.0/24 drop
    }

    chain forward {
        type filter hook forward priority filter; policy drop;

        # Fast-path untuk koneksi yang sudah established atau related
        ct state established,related accept
        ct state invalid drop

        # 1. BLOKIR MUTLAK: Kamera tidak boleh mengakses WAN interface (misal: eth0)
        iifname 'vlan30' oifname 'eth0' drop

        # 2. Hub Apple diizinkan menginisiasi stream RTSP ke Kamera
        ip saddr @apple_hubs ip daddr @camera_ips tcp dport 554 ct state new accept

        # 3. Izinkan port stream HomeKit Bridge (Scrypted/go2rtc) ke Apple Hub
        ip saddr 10.20.0.10 ip daddr @apple_hubs tcp dport { 51826, 51827 } ct state new accept
        ip saddr 10.20.0.10 ip daddr @apple_hubs udp dport 49152-65535 accept

        # 4. Apple Hub diizinkan egress ke Internet untuk HKSV iCloud relay
        ip saddr @apple_hubs oifname 'eth0' tcp dport { 80, 443 } ct state new accept
        ip saddr @apple_hubs oifname 'eth0' udp dport { 123, 443 } ct state new accept
    }

    chain output {
        type filter hook output priority filter; policy accept;
    }
}
Terapkan ruleset tersebut dan periksa validitas kompilasi di tingkat kernel:
BASH
nft -c -f /etc/nftables.conf && nft -f /etc/nftables.conf
nft list ruleset
Apple HomeView membutuhkan protokol Multicast DNS (224.0.0.251 port 5353/UDP) untuk menemukan entitas aksesori HAP. Multicast tidak merambat melintasi batas L3 VLAN secara alami. Solusi konvensional menggunakan Avahi reflector sering kali membuka celah karena memantulkan seluruh cache mDNS ke seluruh interface tanpa filter. Solusi yang benar adalah membatasi refleksi paket hanya untuk tipe servis _hap._tcp.local. dan mengisolasi interface input/output. Edit konfigurasi /etc/avahi/avahi-daemon.conf:
INI
[server]
use-ipv4=yes
use-ipv6=no
allow-interfaces=vlan20,vlan30
bind-address=10.20.0.1
enable-dbus=yes

[reflector]
enable-reflector=yes
reflect-filters=_hap._tcp.local.,_airplay._tcp.local.

[rlimits]
rlimit-core=0
rlimit-data=4194304
rlimit-fsize=0
rlimit-nofile=768
rlimit-stack=4194304
rlimit-nproc=3
Kemudian tambahkan aturan rate-limiting ketat pada nftables agar flooding paket mDNS tidak memicu DoS pada daemon Avahi:
BASH
nft add rule inet security_defense forward ip daddr 224.0.0.251 udp dport 5353 limit rate over 10/second burst 20 packets drop
Jika menjalankan engine bridge HomeView (seperti Scrypted atau go2rtc) langsung pada host Linux bare-metal, perimeter network L3 saja belum cukup. Sebuah software bridge yang terkompromi bisa disisipi reverse shell. Kita dapat memanfaatkan eBPF (sockops dan cgroup/connect4) untuk mengunci API soket di kernel Linux, sehingga biner bridge hanya dapat memanggil syscall connect() ke subnet lokal terdaftar. Berikut adalah program eBPF C sederhana (egress_lock.bpf.c) yang mengintersepsi syscall connect() pada soket IPv4:
C
#include <vmlinux.h>
#include <bpf/bpf_endian.h>
#include <bpf/bpf_helpers.h>

#define ALLOWED_NET 0x0A140000 // 10.20.0.0/16
#define NET_MASK    0xFFFF0000

SEC('cgroup/connect4')
int block_bridge_wan_connect(struct bpf_sock_addr *ctx) &#123;
    __u32 dst_ip = bpf_ntohl(ctx->user_ip4);

    // Izinkan loopback 127.0.0.1
    if ((dst_ip & 0xFF00