Các điểm bảo mật cần nắm vững:
- Kiểm tra hệ thống người dùng
- Kiểm tra chính sách mật khẩu
- Kiểm tra ghi nhật ký và kiểm toán
- Kiểm tra dịch vụ hệ thống
- Kiểm tra kiểm soát truy cập
2.1.1 Kiểm tra hệ thống người dùng
#Kiểm tra phiên bản kernel hệ thống
- Cơ sở đánh giá: Không có
- Phương pháp kiểm tra: Sử dụng lệnh
uname -ađể xem kernel hệ thống, hoặccat /etc/os-release, hoặccat /etc/centos-releaseđể xem phiên bản phân phối hệ điều hành
#Tìm tài khoản không có mật khẩu
- Cơ sở đánh giá: Sự tồn tại là không phù hợp
- Hiểu biết nền tảng: Shell đặc biệt
- /bin/false: Đặt shell của người dùng thành /bin/false sẽ khiến người dùng không thể đăng nhập và không có bất kỳ thông báo nào, được thiết lập trong tệp passwd
- /sbin/nologin: nologin sẽ lịch sự trả lời người dùng một câu, sau đó từ chối đăng nhập
- Phương pháp kiểm tra: Lệnh
cat /etc/passwd,cat /etc/shadowđể xem tài khoản có mật khẩu trống - Biện pháp tăng cường: Xóa tài khoản không có mật khẩu hoặc đặt mật khẩu cho tài khoản đó.
- userdel <username> Xóa người dùng
- passwd <username> Đặt mật khẩu cho người dùng
Tệp passwd có thể thực hiện các thao tác a và b
Shadow có thể xem mật khẩu của người dùng, nếu sau tên người dùng có dấu * thì người dùng đó không thể đăng nhập, nếu sau tên người dùng có !! thì người dùng đó không có mật khẩu
Lệnh kiểm tra:
1 [root@localhost ~]# awk -F":" '{if ($7!="/sbin/nologin" && $7!="/bin/false") print $1}' /etc/passwd > available_users
2 # Xuất ra tệp available_users, chứa những người dùng có thể sử dụng để đăng nhập
3
4 [root@localhost ~]# awk -F":" '{if ($2=="!!") print $1}' /etc/shadow > empty_pass
5 # Liệt kê các tài khoản có mật khẩu trống trong tệp shadow, trong tệp shadow "!!" biểu thị mật khẩu trống, "*" biểu thị tài khoản bị khóa
6
7 [root@localhost ~]# grep -f available_users empty_pass
8 oracle
9 # So sánh kết quả của available_users và empty_pass, nếu có tài khoản xuất hiện ở cả hai thì không đáp ứng yêu cầu kiểm tra
#Tìm tài khoản có UID giống Root
- Cơ sở đánh giá: Sự tồn tại là không hợp lý
- Hiểu biết nền tảng: Nếu UID là 0 thì tài khoản đó có quyền hạn giống như Root
- Phương pháp kiểm tra: Lệnh
cat /etc/passwdđể xem tài khoản có số thứ ba bằng 0 - Biện pháp tăng cường: Sửa UID của tài khoản độc hại và xóa tài khoản độc hại
Lệnh kiểm tra
awk -F ":" '{if ($3==0 && $1!="admin") print $0}' /etc/passwd
# Kiểm tra các tài khoản có phần thứ ba trong passwd là 0 nhưng không phải root
# Thêm quyền root cho người dùng thường
echo "visitor:x:0:0::/:/bin/sh" >> /etc/passwd
# Nếu muốn xóa người dùng có UID=0 thì sửa UID thành UID của người dùng bình thường
#Kiểm tra trạng thái core dump
- Cơ sở đánh giá: Bật là hợp lý, tắt là không hợp lý
- Hiểu biết nền tảng: Ảnh bộ nhớ
- Khi chương trình bị sập hoặc chấm dứt bất thường trong quá trình chạy, hệ điều hành sẽ ghi lại trạng thái bộ nhớ hiện tại của chương trình vào một tệp tin, hành vi này gọi là core dump.
- Core dump là ảnh chụp bộ nhớ, ngoài thông tin bộ nhớ còn có các trạng thái quan trọng khác của chương trình đang chạy cũng được lưu trữ đồng thời, ví dụ như thông tin thanh ghi, thông tin quản lý bộ nhớ, trạng thái xử lý và hệ điều hành khác
- Phương pháp kiểm tra: Lệnh
cat /etc/security/limits.confđể xem- soft core 0
- hard core 0
- Phải tồn tại cả hai cùng lúc
- Biện pháp tăng cường: Thêm hoặc chỉnh sửa tệp cấu hình
#Kiểm tra tình trạng sử dụng đĩa cứng
- Cơ sở đánh giá: Trên 80% là không phù hợp
- Phương pháp kiểm tra: Lệnh df -h để xem tỷ lệ sử dụng đĩa cứng
- Biện pháp tăng cường: Mở rộng dung lượng đĩa hoặc xóa bớt tài nguyên không quan trọng
#Kiểm tra cài đặt số lượng lệnh lịch sử History
- Cơ sở đánh giá: Giá trị đề xuất là 200
- Phương pháp kiểm tra: Lệnh cat /etc/profile để xem giá trị HISTSIZE=
- Biện pháp tăng cường: Chỉnh sửa giá trị HISTSIZE trong tệp cấu hình profile, đề xuất chỉnh sửa thành 200
- vi /etc/Profile
- HISTSIZE = 200
#Kiểm tra giá trị umask hiện tại của hệ thống
- Cơ sở đánh giá: Giá trị 022 là phù hợp
- Hiểu biết nền tảng:
- Umask thiết lập quyền mặc định khi người dùng tạo tệp, hiệu quả ngược với chmod, umask thiết lập mã bù quyền, trong khi chmod thiết lập mã quyền tệp
- Quản trị viên hệ thống phải thiết lập giá trị umask hợp lý để đảm bảo tệp bạn tạo có quyền mặc định mong muốn, ngăn người dùng khác cùng nhóm ghi vào tệp của bạn
- Phương pháp kiểm tra: Lệnh
umaskđể hiển thị giá trị umask hiện tại - Biện pháp tăng cường: Sử dụng lệnh
umaskđể chỉnh sửa giá trị thành 022
umask 022 có thể chỉnh sửa giá trị umask
2.1.2 Kiểm tra chính sách mật khẩu
#Kiểm tra độ dài tối thiểu mật khẩu
- Cơ sở đánh giá: Độ dài tối thiểu là 8
- Phương pháp kiểm tra: Xem
cat /etc/login.defsđể xem giá trị PASS_MIN_LEN. login.defs là tệp giới hạn tài khoản người dùng, nhưng các chính sách bên trong không áp dụng cho ROOT - Biện pháp tăng cường: Chỉnh sửa tệp cấu hình login.defs, chỉnh độ dài tối thiểu mật khẩu, đề xuất chỉnh sửa thành 10
- vi /etc/login.defs
- PASS_MIN_LEN 10
#Kiểm tra thời gian hết hạn mật khẩu
- Cơ sở đánh giá: Giá trị trên 90 là không phù hợp
- Phương pháp kiểm tra: Lệnh
cat /etc/login.defsđể xem giá trị PASS_MAX_DAYS - Biện pháp tăng cường: Chỉnh sửa tệp cấu hình login.defs, đề xuất chỉnh sửa thành 90
vi /etc/login.defs
PASS_MAX_DAYS 90
#Kiểm tra số lần xác thực mật khẩu thất bại
- Cơ sở đánh giá: Giá trị trên 5 là không phù hợp
- Hiểu biết nền tảng: Theo mặc định trong các tệp pam.d/login và /pamd.d/sshd không chứa số lần xác thực thất bại
- Phương pháp kiểm tra: Lệnh cat /etc/pam.d/sshd , cat /etc/pam.d/login để xem
- auth required pam_tally2.so deny=5 lock_time=300 even_deny_root root_unlock_time=300
#Kiểm tra độ phức tạp mật khẩu
- Cơ sở đánh giá: Không cấu hình là không phù hợp
- Hiểu biết nền tảng: Theo mặc định không có độ phức tạp mật khẩu
- Phương pháp kiểm tra: Lệnh cat /etc/pam.d/system-auth để xem
- password requisite pam_cracklib.so retry= difok= minlen= ucredit=-1 lcredit=-3 dcredit=-3 dictpath=/usr/share/cracklib/pw_dict có được cấu hình hay không
- Biện pháp tăng cường: Thêm trường trên vào tệp cấu hình pam.d/login
retry= Số lần thử
difok= Số ký tự tối thiểu khác nhau giữa mật khẩu mới và cũ
minlen= Độ dài tối thiểu mật khẩu
ucredit=-1 Tối thiểu 1 chữ cái viết hoa
lcredit=-3 Tối thiểu 3 chữ cái viết thường
dcredit=-3 Tối thiểu 3 chữ số
dictpath=/usr/share/cracklib/pw_dict Vị trí từ điển
#Kiểm tra số ngày cảnh báo hết hạn mật khẩu
- Cơ sở đánh giá: Giá trị dưới 3 là không phù hợp
- Phương pháp kiểm tra: Lệnh cat /etc/login.defs để xem giá trị PASS_WARN_AGE
- Biện pháp tăng cường: Chỉnh sửa trường PASS_WARN_AGE trong tệp cấu hình login.defs, giá trị đề xuất là 3
- vim /etc/login.defs
- PASS_WARN_AGE 3
2.1.3 Kiểm tra ghi nhật ký và kiểm toán
#Kiểm tra chức năng ghi nhật ký có được bật hay không
- Cơ sở đánh giá: Tồn tại là phù hợp
- Phương pháp kiểm tra: Lệnh ps -ef để xem có dịch vụ syslogd tồn tại không
- Biện pháp tăng cường: Sử dụng lệnh systemctl để bật chức năng ghi nhật ký systemctl start rsyslog
#Kiểm tra chức năng kiểm toán có được bật hay không
- Cơ sở đánh giá: Tồn tại là phù hợp
- Phương pháp kiểm tra: Lệnh ps -ef để xem có dịch vụ auditd tồn tại không
- Biện pháp tăng cường: Sử dụng lệnh systemctl để bật dịch vụ kiểm toán, systemctl start auditd
#Kiểm tra việc ghi lại đăng nhập
- Cơ sở đánh giá: Tồn tại là phù hợp
- Phương pháp kiểm tra: Tệp nhật ký wtmp ghi lại vĩnh viễn mỗi lần người dùng đăng nhập, đăng xuất và sự kiện khởi động, tắt máy hệ thống, cần sử dụng lệnh last để xem
- Phương pháp kiểm tra: Lệnh last -f /var/log/wtmp để xem có kết quả trả về không
2.1.4 Kiểm tra dịch vụ hệ thống
#Kiểm tra dịch vụ talk có được bật hay không
- Cơ sở đánh giá: Tồn tại là không hợp lý
- Hiểu biết nền tảng: Dịch vụ không quan trọng trong Linux, dùng để giao tiếp giữa người dùng trong cùng mạng, nếu tồn tại sẽ có rủi ro
- Phương pháp kiểm tra: ps -ef | grep talk để xem dịch vụ và dịch vụ ntalk
- Biện pháp tăng cường: Kill nó và cấm tự động khởi động
- kill -9 <PID>
- systemctl disable <tên dịch vụ talk>
Có bật dịch vụ sendmail hay không
Cơ sở đánh giá: Tồn tại là không hợp lý
Phương pháp kiểm tra: Lệnh ps -ef | grep sendmail để xem dịch vụ
Biện pháp tăng cường: Kill dịch vụ sendmail, cấm tự khởi động khi mở máy
Có bật dịch vụ FTP hay không
- Đánh giá: Tồn tại là không hợp lý
- Kiểm tra: ps -ef | grep ftp
- Tăng cường: Kill, cấm tự khởi động
Có bật dịch vụ TELNET hay không
- Đánh giá: Tồn tại là không hợp lý
- Kiểm tra: ps -ef | grep telnet
- Tăng cường: Kill, cấm tự khởi động
2.1.5 Kiểm tra kiểm soát truy cập
#Kiểm tra thời gian timeout đăng nhập hệ thống và SSH
- Cơ sở đánh giá: Tồn tại là phù hợp
- Hiểu biết nền tảng: Theo mặc định trong profile không cấu hình các tham số timeout liên quan
- Phương pháp kiểm tra: Lệnh cat /etc/profile để xem giá trị export TMOUT=
- Biện pháp tăng cường: Thêm vào profile: export TMOUT, đề xuất đặt 100
- vim /etc/profile
- export TMOUT=100
#Kiểm tra giao thức SSH có sử dụng SSH2 hay không
- Cơ sở đánh giá: Tồn tại là hợp lý
- Phương pháp kiểm tra: Lệnh cat /etc/ssh/sshd_config, cat /etc/ssh2/ssh2d_config để xem cấu hình Protocol 2
- Biện pháp tăng cường: Chuyển loại giao thức ssh sang ssh2, nếu không tồn tại cấu hình thì thêm trường vào tệp cấu hình sshd_config
- vim /etc/ssh/sshd_config
- Protocol 2
#Kiểm tra tài khoản root có được phép kết nối SSH từ xa hay không
- Cơ sở đánh giá: Giá trị no là phù hợp
- Phương pháp kiểm tra: Lệnh cat /etc/ssh/sshd_config , cat /etc/ssh2/ssh2d_config để xem giá trị PermitRootLogin
- Biện pháp tăng cường: Chỉnh sửa giá trị PermitRootLogin thành no, nếu không tồn tại thì thêm trường vào tệp cấu hình sshd_config
- vim /etc/ssh/sshd_config
- PermitRootLogin no
#Kiểm tra có cho phép tất cả IP truy cập máy chủ hay không
- Cơ sở đánh giá: Giá trị ALL hoặc không cấu hình là không phù hợp
- Phương pháp kiểm tra: Lệnh cat /etc/hosts.allow để xem giá trị sshd:
- Biện pháp tăng cường: Thêm địa chỉ IP được phép truy cập vào tệp hosts.allow
- ssh cho phép IP đơn: sshd:192.168.222.1
- ssh cho phép đoạn IP: sshd:192.168.222.
#Kiểm tra có từ chối tất cả IP truy cập máy chủ hay không
- Cơ sở đánh giá: Giá trị ALL là phù hợp
- Phương pháp kiểm tra: Lệnh cat /etc/hosts.deny để xem giá trị sshd:
- Biện pháp tăng cường: Thêm sshd:ALL vào hosts.deny
- Về việc từ chối tất cả máy chủ có gây ra vấn đề kinh doanh hay không, câu trả lời là không. Vì deny và allow phía trước có quan hệ thứ tự, nó sẽ cho phép địa chỉ IP trong tệp allow đi qua trước, sau đó từ chối IP khác ngoài tệp allow
Biểu mẫu kiểm tra
| Mục kiểm tra | Hiện trạng hệ thống | Kết quả (phù hợp hoặc không phù hợp) | Đề xuất tăng cường | |
| Hệ thống người dùng | Kiểm tra tài khoản không có mật khẩu | |||
| Kiểm tra tài khoản có UID giống ROOT | ||||
| Kiểm tra có bật thiết lập core dump hay không | ||||
| Kiểm tra tình trạng sử dụng đĩa cứng | ||||
| Kiểm tra cài đặt mục lệnh lịch sử history | ||||
| Kiểm tra giá trị umask hiện tại hệ thống | ||||
| Chính sách mật khẩu | Kiểm tra độ dài tối thiểu mật khẩu | |||
| Kiểm tra thời gian hết hạn mật khẩu | ||||
| Kiểm tra số lần xác thực mật khẩu thất bại | ||||
| Kiểm tra độ phức tạp mật khẩu | ||||
| Kiểm tra số ngày cảnh báo hết hạn mật khẩu | ||||
| Ghi nhật ký kiểm toán | Kiểm tra hệ thống có bật chức năng ghi nhật ký hay không | |||
| Kiểm tra hệ thống có bật chức năng kiểm toán hay không | ||||
| Kiểm tra có ghi lại đăng nhập hay không | ||||
| Dịch vụ hệ thống | Kiểm tra có bật dịch vụ ntalk/talk hay không | |||
| Kiểm tra có bật dịch vụ sendmail hay không | ||||
| Kiểm tra có bật dịch vụ ftp hay không | ||||
| Kiểm tra có bật dịch vụ telnet hay không | ||||
| Kiểm soát truy cập Thời gian timeout đăng nhập | Kiểm tra thời gian timeout đăng nhập hệ thống và SSH | |||
| Kiểm tra giao thức ssh có sử dụng ssh2 hay không | ||||
| Kiểm tra có cho phép tài khoản root kết nối SSH từ xa hay không | ||||
| Kiểm tra có cho phép tất cả IP truy cập máy chủ hay không | ||||
| Kiểm tra có cho phép tất cả IP sử dụng SSH đăng nhập hay không | ||||