Chuyển tới nội dung chính

Bảo mật

Hermes Agent được thiết kế với mô hình bảo mật có chiều sâu phòng thủ. Trang này bao gồm mọi ranh giới bảo mật — từ phê duyệt lệnh đến cách ly vùng chứa cho đến ủy quyền người dùng trên nền tảng nhắn tin.

Tổng quan

Mô hình bảo mật có bảy lớp:

  1. Ủy quyền người dùng — ai có thể nói chuyện với nhân viên hỗ trợ (danh sách cho phép, ghép nối DM)
  2. Phê duyệt lệnh nguy hiểm — con người tham gia vào các hoạt động phá hoại
  3. Cách ly vùng chứa — Hộp cát Docker/Singularity/Modal với cài đặt cứng
  4. Lọc thông tin xác thực MCP — cách ly biến môi trường cho các quy trình con MCP
  5. Quét tệp ngữ cảnh — phát hiện nội dung nhắc nhở trong tệp dự án
  6. Cách ly nhiều phiên — các phiên không thể truy cập dữ liệu hoặc trạng thái của nhau; đường dẫn lưu trữ công việc định kỳ được tăng cường chống lại các cuộc tấn công truyền tải đường dẫn
  7. Khử trùng đầu vào — các tham số thư mục làm việc trong phần phụ trợ của công cụ đầu cuối được xác thực dựa trên danh sách cho phép để ngăn chặn việc chèn shell

Phê duyệt lệnh nguy hiểm

Trước khi thực hiện bất kỳ lệnh nào, Hermes sẽ kiểm tra lệnh đó dựa trên danh sách các mẫu nguy hiểm đã được tuyển chọn. Nếu tìm thấy sự trùng khớp, người dùng phải phê duyệt nó một cách rõ ràng.

Chế độ phê duyệt

Hệ thống phê duyệt hỗ trợ ba chế độ, được định cấu hình qua approvals.mode trong ~/.hermes/config.yaml :

approvals:
mode: manual

# manual

| smart | off
timeout: 60

# seconds to wait for user response (default: 60)

Chế độHành vi
thủ công (mặc định)Luôn nhắc người dùng phê duyệt các lệnh nguy hiểm
thông minhSử dụng LLM phụ trợ để đánh giá rủi ro. Các lệnh có rủi ro thấp (ví dụ: python -c "print('hello')" ) được phê duyệt tự động. Các lệnh thực sự nguy hiểm sẽ bị tự động từ chối. Các trường hợp không chắc chắn sẽ chuyển sang lời nhắc thủ công.
tắtVô hiệu hóa tất cả các bước kiểm tra phê duyệt — tương đương với việc chạy với --yolo . Tất cả các lệnh thực thi mà không có lời nhắc.
cảnh báo

Cài đặt approvals.mode: off sẽ tắt tất cả lời nhắc về an toàn. Chỉ sử dụng trong các môi trường đáng tin cậy (CI/CD, vùng chứa, v.v.).

Chế độ YOLO

Chế độ YOLO bỏ qua tất cả lời nhắc phê duyệt lệnh nguy hiểm cho phiên hiện tại. Nó có thể được kích hoạt theo ba cách:

  1. Cờ CLI: Bắt đầu phiên với hermes --yolo hoặc hermes chat --yolo
  2. Lệnh gạch chéo: Nhập /yolo trong phiên để bật/tắt lệnh này
  3. Biến môi trường: Đặt HERMES_YOLO_MODE=1

Lệnh /yolochuyển đổi — mỗi lần sử dụng sẽ bật hoặc tắt chế độ:

> /yolo
⚡ YOLO mode ON — all commands auto-approved. Use with caution.

> /yolo
⚠ YOLO mode OFF — dangerous commands will require approval.

Chế độ YOLO có sẵn trong cả phiên CLI và cổng. Trong nội bộ, nó đặt biến môi trường HERMES_YOLO_MODE được kiểm tra trước mỗi lần thực thi lệnh.

