Access Hub Scanner
Đang phát triểnĐồng bộ từ mã nguồn lúc 15:42, 03/10/2026
Skip to content
ADR 0011Đề xuất

ADR 0011. Báo cáo finding bí mật và dữ liệu cá nhân: giá trị không bao giờ rời máy ​

Ngày quyết định
02/10/2026
Chấp nhận
Chưa
Phạm vi
Scanner
Người chấp nhận
Chưa có
  1. Đề xuất02/10/2026
  2. Chấp nhậnĐang chờ
  • Trạng thái: Đề xuất (mở rộng ADR 0006 cho phần quét nội dung)
  • Ngày: 2026-10-02
  • Liên quan: ADR 0001, ADR 0006, ADR 0008, ADR 0009, ADR 0010. Câu hỏi Q29, Q30, Q31, Q39, Q41

Bối cảnh ​

ADR 0006 cam kết chỉ gửi siêu dữ liệu. Phạm vi mới buộc scanner đọc nội dung tệp để tìm bí mật và dữ liệu cá nhân (ADR 0009, ADR 0010). Một hệ thống phát hiện bí mật mà gửi bí mật về trung tâm thì chính nó trở thành nơi rò rỉ lớn nhất: lộ trung tâm là lộ bí mật của mọi khách hàng. Dữ liệu cá nhân gửi đi còn kéo theo nghĩa vụ pháp lý về xử lý và chuyển dữ liệu cá nhân (R19, Q42). Người dùng vẫn cần đủ thông tin để tìm và khắc phục: tệp nào, dòng nào, loại gì, có phải cùng một bí mật lặp lại ở nhiều máy không.

Quyết định ​

1. Yêu cầu cứng ​

Giá trị bí mật và dữ liệu nhạy cảm không bao giờ rời máy, dưới bất kỳ dạng nào: không nguyên văn, không cắt ngắn ngoài preview cho phép, không mã hóa thuận nghịch, không băm không khóa, không trong log, thông điệp lỗi, core dump, tệp tạm ngoài thư mục trạng thái, hay đầu ra scan --print. Vi phạm là lỗi chặn phát hành (SNFR-42).

2. Một finding nội dung chỉ mang các trường sau ​

TrườngNội dungGhi chú
detector_id, detector_versionVí dụ AHK-AWS-001, AHP-CCCD-001Loại khóa, có mã hóa hay không được mã hóa vào mã detector (ví dụ AHK-PKEY-001 khóa PEM không mã hóa, AHK-PKEY-002 có passphrase), không thêm trường mô tả
categorysecret hoặc sensitive_data
pathĐường dẫn tuyệt đối, tối đa 1.024 byte; byte không phải UTF-8 được thoátĐường dẫn là siêu dữ liệu vận hành (có thể chứa tên người: R11)
line, columnBí mật: vị trí lần xuất hiện đầu tiên trong tệp. Dữ liệu cá nhân: dòng đầu tiên có khớp, column bằng 0Không gửi danh sách mọi dòng
previewBí mật: tối đa 4 ký tự đầu và 2 ký tự cuối, phần giữa thay bằng ***, chỉ khi giá trị dài từ 16 ký tự; giá trị ngắn hơn, khóa riêng, mật khẩu chung (AHK-ENV-*, AHK-HIST-*) thì rỗng. Dữ liệu cá nhân: luôn rỗngQ30
fingerprintXem mục 3Dùng để khử trùng, không dò ngược được
severitycritical, high, medium, low, info, tính trên máy từ detector và mức phơi nhiễm14 mục 2
first_seen_at, last_seen_at, file_modified_atMốc thời gian

Các trường điều khiển không suy ra được giá trị, đề xuất cho phép (Q29): match_count (số lần khớp trong tệp), confidence (low, medium, high), exposure (owner_only, group_readable, world_readable, web_root, history). Không gửi: đoạn văn bản quanh vị trí khớp, tên khóa cấu hình chứa giá trị, claim của JWT, tên người dùng trong chuỗi kết nối, độ dài chính xác của giá trị, kết quả từng bộ xác thực.

