Tổng quan
Access Hub Scanner (gọi tắt Scanner) là sản phẩm quét bảo mật máy chủ của Access Hub: chạy trên máy chủ khách hàng, biết trên máy có gì (gói, dịch vụ, phần mềm, tệp), có lỗ hổng gì trong phần đã cài, có bí mật nào bị lộ trên đĩa, có dữ liệu cá nhân nào nằm trong tệp, và cấu hình nào yếu; đưa kết quả lên Access Hub theo từng công ty mà không bao giờ gửi giá trị bí mật hay dữ liệu nhạy cảm ra khỏi máy.
Tên sản phẩm là "Access Hub Scanner", gọi tắt "Scanner" (chủ dự án quyết định ngày 2026-10-03). Định danh kỹ thuật giữ nguyên (Q43): binary và gói trên máy accesshub-scanner, dịch vụ trung tâm accesshub-secmatch, job dựng DB secdb-build, mã kiểm tra AHS-*. Trong tài liệu, "Scanner" viết hoa là tên sản phẩm; "scanner" viết thường là thành phần trên máy (bộ đọc accesshub-scanner).
Bối cảnh
Access Hub đã có kiểm kê máy chủ (Server, app/Models/Server.php), giám sát sức khỏe qua Access Hub Agent và Access Hub Collector (MonitoringAgent, các trang resources/js/pages/monitoring/), gói dịch vụ có hạn mức (PlanCatalog, QuotaService ở nhánh feat/biz-0). Hệ thống biết máy sống hay chết và khỏe hay yếu, nhưng chưa biết máy an toàn hay không: gói nào có lỗ hổng đã công bố, cấu hình nào yếu, khóa hay mật khẩu nào đang nằm trần trên đĩa, dữ liệu khách hàng nào đang bị sao chép lung tung trên máy chủ, máy nào cần xử lý trước.
Agent (access-hub-agent) là sản phẩm khác: chỉ đi ra, không đặc quyền, có enroll bằng License, token riêng, WAL và backoff, và cố ý không gửi gói phần mềm (docs/05-security.md của Agent, mục Riêng tư). Access Hub Scanner là sản phẩm và gói cước riêng (quyết định Q25, 2026-10-02): gói accesshub-scanner không phụ thuộc Agent theo chiều nào, có bộ gửi, danh tính và enroll riêng (ADR 0001). Mẫu mã của Agent (enroll, backoff, WAL) chỉ được chép, không dùng chung lúc chạy. Quét bảo mật có yêu cầu khác hẳn giám sát: cần đọc tệp chỉ root đọc được (/etc/shadow, /etc/sudoers, thư mục nhà), cần đọc nội dung tệp để tìm bí mật và dữ liệu cá nhân, cần một cơ sở dữ liệu lỗ hổng lớn cập nhật hằng ngày, và tạo ra dữ liệu nghiệp vụ có vòng đời (finding, ngoại lệ, SLA).
Mục tiêu
- Kiểm kê: gói hệ điều hành (dpkg, rpm, apk), dịch vụ (unit systemd), phần mềm ngoài trình quản lý gói (snap, flatpak,
/opt,/usr/local, thư viện ngôn ngữ ở vị trí hệ thống), và tệp (thống kê theo gốc, tệp đáng chú ý). Danh sách đầy đủ mọi tệp ở lại trên máy, chỉ thống kê và tệp đáng chú ý rời máy. - Lỗ hổng: biết mỗi máy có lỗ hổng đã công bố nào trong gói hệ điều hành (Ubuntu, Debian trước, sau đó họ RHEL), rồi trong thư viện ngôn ngữ, kèm bản sửa nếu có.
- Bí mật bị lộ: tìm khóa riêng, token API, khóa cloud, mật khẩu trong tệp cấu hình,
.env, lịch sử shell và client CSDL, Terraform state, cấu hình Docker, kubeconfig (14mục 3, 4), mức độ theo mức phơi nhiễm (thư mục web, đọc được bởi mọi người, chỉ chủ sở hữu). - Dữ liệu cá nhân: tìm số CCCD, CMND, số điện thoại, email, số thẻ ngân hàng, hộ chiếu trong tệp văn bản và dữ liệu có cấu trúc, gom theo tệp, chỉ số đếm (
14mục 5). - Cấu hình yếu: phát hiện cấu hình yếu phổ biến (SSH, cổng nghe ngoài dự kiến, tường lửa, chính sách mật khẩu, sudoers, tệp ghi được bởi mọi người, cập nhật tự động, chứng chỉ TLS) bằng kiểm tra chỉ đọc.
- Ưu tiên hóa bằng điểm rủi ro kết hợp CVSS, EPSS, KEV, mức phơi nhiễm, có SLA theo mức độ, áp chung cho lỗ hổng, bí mật, dữ liệu cá nhân, cấu hình.
- Cho mỗi công ty thống kê và xu hướng: máy dễ tổn thương nhất, phân bố theo mức độ, theo gói, bí mật mức cao, nơi có dữ liệu cá nhân, MTTR, ngoại lệ đã chấp nhận.
- Luồng chấp nhận rủi ro có lý do, người duyệt, hạn dùng, audit.
- Phát hiện lỗ hổng mới công bố mà không cần quét lại máy (so khớp lại tập trung khi DB cập nhật).
- Chạy được cho gói Dedicated on-prem và không có Internet bằng DB lỗ hổng mirror có chữ ký.
- Không làm phiền máy sản xuất, không mở thêm bề mặt tấn công: không cổng, không lệnh từ xa, chỉ đọc, đặc quyền tối thiểu, ngân sách CPU, IO, bộ nhớ, quét nội dung trong khung giờ yên tĩnh, giá trị không rời máy.
Phi mục tiêu
| Nội dung | Lý do |
|---|---|
| Tự động vá, chạy script khắc phục, đổi cấu hình máy, xóa, cách ly hay đổi quyền tệp chứa bí mật | Vi phạm nguyên tắc không thực thi từ xa (ADR 0005 của Agent, ADR 0010 của Collector). Khắc phục chỉ là tư vấn (ADR 0003). Muốn khác cần chủ dự án quyết (Q7) và ADR mới |
| Gửi giá trị bí mật hay dữ liệu cá nhân về trung tâm, kể cả đã mã hóa, để người dùng xem | Yêu cầu cứng của ADR 0011 |
| Xác thực sống bí mật (gọi API của nhà cung cấp để biết khóa còn dùng được) | Scanner không có mạng; gửi bí mật đi kiểm tra chính là làm lộ (ADR 0010) |
| DLP thời gian thực, chặn sao chép, theo dõi thay đổi tệp liên tục | Cần tiến trình đặc quyền thường trú, trái ADR 0001. Phát hiện theo lịch là đủ cho mục tiêu kiểm toán |
| Quét lịch sử git đã nén, tệp nén, PDF, ảnh (OCR), kho CSDL nhị phân | Tốn tài nguyên, rủi ro bom nén; giới hạn đã biết, ghi rõ (Q37) |
| Nhận dạng họ tên, địa chỉ nhà trong văn bản tự do | Cần mô hình ngôn ngữ, nhiễu cao, tốn tài nguyên trên máy (ADR 0010) |
| Quét mạng từ trung tâm (nmap, quét cổng từ ngoài), kiểm thử xâm nhập | Ngoài phạm vi, rủi ro pháp lý và vận hành |
| Quét không cài gì trên máy, qua SSH | Phương án (c) ở 02, không khuyến nghị (Q27) |
| Phân tích mã nguồn, SAST, quét bí mật trong kho mã trước khi commit | Sản phẩm khác (tệp mã nằm trên máy chủ vẫn được quét như mọi tệp văn bản) |
| EDR, phát hiện xâm nhập thời gian thực, chống mã độc | Sản phẩm khác, tài nguyên lớn |
| Windows | P8, dữ liệu, so khớp và mô hình quyền khác hẳn (Q18) |
| Container, image | P9 (Q19) |
| Chứng nhận tuân thủ chính thức (CIS certified, PCI ASV), tư vấn pháp lý về dữ liệu cá nhân | Chỉ cung cấp kiểm tra tham chiếu và phát hiện, không cấp chứng nhận, không thay ý kiến pháp lý (Q9, Q42) |
Thuật ngữ
| Thuật ngữ | Nghĩa |
|---|---|
| CVE | Common Vulnerabilities and Exposures: mã định danh công khai của một lỗ hổng, dạng CVE-2024-3094. Do các CNA cấp, chương trình CVE quản lý |
| CNA | CVE Numbering Authority: tổ chức được cấp mã CVE (nhà phát hành distro, hãng phần mềm) |
| CVSS | Common Vulnerability Scoring System: thang điểm 0 đến 10 mô tả mức nghiêm trọng kỹ thuật. Phiên bản 3.1 phổ biến, 4.0 đã phát hành. Chỉ đo mức nghiêm trọng, không đo khả năng bị khai thác |
| EPSS | Exploit Prediction Scoring System của FIRST: xác suất (0 đến 1) lỗ hổng bị khai thác trong 30 ngày tới, kèm bách phân vị, cập nhật hằng ngày |
| KEV | Known Exploited Vulnerabilities catalog của CISA: danh sách CVE đã có bằng chứng bị khai thác thực tế |
| OVAL | Open Vulnerability and Assessment Language: định dạng XML mô tả điều kiện máy có lỗ hổng (gói X phiên bản nhỏ hơn Y). Ubuntu, Red Hat, SUSE phát hành OVAL |
| CSAF, VEX | Common Security Advisory Framework (JSON) và Vulnerability Exploitability eXchange: định dạng advisory máy đọc được, Red Hat dùng làm nguồn chính |
| CPE | Common Platform Enumeration: tên chuẩn của sản phẩm, dạng cpe:2.3:a:openssl:openssl:3.0.2:*:*:*:*:*:*:*. NVD dùng CPE để mô tả phạm vi ảnh hưởng |
| purl | Package URL: định danh gói theo hệ sinh thái, dạng pkg:deb/ubuntu/[email protected]?arch=amd64&distro=ubuntu-22.04 |
| OSV | Open Source Vulnerability: định dạng JSON và cơ sở dữ liệu (osv.dev) gom advisory theo hệ sinh thái, có trường affected theo dải phiên bản |
| Advisory | Thông báo bảo mật của nhà phát hành (USN của Ubuntu, DSA và DLA của Debian, RHSA của Red Hat, ALSA của AlmaLinux, RLSA của Rocky) |
| Backport | Distro đưa bản sửa vào phiên bản cũ mà không đổi số phiên bản upstream. Nguyên nhân chính của dương tính giả khi so theo NVD |
| Inventory | Kiểm kê trên máy: gói, dịch vụ, phần mềm ngoài gói, thống kê tệp, tệp đáng chú ý |
| Finding | Một phát hiện cụ thể trên một máy: lỗ hổng trong một gói, kiểm tra cấu hình không đạt, bí mật trong một tệp, hoặc dữ liệu cá nhân trong một tệp |
| Check | Kiểm tra cấu hình chỉ đọc, mã AHS-* (xem 05) |
| Detector | Quy tắc phát hiện nội dung biên dịch sẵn: bí mật AHK-*, dữ liệu cá nhân AHP-* (xem 14) |
| Bí mật (secret) | Giá trị cho phép xác thực hoặc giải mã: khóa riêng, token, khóa API, mật khẩu, chuỗi kết nối có mật khẩu |
| Dữ liệu cá nhân (PII) | Thông tin gắn với một người cụ thể: số CCCD, CMND, hộ chiếu, số điện thoại, email, số thẻ ngân hàng |
| CCCD, CMND | Căn cước công dân (số định danh cá nhân 12 chữ số), Chứng minh nhân dân (9 hoặc 12 chữ số) |
| Luhn | Thuật toán chữ số kiểm tra của số thẻ thanh toán, dùng để loại dãy số ngẫu nhiên |
| Entropy | Độ ngẫu nhiên của chuỗi (Shannon), dùng phân biệt khóa thật với từ thường |
| Bộ xác thực (validator) | Kiểm tra ngoại tuyến tăng độ tin cậy: Luhn, checksum của token, cấu trúc CCCD, phân tích PEM |
| Phơi nhiễm (exposure) | Ai đọc được tệp chứa phát hiện: web_root, world_readable, group_readable, history, owner_only |
| Preview | Phần che giấu của bí mật được phép rời máy: tối đa 4 ký tự đầu và 2 ký tự cuối, không có với dữ liệu cá nhân |
| Fingerprint | HMAC-SHA256 có khóa của giá trị, dùng để khử trùng; khóa theo máy (K_host, không rời máy) hoặc theo công ty (K_company, chỉ bí mật entropy cao) |
| Lượt nội dung | Lần chạy accesshub-scanner-content đọc nội dung tệp trong khung giờ yên tĩnh (ADR 0009) |
| Khung giờ yên tĩnh | Khoảng thời gian cho phép lượt nội dung chạy, mặc định 01:00 đến 05:00 giờ máy |
| Chỉ mục cục bộ | Bản ghi trên máy về tệp đã quét và finding của chúng (không giá trị), cho phép quét tăng dần |
| Baseline | Lần quét nội dung đầu tiên trên một máy, trải qua nhiều đêm |
| Exception | Ngoại lệ: chấp nhận rủi ro hoặc đánh dấu dương tính giả, có lý do, người duyệt, hạn dùng |
| SLA | Thời hạn khắc phục theo mức ưu tiên, tính từ lúc phát hiện |
| MTTR | Mean Time To Remediate: thời gian trung bình từ lúc phát hiện đến lúc finding biến mất khi quét lại |
| Scanner | Binary accesshub-scanner chạy định kỳ trên máy, đọc dữ liệu, ghi báo cáo vào spool, không có mạng |
| Spool | Thư mục trên máy nơi bộ đọc accesshub-scanner ghi báo cáo và bộ gửi accesshub-scan-uploader đọc để gửi đi |
Máy Scanner (scan_hosts) | Danh tính của gói Scanner trên một máy (host_id, khóa Ed25519), tạo khi enroll bằng mã enroll Scanner; độc lập với agent_id của giám sát |
| Secmatch | Dịch vụ trung tâm accesshub-secmatch: nhận báo cáo, lưu inventory, so khớp với DB lỗ hổng, so sánh trạng thái finding nội dung, phát delta sang Access Hub |
| Secdb | Gói DB lỗ hổng đã chuẩn hóa và ký Ed25519, do secdb-build dựng, secmatch nạp |
| Tenant | Một công ty (Company) trong Access Hub |
Nguyên tắc thiết kế
- Giá trị không rời máy: bí mật và dữ liệu cá nhân được phát hiện trên máy; ra khỏi máy chỉ có mã detector, đường dẫn, vị trí, preview che giấu (không có với dữ liệu cá nhân), fingerprint có khóa, mức độ, mốc thời gian (ADR 0011). Có bộ kiểm thử "không giá trị rời máy" là cổng phát hành.
- Cô lập tenant là ưu tiên số một: mọi finding, dòng inventory, thống kê đều theo công ty; danh tính chỉ từ token; nền tảng chỉ thấy số tổng hợp ẩn danh có ngưỡng k; kiểm thử hai công ty ở mọi tầng.
- Tách đặc quyền: tiến trình đọc được tệp nhạy cảm thì không có mạng, tiến trình có mạng thì không đặc quyền (ADR 0001). Chỉ đi ra, không thực thi từ xa.
- Chỉ đọc, đặc quyền tối thiểu: một capability
CAP_DAC_READ_SEARCH, không ghi ngoài thư mục của mình, không core dump. - Không làm phiền máy sản xuất: ngân sách CPU, IO, bộ nhớ có giới hạn cứng; quét nội dung tăng dần, trong khung giờ yên tĩnh, tự nhường khi máy bận (ADR 0009).
- So khớp tập trung: máy chỉ gửi inventory, DB lỗ hổng nằm ở trung tâm, CVE mới được phát hiện mà không cần quét lại máy (ADR 0002). Ngược lại, phát hiện nội dung luôn diễn ra trên máy.
- Chỉ phát hiện, không sửa: khắc phục là hướng dẫn văn bản, không có kênh thực thi (ADR 0003).
- Nguồn distro là chuẩn cho gói OS: dữ liệu NVD chỉ để làm giàu (ADR 0004). Dữ liệu lỗ hổng có chữ ký (ADR 0005).
- Biên dịch sẵn: kiểm tra và detector nằm trong binary đã ký; trung tâm chỉ bật, tắt, chỉnh ngưỡng; quản trị viên máy có quyền phủ quyết cục bộ.
- Giải thích được: mỗi finding mang nguồn, lý do, các thành phần của điểm rủi ro, và độ phủ của lần quét.
- Rẻ khi không có gì đổi: inventory hoặc kết quả nội dung không đổi thì chỉ gửi băm.