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.
Tài sản cần bảo vệ
| Tài sản | Vì sao |
|---|---|
| Máy chủ giám sát | Agent chạy trên máy sản xuất, không được trở thành cửa ngõ tấn công |
| Agent token | Cho phép đẩy số liệu giả mạo cho một máy |
| License | Cho 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 ứng | Nế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ọa | Biệ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 đĩa | Tệ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, log | Nhậ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ại | Lượ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ừ xa | Không có cơ chế nào (ADR 0005). Không plugin, không script từ xa |
| Cập nhật độc hại | Manifest 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ãn | Danh 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ệu | Tệ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ật | Bộ 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_revokedthì 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ố địnhaccesshub-agent/machine-id/v1:trước khi gửi, không gửi nguyên giá trị), Windows đọcHKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid(băm tương tự).- Nếu
machine_idkhác lúc enroll (nhân bản VM), agent dừng gửi, báo trạng tháiidentity_mismatchvà 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àoPerformance Monitor UsersvàEvent Log Readersnế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ượng | Ký |
|---|---|
Gói .deb | Kho apt ký GPG, Release.gpg, khóa công khai phân phối riêng |
Gói .rpm | Ký GPG từng gói và metadata kho |
| MSI và exe | Authenticode (chứng chỉ ký mã, timestamp), xem Q3 |
| Binary thô, tarball | SHA256SUMS ký bằng cosign hoặc GPG |
| Manifest cập nhật | Ed25519, khóa công khai nhúng trong binary |
| Build | Tá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
govulnchecksạch hoặc có ghi chú chấp nhận rủi ro.- Kiểm thử che bí mật trong log đạt.
- Kiểm thử quyền tệp thông tin đăng nhập (Linux 0600, Windows ACL) đạt.
- 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.
- Chữ ký gói và manifest xác minh được từ máy sạch.
- SBOM đính kèm bản phát hành.
- 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.