3. Fingerprint có khóa, hai phạm vi ​

fingerprint = "<phạm vi><phiên bản khóa>:" + hex(HMAC-SHA256(K, detector_family || 0x00 || giá_trị_chuẩn_hóa))
Phạm viKhóa KDùng choLý do
h (máy)K_host: 32 byte ngẫu nhiên sinh trên máy lúc cài, /var/lib/accesshub-scanner/keys/fp_host.key, chủ accesshub-scanner, 0600. Không bao giờ rời máyMọi dữ liệu cá nhân; bí mật entropy thấp (mật khẩu chung, giá trị ngắn hơn 20 ký tự)Giá trị có không gian nhỏ (số điện thoại khoảng 10^9, CCCD, mật khẩu yếu) dò ngược được trong vài phút nếu khóa nằm ở trung tâm. Với K_host, trung tâm không thể dò
c (công ty)K_company: 32 byte do Access Hub sinh cho từng công ty, lưu mã hóa bằng CompanyCrypto (ENC-2), phát xuống máy qua SecurityConfig, lưu trên máy 0600Chỉ bí mật entropy cao (dài từ 20 ký tự và đạt ngưỡng entropy của quy tắc, ví dụ khóa AWS, token GitHub)Cho phép thấy "cùng một khóa có trên 12 máy" trong một công ty. Hai công ty có cùng bí mật cho hai fingerprint không liên quan

Xoay K_company: tăng phiên bản khóa, scanner tính lại ở lượt nội dung kế tiếp; Access Hub ghép finding cũ và mới theo (server, detector, path) trong thời gian chuyển tiếp. Mất K_host (cài lại máy): fingerprint đổi, finding cũ đóng với lý do fingerprint_reset (không tính là khắc phục).

4. Gom nhóm và giới hạn ​

  • Bí mật: một finding cho mỗi (detector_id, path, fingerprint); match_count đếm số lần xuất hiện trong tệp.
  • Dữ liệu cá nhân: một finding cho mỗi (detector_id, path) (gom theo tệp), match_count là số bản ghi khớp; mức độ theo số lượng và phơi nhiễm (14 mục 5.4). Không tạo finding cho từng số điện thoại.
  • Mỗi báo cáo tối đa 2.000 finding bí mật và 5.000 finding dữ liệu cá nhân. Vượt thì giữ finding mức cao trước, đặt findings_truncated, kèm số đếm theo detector cho phần bị cắt.

5. Đường đi và vòng đời ​

  1. Lượt nội dung ghi kết quả vào chỉ mục cục bộ (ADR 0009). Báo cáo SecurityReport (schema_version 2) mang ảnh chụp đầy đủ finding nội dung hiện biết của máy, dựng từ chỉ mục, kèm content_hash và thống kê độ phủ. Không đổi thì gửi HASH_ONLY như inventory (07).
  2. Access Hub Collector kiểm tra lớp thứ hai: định dạng detector_id, fingerprint, độ dài và mẫu ký tự của preview, preview rỗng với sensitive_data, giới hạn số lượng. Sai thì bỏ finding đó và tăng metric (không bỏ cả báo cáo).
  3. Secmatch giữ trạng thái finding nội dung mới nhất theo (company_id, server_id), so với lần trước, phát sự kiện finding.opened, finding.updated, finding.resolved với kind là secret hoặc sensitive_data sang Access Hub qua outbox hiện có. Không so khớp DB lỗ hổng cho loại này.
  4. Đóng finding: content_removed (tệp còn, giá trị không còn), file_deleted, out_of_scope (phạm vi đổi, không tính MTTR), fingerprint_reset. Tệp chưa được quét lại trong baseline không làm đóng finding.
  5. finding_key = SHA-256(company_id | server_id | detector_id | path | fingerprint) cho bí mật, SHA-256(company_id | server_id | detector_id | path) cho dữ liệu cá nhân. company_id do Collector gắn từ token, không lấy từ payload.

