Anatomi Risiko Eksekusi Perintah LLM CLI

Pemberian akses eksekusi shell (misalnya tool bash_execution) kepada Large Language Model (LLM) membuka vektor serangan kritis: arbitrary code execution melalui direct/indirect prompt injection. Teknik jailbreak adversial modern mampu memanipulasi model untuk menghasilkan payload berbahaya terselubung (seperti obfuscated base64, substitusi variabel sub-shell, atau network egress via DNS tunnelling) yang lolos dari filter instruksi tingkat sistem bawaan.

Ketika menangani otomasi berbasis agen CLI, sistem rekayasa backend tidak boleh bergantung pada jaminan non-deterministik LLM. Terdapat dua arsitektur mitigasi dominan: In-line Semantic Proxy dan Ephemeral Sandbox Isolation. Masing-masing memiliki karakteristik trade-off mendalam terhadap performa p99, overhead biaya, dan jaminan keamanan.

Pendekatan 1: In-line Semantic Proxy

In-line Semantic Proxy beroperasi secara sinkron pada flow request-response. Setiap instruksi prompt masuk dan output payload CLI dicegat sebelum menyentuh target eksekusi. Proxy mengevaluasi intent menggunakan model klasifikasi khusus (misalnya Llama Guard atau classifier diskrit terdistribusi), heuristik regex, dan parsing Abstract Syntax Tree (AST).

Kelebihan

  • Tanpa Overhead Infrastruktur Virtualisasi: Eksekusi berlangsung langsung di sistem host atau runner reguler tanpa perlu mengalokasikan MicroVM per perintah.
  • Visibilitas Intent Konseptual: Mampu memblokir perintah yang secara sintaksis valid tetapi secara semantik melanggar kebijakan (misalnya, penghapusan file proyek internal yang diizinkan sistem berkas tetapi dilarang operasional).

Kelemahan dan Kegagalan Deterministik

  • Latency Penalty Tinggi: Menambah minimal satu round-trip time (RTT) inferensi model classifier. Menambah overhead latensi p99 sebesar 150ms hingga 800ms tergantung ukuran classifier.
  • Biaya Token Berkelanjutan: Setiap token input/output diverifikasi ulang, menggandakan konsumsi token per sesi CLI.
  • Kegagalan Deterministik (False Negatives): Model klasifikasi rentan terhadap adversarial jailbreak evasion seperti token smearing, homoglyph substitutions, dan dynamic payload reconstruction via runtime bash strings. Pendekatan ini tidak memberikan jaminan keamanan matematis.

Pendekatan 2: Ephemeral Sandbox Isolation

Pendekatan Sandbox berasumsi bahwa model selalu dapat dieksploitasi. Proteksi tidak difokuskan pada validasi teks semantik, melainkan pada pembatasan batas komputasi (containment) saat runtime eksekusi perintah berlangsung. Setiap eksekusi CLI dijalankan di dalam lingkungan terisolasi jangka pendek (ephemeral) menggunakan MicroVM (seperti Firecracker) atau Container Rootless yang dikunci menggunakan Linux namespaces, seccomp BPF filters, dan cgroups v2.

Kelebihan

  • Isolasi Deterministik: Kegagalan deteksi injection pada LLM tidak membahayakan host. System call yang diblokir oleh seccomp tidak dapat ditembus oleh teknik rekayasa teks apa pun.
  • Zero Network Leakage: Isolasi network namespace memungkinkan pemblokiran total traffic egress (atau pembatasan ketat via eBPF/tc filter), mematikan reverse shell dan transfer data credential secara absolut.
  • Zero Token Cost: Biaya validasi tidak bergantung pada kuota API token LLM eksternal.

Kelemahan

  • Manajemen Lifecycle Worker Pool: Diperlukan orkestrasi cold-start/warm-pool snapshot VM dan pooling worker stateful.
  • Overhead Resource Compute: Konsumsi CPU dan memory reservasi tetap tinggi untuk menjaga resource slice per isolated runtime.

Komparasi Mendalam Arsitektur

Evaluasi dimensi teknis operasional antara kedua pendekatan:

Metrik / KarakteristikIn-line Semantic ProxyEphemeral Sandbox Isolation
Overhead Latensi p99150ms - 800ms (bergantung RTT model classifier & context length)5ms - 15ms (warm container) / 100ms - 150ms (Firecracker MicroVM boot)
Model BiayaVariable (linear mengikuti jumlah token yang diinspeksi)Fixed/Amortized (biaya alokasi CPU, RAM, and disk compute host)
Tingkat Jaminan KeamananProbabilistik (rentan bypass jailbreak)Deterministik (dibatasi oleh kernel security boundary)
Network Egress ControlSulit (deteksi string IP/domain rentan obfuscation)Deterministik via netns dan filtering eBPF pada layer kernel
Beban MaintainabilityMaintenance dataset/rule classifier, update pola prompt injectionMaintenance kernel, driver host, seccomp profile, base rootfs image
Skalabilitas WorkerStateless horizontal scaling (standard API proxy)Bound to host capacity (cgroup limits, memory density per VM)