cảnh báo

Chế độ YOLO vô hiệu hóa tất cả các kiểm tra an toàn lệnh nguy hiểm cho phiên. Chỉ sử dụng khi bạn hoàn toàn tin tưởng vào các lệnh được tạo (ví dụ: các tập lệnh tự động hóa đã được kiểm tra kỹ lưỡng trong môi trường dùng một lần).

Hết thời gian phê duyệt

Khi một dấu nhắc lệnh nguy hiểm xuất hiện, người dùng có một khoảng thời gian có thể định cấu hình để phản hồi. Nếu không có phản hồi nào được đưa ra trong thời gian chờ, lệnh sẽ bị từ chối theo mặc định (đóng không thành công).

Định cấu hình thời gian chờ trong ~/.hermes/config.yaml :

approvals:
timeout: 60

# seconds (default: 60)

Điều gì kích hoạt sự phê duyệtCác mẫu sau kích hoạt lời nhắc phê duyệt (được xác định trong tools/approval.py ):

MẫuMô tả
rm -r / rm --recursiveXóa đệ quy
rm ... /Xóa trong đường dẫn gốc
chmod 777/666 / o+w / a+wQuyền trên thế giới/có thể ghi khác
chmod --recursive với quyền uốn không an toànThế giới đệ quy/có thể ghi khác (cờ dài)
chown -R root / chown --recursive rootChown đệ quy về gốc
mkfsĐịnh dạng hệ thống tập tin
dd if=Sao chép đĩa
> /dev/sdViết để chặn thiết bị
DROP TABLE/DATABASETHẢ SQL
DELETE FROM (không có WHERE)XÓA SQL mà không cần WHERE
TRUNCATE TABLETRUNCATE SQL
> /etc/Ghi đè cấu hình hệ thống
systemctl stop/disable/maskDừng/vô hiệu hóa dịch vụ hệ thống
kill -9 -1Giết tất cả các quá trình
pkill -9Buộc tiêu diệt quá trình
Mẫu bom ngã baBom ngã ba
bash -c / sh -c / zsh -c / ksh -cThực thi lệnh Shell thông qua cờ -c (bao gồm các cờ kết hợp như -lc )
python -e / perl -e / ruby -e / node -cThực thi tập lệnh thông qua cờ -e / -c
curl ... | sh / wget ... | shĐưa nội dung từ xa vào shell
bash <(curl ...) / sh <(wget ...)Thực thi tập lệnh từ xa thông qua thay thế quy trình
tee tới /etc/ , ~/.ssh/ , ~/.hermes/.envGhi đè tập tin nhạy cảm qua tee
> / >> tới /etc/ , ~/.ssh/ , ~/.hermes/.envGhi đè tệp nhạy cảm thông qua chuyển hướng
xargs rmxargs với rm
find -exec rm / find -deleteTìm với hành động phá hoại
cp / mv / install tới /etc/Sao chép/di chuyển tập tin vào cấu hình hệ thống
sed -i / sed --in-place trên /etc/Chỉnh sửa tại chỗ cấu hình hệ thống
pkill / killall hermes/gatewayPhòng chống tự chấm dứt
gateway run với & / disown / nohup / setsidNgăn chặn việc khởi động cổng quản lý dịch vụ bên ngoài
thông tin

Bỏ qua vùng chứa: Khi chạy trong phần phụ trợ docker , singularity , modal hoặc daytona, các lệnh kiểm tra nguy hiểm sẽ bị bỏ qua vì bản thân vùng chứa đó là ranh giới bảo mật. Các lệnh hủy bên trong vùng chứa không thể gây hại cho máy chủ.

Luồng phê duyệt (CLI)

Trong CLI tương tác, các lệnh nguy hiểm hiển thị lời nhắc phê duyệt nội tuyến:

  ⚠️  DANGEROUS COMMAND: recursive delete
rm -rf /tmp/old-project

