Danh mục phát hiện bí mật, dữ liệu cá nhân và kiểm kê tệp
Tài liệu này là danh mục của phần quét nội dung của Access Hub Scanner. Cách giới hạn phạm vi và tài nguyên ở ADR 0009, bộ máy phát hiện ở ADR 0010, dữ liệu được phép rời máy ở ADR 0011. Kiểm tra cấu hình AHS-* vẫn ở 05.
Mọi số ngưỡng ở đây là đề xuất, chốt sau spike S7, S8 và sau khi chủ dự án trả lời Q29 đến Q42.
1. Nguyên tắc
- Phát hiện trên máy, giá trị ở lại trên máy. Finding chỉ mang các trường của ADR 0011 mục 2. Không có chế độ, cờ CLI hay cấu hình nào in hoặc gửi giá trị.
- Biên dịch sẵn. Detector nằm trong mã scanner, mã ổn định
AHK-<NHÓM>-<SỐ>(bí mật) vàAHP-<NHÓM>-<SỐ>(dữ liệu cá nhân), kèmdetector_versiontăng khi logic đổi, không dùng lại số đã xóa. Trung tâm chỉ bật, tắt theo mã và chỉnh tham số trong miền. - Chỉ xác thực ngoại tuyến. Không gọi API của nhà cung cấp để thử bí mật (ADR 0010 mục 2).
- Chỉ đọc. Không xóa, sửa, đổi quyền, cách ly tệp. Khắc phục là hướng dẫn (mục 8).
- Mức độ phụ thuộc phơi nhiễm. Cùng một khóa AWS, nằm trong thư mục web công khai nguy hiểm hơn nhiều so với nằm trong tệp
0600của chủ sở hữu. - Độ phủ minh bạch. Báo cáo luôn kèm số tệp hợp lệ, đã quét, bị bỏ (quá lớn, nhị phân, lỗi quyền) để "không thấy gì" không bị hiểu là "an toàn".
2. Mức phơi nhiễm và mức độ
2.1 Phơi nhiễm (tính trên máy)
| Giá trị | Điều kiện |
|---|---|
web_root | Tệp nằm trong thư mục kiểu document root thuộc hồ sơ web: thư mục tên public, public_html, htdocs, html, wwwroot, static, uploads hoặc chính /var/www/html. Từ P5 có thể lấy thêm document root khai báo trong cấu hình nginx, Apache |
world_readable | Chế độ có o+r và mọi thư mục cha có o+x (người dùng bất kỳ trên máy đọc được) |
group_readable | Có g+r, nhóm không phải nhóm riêng của chủ sở hữu |
history | Tệp lịch sử lệnh (.*_history) |
owner_only | Còn lại |
2.2 Lớp detector bí mật
| Lớp | Nội dung |
|---|---|
| A (quyền cao) | Khóa riêng không passphrase, khóa cloud (AWS, GCP, Azure), token quản trị kho mã (GitHub, GitLab), kubeconfig có thông tin xác thực, Terraform state có thuộc tính nhạy cảm |
| B (dịch vụ) | Token chat và bot, khóa cổng thanh toán, chuỗi kết nối CSDL có mật khẩu, khóa ứng dụng (APP_KEY, SECRET_KEY), token kho gói |
| C (chung) | Gán mật khẩu chung trong tệp cấu hình, mật khẩu trong lịch sử lệnh, khóa riêng có passphrase, tệp kho khóa nhị phân |
2.3 Ma trận mức độ bí mật
| Lớp \ Phơi nhiễm | web_root | world_readable | group_readable | history | owner_only |
|---|---|---|---|---|---|
| A | critical | critical | high | high | medium |
| B | critical | high | medium | medium | low |
| C | high | medium | low | low | info |
Vị trí dự kiến hạ một bậc khi owner_only: ~/.ssh/id_*, ~/.aws/credentials, ~/.config/gcloud/, ~/.kube/config, /etc/wireguard/*.conf, /etc/mysql/debian.cnf (Debian tự sinh), ~/.pgpass, ~/.my.cnf. Khóa host SSH (/etc/ssh/ssh_host_*_key) không thuộc phạm vi detector, đã có AHS-SSH-008 kiểm tra quyền.
Ánh xạ mức độ sang điểm rủi ro và SLA dùng chung bảng của 06 mục 1.1 (critical 9,5 ...), hệ số f_exploit bằng 1,0 cho loại nội dung (06 mục 1.6).
3. Vị trí đích (luôn quét khi bật bí mật)
Tính cho mỗi thư mục nhà lấy từ /etc/passwd (uid 0 và uid từ 1.000, cộng tài khoản dịch vụ có thư mục nhà thật dưới /home, /var/www, /srv) và cho đường dẫn hệ thống. Vị trí đích không bị giới hạn bởi hồ sơ gốc, nhưng vẫn chịu danh sách cấm cứng và deny_roots cục bộ.
| Nhóm | Đường dẫn (tương đối với thư mục nhà, trừ khi tuyệt đối) |
|---|---|
| SSH | .ssh/id_*, .ssh/*.pem, .ssh/*.key, .ssh/config (chỉ để biết IdentityFile, không gửi) |
| Cloud CLI | .aws/credentials, .aws/config, .config/gcloud/application_default_credentials.json, .config/gcloud/legacy_credentials/*/adc.json, .azure/*.json, .oci/config, .s3cfg, .config/rclone/rclone.conf |
| Container, cụm | .docker/config.json, .kube/config, .config/helm/repositories.yaml |
| Git, kho gói | .git-credentials, .gitconfig, .netrc, .npmrc, .pypirc, .gem/credentials, .composer/auth.json, .config/composer/auth.json, .m2/settings.xml |
| CSDL | .pgpass, .my.cnf, .mylogin.cnf (định dạng mã hóa yếu, chỉ ghi nhận sự hiện diện), .mongorc.js, .rediscli_auth |
| Lịch sử | .bash_history, .zsh_history, .sh_history, .history, .mysql_history, .psql_history, .sqlite_history, .rediscli_history, .python_history, .node_repl_history, .local/share/fish/fish_history |
| Hệ thống | /etc/NetworkManager/system-connections/*, /etc/wpa_supplicant/*.conf, /etc/ppp/*-secrets, /etc/openvpn/**/*.conf, /etc/openvpn/**/*.key, /etc/wireguard/*.conf, /etc/mysql/debian.cnf, /etc/letsencrypt/live/*/privkey.pem (dự kiến), /root/.ssh/, /etc/cron.d/*, /etc/crontab, /var/spool/cron/** |
4. Detector bí mật AHK-*
Cột "Phạm vi FP" là phạm vi fingerprint (ADR 0011 mục 3): h khóa của máy, c khóa của công ty (chỉ giá trị entropy cao). Cột "Preview": 4+2 là tối đa 4 ký tự đầu và 2 ký tự cuối khi giá trị dài từ 16 ký tự; không là rỗng.
| Mã | Phát hiện | Cách nhận | Xác thực ngoại tuyến | Lớp | Preview | Phạm vi FP | Dương tính giả, ghi chú |
|---|---|---|---|---|---|---|---|
| AHK-PKEY-001 | Khóa riêng PEM không mã hóa (RSA, EC, DSA, PKCS#8) | Khối -----BEGIN ... PRIVATE KEY----- | Giải base64, phân tích ASN.1 đủ để xác nhận là khóa hợp lệ; không có ENCRYPTED | A | không | c | Khóa mẫu trong tài liệu, fixture kiểm thử: allowlist theo đường dẫn và theo fingerprint của khóa mẫu công khai đã biết |
| AHK-PKEY-002 | Khóa riêng PEM có passphrase | ENCRYPTED PRIVATE KEY, hoặc Proc-Type: 4,ENCRYPTED | Như trên | C | không | c | |
| AHK-PKEY-003 | Khóa OpenSSH không passphrase | -----BEGIN OPENSSH PRIVATE KEY----- | Phân tích định dạng openssh-key-v1, ciphername là none | A | không | c | Khóa người dùng trong ~/.ssh quyền 0600: vị trí dự kiến |
| AHK-PKEY-004 | Khóa OpenSSH có passphrase | Như trên | ciphername khác none | C | không | c | |
| AHK-PKEY-005 | Khóa PuTTY .ppk không mã hóa | PuTTY-User-Key-File- | Encryption: none | A | không | c | |
| AHK-PKEY-006 | Khối khóa riêng PGP | -----BEGIN PGP PRIVATE KEY BLOCK----- | Phân tích gói OpenPGP mức đầu | B | không | c | |
| AHK-AWS-001 | Cặp khóa truy cập AWS | AKIA/ASIA + 16 ký tự, kèm chuỗi 40 ký tự base64 gần đó hoặc khóa aws_secret_access_key | Định dạng tiền tố, độ dài, entropy | A | 4+2 (ID khóa) | c | Khóa mẫu AKIAIOSFODNN7EXAMPLE trong allowlist |
| AHK-AWS-002 | Khóa bí mật AWS trong tệp credentials, .env | Khóa aws_secret_access_key, AWS_SECRET_ACCESS_KEY | Độ dài 40, entropy | A | không | c | |
| AHK-GCP-001 | Khóa tài khoản dịch vụ GCP (JSON) | "type": "service_account" cùng "private_key" | Phân tích JSON, khóa PEM hợp lệ | A | không | c | |
| AHK-GCP-002 | Khóa API Google | AIza + 35 ký tự | Định dạng | B | 4+2 | c | Khóa trình duyệt công khai có giới hạn tên miền: vẫn báo, người dùng tạo ngoại lệ |
| AHK-AZ-001 | Chuỗi kết nối Azure Storage, khóa tài khoản | AccountKey= base64 88 ký tự | Giải base64 ra 64 byte | A | không | c | |
| AHK-AZ-002 | Bí mật ứng dụng Azure AD | Khóa client_secret, AZURE_CLIENT_SECRET | Độ dài, entropy | A | 4+2 | c | |
| AHK-GIT-001 | Token GitHub (ghp_, gho_, ghu_, ghs_, ghr_, github_pat_) | Tiền tố | Checksum CRC32 ở 6 ký tự cuối với token kiểu mới | A | 4+2 | c | |
| AHK-GIT-002 | Token GitLab (glpat-, gldt-, glrt-) | Tiền tố | Định dạng | A | 4+2 | c | |
| AHK-GIT-003 | Thông tin xác thực trong URL git (https://user:token@) và .git-credentials | URL có phần userinfo | Tách phần mật khẩu, entropy | B | không | h hoặc c theo entropy | URL chứa x-access-token của CI |
| AHK-CHAT-001 | Token Slack (xoxb-, xoxp-, xoxa-, xoxr-, xoxs-) | Tiền tố | Định dạng | B | 4+2 | c | |
| AHK-CHAT-002 | Webhook Slack, Discord, Microsoft Teams | URL theo mẫu của nhà cung cấp | Định dạng | B | không | c | |
| AHK-CHAT-003 | Token bot Telegram | <8 đến 10 chữ số>:<35 ký tự> kèm từ khóa bot, telegram | Định dạng, entropy | B | không | c | Phổ biến trong hệ thống cảnh báo tự viết ở Việt Nam |
| AHK-PAY-001 | Khóa bí mật Stripe (sk_live_, rk_live_) | Tiền tố | Định dạng | B | 4+2 | c | sk_test_ không báo |
| AHK-PAY-002 | Bí mật cổng thanh toán Việt Nam (VNPay vnp_HashSecret, MoMo secretKey, ZaloPay key1, key2) | Tên khóa trong cấu hình | Độ dài, entropy; định dạng xác minh ở S7 | B | không | c | Khóa sandbox công khai trong tài liệu nhà cung cấp: allowlist |
| AHK-DB-001 | Chuỗi kết nối CSDL có mật khẩu (mysql://, postgres://, mongodb://, mongodb+srv://, redis://, amqp://, jdbc:...password=) | URI | Tách phần mật khẩu, loại giá trị giữ chỗ | B | không | h hoặc c theo entropy | Mật khẩu secret, password trong cấu hình mẫu |
| AHK-DB-002 | Dòng .pgpass | Định dạng host:port:db:user:password | Đủ 5 trường | B | không | h hoặc c | Vị trí dự kiến khi 0600 |
| AHK-DB-003 | password= trong .my.cnf và tệp tùy chọn MySQL | Mục [client], [mysqldump] | B | không | h hoặc c | debian.cnf là vị trí dự kiến | |
| AHK-ENV-001 | Gán bí mật chung trong .env, INI, YAML, .properties, JSON, XML | Khóa khớp password, passwd, pwd, secret, token, api_key, apikey, access_key, private_key, client_secret | Loại giá trị giữ chỗ, biến (${...}, %(...)s), giá trị rỗng; ngưỡng độ dài và entropy | C | không | h hoặc c | Nguồn dương tính giả chính; độ tin cậy low hoặc medium; mặc định chỉ hiện ở bộ lọc riêng |
| AHK-ENV-002 | APP_KEY của Laravel | APP_KEY=base64: | Giải ra 32 byte | B | không | c | |
| AHK-ENV-003 | Khóa ký phiên, JWT của framework (SECRET_KEY Django, JWT_SECRET, secret_key_base Rails, khóa và salt của wp-config.php) | Tên khóa | Độ dài, entropy | B | không | c | |
| AHK-ENV-004 | Mật khẩu CSDL trong cấu hình ứng dụng (DB_PASSWORD, define('DB_PASSWORD', spring.datasource.password) | Tên khóa | Loại giá trị giữ chỗ | B | không | h hoặc c | |
| AHK-JWT-001 | JWT đã ký nằm trong tệp | eyJ... ba phần | Giải header JSON (chỉ kiểm cấu trúc, alg), không giữ claim | C | không | c | JWT hết hạn vẫn báo vì không đọc claim exp ra ngoài; có thể hạ mức trên máy nếu exp đã qua (không gửi exp) |
| AHK-CLI-001 | Thông tin đăng nhập registry trong .docker/config.json | Mục auths.*.auth | Giải base64 ra dạng user:pass | B | không | c | credsStore trỏ tới trình quản lý bí mật: không báo |
| AHK-CLI-002 | kubeconfig có token, client-key-data, password | YAML | Phân tích YAML | A | không | c | |
| AHK-CLI-003 | Mật khẩu trong .netrc | machine ... password | B | không | h hoặc c | ||
| AHK-CLI-004 | Token npm, PyPI, RubyGems, Composer | npm_ (checksum), pypi- (macaroon), rubygems_, github-oauth trong auth.json | Checksum hoặc định dạng | B | 4+2 | c | |
| AHK-CLI-005 | Cấu hình rclone, s3cmd có khóa | Khóa secret_access_key, pass | rclone che mật khẩu bằng mã hóa thuận nghịch công khai: coi như văn bản rõ | B | không | c | |
| AHK-HIST-001 | Mật khẩu trên dòng lệnh trong lịch sử shell | mysql -p<giá trị>, sshpass -p, curl -u user:pass, --password=, PGPASSWORD=, export *_SECRET=, htpasswd -b | Loại giá trị giữ chỗ | C | không | h | Một finding mỗi tệp lịch sử và detector, match_count là số dòng |
| AHK-HIST-002 | Lệnh đặt mật khẩu trong lịch sử client CSDL | IDENTIFIED BY '...', ALTER USER ... PASSWORD '...', CONFIG SET requirepass | C | không | h | ||
| AHK-TF-001 | Terraform state có thuộc tính nhạy cảm | terraform.tfstate, *.tfstate.backup có "sensitive_attributes" hoặc khóa password, private_key | Phân tích JSON | A | không | h | State luôn chứa bí mật dạng rõ |
| AHK-NET-001 | Khóa Wi-Fi, VPN trong cấu hình hệ thống | psk= (NetworkManager, wpa_supplicant), <key> nội tuyến của OpenVPN, PrivateKey = WireGuard, *-secrets của PPP | B | không | c | WireGuard 0600 root: vị trí dự kiến | |
| AHK-FILE-001 | Kho khóa nhị phân .p12, .pfx, .jks, .keystore | Đuôi và magic | Không phân tích nội dung | C | không | h (theo đường dẫn) | |
| AHK-FILE-002 | Cơ sở dữ liệu mật khẩu .kdbx, khóa bí mật GPG cũ secring.gpg | Đuôi và magic | Không phân tích | C | không | h (theo đường dẫn) | |
| AHK-FILE-003 | Bản dump, sao lưu nằm trong thư mục web (*.sql, *.sql.gz, *.dump, *.bak, *.tar.gz, *.zip, .env.bak, .env.old, .git/ ở web_root) | Đuôi, tên tệp, chỉ khi phơi nhiễm web_root | Không đọc nội dung | B | không | h (theo đường dẫn) | Nguyên nhân rò rỉ kinh điển: tải được qua HTTP |
Bộ quy tắc đầy đủ của phiên bản đầu (P2) gồm các mục trên cộng khoảng 40 đến 80 quy tắc nhà cung cấp chuyển từ cấu hình gitleaks sau khi lọc theo mức liên quan tới máy chủ (S7). Mỗi quy tắc chuyển sang nhận mã AHK-VND-<SỐ> và lớp theo bảng 2.2.
5. Detector dữ liệu cá nhân AHP-*
5.1 Nhận dạng giấy tờ và liên lạc Việt Nam
| Loại | Cấu trúc dùng để xác thực | Cần xác minh ở S8 |
|---|---|---|
| Số định danh cá nhân, CCCD (12 chữ số) | 3 chữ số đầu là mã tỉnh nơi đăng ký khai sinh (danh sách mã của Bộ Công an); chữ số thứ 4 là mã thế kỷ và giới tính (0, 1: sinh thế kỷ 20; 2, 3: thế kỷ 21); 2 chữ số tiếp là hai số cuối năm sinh; 6 chữ số cuối ngẫu nhiên. Loại dãy lặp một chữ số, dãy tăng dần, năm sinh vượt năm hiện tại | Danh sách mã tỉnh còn hiệu lực sau sắp xếp đơn vị hành chính năm 2025; mã thế kỷ cho người sinh trước 1900 |
| CMND 9 chữ số | Không có cấu trúc kiểm tra được: chỉ báo khi có ngữ cảnh | |
| CMND 12 chữ số (cấp 2012 đến 2016) | Cùng cấu trúc CCCD | |
| Số điện thoại di động | Chuẩn hóa +84, 84, 0; 10 chữ số sau chuẩn hóa về đầu 0; đầu số di động hiện hành (nhóm 03x, 05x, 07x, 08x, 09x theo nhà mạng) lưu trong mã; cho phép dấu cách, chấm, gạch nối giữa nhóm | Danh sách đầu số đang cấp |
| Số điện thoại cố định | 02 + mã vùng, 11 chữ số; chỉ báo khi có ngữ cảnh | |
Phần cục bộ và tên miền theo RFC 5322 rút gọn, tên miền cấp cao chữ cái 2 đến 24 ký tự. Loại example.com, example.org, localhost, *.local, *.test, *.invalid, địa chỉ hệ thống (root@, postmaster@, noreply@, no-reply@) | ||
| Số thẻ thanh toán | 13 đến 19 chữ số, có thể chia nhóm bằng dấu cách hoặc gạch nối; IIN thuộc Visa (4), Mastercard (51 đến 55, 2221 đến 2720), JCB (3528 đến 3589), Amex (34, 37), UnionPay (62), NAPAS (9704); đạt Luhn; loại số thẻ thử nghiệm công khai | Thẻ nội địa NAPAS có tuân Luhn hay không |
| Hộ chiếu Việt Nam | 1 chữ cái và 7 chữ số; chỉ báo khi có ngữ cảnh |
5.2 Ngữ cảnh
Từ khóa không phân biệt hoa thường, có và không dấu, nằm cùng dòng (trong 64 ký tự quanh vị trí khớp) hoặc là tên cột CSV, khóa JSON, YAML, tên cột trong câu INSERT của dump SQL:
| Loại | Từ khóa (ví dụ) |
|---|---|
| CCCD, CMND | cccd, căn cước, can cuoc, cmnd, chứng minh, số định danh, so_dinh_danh, id_card, national_id, identity_number, citizen_id |
| Điện thoại | sđt, sdt, số điện thoại, so_dien_thoai, dien_thoai, phone, mobile, tel, hotline |
| Thẻ | số thẻ, so_the, card_number, pan, cc_number |
| Hộ chiếu | hộ chiếu, ho_chieu, passport |
5.3 Bảng detector
| Mã | Phát hiện | Điều kiện báo | Độ tin cậy | Giai đoạn |
|---|---|---|---|---|
| AHP-CCCD-001 | Số định danh, CCCD, CMND 12 số | Đạt cấu trúc mục 5.1 và có ngữ cảnh | high | P4 |
| AHP-CCCD-002 | Như trên, không ngữ cảnh | Đạt cấu trúc và tệp có từ 20 lần khớp trở lên (dạng dữ liệu hàng loạt) | low | P4 |
| AHP-CMND-001 | CMND 9 số | Có ngữ cảnh | medium | P4 |
| AHP-PHONE-001 | Số di động Việt Nam | Đạt đầu số; có ngữ cảnh thì high, không thì medium | medium, high | P4 |
| AHP-PHONE-002 | Số cố định Việt Nam | Có ngữ cảnh | medium | P4 |
| AHP-EMAIL-001 | Địa chỉ email | Tệp có từ 5 địa chỉ khác nhau trở lên (ngưỡng cấu hình), sau allowlist | medium | P4 |
| AHP-CARD-001 | Số thẻ thanh toán quốc tế | IIN và Luhn đạt, không phải số thử nghiệm | high | P4 |
| AHP-CARD-002 | Thẻ nội địa NAPAS | IIN 9704, độ dài 16 hoặc 19, Luhn tùy kết quả S8 | medium | P4 |
| AHP-PASS-001 | Hộ chiếu Việt Nam | Có ngữ cảnh | medium | P4 |
| AHP-TAX-001 | Mã số thuế | Chữ số kiểm tra (thuật toán xác minh ở S8), có ngữ cảnh | medium | Sau P4 (Q36) |
| AHP-BHXH-001 | Mã số bảo hiểm xã hội 10 số | Có ngữ cảnh | low | Sau P4 (Q36) |
| AHP-BANK-001 | Số tài khoản ngân hàng | Có ngữ cảnh (stk, số tài khoản, account_no) | low | Sau P4 (Q36) |
| AHP-DOB-001 | Ngày sinh | Có ngữ cảnh | low | Sau P4 (Q36) |
Không nhận dạng họ tên, địa chỉ nhà ở phiên bản đầu (ADR 0010 mục 5).
5.4 Gom nhóm và mức độ
Một finding cho mỗi (detector, tệp), match_count là số bản ghi khớp, preview luôn rỗng, fingerprint phạm vi h (ADR 0011). Ngưỡng số lượng cấu hình theo công ty (pii_count_thresholds, mặc định 100 và 1.000):
| Số bản ghi \ Phơi nhiễm | web_root | world_readable | Khác |
|---|---|---|---|
| Từ 1.000 | critical | high | medium |
| 100 đến 999 | high | medium | low |
| 1 đến 99 | medium | low | info |
Số thẻ thanh toán (AHP-CARD-*) tăng một bậc (dữ liệu thẻ dạng rõ là vi phạm PCI DSS bất kể số lượng). Finding độ tin cậy low không bao giờ vượt medium.
5.5 Định dạng cấu trúc
- CSV, TSV: đọc dòng tiêu đề, cột có tên khớp từ khóa mục 5.2 thì mọi ô của cột được coi là có ngữ cảnh.
- JSON, NDJSON, YAML: tên khóa của giá trị làm ngữ cảnh.
- Dump SQL dạng văn bản: tên cột trong
CREATE TABLEhoặc danh sách cột củaINSERTlàm ngữ cảnh. - OOXML (
.xlsx,.docx): như ADR 0009 mục 3, tiêu đề cột lấy từ hàng đầu của trang tính.
6. Kiểm kê tệp
Kiểm kê tệp là một phần của yêu cầu "biết trên máy có gì". Danh sách đầy đủ mọi tệp không rời máy (nằm trong chỉ mục cục bộ); chỉ gửi thống kê và danh sách tệp đáng chú ý.
6.1 Thống kê theo gốc
Cho mỗi gốc đã quét: số tệp, tổng dung lượng, số tệp hợp lệ để quét nội dung, số tệp world_readable, số tệp ghi được bởi mọi người, số tệp theo nhóm loại (văn bản và cấu hình, dữ liệu có cấu trúc, nhị phân, lưu trữ nén, kho khóa), số tệp bị bỏ theo lý do.
6.2 Tệp đáng chú ý
Chỉ siêu dữ liệu: đường dẫn, loại, kích thước, chế độ, uid, gid, mtime, phơi nhiễm. Tối đa 2.000 mục mỗi báo cáo.
| Loại | Điều kiện | Giai đoạn |
|---|---|---|
private_key_file | Tệp được detector AHK-PKEY-* xác nhận | P2 |
keystore, password_db | Như AHK-FILE-001, 002 | P2 |
env_file | Tên .env, .env.* | P2 |
db_dump, backup_archive | Đuôi dump, sao lưu ở mọi phơi nhiễm (trong web_root thì thành finding AHK-FILE-003) | P2 |
large_unscanned_data | Tệp dữ liệu (.csv, .sql, .json, .xlsx) lớn hơn trần mỗi tệp | P4 |
unpackaged_executable | ELF trong /usr/local, /opt, thư mục nhà, không thuộc gói nào (so danh sách tệp của gói) | P6 |
suid_unpackaged | Như AHS-FS-005 | P5 |
7. Giảm dương tính giả
| Cơ chế | Mô tả |
|---|---|
| Allowlist biên dịch sẵn | Giá trị giữ chỗ, khóa mẫu công khai, số thẻ thử nghiệm, tên miền ví dụ, đường dẫn tài liệu (/usr/share/doc), thư mục kiểm thử của framework phổ biến (tests/fixtures, spec/fixtures) |
| Độ tin cậy | low ẩn khỏi danh sách mặc định, vẫn đếm |
| Ngoại lệ ở Access Hub | Như 06 mục 6, thêm phạm vi "detector cộng mẫu đường dẫn (glob)" và "fingerprint" (ví dụ một khóa thử nghiệm dùng chung có chủ đích). Ngoại lệ không xóa finding |
| Tắt detector | Theo công ty, theo mã |
| Thống kê ẩn danh | Nền tảng thấy số ngoại lệ false_positive theo mã detector khi đạt ngưỡng k, để chỉnh quy tắc. Không đường dẫn |
8. Khắc phục gợi ý (chỉ tư vấn)
| Loại | Hướng dẫn |
|---|---|
| Khóa cloud, token | Thu hồi và xoay vòng ở nhà cung cấp trước, rồi mới gỡ khỏi tệp; kiểm tra nhật ký truy cập của nhà cung cấp trong khoảng thời gian tệp tồn tại (file_modified_at) |
| Khóa riêng | Thay cặp khóa, gỡ khóa công khai cũ khỏi authorized_keys ở mọi nơi, đặt passphrase, quyền 0600 |
| Tệp trong thư mục web | Chuyển ra ngoài document root, chặn ở máy chủ web, coi như đã lộ và xoay vòng |
| Quyền tệp lỏng | Lệnh gợi ý chmod 600, chown để người dùng tự chạy |
| Lịch sử lệnh | Xoay vòng mật khẩu, xóa dòng lịch sử, dùng tệp tùy chọn hoặc biến môi trường từ trình quản lý bí mật |
| Dữ liệu cá nhân | Xóa hoặc chuyển dữ liệu khỏi máy nếu không cần, mã hóa khi lưu, giới hạn quyền, đối chiếu nghĩa vụ bảo vệ dữ liệu cá nhân của tổ chức |
Không có nút xóa, cách ly, đổi quyền từ xa (ADR 0003).
9. Thêm detector mới
- Đặc tả theo các cột mục 4 hoặc 5.3: cách nhận, xác thực, lớp, preview, phạm vi fingerprint, nguồn dương tính giả.
- Rà soát dữ liệu: detector không được làm lộ giá trị qua bất kỳ trường nào (ADR 0011); preview chỉ khi được phép.
- Ca dương, ca âm, ca allowlist trong bộ mẫu (
11mục 2.2), cộng canary cho bộ "không giá trị rời máy". - Đo ảnh hưởng thông lượng (từ khóa lọc trước phải đủ chọn lọc).
- Cập nhật bảng này và danh mục mã trong cùng một thay đổi; tăng
rules_version.