Execution & Isolation: Khi exploit xảy ra, hệ thống vẫn sống

Trong hệ thống lưu trữ dữ liệu nhạy cảm, exploit là không thể tránh khỏi. OBELISK sử dụng FreeBSD jail kết hợp Mandatory Access Control (MAC) để đảm bảo một tiến trình bị chiếm không thể lan rộng, leo thang hay truy cập dữ liệu ngoài scope – biến isolation thành lớp bảo vệ thực sự thay vì chỉ là khẩu hiệu.

Execution & Isolation: Khi exploit xảy ra, hệ thống vẫn sống

Trong hệ thống lưu trữ dữ liệu nhạy cảm, mã hoá và xác thực thôi chưa đủ.

Câu hỏi quyết định là: Nếu một tiến trình bị exploit, chuyện gì sẽ xảy ra tiếp theo?

Hầu hết hệ thống hiện nay trả lời rất tệ:

  • ❌ Service bị RCE → attacker leo thang → toàn bộ dữ liệu bị đọc/xóa
  • ❌ Container breakout → host rơi vào tay attacker
  • ❌ Root bị chiếm → game over

OBELISK được thiết kế với giả định thực tế hơn: Exploit là không tránh khỏi – lan rộng mới là thất bại thực sự.

Bài viết này giải thích cách lớp Execution & Isolation trong OBELISK (dựa trên FreeBSD jail + MAC) đảm bảo một exploit chỉ dừng đúng tại nơi nó xảy ra.

1️⃣ Threat Model của Lớp Execution

Lớp này không giả định:

  • Code không có bug
  • Go runtime hoàn hảo
  • Crypto không bao giờ bị misuse

Lớp này giả định attacker có thể:

  • ✅ Exploit capd hoặc datad
  • ✅ Đạt RCE trong process
  • ✅ Thậm chí có quyền user/root trong jail

Mục tiêu chính:

  • ✅ Không lan sang service khác
  • ✅ Không leo thang lên host
  • ✅ Không đọc dữ liệu ngoài scope
  • ✅ Không bypass được policy kernel

2️⃣ Nguyên Tắc Thiết Kế Cốt Lõi

Execution layer tuân thủ nghiêm ngặt 5 nguyên tắc:

  • 🗸 One role – one process – one jail
  • 🗸 Default deny ở kernel level
  • 🗸 Không tin userland để enforce security
  • 🗸 Không chia sẻ filesystem giữa các jail
  • 🗸 Không chấp nhận “tiện tay” bất kỳ shortcut nào

Isolation không chỉ để chống hacker – mà còn để chống sai lầm của chính mình.

3️⃣ Process Separation: capd và datad

OBELISK tách biệt rõ ràng data plane thành các daemon độc lập:

DaemonVai tròQuyền chính
capdVerify capabilityKhông đọc/ghi storage
datadThực thi READ/WRITEKhông verify capability

👉 Kể cả khi một daemon bị chiếm hoàn toàn, attacker vẫn thiếu mảnh ghép còn lại.

4️⃣ FreeBSD Jail – Không Phải Container Thông Thường

OBELISK chọn hệ thống Custom ổn đinh với jail thay vì Docker hay các container userland.

Lý do:

  • ✅ Jail là primitive kernel-native
  • ✅ Không cần daemon phức tạp (không có containerd, runc)
  • ✅ Không có lịch sử jail escape như container breakout
  • ✅ Đã chứng minh độ tin cậy hàng chục năm trong production

Mỗi jail được cấu hình:

  • 🗸 Không thấy process ngoài jail
  • 🗸 Không thấy filesystem host
  • 🗸 Không mount/umount
  • 🗸 Không raw socket
  • 🗸 Không load kernel module

Ví dụ cấu trúc:

  • /jails/capd
    /jails/datad
    /jails/auditd

Mỗi jail có IP riêng, filesystem riêng, user riêng.

5️⃣ Filesystem Isolation Tuyệt Đối