6. Hiển thị và quyền trong Access Hub ​

  • Quyền mới theo tenant: security.secrets.view (xem finding bí mật), security.pii.view (xem finding dữ liệu cá nhân), security.content.manage (phạm vi quét nội dung, gốc tùy chọn, bật dữ liệu cá nhân). security.view chỉ thấy số đếm của hai loại này.
  • Thông báo, email, webhook chỉ mang mã detector, mức độ, tên máy, số lượng, liên kết. Không đường dẫn, không preview, không fingerprint.
  • Xuất CSV, XLSX: cần quyền tương ứng; mặc định không có cột preview.
  • Mở trang chi tiết finding bí mật ghi audit (Q41).
  • Khắc phục là tư vấn (ADR 0003): xoay vòng bí mật, gỡ tệp khỏi thư mục web, sửa quyền tệp, xóa dòng lịch sử. Không có nút xóa tệp từ xa.

7. Nền tảng ​

Chỉ số tổng hợp ẩn danh có ngưỡng k (06 mục 8): số finding theo họ detector, số máy có ít nhất một bí mật mức cao, phân bố theo mức phơi nhiễm. Không đường dẫn, không fingerprint, không preview, không tên công ty, không tên máy.

8. Bộ kiểm thử "không giá trị rời máy" ​

Cổng phát hành bắt buộc (11 mục 2.1): bộ mẫu chứa giá trị canary có dấu riêng cho mọi detector; chạy scanner thật trên fixture; thu mọi đầu ra (spool, log, stdout, stderr, scan --print, chỉ mục, thông điệp lỗi, payload sau Collector và secmatch, sự kiện gửi Access Hub); khẳng định không xuất hiện canary hay biến thể (base64, hex, URL-encode, đảo chữ hoa thường, cắt dài hơn preview cho phép). Thêm kiểm thử thuộc tính với giá trị ngẫu nhiên, và kiểm thử rằng K_host không xuất hiện ở đâu ngoài tệp khóa.

Hệ quả ​

  • Lộ Collector, secmatch hay Access Hub không làm lộ bí mật hay dữ liệu cá nhân của khách hàng, chỉ lộ vị trí của chúng (vẫn nghiêm trọng: R21, bù bằng quyền tách riêng, audit, không có trong thông báo).
  • Người dùng không xem được giá trị từ Access Hub; muốn xác minh phải mở tệp trên máy. Đây là chủ ý.
  • Fingerprint của dữ liệu cá nhân chỉ khử trùng trong một máy; "cùng một CCCD xuất hiện trên nhiều máy" là không thể biết (chấp nhận).
  • Một bản build scanner độc hại vẫn có thể giấu dữ liệu trong trường fingerprint hoặc đường dẫn (kênh ngầm). Kiểm tra định dạng ở Collector không ngăn được; giảm thiểu bằng chuỗi cung ứng (R17).
  • Thêm khóa theo công ty phải quản lý (sinh, mã hóa ENC-2, phát xuống, xoay).

Phương án đã cân nhắc ​

Phương ánLý do không chọn
Gửi giá trị mã hóa bằng khóa công ty để người dùng xem trong Access HubTrung tâm giữ được khóa giải mã (ENC-2 do Access Hub nắm): lộ trung tâm là lộ bí mật. Trái yêu cầu cứng
Băm SHA-256 không khóaDò ngược dễ với giá trị không gian nhỏ; so được chéo công ty
Một khóa fingerprint toàn nền tảngNền tảng dò ngược được và liên kết chéo công ty
Chỉ K_host cho mọi loạiMất khả năng phát hiện một bí mật dùng lại trên nhiều máy, là thông tin khắc phục giá trị cao
Finding cho từng lần khớp dữ liệu cá nhânHàng triệu dòng cho một tệp dump, vô dụng cho người dùng, tăng rủi ro suy luận
Gửi đoạn ngữ cảnh đã cheNgữ cảnh thường chứa chính bí mật khác hoặc dữ liệu cá nhân khác
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-scanner lúc 15:42, 03/10/2026. Khi tài liệu và mã khác nhau, mã thắng.