[o]nce | [s]ession | [a]lways | [d]eny

Choice [o/s/a/D]:

Bốn lựa chọn:

  • một lần — cho phép thực hiện một lần
  • session — cho phép mẫu này trong phần còn lại của phiên
  • luôn luôn — thêm vào danh sách cho phép vĩnh viễn (được lưu vào config.yaml )
  • deny (mặc định) — chặn lệnh

Luồng phê duyệt (Cổng/Nhắn tin)

Trên nền tảng nhắn tin, tác nhân gửi chi tiết lệnh nguy hiểm đến cuộc trò chuyện và chờ người dùng trả lời:

  • Trả lời yes, y, approve, ok, hoặc go để phê duyệt
  • Trả lời no, n, deny, hoặc cancel để từ chốiBiến môi trường HERMES_EXEC_ASK=1 được đặt tự động khi chạy cổng.

Danh sách cho phép vĩnh viễn

Các lệnh được phê duyệt với "luôn luôn" sẽ được lưu vào ~/.hermes/config.yaml :

# Permanently allowed dangerous command patterns
command_allowlist:
- rm
- systemctl

Các mẫu này được tải khi khởi động và được phê duyệt âm thầm trong tất cả các phiên trong tương lai.

mẹo

Sử dụng hermes config edit để xem lại hoặc xóa mẫu khỏi danh sách cho phép vĩnh viễn của bạn.

Ủy quyền người dùng (Cổng)

Khi chạy cổng nhắn tin, Hermes kiểm soát ai có thể tương tác với bot thông qua hệ thống ủy quyền phân lớp.

Lệnh kiểm tra ủy quyền

Phương thức _is_user_authorized() kiểm tra theo thứ tự sau:

  1. Cờ cho phép tất cả trên mỗi nền tảng (ví dụ: DISCORD_ALLOW_ALL_USERS=true )
  2. Danh sách được phê duyệt ghép nối DM (người dùng được phê duyệt thông qua mã ghép nối)
  3. Danh sách cho phép dành riêng cho từng nền tảng (ví dụ: TELEGRAM_ALLOWED_USERS=12345,67890 )
  4. Danh sách cho phép toàn cầu ( GATEWAY_ALLOWED_USERS=12345,67890 )
  5. Cho phép tất cả toàn cầu ( GATEWAY_ALLOW_ALL_USERS=true )
  6. Mặc định: từ chối

Danh sách cho phép của nền tảng

Đặt ID người dùng được phép dưới dạng giá trị được phân tách bằng dấu phẩy trong ~/.hermes/.env :

# Platform-specific allowlists
TELEGRAM_ALLOWED_USERS=123456789,987654321
DISCORD_ALLOWED_USERS=111222333444555666
WHATSAPP_ALLOWED_USERS=15551234567
SLACK_ALLOWED_USERS=U01ABC123

# Cross-platform allowlist (checked for all platforms)
GATEWAY_ALLOWED_USERS=123456789

# Per-platform allow-all (use with caution)
DISCORD_ALLOW_ALL_USERS=true

# Global allow-all (use with extreme caution)
GATEWAY_ALLOW_ALL_USERS=true

cảnh báo

Nếu không có danh sách cho phép nào được định cấu hình và chưa đặt GATEWAY_ALLOW_ALL_USERS thì tất cả người dùng đều bị từ chối. Cổng ghi lại cảnh báo khi khởi động:

No user allowlists configured. All unauthorized users will be denied.
Set GATEWAY_ALLOW_ALL_USERS=true in ~/.hermes/.env to allow open access,
or configure platform allowlists (e.g., TELEGRAM_ALLOWED_USERS=your_id).

Hệ thống ghép nối DM

Để ủy quyền linh hoạt hơn, Hermes bao gồm hệ thống ghép nối dựa trên mã. Thay vì yêu cầu trả trước ID người dùng, những người dùng không xác định sẽ nhận được mã ghép nối một lần mà chủ sở hữu bot phê duyệt thông qua CLI.

