Danh mục kiểm tra cấu hình và hardening
Kiểm tra cấu hình AHS-* là một phần của Access Hub Scanner, làm ở giai đoạn P5 (12). Phát hiện bí mật và dữ liệu cá nhân trong nội dung tệp là danh mục riêng ở 14.
1. Nguyên tắc
- Chỉ đọc. Kiểm tra đọc tệp,
/proc,/sys, trạng thái unit systemd qua tệp. Không sửa, không khởi động lại, không gọi lệnh có tác dụng phụ. Không có kiểm tra "tự sửa" (ADR 0003). - Biên dịch sẵn. Danh mục nằm trong mã scanner. Cấu hình từ trung tâm chỉ bật, tắt theo mã
AHS-*và chỉnh tham số số học có miền (ví dụ ngưỡng ngày), không nhận biểu thức, đường dẫn tùy ý hay lệnh. - Bằng chứng tối thiểu. Mỗi kết quả mang
evidencegồm khóa trong danh sách trắng của chính kiểm tra đó, giá trị cắt tối đa 256 byte, tối đa 20 mục. Không bao giờ chứa nội dung tệp, băm mật khẩu, khóa (ADR 0006). - Kết quả:
pass,fail,error(không đọc được, kèm mã lỗi),not_applicable(ví dụ không càisshd),unknown(cấu hình quá phức tạp để kết luận, ví dụ khốiMatchcủa SSH). - Mã ổn định.
AHS-<NHÓM>-<SỐ>, kèmcheck_versiontăng khi logic đổi. Không dùng lại số. - Tham chiếu CIS. Cột "Tham chiếu" chỉ nêu chương chủ đề của CIS Benchmark. Số mục cụ thể khác nhau theo phiên bản benchmark và theo distro; ánh xạ chính xác làm ở giai đoạn P5 với bản benchmark có giấy phép hợp lệ (Q9). Sản phẩm không tự nhận là "CIS compliant".
Mức nghiêm trọng: critical, high, medium, low, info. Mức có thể ghi đè theo công ty (08), mặc định như bảng.
Quyền cần: U đọc được bởi người dùng thường; R cần CAP_DAC_READ_SEARCH (đọc tệp chỉ root đọc); A chạy ở bộ gửi accesshub-scan-uploader (có mạng đi ra, không đặc quyền, chỉ tới địa chỉ cục bộ của máy); C đánh giá tập trung.
2. SSH server
Phát hiện: parser sshd_config theo quy tắc của OpenSSH: giá trị đầu tiên của mỗi từ khóa có hiệu lực, xử lý Include (kể cả glob như /etc/ssh/sshd_config.d/*.conf) theo thứ tự xuất hiện, không phân biệt hoa thường ở từ khóa. Có khối Match ảnh hưởng tới từ khóa đang xét: kết quả unknown kèm evidence.match_blocks = N, trừ khi giá trị toàn cục đã đạt và mọi khối Match không ghi đè từ khóa đó. Không gọi sshd -T (cần root và là thực thi lệnh). not_applicable khi không có gói openssh-server trong inventory.
| Mã | Kiểm tra | Mức | Lý do | Phát hiện | Dương tính giả | Quyền | Tham chiếu |
|---|---|---|---|---|---|---|---|
| AHS-SSH-001 | PermitRootLogin khác no | high (yes), low (prohibit-password) | Đăng nhập trực tiếp bằng root làm mất truy vết cá nhân và là mục tiêu dò mật khẩu | Giá trị hiệu lực; mặc định OpenSSH hiện đại là prohibit-password | Máy chỉ cho root đăng nhập bằng khóa từ hệ thống tự động: ngoại lệ có lý do | U hoặc R (một số distro để sshd_config 0600) | Chương SSH Server |
| AHS-SSH-002 | PasswordAuthentication yes | medium | Mở đường dò mật khẩu | Giá trị hiệu lực, cộng KbdInteractiveAuthentication | Máy sau bastion chỉ cho mạng nội bộ: ngoại lệ | U/R | Chương SSH Server |
| AHS-SSH-003 | PermitEmptyPasswords yes | critical | Tài khoản mật khẩu rỗng đăng nhập được từ xa | Giá trị hiệu lực | Rất hiếm | U/R | Chương SSH Server |
| AHS-SSH-004 | Thuật toán yếu trong Ciphers, MACs, KexAlgorithms | medium | Bộ mã CBC, arcfour, hmac-md5, hmac-sha1, diffie-hellman-group1-sha1 đã lỗi thời | So danh sách khai báo với danh sách yếu trong mã; không khai báo thì dùng mặc định của phiên bản OpenSSH (lấy từ inventory) | Mặc định thay đổi theo phiên bản OpenSSH: bảng mặc định phải kiểm thử theo distro | U/R | Chương SSH Server |
| AHS-SSH-005 | X11Forwarding yes | low | Mở rộng bề mặt tấn công không cần thiết trên máy chủ | Giá trị hiệu lực | Máy dùng ứng dụng đồ họa từ xa | U/R | Chương SSH Server |
| AHS-SSH-006 | MaxAuthTries lớn hơn 4 | low | Tăng số lần thử mỗi kết nối | Giá trị hiệu lực, ngưỡng cấu hình 1 đến 10 | U/R | Chương SSH Server | |
| AHS-SSH-007 | Quyền sshd_config hoặc tệp Include cho người khác ghi, hoặc chủ sở hữu không phải root | high | Người dùng thường sửa được cấu hình SSH | stat: chế độ, uid, gid | U | Chương SSH Server | |
| AHS-SSH-008 | Khóa riêng của host (/etc/ssh/ssh_host_*_key) đọc được bởi nhóm hoặc người khác | high | Lộ khóa host cho phép giả mạo máy chủ | stat (chế độ, chủ sở hữu). Không đọc nội dung khóa | Một số distro để nhóm ssh_keys đọc (0640, nhóm ssh_keys trên họ RHEL): cho phép theo bảng distro | U | Chương SSH Server |
3. Mạng và tường lửa
| Mã | Kiểm tra | Mức | Lý do | Phát hiện | Dương tính giả | Quyền | Tham chiếu |
|---|---|---|---|---|---|---|---|
| AHS-NET-001 | Cổng đang nghe không nằm trong danh sách dự kiến | medium | Dịch vụ lạ hoặc quên tắt | Máy gửi danh sách socket nghe (/proc/net/tcp, tcp6, udp, udp6: giao thức, địa chỉ, cổng). Access Hub so với danh sách dự kiến theo máy, vai trò, tag (08) | Cổng ngẫu nhiên của ứng dụng (RPC động), cổng tạm khi bảo trì: hỗ trợ dải cổng và ngoại lệ có hạn | U (danh sách socket), C (so sánh) | Chương dịch vụ, mạng |
| AHS-NET-002 | Dịch vụ cơ sở dữ liệu, cache nghe trên mọi địa chỉ (0.0.0.0, ::) | high | MySQL, PostgreSQL, Redis, MongoDB, Elasticsearch, Memcached mở ra mạng là nguyên nhân lộ dữ liệu phổ biến | Cổng mặc định (3306, 5432, 6379, 27017, 9200, 11211) nghe trên địa chỉ không phải loopback | Cụm cơ sở dữ liệu cố ý mở trong mạng riêng có tường lửa: ngoại lệ compensating_control | U | Chương dịch vụ |
| AHS-NET-003 | Không có tường lửa máy đang bật | medium | Không có lớp chặn khi dịch vụ lỡ mở | Trạng thái bật của ufw (/etc/ufw/ufw.conf ENABLED=yes), firewalld, nftables (liên kết unit trong /etc/systemd/system/*.wants/, tệp trạng thái). Không liệt kê luật (cần CAP_NET_ADMIN, Q16) | Máy dựa vào tường lửa mạng hoặc security group của cloud: ngoại lệ compensating_control | U | Chương tường lửa |
| AHS-NET-004 | net.ipv4.ip_forward = 1 trên máy không phải router | low | Máy có thể bị dùng làm điểm chuyển tiếp | /proc/sys/net/ipv4/ip_forward | Máy chạy Docker, Kubernetes, VPN bật forward là đúng: tự not_applicable khi inventory có docker-ce, containerd, kubelet, wireguard-tools | U | Chương tham số mạng |
| AHS-NET-005 | Chấp nhận ICMP redirect (accept_redirects = 1) | low | Cho phép đổi bảng định tuyến từ xa | /proc/sys/net/ipv4/conf/all/accept_redirects, default | U | Chương tham số mạng |
Ánh xạ cổng sang tiến trình (ss -p) cần đọc /proc/<pid>/fd của tiến trình người khác, việc này cần quyền kiểu ptrace chứ không chỉ quyền đọc tệp. Mặc định không làm; câu hỏi Q17.
4. Tài khoản, mật khẩu, sudo
| Mã | Kiểm tra | Mức | Lý do | Phát hiện | Dương tính giả | Quyền | Tham chiếu |
|---|---|---|---|---|---|---|---|
| AHS-AUTH-001 | Tài khoản có trường mật khẩu rỗng trong /etc/shadow | critical | Đăng nhập không cần mật khẩu | Đọc /etc/shadow, chỉ xét trường 2 có rỗng hay không. Không gửi, không log, không giữ băm; bằng chứng chỉ là tên tài khoản (Q12) | Tài khoản bị khóa có ! hoặc * không tính | R | Chương tài khoản |
| AHS-AUTH-002 | Tài khoản UID 0 khác root | critical | Cửa hậu phổ biến | /etc/passwd | U | Chương tài khoản | |
| AHS-AUTH-003 | Tuổi mật khẩu tối đa lớn hơn ngưỡng | low | Chính sách mật khẩu yếu | PASS_MAX_DAYS trong /etc/login.defs, ngưỡng mặc định 365 | Máy chỉ đăng nhập bằng khóa SSH hoặc SSO: ngoại lệ | U | Chương mật khẩu |
| AHS-AUTH-004 | Độ dài mật khẩu tối thiểu nhỏ hơn ngưỡng | low | Mật khẩu ngắn dễ đoán | minlen trong /etc/security/pwquality.conf và pwquality.conf.d, ngưỡng mặc định 12 | Như trên; cấu hình PAM khác chuẩn trả unknown | U | Chương mật khẩu |
| AHS-AUTH-005 | Không có khóa tài khoản khi đăng nhập sai | low | Không chặn dò mật khẩu cục bộ | Có pam_faillock hoặc pam_tally2 trong /etc/pam.d/common-auth hoặc system-auth | Như AUTH-003 | U | Chương PAM |
| AHS-AUTH-006 | Quy tắc sudo NOPASSWD: ALL | medium | Chiếm tài khoản là chiếm root không cần mật khẩu | Parser sudoers và sudoers.d (#includedir, @includedir), alias. Bằng chứng: chủ thể (người dùng, nhóm), số dòng; không gửi cả dòng | Tài khoản tự động hóa cần không mật khẩu: ngoại lệ, khuyến nghị giới hạn lệnh | R | Chương sudo |
| AHS-AUTH-007 | Tệp sudoers hoặc sudoers.d/* không phải 0440 root, hoặc người khác ghi được | high | Sửa được quyền sudo | stat | U | Chương sudo | |
| AHS-AUTH-008 | /etc/passwd, /etc/group khác 0644, /etc/shadow, /etc/gshadow cho người khác đọc | high | Lộ băm mật khẩu hoặc sửa được tài khoản | stat | Debian, Ubuntu để /etc/shadow 0640 nhóm shadow: hợp lệ theo bảng distro | U | Chương quyền tệp hệ thống |
5. Hệ thống tệp
Duyệt tệp tốn IO nhất, chạy với IOSchedulingClass=idle, giới hạn SNFR-05. Phạm vi mặc định: /etc, /usr, /bin, /sbin, /lib, /lib64, /boot, /opt, /var trừ /var/tmp, /var/lib/docker, /var/lib/containerd, /var/log/journal. Không vượt điểm gắn, bỏ hệ thống tệp mạng và ảo (nfs, cifs, fuse.*, proc, sysfs, overlay). Không đọc nội dung tệp, chỉ lstat. Thư mục nhà (/home, /root) không duyệt mặc định cho nhóm AHS-FS. Lượt nội dung (đọc nội dung, gồm thư mục nhà) là unit riêng với phạm vi và ngân sách riêng (ADR 0009); từ giai đoạn P5, các kiểm tra AHS-FS dùng lại chỉ mục của lượt nội dung khi có để tránh duyệt hai lần. Quản trị viên thêm loại trừ (tối đa 32 đường dẫn tuyệt đối, kiểm tra hợp lệ ở cả Access Hub và scanner).
| Mã | Kiểm tra | Mức | Lý do | Phát hiện | Dương tính giả | Quyền | Tham chiếu |
|---|---|---|---|---|---|---|---|
| AHS-FS-001 | Tệp thường ghi được bởi mọi người trong thư mục hệ thống | high | Người dùng thường sửa được tệp do root thực thi hoặc đọc | lstat, chế độ o+w trên tệp thường. Bằng chứng: tổng số và tối đa 50 đường dẫn đầu | Tệp ứng dụng cố ý chia sẻ trong /opt: loại trừ đường dẫn | R (để vào thư mục bị giới hạn) | Chương quyền tệp |
| AHS-FS-002 | Thư mục ghi được bởi mọi người không có sticky bit | medium | Người dùng xóa, thay tệp của người khác | lstat, o+w không có +t | R | Chương quyền tệp | |
| AHS-FS-003 | Tệp không có chủ sở hữu hoặc nhóm hợp lệ | low | Tàn dư tài khoản đã xóa, UID mới có thể chiếm | uid, gid không có trong /etc/passwd, /etc/group | Tài khoản từ LDAP, SSSD không có trong tệp cục bộ: unknown khi phát hiện sssd hoặc nslcd trong inventory | R | Chương quyền tệp |
| AHS-FS-004 | /tmp không gắn với nodev, nosuid, noexec | low | Giảm khả năng leo thang qua /tmp | /proc/self/mountinfo | Nhiều ứng dụng cần exec trong /tmp; mức low, nhiều tổ chức tắt kiểm tra này | U | Chương phân vùng |
| AHS-FS-005 | Tệp SUID, SGID không thuộc gói nào | medium | Binary đặc quyền lạ là dấu hiệu cửa hậu | Liệt kê SUID, SGID trong phạm vi duyệt, so với danh sách tệp của gói (dpkg *.list, rpm header) | Phần mềm cài tay ngoài gói: ngoại lệ theo đường dẫn. Cần đo chi phí đọc danh sách tệp của gói (S5), có thể dời sau giai đoạn P5 | R | Chương quyền tệp |
6. Cập nhật và vòng đời
| Mã | Kiểm tra | Mức | Lý do | Phát hiện | Dương tính giả | Quyền | Tham chiếu |
|---|---|---|---|---|---|---|---|
| AHS-UPD-001 | Không bật cập nhật bảo mật tự động | medium | Bản vá bảo mật bị chậm | Debian, Ubuntu: APT::Periodic::Unattended-Upgrade "1" trong /etc/apt/apt.conf.d/ và có gói unattended-upgrades. Họ RHEL: dnf-automatic.timer được bật (liên kết unit) và apply_updates trong /etc/dnf/automatic.conf | Tổ chức vá theo quy trình tập trung (Ansible, Satellite): ngoại lệ compensating_control | U | Chương cập nhật |
| AHS-UPD-002 | Danh sách gói lâu không làm mới | low | Không thấy bản vá mới | Debian, Ubuntu: thời điểm /var/lib/apt/periodic/update-success-stamp hoặc mtime của /var/lib/apt/lists. Ngưỡng 7 ngày | Máy kín dùng mirror nội bộ đồng bộ theo lịch | U | Chương cập nhật |
| AHS-UPD-003 | Cần khởi động lại để áp bản vá | medium | Kernel hoặc thư viện đã vá nhưng chưa có hiệu lực | /var/run/reboot-required (Debian, Ubuntu); so kernel đang chạy với kernel mới nhất đã cài (mọi distro) | U | Chương cập nhật | |
| AHS-UPD-004 | Bản phát hành OS đã hết hỗ trợ bảo mật | high | Không còn bản vá | So os.id, os.version_id với bảng vòng đời trong secdb (03). Ubuntu có ESM thì xét ngày ESM nếu máy bật ESM (Q15) | C | Chương cập nhật |
7. Kernel, nhật ký, đồng bộ giờ, kiểm soát truy cập bắt buộc
| Mã | Kiểm tra | Mức | Lý do | Phát hiện | Dương tính giả | Quyền | Tham chiếu |
|---|---|---|---|---|---|---|---|
| AHS-KRN-001 | ASLR không đầy đủ (kernel.randomize_va_space khác 2) | medium | Giảm hiệu quả chống khai thác bộ nhớ | /proc/sys/kernel/randomize_va_space | U | Chương tham số kernel | |
| AHS-KRN-002 | fs.suid_dumpable khác 0 | low | Core dump của tiến trình SUID có thể lộ dữ liệu | /proc/sys/fs/suid_dumpable | U | Chương tham số kernel | |
| AHS-KRN-003 | kernel.dmesg_restrict = 0 | low | Lộ địa chỉ kernel cho người dùng thường | /proc/sys/kernel/dmesg_restrict | U | Chương tham số kernel | |
| AHS-LOG-001 | Không có auditd hoặc không bật | low | Thiếu nhật ký phục vụ điều tra | Gói auditd hoặc audit trong inventory và unit được bật | Tổ chức dùng giải pháp EDR khác: ngoại lệ | U | Chương nhật ký |
| AHS-LOG-002 | Không có đồng bộ giờ | low | Sai giờ làm hỏng nhật ký, chứng chỉ | Unit chronyd, systemd-timesyncd, ntpd được bật | Máy ảo đồng bộ qua hypervisor | U | Chương đồng bộ giờ |
| AHS-MAC-001 | SELinux không ở enforcing (họ RHEL) hoặc AppArmor không bật (Ubuntu, Debian) | medium | Mất lớp cô lập bắt buộc | /sys/fs/selinux/enforce; /sys/module/apparmor/parameters/enabled | Ứng dụng không tương thích: ngoại lệ có hạn | U hoặc R (tùy distro) | Chương kiểm soát truy cập bắt buộc |
8. TLS trên dịch vụ cục bộ
Bộ đọc không có mạng (ADR 0001), nên kiểm tra TLS do bộ gửi accesshub-scan-uploader của gói Scanner thực hiện bằng kiểu kiểm tra biên dịch sẵn, không nhờ Access Hub Agent (Q25). Đích chỉ là địa chỉ loopback và địa chỉ của chính máy (bộ gửi kiểm tra địa chỉ đích thuộc giao diện cục bộ), cổng lấy từ danh sách socket nghe do bộ đọc báo; Access Hub bật kiểm tra cho cổng có TLS khi người dùng chọn.
| Mã | Kiểm tra | Mức | Lý do | Phát hiện | Dương tính giả | Quyền | Tham chiếu |
|---|---|---|---|---|---|---|---|
| AHS-TLS-001 | Chứng chỉ hết hạn hoặc còn dưới 14 ngày | critical (hết hạn), high (dưới 14 ngày) | Gián đoạn dịch vụ, người dùng quen bỏ qua cảnh báo | tls_probe của bộ gửi đọc ngày hết hạn chứng chỉ | Chứng chỉ nội bộ tự xoay | A | Chương dịch vụ |
| AHS-TLS-002 | Cho phép TLS 1.0 hoặc 1.1 | medium | Giao thức lỗi thời | Kiểu kiểm tra tls_probe ở bộ gửi: bắt tay lần lượt với từng phiên bản, chỉ ghi phiên bản nào thành công | Thiết bị cũ cần tương thích: ngoại lệ | A | Chương dịch vụ |
| AHS-TLS-003 | Bộ mã yếu (RC4, 3DES, NULL, EXPORT) | medium | Có thể giải mã hoặc hạ cấp | tls_probe thử danh sách bộ mã cố định trong mã bộ gửi | A | Chương dịch vụ | |
| AHS-TLS-004 | Chứng chỉ tự ký hoặc tên máy không khớp | low | Dễ bị giả mạo, người dùng quen bỏ qua | Kết quả xác minh của tls_probe | Dịch vụ nội bộ chỉ dùng mạng riêng: thường tắt | A | Chương dịch vụ |
tls_probe là kiểu kiểm tra cố định, tham số có lược đồ (đích cục bộ, cổng, SNI), không nhận nội dung tùy ý, không thực thi từ xa (ADR 0003). Kết quả đi trong SecurityReport.checks như mọi kiểm tra khác; việc làm ở SCN-7 (P5), không cần thay đổi ở repo Agent hay Collector.
9. Ánh xạ ngược sang finding
Kết quả fail sinh finding loại check với finding_key = SHA-256(company_id | server_id | check_id | subject), subject là đối tượng cụ thể khi kiểm tra có nhiều đối tượng (cổng, tài khoản, đường dẫn), rỗng nếu không. Kết quả pass ở lần quét sau đóng finding (resolved_reason = check_passed). error và unknown không mở, không đóng finding; hiển thị riêng để người dùng biết độ phủ.
10. Thêm kiểm tra mới
- Viết đặc tả theo các cột ở trên, nêu rõ quyền cần và bằng chứng gửi đi.
- Rà soát dữ liệu: bằng chứng có lộ bí mật hay dữ liệu cá nhân không (
09mục 5). - Fixture cho mỗi distro hỗ trợ cộng ca
not_applicablevàunknown(11). - Cập nhật bảng này và danh mục mã trong cùng một thay đổi.