Access Hub Agent
Đồng bộ từ mã nguồn lúc 10:57, 03/10/2026
Skip to content

Bảo mật của agent ​

Tài liệu này tập trung vào máy chủ nơi agent chạy. Phần xác thực và phân quyền phía Collector do nhóm Collector giữ, agent chỉ dựa vào hợp đồng ở 10-wire-contract.md.

7 phút đọcCập nhật 01/10/2026access-hub-agent, docs/05-security.md

Tài sản cần bảo vệ ​

Tài sảnVì sao
Máy chủ giám sátAgent chạy trên máy sản xuất, không được trở thành cửa ngõ tấn công
Agent tokenCho phép đẩy số liệu giả mạo cho một máy
LicenseCho phép đăng ký agent giả
Số liệu và kiểm kêLộ thông tin hạ tầng (hệ điều hành, IP, dịch vụ)
Chuỗi cung ứngNếu binary bị thay thế, kẻ tấn công có mặt trên mọi máy

Mô hình đe dọa ​

Đe dọaBiện pháp
Collector giả (MITM)Bắt buộc xác minh TLS 1.2+, tùy chọn ghim CA, insecure_skip_verify chỉ dev và in cảnh báo
Ăn cắp agent token khỏi đĩaTệp 0600 root (Linux), DPAPI machine scope và ACL (Windows), token chỉ có quyền đẩy số liệu và đọc cấu hình cho đúng một máy, xoay 30 ngày, thu hồi từ Access Hub
Lộ License qua argv, lịch sử shell, logNhận qua tệp, stdin, biến môi trường. Tệp bị xóa an toàn sau khi dùng. Token dùng một lần, có hạn, băm phía server
Cấu hình từ xa độc hạiLược đồ nghiêm ngặt, không có lệnh, không đường dẫn tùy ý, giới hạn số lượng, allow_remote_config để khóa. Cấu hình từ xa chỉ tin nếu qua kênh TLS đã xác thực
Agent bị lợi dụng để quét mạng nội bộ (SSRF)Kiểm tra chỉ tới đích quản trị viên khai báo, chặn link-local mặc định, giới hạn 50 check, thời gian chờ ngắn, kết quả chỉ là up/down và thời gian, không trả về nội dung phản hồi
Thực thi mã từ xaKhông có cơ chế nào (ADR 0005). Không plugin, không script từ xa
Cập nhật độc hạiManifest ký Ed25519, gói ký GPG hoặc Authenticode, agent xác minh trước khi thay, khóa công khai nhúng trong binary, khóa gốc lưu ngoại tuyến, hỗ trợ xoay khóa (GĐ 3)
Rò rỉ dữ liệu qua nhãnDanh sách nhãn trắng, cắt độ dài, không thu tên tiến trình, đường dẫn tệp, biến môi trường, nội dung tệp
Từ chối dịch vụ đối với máy chủNgân sách CPU và bộ nhớ, GOMEMLIMIT, giới hạn tốc độ đọc, thời gian chờ mỗi bộ thu, WAL giới hạn dung lượng, agent không bao giờ giữ khóa hệ thống lâu
Kẻ tấn công cục bộ sửa cấu hình để chuyển hướng dữ liệuTệp cấu hình chỉ root ghi. Đổi collector_url cần quyền root, đó là mức tin cậy chấp nhận được
Ghi log lộ bí mậtBộ lọc log che mọi chuỗi có dạng ahat_, ahet_, header Authorization. Kiểm thử tự động
Nhân bản image (agent trùng danh tính)Cài đặt trong image không được enroll. Enroll ở lần chạy đầu. Phát hiện machine-id đổi và yêu cầu enroll lại (xem 06)

License và agent token ​

Hợp đồng ở 10-wire-contract.md. Token là chuỗi mờ, Collector tra cứu và thu hồi phía trung tâm. Phần của agent:

  • Định dạng: ahet_... (enroll), ahat_... (agent). Agent không cần phân tích, chỉ coi là chuỗi mờ.
  • Enroll gửi kèm: hostname, danh sách IP, OS, kiến trúc, machine_id, phiên bản agent. Không gửi bí mật.
  • Sau enroll: ghi thông tin đăng nhập nguyên tử (ghi tệp tạm cùng thư mục, fsync, đổi tên), quyền đặt trước khi ghi nội dung.
  • Xoay token: nhận token mới, ghi nguyên tử, xác nhận bằng một yêu cầu, sau đó bỏ token cũ. Nếu ghi thất bại, tiếp tục dùng token cũ trong khoảng chồng 24 giờ và thử lại.
  • Thu hồi: 403 agent_revoked thì xóa token khỏi bộ nhớ, ghi trạng thái, dừng gửi, không tự enroll lại.