Cách thức hoạt động:

  1. Một người dùng không xác định gửi tin nhắn trực tiếp tới bot
  2. Bot trả lời bằng mã ghép nối gồm 8 ký tự
  3. Chủ sở hữu bot chạy hermes pairing approve <platform> <code> trên CLI
  4. Người dùng được chấp thuận vĩnh viễn cho nền tảng đó

Kiểm soát cách xử lý tin nhắn trực tiếp trái phép trong ~/.hermes/config.yaml :

unauthorized_dm_behavior: pair

whatsapp:
unauthorized_dm_behavior: ignore

  • pair là mặc định. DM trái phép sẽ nhận được phản hồi bằng mã ghép nối.
  • ignore âm thầm gửi tin nhắn trực tiếp trái phép.
  • Các phần nền tảng ghi đè mặc định chung, do đó bạn có thể tiếp tục ghép nối trên Telegram trong khi giữ im lặng cho WhatsApp.

Các tính năng bảo mật (dựa trên hướng dẫn của OWASP + NIST SP 800-63-4):

Tính năngChi tiết
Định dạng mã8-char từ bảng chữ cái rõ ràng 32-char (không có 0/O/1/I)
Sự ngẫu nhiênMật mã ( secrets.choice() )
Mã TTLHết hạn 1 giờ
Giới hạn tỷ lệ1 yêu cầu cho mỗi người dùng trong 10 phút
Giới hạn chờ xử lýTối đa 3 mã đang chờ xử lý trên mỗi nền tảng
Khóa5 lần phê duyệt không thành công → khóa 1 giờ
Bảo mật tập tinchmod 0600 trên tất cả các tệp dữ liệu ghép nối
Ghi nhật kýMã không bao giờ được ghi vào thiết bị xuất chuẩn

Ghép nối các lệnh CLI:

# List pending and approved users
hermes pairing list

# Approve a pairing code
hermes pairing approve telegram ABC12DEF

# Revoke a user's access
hermes pairing revoke telegram 123456789

# Clear all pending codes
hermes pairing clear-pending

Bộ nhớ: Dữ liệu ghép nối được lưu trữ trong ~/.hermes/pairing/ với các tệp JSON trên mỗi nền tảng:

  • {platform}-pending.json — yêu cầu ghép nối đang chờ xử lý
  • {platform}-approved.json — người dùng đã được phê duyệt
  • _rate_limits.json — giới hạn tỷ lệ và theo dõi khóa

Cách ly container

Khi sử dụng phần phụ trợ terminal docker, Hermes áp dụng biện pháp tăng cường bảo mật nghiêm ngặt cho mọi vùng chứa.

Cờ bảo mật Docker

Mọi container đều chạy với các cờ này (được xác định trong tools/environments/docker.py ):

_SECURITY_ARGS = [
"--cap-drop", "ALL",

# Drop ALL Linux capabilities
"--cap-add", "DAC_OVERRIDE",

# Root can write to bind-mounted dirs
"--cap-add", "CHOWN",

# Package managers need file ownership
"--cap-add", "FOWNER",

# Package managers need file ownership
"--security-opt", "no-new-privileges",

# Block privilege escalation
"--pids-limit", "256",

# Limit process count
"--tmpfs", "/tmp:rw,nosuid,size=512m",

# Size-limited /tmp
"--tmpfs", "/var/tmp:rw,noexec,nosuid,size=256m",

# No-exec /var/tmp
"--tmpfs", "/run:rw,noexec,nosuid,size=64m",

# No-exec /run
]

Giới hạn tài nguyênTài nguyên vùng chứa có thể định cấu hình trong ~/.hermes/config.yaml :

terminal:
backend: docker
docker_image: "nikolaik/python-nodejs:python3.11-nodejs20"
docker_forward_env: []

# Explicit allowlist only; empty keeps secrets out of the container
container_cpu: 1