Lỗi phổ biến: “Service không dùng file đó → chắc an toàn”.

OBELISK không tin vào điều đó.

Nguyên tắc:

  • ✅ Jail chỉ mount đúng những gì bắt buộc phải thấy
  • ✅ Không mount / hay /var của host
  • ✅ Không shared volume giữa các jail

Ví dụ:

  • capd → không mount storage dataset
  • datad → chỉ mount encrypted dataset, không mount config admin

Nếu attacker chạy ls / mà thấy gì ngoài scoped filesystem → thiết kế đã thất bại.

6️⃣ Mandatory Access Control (MAC) – Lớp Bảo Vệ Dưới Root

FreeBSD cho phép enforce policy ngay cả khi attacker có root trong jail.

OBELISK sử dụng:

  • 🗸 mac_bsdextended
  • 🗸 mac_veriexec (khi cần code integrity mạnh hơn)

Ví dụ policy:

  • datad: chỉ đọc/ghi trong dataset được chỉ định, không exec binary lạ
  • capd: chỉ bind port whitelist, không mở file ngoài config

Kernel enforce – không bypass được bằng code hay root trong jail.

7️⃣ Code Integrity & Immutability

Vector nguy hiểm: attacker ghi đè binary → persistence sau restart.

OBELISK ngăn chặn bằng:

  • ✅ Read-only filesystem cho binary và libraries
  • ✅ Verify hash executable (nếu dùng veriexec)
  • ✅ Không cho write vào /bin, /usr/bin, /lib

Exploit thành công ≠ persistence lâu dài.

8️⃣ Không Chia Sẻ Namespace “Cho Tiện”

Những thứ không bao giờ được chia sẻ giữa các jail:

  • ❌ /proc
  • ❌ /dev (chỉ mount tối thiểu cần thiết)
  • ❌ IPC channels
  • ❌ Syslog socket
  • ❌ Environment variables nhạy cảm

Mỗi shortcut “cho tiện” là một potential attack surface.

9️⃣ Kết Hợp Với Capability Model – Defense-in-Depth Thực Sự

Execution & Isolation không thay thế Capability Protocol – chúng bổ trợ nhau:

  • ✅ Capability giới hạn ở tầng logic/application
  • ✅ Jail + MAC giới hạn ở tầng thực thi/kernel

Nếu capability bị bypass hoặc misuse:

  • 🗸 Attacker vẫn bị nhốt trong jail
  • 🗸 Vẫn bị MAC chặn hành vi
  • 🗸 Vẫn không thấy dữ liệu ngoài scope

Đây mới là defense-in-depth đúng nghĩa, không chỉ là khẩu hiệu.

🔟 Những Thứ OBELISK Cố Ý KHÔNG Làm

OBELISK từ chối:

  • ❌ Chạy nhiều role trong một process
  • ❌ Cho admin SSH trực tiếp vào jail data plane
  • ❌ Debug/live inspection trên production
  • ❌ “Tạm disable MAC để test nhanh”

Hầu hết các vụ breach lớn bắt đầu từ những quyết định “tạm thời” như vậy.

1️⃣1️⃣ Kết Luận

Trong OBELISK:

  • ✅ Exploit ≠ compromise toàn hệ thống
  • ✅ Root trong jail ≠ toàn quyền
  • ✅ Một process bị chiếm ≠ toàn bộ dữ liệu bị mất

Lớp Execution & Isolation không hào nhoáng, không marketing-friendly, nhưng chính là thứ giữ cho hệ thống còn đứng vững khi mọi lớp khác đã thất bại.

Nếu bạn đang xây dựng hệ thống lưu trữ dữ liệu nhạy cảm và vẫn:

  • tin rằng mã hoá + TLS là đủ
  • tin rằng container = true isolation
  • tin rằng “root là vua”

…thì bạn đang đặt cược dữ liệu vào niềm tin, chứ không phải kiến trúc.

OBELISK chọn cách khác: chấp nhận exploit, nhưng từ chối lan rộng.