Implementasi Isolasi Deterministik: Seccomp Profile Runner

Pola implementasi ephemeral runner berbasis runtime container standar menggunakan filter system call deterministik. Berikut konfigurasi filter seccomp minimal untuk mematikan system call berbahaya (seperti modifikasi memori proses lain via ptrace atau network socket binding):

{
  "defaultAction": "SCMP_ACT_ERRNO",
  "defaultErrnoRet": 38,
  "architectures": [
    "SCMP_ARCH_X86_64",
    "SCMP_ARCH_AARCH64"
  ],
  "syscalls": [
    {
      "names": [
        "read", "write", "open", "openat", "close", "fstat", "stat",
        "lseek", "mmap", "mprotect", "munmap", "brk", "rt_sigaction",
        "rt_sigprocmask", "rt_sigreturn", "ioctl", "access", "pipe2",
        "select", "poll", "futex", "exit_group", "execve", "getpid",
        "getuid", "getgid", "chdir", "getcwd"
      ],
      "action": "SCMP_ACT_ALLOW"
    },
    {
      "names": [
        "ptrace", "clone", "unshare", "setns", "mount", "pivot_root",
        "socket", "connect", "bind", "listen", "accept"
      ],
      "action": "SCMP_ACT_KILL_PROCESS"
    }
  ]
}

Contoh eksekusi CLI runner terisolasi pada backend menggunakan isolasi process runtime melalui boundary bubblewrap / namespace native:

package main

import (
	"bytes"
	"context"
	"os/exec"
	"time"
)

type ExecutionResult struct {
	Stdout   string
	Stderr   string
	ExitCode int
}

// RunSandboxedCommand mengeksekusi payload dalam boundary deterministik
func RunSandboxedCommand(ctx context.Context, shellCommand string) (ExecutionResult, error) {
	// Timeout ketat 5 detik untuk mencegah hang atau fork bombing
	ctxTimeout, cancel := context.WithTimeout(ctx, 5*time.Second)
	defer cancel()

	// Isolasi namespaces via bubblewrap (bwrap):
	// - unshare-all (IPC, Net, PID, UTS)
	// - root filesystem read-only (ro-bind)
	// - isolasi tmpfs hanya pada target writeable minimal
	cmd := exec.CommandContext(ctxTimeout, "bwrap",
		"--ro-bind", "/usr", "/usr",
		"--ro-bind", "/lib", "/lib",
		"--ro-bind", "/lib64", "/lib64",
		"--ro-bind", "/bin", "/bin",
		"--proc", "/proc",
		"--dev", "/dev",
		"--tmpfs", "/tmp",
		"--unshare-all",
		"--die-with-parent",
		"--",
		"/bin/sh", "-c", shellCommand,
	)

	var stdout, stderr bytes.Buffer
	cmd.Stdout = &stdout
	cmd.Stderr = &stderr

	err := cmd.Run()
	exitCode := 0
	if err != nil {
		if exitErr, ok := err.(*exec.ExitError); ok {
			exitCode = exitErr.ExitCode()
		} else {
			return ExecutionResult{}, err
		}
	}

	return ExecutionResult{
		Stdout:   stdout.String(),
		Stderr:   stderr.String(),
		ExitCode: exitCode,
	}, nil
}

Matriks Keputusan Arsitektur

Pilihlah arsitektur berdasarkan batasan operasional dan kebutuhan workload sistem:

  • Gunakan In-line Semantic Proxy jika:
    • Sistem CLI hanya mengoperasikan read-only query internal tanpa akses shell host langsung.
    • Latensi p99 di atas 500ms dapat ditoleransi oleh klien/user frontend.
    • Infrastruktur tidak memiliki hak akses tingkat kernel (seperti serverless standard AWS Lambda tanpa custom runtime virtualization).
  • Gunakan Ephemeral Sandbox jika:
    • Model LLM memiliki akses penuh ke interpreter (Bash, Python, Node.js) dan sistem file.
    • Overhead biaya token berulang harus ditekan seminimal mungkin pada load traffic tinggi.
    • Keamanan host bersifat critical dan non-negotiable; zero-trust terhadap output model AI.
  • Hybrid Approach (Defense-in-Depth):
    • Gunakan Semantic Proxy berbasis regular expression / static AST validation ringan (latency < 5ms) pada layer ingress untuk memotong command berbahaya umum sebelum mencapai pool execution.
    • Jalankan eksekusi payload akhir secara absolut di dalam MicroVM atau isolated ephemeral container dengan namespace unshared dan pembatasan seccomp.