# CPU cores
container_memory: 5120

# MB (default 5GB)
container_disk: 51200

# MB (default 50GB, requires overlay2 on XFS)
container_persistent: true

# Persist filesystem across sessions

Tính bền bỉ của hệ thống tập tin

  • Chế độ liên tục ( container_persistent: true ): Gắn kết /workspace/root từ ~/.hermes/sandboxes/docker/<task_id>/
  • Chế độ tạm thời ( container_persistent: false ): Sử dụng tmpfs cho không gian làm việc — mọi thứ sẽ bị mất khi dọn dẹp
mẹo

Để triển khai cổng sản xuất, hãy sử dụng phần phụ trợ docker , modal hoặc daytona để tách biệt các lệnh tác nhân khỏi hệ thống máy chủ của bạn. Điều này loại bỏ hoàn toàn sự cần thiết phải phê duyệt lệnh nguy hiểm.

cảnh báo

Nếu bạn thêm tên vào terminal.docker_forward_env , các biến đó sẽ được cố ý đưa vào vùng chứa cho các lệnh đầu cuối. Điều này hữu ích đối với thông tin xác thực dành riêng cho nhiệm vụ như GITHUB_TOKEN nhưng cũng có nghĩa là mã chạy trong vùng chứa có thể đọc và lọc chúng.

So sánh bảo mật phần cuối của terminal

Phần cuốiCô lậpKiểm tra Cmd nguy hiểmTốt nhất cho
địa phươngKhông có — chạy trên máy chủ✅ CóPhát triển, người dùng tin cậy
suỵtMáy từ xa✅ CóChạy trên một máy chủ riêng biệt
dockerThùng chứa❌ Bỏ qua (container là ranh giới)Cổng sản xuất
điểm kỳ dịThùng chứa❌ Bỏ quaMôi trường HPC
phương thứcHộp cát đám mây❌ Bỏ quaCách ly đám mây có thể mở rộng
daytonaHộp cát đám mây❌ Bỏ quaKhông gian làm việc trên đám mây liên tục

Truyền qua biến môi trường

Cả execute_codeterminal đều loại bỏ các biến môi trường nhạy cảm khỏi các tiến trình con để ngăn chặn việc đánh cắp thông tin xác thực bằng mã do LLM tạo. Tuy nhiên, các kỹ năng khai báo required_environment_variables cần có quyền truy cập vào các lọ đó một cách hợp pháp.

Cách thức hoạt động

Hai cơ chế cho phép các biến cụ thể thông qua bộ lọc hộp cát:

1. Chuyển qua phạm vi kỹ năng (tự động)

Khi một kỹ năng được tải (thông qua skill_view hoặc lệnh /skill) và khai báo required_environment_variables , bất kỳ vars nào thực sự được đặt trong môi trường sẽ tự động được đăng ký dưới dạng truyền qua. Các vars bị thiếu (vẫn ở trạng thái cần thiết lập) chưa được đăng ký.

# In a skill's SKILL.md frontmatter
required_environment_variables:
- name: TENOR_API_KEY
prompt: Tenor API key
help: Get a key from https://developers.google.com/tenor

Sau khi tải kỹ năng này, TENOR_API_KEY chuyển đến execute_code , terminal (cục bộ), và các chương trình phụ trợ từ xa (Docker, Modal) — không cần cấu hình thủ công.

Docker & Phương thức

Trước v0.5.1, forward_env của Docker là một hệ thống riêng biệt với quá trình chuyển đổi kỹ năng. Bây giờ chúng đã được hợp nhất - các vars env được khai báo theo kỹ năng sẽ tự động được chuyển tiếp vào vùng chứa Docker và hộp cát Modal mà không cần thêm chúng vào docker_forward_env theo cách thủ công.

2. Chuyển qua dựa trên cấu hình (thủ công)

Đối với các vars env không được khai báo bởi bất kỳ kỹ năng nào, hãy thêm chúng vào terminal.env_passthrough trong config.yaml :

