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:
| Daemon | Vai trò | Quyền chính |
|---|---|---|
| capd | Verify capability | Không đọc/ghi storage |
| datad | Thực thi READ/WRITE | Khô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.