Danh tính máy ​

  • Thông tin xác thực nằm ở <state_dir>/credentials.json, quyền 0600, ghi nguyên tử (tệp tạm, fsync, rename). Khi tải, nếu tệp cho phép nhóm hoặc người khác truy cập (trên Unix) thì agent từ chối dùng và báo lỗi quyền không an toàn. String() và log của thông tin xác thực luôn che token.
  • machine_id: Linux đọc /etc/machine-id (băm SHA-256 với chuỗi muối cố định accesshub-agent/machine-id/v1: trước khi gửi, không gửi nguyên giá trị), Windows đọc HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid (băm tương tự).
  • Nếu machine_id khác lúc enroll (nhân bản VM), agent dừng gửi, báo trạng thái identity_mismatch và chờ can thiệp. Ngăn hai máy dùng chung một token.

Quyền chạy ​

Linux ​

  • Tài khoản dịch vụ riêng accesshub-agent (không shell, không home), tạo bởi gói cài.
  • Hầu hết chỉ số cần không đặc quyền. Kiểm tra dịch vụ qua systemd D-Bus có thể cần thêm quyền (polkit rule chỉ đọc) hoặc chạy root. Mặc định GĐ 1 chạy không đặc quyền, GĐ 2 quyết định cho service check (Q11).
  • Hardening systemd unit: NoNewPrivileges=yes, ProtectSystem=strict, ProtectHome=yes, PrivateTmp=yes, ReadWritePaths=/var/lib/accesshub-agent /var/log/accesshub-agent, CapabilityBoundingSet= (rỗng), RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX, SystemCallFilter=@system-service, MemoryMax=96M, CPUQuota=25%, LimitNOFILE=1024.
  • Nếu cần đọc /proc/net/tcp để biết port thì không cần đặc quyền (đọc được toàn cục).

Windows ​

  • Mặc định NT SERVICE\AccessHubAgent (virtual service account), thêm vào Performance Monitor Users và Event Log Readers nếu cần.
  • Dịch vụ không tương tác, SERVICE_AUTO_START (delayed), khôi phục khi lỗi (restart sau 5s, 30s, 5 phút).
  • Thư mục dữ liệu ACL: SYSTEM và Administrators Full, tài khoản dịch vụ Modify, không ai khác.

Chuỗi cung ứng và ký ​

Đối tượngKý
Gói .debKho apt ký GPG, Release.gpg, khóa công khai phân phối riêng
Gói .rpmKý GPG từng gói và metadata kho
MSI và exeAuthenticode (chứng chỉ ký mã, timestamp), xem Q3
Binary thô, tarballSHA256SUMS ký bằng cosign hoặc GPG
Manifest cập nhậtEd25519, khóa công khai nhúng trong binary
BuildTái lập được (reproducible), -trimpath, phiên bản Go cố định, SBOM (CycloneDX) sinh mỗi bản phát hành, govulncheck trong CI, phụ thuộc ghim bằng go.sum

Quy tắc phụ thuộc: tối thiểu, xem xét giấy phép và kích thước, không lệnh go generate tải mạng, vendor hoặc proxy nội bộ khi cần.

Riêng tư và dữ liệu thu thập ​

Agent không thu: nội dung tệp, đường dẫn thư mục người dùng, dòng lệnh tiến trình, biến môi trường, tên người dùng đang đăng nhập, lịch sử lệnh, nội dung gói tin, địa chỉ MAC (chỉ gửi ở kiểm kê nếu bật, mặc định tắt).

Kiểm kê gửi (AGT-9, InventoryFacts, xem bằng accesshub-agent inventory): tên và phiên bản hệ điều hành, kernel, kiến trúc, tên model CPU, số lõi và luồng, tổng RAM, danh sách đĩa (điểm gắn, loại, dung lượng, cùng bộ lọc với chỉ số đĩa, tối đa 64), tên card mạng đang bật và địa chỉ IP toàn cục của nó (bỏ loopback, link-local, card ảo theo bộ lọc mạng, tối đa 32 card và 16 IP mỗi card), thời điểm khởi động, múi giờ, phiên bản, commit và bản Go của agent. Không gửi địa chỉ MAC, số serial, người dùng, tiến trình, gói phần mềm. Hostname đã gửi lúc enroll. Tắt bằng inventory.enabled: false. Nội dung này hiển thị trong tài liệu người dùng để quản trị viên biết.

Danh sách kiểm tra bảo mật trước mỗi bản phát hành ​

  1. govulncheck sạch hoặc có ghi chú chấp nhận rủi ro.
  2. Kiểm thử che bí mật trong log đạt.
  3. Kiểm thử quyền tệp thông tin đăng nhập (Linux 0600, Windows ACL) đạt.
  4. Kiểm thử cấu hình từ xa độc hại (khóa lạ, regex nặng, đích link-local, danh sách quá dài) đạt.
  5. Chữ ký gói và manifest xác minh được từ máy sạch.
  6. SBOM đính kèm bản phát hành.
  7. Kiểm thử fuzz phân tích cấu hình và WAL (thời gian giới hạn) không lỗi.
Trang này có giúp được bạn không?
Sửa trang này

Nội dung đồng bộ từ kho mã access-hub-agent lúc 10:57, 03/10/2026. Khi tài liệu và mã khác nhau, mã thắng.