terminal:
env_passthrough:
- MY_CUSTOM_KEY
- ANOTHER_TOKEN

Truyền qua tệp thông tin xác thực (mã thông báo OAuth, v.v.) {#credential-file-passthrough}Một số kỹ năng cần tệp (không chỉ env vars) trong hộp cát — ví dụ: Google Workspace lưu trữ mã thông báo OAuth dưới dạng google_token.json trong HERMES_HOME của hồ sơ đang hoạt động. Các kỹ năng khai báo những điều này trong frontmatter:

required_credential_files:
- path: google_token.json
description: Google OAuth2 token (created by setup script)
- path: google_client_secret.json
description: Google OAuth2 client credentials

Khi được tải, Hermes kiểm tra xem các tệp này có tồn tại trong HERMES_HOME của cấu hình đang hoạt động hay không và đăng ký chúng để gắn kết:

  • Docker: Gắn kết liên kết chỉ đọc ( -v host:container:ro )
  • Phương thức: Được gắn khi tạo hộp cát + được đồng bộ hóa trước mỗi lệnh (xử lý việc thiết lập OAuth giữa phiên)
  • Cục bộ: Không cần thực hiện hành động nào (tệp đã có thể truy cập được)

Bạn cũng có thể liệt kê các tệp thông tin xác thực theo cách thủ công trong config.yaml :

terminal:
credential_files:
- google_token.json
- my_custom_oauth_token.json

Đường dẫn có liên quan đến ~/.hermes/ . Các tệp được gắn vào /root/.hermes/ bên trong vùng chứa.

Mỗi bộ lọc hộp cát sẽ lọc những gì

Hộp cátBộ lọc mặc địnhGhi đè thông qua
execute_codeChặn các vars chứa KEY , TOKEN , SECRET , PASSWORD , CREDENTIAL , PASSWD , AUTH trong tên; chỉ cho phép các vars tiền tố an toàn thông qua✅ Passthrough vars bỏ qua cả hai lần kiểm tra
terminal (cục bộ)Chặn các loại cơ sở hạ tầng Hermes rõ ràng (khóa nhà cung cấp, mã thông báo cổng, khóa API công cụ)✅ Vượt qua vars bỏ qua danh sách chặn
terminal (Docker)Không có máy chủ env vars theo mặc định✅ Chuyển tiếp vars + docker_forward_env được chuyển tiếp qua -e
terminal (Phương thức)Không có tập tin/env máy chủ theo mặc định✅ Đã gắn tệp thông tin xác thực; truyền env qua đồng bộ hóa
MCPChặn mọi thứ ngoại trừ các vars hệ thống an toàn + được định cấu hình rõ ràng env❌ Không bị ảnh hưởng bởi sự chuyển tiếp (thay vào đó hãy sử dụng cấu hình MCP env)

Cân nhắc về bảo mật

  • Việc chuyển tiếp chỉ ảnh hưởng đến các lọ mà bạn hoặc các kỹ năng của bạn đã khai báo rõ ràng — chế độ bảo mật mặc định không thay đổi đối với mã do LLM tạo tùy ý
  • Các tệp thông tin xác thực được gắn chỉ đọc vào vùng chứa Docker
  • Skills Guard quét nội dung kỹ năng để tìm các kiểu truy cập env đáng ngờ trước khi cài đặt
  • Các lọ bị thiếu/không được đặt sẽ không bao giờ được đăng ký (bạn không thể rò rỉ những gì không tồn tại)
  • Không bao giờ được thêm bí mật cơ sở hạ tầng Hermes (khóa API của nhà cung cấp, mã thông báo cổng) vào env_passthrough — chúng có cơ chế chuyên dụng

Xử lý thông tin xác thực MCP

Các quy trình con của máy chủ MCP (Model Context Protocol) nhận được môi trường được lọc để ngăn chặn rò rỉ thông tin xác thực do vô tình.

Biến môi trường an toàn

Chỉ các biến này được truyền từ máy chủ đến các quy trình con MCP stdio:

PATH, HOME, USER, LANG, LC_ALL, TERM, SHELL, TMPDIR

Cộng với bất kỳ biến XDG_* nào. Tất cả các biến môi trường khác (khóa API, mã thông báo, bí mật) đều bị loại bỏ.

Các biến được xác định rõ ràng trong cấu hình env của máy chủ MCP được chuyển qua:

mcp_servers:
github:
command: "npx"
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_PERSONAL_ACCESS_TOKEN: "ghp_..."

# Only this is passed

Chỉnh sửa thông tin xác thực

Thông báo lỗi từ các công cụ MCP sẽ được loại bỏ trước khi được trả lại cho LLM. Các mẫu sau được thay thế bằng [REDACTED] :- PAT GitHub ( ghp_... )

  • Phím kiểu OpenAI ( sk-... )
  • Mã thông báo mang
  • Các tham số token= , key= , API_KEY= , password= , secret=

Chính sách truy cập trang web

Bạn có thể hạn chế những trang web mà đại lý có thể truy cập thông qua các công cụ trình duyệt và web của nó. Điều này hữu ích để ngăn tác nhân truy cập vào các dịch vụ nội bộ, bảng quản trị hoặc các URL nhạy cảm khác.

# In ~/.hermes/config.yaml
security:
website_blocklist:
enabled: true
domains:
- "*.internal.company.com"
- "admin.example.com"
shared_files:
- "/etc/hermes/blocked-sites.txt"

Khi yêu cầu một URL bị chặn, công cụ sẽ trả về lỗi giải thích miền bị chặn theo chính sách. Danh sách chặn được thực thi trên web_search , web_extract , browser_navigate và tất cả các công cụ hỗ trợ URL.

Xem Danh sách chặn trang web trong hướng dẫn cấu hình để biết chi tiết đầy đủ.

Bảo vệ SSRF

Tất cả các công cụ hỗ trợ URL (tìm kiếm trên web, trích xuất web, tầm nhìn, trình duyệt) đều xác thực URL trước khi tìm nạp chúng để ngăn chặn các cuộc tấn công Giả mạo yêu cầu phía máy chủ (SSRF). Các địa chỉ bị chặn bao gồm:

  • Mạng riêng (RFC 1918): 10.0.0.0/8 , 172.16.0.0/12 , 192.168.0.0/16
  • Lặp lại: 127.0.0.0/8 , ::1
  • Liên kết cục bộ: 169.254.0.0/16 (bao gồm siêu dữ liệu đám mây tại 169.254.169.254 )
  • CGNAT / không gian địa chỉ dùng chung (RFC 6598): 100.64.0.0/10 (Tailscale, WireGuard VPN)
  • Tên máy chủ siêu dữ liệu đám mây: metadata.google.internal , metadata.goog
  • Địa chỉ dành riêng, multicast và không xác định

Bảo vệ SSRF luôn hoạt động và không thể tắt được. Lỗi DNS được coi là bị chặn (đóng không thành công). Chuỗi chuyển hướng được xác nhận lại ở mỗi bước nhảy để ngăn chặn việc bỏ qua dựa trên chuyển hướng.

Quét bảo mật trước khi thực thi Tirith

Hermes tích hợp tirith để quét lệnh ở cấp độ nội dung trước khi thực thi. Tirith phát hiện các mối đe dọa mà việc so khớp mẫu đơn thuần sẽ bỏ sót:

  • Giả mạo URL đồng âm (tấn công tên miền quốc tế hóa)
  • Mẫu chuyển từ đường ống sang trình thông dịch ( curl | bash , wget | sh )
  • Tấn công tiêm terminal

Tirith tự động cài đặt từ các bản phát hành GitHub trong lần sử dụng đầu tiên với xác minh tổng kiểm tra SHA-256 (và xác minh xuất xứ cosign nếu có cosign).

# In ~/.hermes/config.yaml
security:
tirith_enabled: true

# Enable/disable tirith scanning (default: true)
tirith_path: "tirith"

# Path to tirith binary (default: PATH lookup)
tirith_timeout: 5

# Subprocess timeout in seconds
tirith_fail_open: true

# Allow execution when tirith is unavailable (default: true)

Khi tirith_fail_opentrue (mặc định), các lệnh sẽ tiếp tục nếu tirith chưa được cài đặt hoặc hết thời gian chờ. Đặt thành false trong môi trường bảo mật cao để chặn lệnh khi không có tirith.

Phán quyết của Tirith tích hợp với luồng phê duyệt: các lệnh an toàn được chuyển qua, trong khi cả lệnh đáng ngờ và lệnh bị chặn đều kích hoạt sự chấp thuận của người dùng với các phát hiện đầy đủ về tirith (mức độ nghiêm trọng, tiêu đề, mô tả, các lựa chọn thay thế an toàn hơn). Người dùng có thể phê duyệt hoặc từ chối - lựa chọn mặc định là từ chối để giữ an toàn cho các tình huống không được giám sát.

Bảo vệ tiêm tệp ngữ cảnh

Các tệp ngữ cảnh (AGENTS.md, .cursorrules, SOUL.md) được quét để đưa vào lời nhắc trước khi được đưa vào lời nhắc hệ thống. Máy quét kiểm tra:- Hướng dẫn bỏ qua/bỏ qua hướng dẫn trước

  • Nhận xét HTML ẩn với các từ khóa đáng ngờ
  • Cố gắng đọc bí mật ( .env , credentials , .netrc )
  • Lọc thông tin xác thực qua curl
  • Ký tự Unicode vô hình (khoảng trắng có độ rộng bằng 0, ghi đè hai chiều)

Các tệp bị chặn hiển thị cảnh báo:

[BLOCKED: AGENTS.md contained potential prompt injection (prompt_injection). Content not loaded.]

Các phương pháp thực hành tốt nhất để triển khai sản xuất

Danh sách kiểm tra triển khai cổng

  1. Đặt danh sách cho phép rõ ràng — không bao giờ sử dụng GATEWAY_ALLOW_ALL_USERS=true trong sản xuất
  2. Sử dụng phần phụ trợ vùng chứa — đặt terminal.backend: docker trong config.yaml
  3. Hạn chế giới hạn tài nguyên — đặt giới hạn CPU, bộ nhớ và đĩa thích hợp
  4. Lưu trữ bí mật một cách an toàn — giữ khóa API trong ~/.hermes/.env với quyền truy cập tệp thích hợp
  5. Bật ghép nối DM — sử dụng mã ghép nối thay vì mã hóa ID người dùng khi có thể
  6. Xem lại danh sách lệnh cho phép — kiểm tra định kỳ command_allowlist trong config.yaml
  7. **Đặt MESSAGING_CWD ** — không để tác nhân hoạt động từ các thư mục nhạy cảm
  8. Chạy với quyền không phải root — không bao giờ chạy cổng với quyền root
  9. Theo dõi nhật ký — kiểm tra ~/.hermes/logs/ để phát hiện các nỗ lực truy cập trái phép
  10. Luôn cập nhật — chạy hermes update thường xuyên để có các bản vá bảo mật

Bảo mật khóa API

# Set proper permissions on the .env file
chmod 600 ~/.hermes/.env

# Keep separate keys for different services
# Never commit .env files to version control

Cách ly mạng

Để bảo mật tối đa, hãy chạy cổng trên một máy hoặc VM riêng biệt:

terminal:
backend: ssh
ssh_host: "agent-worker.local"
ssh_user: "hermes"
ssh_key: "~/.ssh/hermes_agent_key"

Điều này giữ cho các kết nối nhắn tin của cổng tách biệt với việc thực thi lệnh của tác nhân.