shell.exec
ổn cho đến khi lệnh là rm -rf, db.query ổn cho đến khi nó chạm prod. Sự
phân biệt đó là cái mà một mệnh đề argument biểu đạt: một predicate
đối số tool jsonpath khớp
trên các giá trị mà một agent truyền, nên verdict chỉ kích hoạt trên cuộc
gọi nguy hiểm và để phần còn lại yên.
Trang này là một cookbook — một nhúm công thức args_match_json copy-paste
cho các trường hợp hay gặp nhất. Để biết toàn bộ ngữ pháp mệnh đề, bảng toán
tử, và ngữ nghĩa fail-closed, xem
Kiểm tra đối số và tham chiếu
Schema quy tắc.
1. Một mệnh đề đối số tool jsonpath hoạt động ra sao
args_match_json của một quy tắc là một chuỗi mã hóa JSON mang một tập
mệnh đề, tất cả được AND với nhau. Giá trị giải mã là một đối tượng,
{"clauses": [ … ]}, trong đó mỗi mệnh đề là một bộ ba
{ path, op, value }:
path— một tập con JSONPath nhỏ trên đối tượng đối số của tool:$.command,$.foo.bar,$.items[0], hoặc$cho cả đối tượng. Không wildcard, filter, slice, hay đệ quy đi xuống.op— một trong một tập đóng:eq,contains,regex,in,cidr_match,gt,lt.value— literal để so sánh (một chuỗi, số, bool, hoặc — vớiin— một mảng JSON).
tool_name_glob của quy tắc: quy tắc chỉ kích hoạt
khi tên tool khớp và mọi mệnh đề đều đúng. Bỏ args_match_json hoàn toàn
(hoặc để nó là một "{}" trống) và quy tắc khớp chỉ trên glob.
Mệnh đề fail closed — quy tắc, không phải request. Nếu một path không phân
giải, đối số dị dạng, hoặc một giá trị sai kiểu, mệnh đề đánh giá false và
quy tắc đơn giản không kích hoạt — cuộc gọi rơi xuống quy tắc kế tiếp hoặc
verdict mặc định. Một mệnh đề hỏng không bao giờ tự-deny. Viết tuyến chặn cứng
của bạn như một glob
deny thuần, không phải một mệnh đề bạn đang dựa vào để
fail theo một cách nhất định.2. Công thức: block một lệnh phá hủy
Trường hợp điển hình. Allowshell.exec nói chung, deny nó chỉ khi lệnh trông
có vẻ phá hủy. Một mệnh đề regex trên $.command làm việc đó:
$.command không-phải-chuỗi (hoặc thiếu) không bao giờ khớp, nên một cuộc gọi
dị dạng rơi xuống thay vì bị block nhầm.
3. Công thức: deny một tool trên một environment có tên
Chodb.query chạy, nhưng chỉ trên các kết nối an toàn — deny nó khi đích là
prod hoặc một replica. Toán tử in khớp giá trị đã phân giải với bất kỳ
phần tử nào của một mảng JSON:
in phải là một mảng JSON — một không-phải-mảng bị từ chối khi
bạn lưu quy tắc. Các phần tử so sánh với bằng vô hướng, nên số và chuỗi mỗi
cái khớp đúng kiểu của nó.
4. Công thức: deny một đích đến IP riêng hoặc metadata
Khi một tool nhận một IP đích làm đối số,cidr_match kiểm tra liệu nó có rơi
vào một CIDR — hình dạng SSRF của “một agent fetch 10.x hoặc địa chỉ cloud
metadata”:
5. Công thức: giới hạn một đối số số
gt và lt so sánh số. Dùng chúng để từ chối một batch size phi lý, một
limit quá khổ, hoặc bất kỳ count chạy hoang nào — ở đây, deny một bulk delete
nhắm hơn 100 dòng:
"500" là sai kiểu
và không khớp, nên quy tắc sẽ không kích hoạt trên một đối số kiểu-chuỗi.
Giữ đối số là số, hoặc chuẩn hóa nó trước khi tool thấy nó.
6. Công thức: kết hợp mệnh đề (AND)
Mọi mệnh đề trong một quy tắc AND với nhau, nên bạn có thể thu hẹp một verdict xuống một cuộc gọi rất cụ thể — ví dụ, denyshell.exec chỉ khi nó là một
lệnh phá hủy và nó nhắm vào một prod host:
args_match_json đơn —
soạn hai quy tắc (hoặc hai glob) ở các ưu tiên khác nhau. Engine duyệt các quy
tắc theo thứ tự ưu tiên và match đầu tiên thắng, nên đặt các quy tắc hẹp
trước. Xem Ưu tiên quy tắc.
7. Chọn verdict cho hình dạng đã khớp
Một mệnh đề quyết định cuộc gọi nào khớp;verdict của quy tắc quyết định
điều gì xảy ra. deny là mặc định của cookbook, nhưng cùng một mệnh đề có thể
mang một verdict mềm hơn:
sanitize — che một secret trong một đối số
sanitize — che một secret trong một đối số
Khi đối số đã khớp mang một secret hoặc PII thay vì một hướng dẫn nguy
hiểm,
sanitize che các chuỗi con đã khớp khỏi đối số tool và chuyển
tiếp cuộc gọi đã làm sạch. Nó chỉ che đối số — không bao giờ che nội dung
mà một tool trả về. Xem
Sanitize phản hồi.pending_approval — giữ cuộc gọi đã khớp chờ con người
pending_approval — giữ cuộc gọi đã khớp chờ con người
Giữ đúng hình dạng rủi ro để xem xét thay vì block nó dứt khoát: một người
duyệt phê duyệt hoặc từ chối ngoài luồng, và agent gửi lại cuộc gọi đã
duyệt một lần. Xem Phê duyệt.
audit — chỉ thấy nó, tạm thời
audit — chỉ thấy nó, tạm thời
Đặt verdict thành
audit để ghi lại cuộc gọi đã khớp mà không block trong
khi bạn tinh chỉnh mệnh đề. Ghép với
shadow mode để đo một deny trên
traffic live trước khi nó thay đổi bất cứ thứ gì.8. Test mệnh đề trước khi bạn phụ thuộc vào nó
Tab Test của console chạy thử một chính sách trên một cuộc gọi tool mẫu và trả về verdict, quy tắc đã khớp, và lý do — không gì được dispatch, không gì được lưu. Dán một đối tượng đối số thực tế và xác nhận mệnh đề kích hoạt trên các cuộc gọi bạn định và chỉ những cái đó, vì một mệnh đề không phân giải được một giá trị sẽ im lặng không kích hoạt. Xem Test quy tắc.Mệnh đề được kiểm tra nghiêm ngặt khi lưu — toán tử lạ, path xấu, một giá
trị
in không-phải-mảng, một regex không biên dịch được, và CIDR không hợp lệ
đều bị từ chối, nên một mệnh đề dị dạng không thể được lưu ngay từ đầu.9. Ai có thể soạn mệnh đề argument
Toàn bộ cái này chạy trong console dưới session của bạn (/api/workspace/firewall/*):
| Hành động | Vai trò |
|---|---|
| Đọc chính sách, preset, discovered tools | Member |
| Tạo / chỉnh sửa / xóa quy tắc | Developer+ |
| Test sandbox (chạy thử một chính sách) | Developer+ |
| Đọc events và tổng hợp lần chạy | Developer+ |
Liên quan
Kiểm tra đối số
Tình huống dùng khớp-đối-số đầy đủ.
Block tool
Deny cả một tool theo tên — không cần mệnh đề.
Kiểm soát egress
Quản trị đích đến host / IP / CIDR đi ra ngoài.
Schema quy tắc
Mọi trường mà một quy tắc có thể mang.
Ưu tiên quy tắc
Match đầu tiên thắng — sắp hẹp trước rộng.
Cuộc gọi tool nguy hiểm
Mối đe dọa mà các công thức này giải quyết.
