Sử dụng các tiện ích có sẵn để liệt kê tất cả các dịch vụ đang thực thi trên hệ thống.. Kiểm tra các cổng dịch vụ port đang mở trên server Sử dụng lệnh sau để liệt kê tất cả các port đan
Trang 1KIỂM TRA THIẾT LẬP VÀ CẤU HÌNH HỆ THỐNG MÁY CHỦ
Linux/Unix
1 Tổng quan về hệ điều hành Linux
Linux là hệ điều hành máy tính được xây dựng và phát triển trên nên tảng mã nguồn
mở Mặc dầu có rất nhiều phiên bản khác nhau, nhưng tất cả đều được xây dựng trên nhân Linux (kernel) được Linus Torvalds phát triển năm 1992
Linux có thể được cài đặt trên rất nhiều hệ thống thiết bị khác nhau (máy tính, thiết
bị di động, thiết bị mạng…) Đặc biệt Linux là lựa chọn hàng đầu cho các hệ thống máy chủ trên thế giới
Phần hạt nhân (lõi hay kernel) của Linux có thể hiểu đơn giản là một tập hợp các chương trình thường trú trong bộ nhớ Nó là phần chính của hệ điều hành, phụ trách hầu hết các chức năng chính của hệ điều hành như quản lý bộ nhớ, thực thi nhiệm vụ và truy nhập phần cứng Hệ nhân này luôn được cộng đồng nghiên cứu cải tiến liên tục nhằm nâng cao hiệu năng cũng như tính tiện lợi cho nhiều đối tượng người dùng khác nhau Bên cạnh đó kho phần mềm phong phú cùng với khả năng hỗ trợ từ các kênh phân phối khác nhau đã làm cho Linux ngày càng gần hơn với mọi đối tượng người dùng
Một số bản phân phối Linux thường gặp: Ubuntu, Debian GNU/Linux, Red Hat Enterprise Linux, CentOS, SUSE, Gentoo, Slackware, Knoppix…
2 Mã hóa dữ liệu truyền đi
Tất cả các dữ liệu gửi qua môi trường mạng đều có nguy cơ bị hacker tóm được (sniff) ngay trên đường truyền Vì vậy ta mã hóa dữ liệu được truyền đi với thuật toán mã hóa và mật khẩu đủ mạnh hay sử dụng các chứng thư số (certificate)
Sử dụng các chương trình scp, ssh, rsync hoặc sftp để truyền file qua mạng Với 2
công cụ fuse và sshfs, bạn cũng có thể mount các file system nằm trên server ở xa
(remote server file system) một cách an toàn thông qua SSH
GnuPG giúp mã hóa dữ liệu và tạo chữ ký số cho file, thêm vào đó là tính năng quản lý khóa mã hóa tiện lợi
Tránh sử dụng FTP, Telnet, và Rlogin / Rsh
Bất kỳ ai nằm trên cùng một mạng với bạn đều có thể sử dụng một trình bắt gói tin (packet sniffer) để tóm lấy các thông tin (như thông số cấu hình mạng, username,
Trang 2password, câu lệnh, file…) chưa được mã hóa được gửi bởi các chương trình như FTP, Telnet, Rlogin/Rsh Giải pháp chung cho vấn đề này là chuyển sang sử dụng các chương trình như OpenSSH , SFTP, hoặc FTPS Đối với Fedora/CentOS/RHEL, gõ câu lệnh sau
để xóa bỏ NIS, rsh và các dịch vụ lỗi thời khác:
# yum erase inetd xinetd ypserv tftp-server telnet-server rsh-serve
3 Quản lý dịch vụ hệ thống
Dịch vụ là các chương trình mà sau khi được khởi động sẽ luôn ở trạng thái sẵn sàng để thực thi, phục vụ các yêu cầu Có nhiều dịch vụ đòi hỏi phải luôn hoạt động cùng
hệ thống Tuy nhiên có một số khác chỉ hoạt động khi thực sự cần thiết (vì lý do an toàn)
Vì vậy lựa chọn, sử dụng các dịch vụ một cách hợp lý cũng góp phần làm an toàn hơn đối với các hệ thống máy chủ
3.1 Tắt tất cả các dịch vụ không cần thiết khi khởi động
Cách tốt nhất để hệ thống an toàn là thực thi ít nhất các dịch vụ trên hệ thống Sử dụng các tiện ích có sẵn để liệt kê tất cả các dịch vụ đang thực thi trên hệ thống Tiếp đó xác định các dịch vụ nào là thực sự cần thiết, các dịch vụ còn lại nên tắt đi hoặc gỡ bỏ
Ví dụ: Liệt kê tất cả các dịch vụ đang thực thi
Trên Ubuntu (Debian): # service status-all Trên CentOS (Redhat): # chkconfig list | grep :on
Để tắt một dịch vụ nào đó trên server , ta gõ lệnh sau: # service serviceName stop Hoặc gõ lệnh: # chkconfig serviceName off
3.2 Kiểm tra các cổng dịch vụ (port) đang mở trên server
Sử dụng lệnh sau để liệt kê tất cả các port đang mở và các chương trình sử dụng các port đó:
netstat -tulpn
Hoặc: nmap -sT -O localhost
nmap -sT -O server.example.com
Sử dụng iptables để đóng các port đang mở hoặc sử dụng 2 lệnh service và chkconfig ở trên để tắt các dịch vụ mạng không cần thiết.
Trang 33.3 Một số dịch vụ cơ bản
Dịch vụ SSH:
SSH là dịch vụ khuyến nghị sử dụng trong các kết nối từ xa trong các hệ thống Linux/Unix, SSH cung cấp một phương thức an toàn trong quá trình trao đổi dữ liệu giữa hai hệ thống Các hướng dẫn chi tiết về dịch vụ này được giới thiệu tại website
http://www.openssh.org
Một số giải pháp an toàn cho dịch vụ SSH: Thay đổi cổng hoạt động mặc định của dịch vụ SSH nếu có thể (mặc định là cổng 22)
Để tránh nguy cơ tấn công Bruteforce trên SSH, bạn nên thay đổi port mặc định
SSH bằng lệnh sau: vi /etc/ssh/sshd_config Sau đó thay đổi port 22 bằng port tuỳ ý VD:
123 và chạy lại dịch vụ bằng lệnh: service sshd restart.
Giới hạn các địa chỉ IP được kết nối và đăng nhập vào dịch vụ SSH
Dịch vụ DNS:
DNS là dịch vụ phân giải tên miền, có nhiệm vụ phân giải tên miền sang địa chỉ ip
và ngược lại Dịch vụ này giúp người sử dụng không cần phải nhớ chính xác địa chỉ ip của các server ở xa, thay vào đó người dùng chỉ cần nhớ tên miền của các server này Tuy nhiên, nếu cấu hình không an toàn không đúng phương pháp có thể dẫn tới các lỗi cho server cũng như cho chính dịch vụ này Một trong những lỗi nguy hiểm nhất cho dịch vụ này là lỗi Zone Transfers
Khi hệ thống bị lỗi này tin tặc có khả năng: Thu thập thông tin về các subdomain bên trong, lợi dụng để tấn công các máy chủ DNS liên quan
Một số giải pháp an toàn cho dịch vụ DNS: Sử dụng các phiên bản mới nhất cho DNS server, thiết lập các tập tin cấu hình một cách hợp lý
Hệ thống X-windows:
Trong khoa học máy tính, Hệ thống X-Window (còn được gọi tắt là X11 hay X) là một hệ thống cửa sổ dùng để hiển thị đồ họa bitmap Nó cung ứng một bộ các công cụ và giao thức cho phép người dùng xây dựng các giao diện đồ họa (GUI) trong hệ điều hành Unix, tựa Unix, và OpenVMS X còn được hỗ trợ hầu hết trong các hệ điều hành hiện đại
Trang 4Số lượng chương trình quản lý cho X có rất nhiều hầu hết đều là miễn phí hay tự
do Trong số đó hai chương trình được nhiều người yêu thích và sử dụng nhất (chiếm trên 90% thị phần của các trình quản lý cho X) đó là GNOME và KDE
Việc sử dụng hệ thống X-windows trên các hệ thống gần như không cần thiết khi nguời quản trị có các kênh đăng nhập từ xa an toàn qua SSH Nếu không thực sự cần thiết thì nên gỡ bỏ hệ thống này để hạn chế thấp nhất các nguy cơ có thể có đối với hệ thống
Ta có thể xóa bỏ X Windows system bằng lệnh:
# yum groupremove "X Window System"
4 Gỡ bỏ các gói phần mềm không cần thiết
Hãy tránh cài đặt các gói phần mềm không cần thiết để tránh nguy cơ lỗ hổng ẩn
chứa trong các phần mềm đó bị khai thác Sử dụng các trình quản lý gói như yum, rpm,
apt-get, dpkg… để xem tất cả các gói đã cài trên hệ thống Sau đó, xóa bỏ các gói không
cần thiết
Đối với Redhat-based Distro:
# yum list installed
# yum list packageName
# yum remove packageName
Hoặc với Debian-based Distro:
# dpkg list
# dpkg info packageName
# apt-get remove packageName
5 Cập nhật đầy đủ, thường xuyên các bản vá lỗi cho Linux kernel và các phần mềm khác
Cập nhật các bản vá bảo mật là một công việc quan trọng trong kế hoạch bảo trì Linux sever Linux cung cấp tất cả các công cụ cần thiết để đảm bảo hệ thống của bạn luôn được cập nhật, đồng thời giúp nâng cấp dễ dàng giữa các phiên bản Quản trị hệ thống nên thường xuyên kiểm tra và áp dụng tất cả các bản cập nhật ngay khi có thể
Lệnh thực hiện:
Trang 5# yum update
# apt-get update && apt-get upgrade
6 Quản lý tài khoản người dùng và chính sách mật khẩu mạnh
6.1 Bảo vệ đăng nhập mức hệ thống
Thông thường, quá tình đăng nhập hệ thống Linux được điều khiển bởi chương trình đăng nhập Chương trình này sẽ đọc thông tin từ hai tập tin /etc/passwd và
/etc/shadow Nếu thông tin đăng nhập phù hợp thì người dùng sẽ được cung cấp shell để truy cập vào hệ thống Cơ chế đăng nhập bằng tài khoản và mật khẩu thường đối mặt với một số nguy cơ như: tấn công đoán tài khoản, mật khẩu, nghe lén (sniffing), tấn công đứng giữa (man-in-the-middle)
Vì vậy cần phải đảm bảo một số yêu cầu sau:
6.1.1 Kiểm tra thời gian tồn tại của mật khẩu (password aging)
Sử dụng lệnh chage cho phép thay đổi số ngày giữa các lần thay đổi mật khẩu và ngày thay đổi mật khẩu lần cuối Dựa vào 2 thông tin ngày, hệ thống sẽ xác định xem khi nào người dùng cần thay đổi mật khẩu của họ
Để vô hiệu hóa password aging, tức là mật khẩu sẽ không bao giờ hết hạn, ta gõ lệnh sau:
# chage -M 99999 userName
Để kiểm tra thông tin về thời gian mãn hạn của mật khẩu của một tài khoản, gõ:
# chage -l userName
Cuối cùng, ta cũng có thể chỉnh sửa file /etc/shadow file theo sự giải thích về các trường dưới đây:
{userName}:{password}:{lastpasswdchanged}:{Minimum_days}:{Maximum_days}: {Warn}:{Inactive}:{Expire}:
Minimum_days: Số ngày tối thiểu để thay đổi mật khẩu Tức là, trước khi người
dùng được phép thay đổi mật khẩu của họ thì mật khẩu phải tồn tại ít nhất trong
Mininum_days ngày.
Trang 6Maximum_days: Số ngày tối đa mà mật khẩu còn hiệu lực Tức là, sau khi mật
khẩu đã tồn tại trong Maximum_days ngày, người dùng bắt buộc phải thay đổi mật khẩu
của họ
Warn : Số ngày trước khi mật khẩu hết hạn mà người dùng sẽ nhận được cảnh báo
rằng mật khẩu của họ cần phải được thay đổi
Expire : Số ngày kể từ ngày 01/01/1970 tài khoản sẽ bị khóa.
6.1.2 Kiểm tra xem các tài khoản có sử dụng lại các mật khẩu trước đó không
PAM là một cơ chế linh hoạt cho việc chứng thực người dùng Ví dụ, bạn có thể ngăn cấm người dùng sử dụng lại các mật khẩu đã từng sử dụng gần đây Điều này được
hiện thực bằng cách sử dụng tùy chọn ghi nhớ (remember option) cho pam_unix – một
module của PAM
Module này cung cấp cho các module PAM khác các tính năng như authentication (chứng thực), account management (quản lý tài khoản)… Ngoài ra, pam_unix còn lưu giữ một danh sách các mật khẩu cũ của mọi người dùng Điều này thực sự hữu ích nếu bạn muốn cấm cản ai đó muốn sử dụng lại các mật khẩu cũ này Danh sách các mật khẩu
cũ nằm trong file /etc/security/opasswd Lưu ý, chỉ khi nào bạn kích hoạt tính năng ghi
nhớ các mật khẩu cũ như hướng dẫn dưới đây thì file opasswd này mới chứa các mật khẩu cũ của tất cả người dùng
Cách giới hạn việc sử dụng lại các mật khẩu cũ :
Trong Debian/Ubuntu, mở file /etc/pam.d/common-password sử dụng lệnh:
# vi /etc/pam.d/common-password
Trong CentOS/RHEL/Fedora, chỉnh sửa file /etc/pam.d/system-auth lệnh:
# vi /etc/pam.d/system-auth
Bây giờ, bạn tìm tới dòng bắt đầu bằng password sufficient và thêm vào cuối dòng này tùy chọn remember=10 Thay số 10 bằng số lượng mật khẩu gần đây nhất mà
sẽ không được phép sử dụng lại
Trang 7Lưu và đóng file này.
Kể từ lúc này, Linux sẽ ghi nhận lại 10 mật khẩu gần đây nhất Nếu người dùng thử sử dụng lại bất kỳ mật khẩu nào trong số 10 mật khẩu cũ này thì sẽ nhận được thông báo lỗi sau:
6.1.3 Khóa tài khoản sau một số lần đăng nhập thất bại
Người quản trị cần phải cấu hình để khóa một tài khoản sau số lần đăng nhập thất
bại để bảo vệ khỏi bị tấn công Brute-force Lệnh # vi /etc/pam.d/system-auth
Sau đó sửa dòng: account required pam_tally.so deny=3 no_magic_root
lock_time=180
deny=3: giới hạn số lần truy cập thất bại
lock_time=180: thời gian khóa tài khoản sau khi đăng nhập thất bại.
Để mở khóa cho tài khoản sau khi tài khoản này bị khóa sau 1 số lần đăng nhập
thất bại ta gõ lệnh: # faillog -r -u userName
Ta cũng có thể sử dụng lệnh passwd để khóa hoặc mở khóa tài khoản:
# passwd -l userName // khóa tài khoản
# passwd -u userName // mở khóa tài khoản
Để kiểm tra xem danh sách những tài khoản đang bị khóa ta sử dụng lệnh:
# faillog
Trang 86.1.4 Xác định các tài khoản sử dụng mật khẩu rỗng
Để kiểm tra xem hệ thống có tài khoản sử dụng mật khẩu rỗng không sử dụng
lệnh: # awk -F: '($2 == "") {print}' /etc/shadow
Để khóa một tài khoản sử dụng mật khẩu rỗng ta sử dụng lệnh: # passwd -l
accountName
6.1.5 Kiểm tra hệ thống đảm bảo rằng không có người dùng thông thường nào có UID = 0
Chỉ có tài khoản root mới có UID =0 với quyền hạn cao nhất để truy cập vào hệ thống Gõ lệnh sau để hiển thị tất cả các tài khoản với UID = 0
# awk -F: '($3 == "0") {print}' /etc/passwd
Bạn sẽ thấy ít nhất 1 dòng tương ứng với tài khoản root như sau:
root:x:0:0:root:/root:/bin/bash
Trường thứ 3 cho biết giá trị UID Nếu có thêm các tài khoản khác có UID =0, hãy đổi lại UID cho những tài khoản này sử dụng lệnh sau:
# usermod –u new_UID userName
6.2 Bảo vệ các truy cập vật lý
Thiết lập mật khẩu BIOS: nhằm ngăn chặn, không cho phép sửa thông tin cấu hình trong BIOS
Thiết lập mật khẩu cho trình khởi động (boot loader): ngăn chặn việc thay đổi thông tin trong trình khởi động
Tắt tất cả các cổng không sử dụng (iLo - Integrity Integrated Lights-Out, USB, NIC)
Cấu hình lại BIOS và vô hiệu hóa việc khởi động từ các thiết bị ngoại vi như DVD/ CD/USB
Những máy chủ quan trọng cần được khóa cẩn thận trong các IDC (Internet Data Center) và tất cả mọi người phải trải qua các bước kiểm tra an ninh trước khi truy cập vào server
Trang 97 Sử dụng chế độ bảo mật mặc định của Kernel
Trong Kernel của một số hệ thống Linux mới hiện giờ có cấu hình sẵn một vài Rules chuẩn với mục đích cung cấp những thông số căn bản nhất để cấu hình tăng thêm
tính bảo mật cho hệ thống Các File và thông số đó thường được chứa ở /proc/sys Về căn bản giao thức IPV4, chứa bên trong /proc/sys/net/ipv4 cung cấp các tính năng căn
bản:
icmp_echo_ignore_all: Vô hiệu hoá tất cả các yêu phản hồi ICMP ECHO Sử dụng
tuỳ chọn này nếu như bạn không muốn hệ thống của mình trả lời các yêu cầu Ping
icmp_echo_ignore_broadcasts: Vô hiệu hoá tất cả các yêu cầu phản hồi ICMP
ECHO trên Broadcast và Multicast Tùy chọn này được sử dụng để ngăn chặn nguy cơ hệ thống của bạn có thể bị lợi dụng khai thác cho những cuộc tấn công DDOS
ip_forward: Cho phép hay không cho phép sự chuyển tiếp IP giữa các giao diện
mạng trong hệ thống của bạn Tuỳ chọn này được sử dụng khi bạn muốn Server của mình hoạt động như Router
ip_masq_debug: Kích hoạt hay vô hiệu hoá quá trình gỡ lỗi cho IP Masquerading tcp_syncookies: Tuỳ chọn này được sử dụng để bảo vệ hệ thống của bạn chống các
cuộc tấn công sử dụng kỹ thuật ngập SYN
rp_filter: Chứng thực và xác định địa chỉ IP nguồn hợp lệ Tuỳ chọn này được sử
dụng để bảo vệ hệ thống của bạn chống lại các cuộc tấn công giả mạo địa chỉ IP "IP Spoof"
secure_redirects: Chỉ chấp nhận chuyển tiếp những thông điệp ICMP cho những
Gateway tin tưởng trong danh sách
log_martians: Ghi lại những Packet không được xử lý bởi Kernel.
Nếu bạn muốn vô hiệu hoá tính năng "ip_foward" đơn giản bạn chỉ việc sử dụng
lệnh: root@localhost# echo "0" > /proc/sys/net/ipv4/ip_forward
Tương tự để kích hoạt tính năng nào bạn chỉ việc thay giá trị "0" bằng "1"
8 Tạm thời tắt Ipv6
Internet Protocol version 6 (IPv6) là một giao thức mới hoạt động ở tầng Internet
của bộ giao thức mạng TCP/IP IPv6 đang dần thay thế cho IPv4 do những lợi ích mà nó
Trang 10mang lại Hiện tại, vẫn chưa có công cụ tốt nào có thể kiểm tra các vấn đề bảo mật trên hệ thống hỗ trợ IPv6 Hầu hết các Distro Linux đã bắt đầu hỗ trợ giao thức IPv6 Các
cracker có thể gửi các lưu lượng độc hại thông qua IPv6 vì hầu hết các quản trị viên chưa giám sát các lưu lượng IPv6 này Vì thế, trừ khi hệ thống mạng yêu cầu sử dụng IPv6, tốt nhất bạn nên tạm thời vô hiệu hóa IPv6 hoặc cấu hình trên Firewall để cản lọc các gói tin IPv6
Mở file aliases: # vi /etc/modprobe.d/aliases.conf
Tìm đến dòng : alias net-pf-10 ipv6
Thay thế bằng dòng : alias net-pf-10 off
alias ipv6 off
9 Cơ chế ghi nhật ký
Quá trình ghi lại các hoạt động của hệ thống cần thiết trong nhiều trường hợp khác nhau: kiểm tra, đánh giá hệ thống cũng như ứng dụng, lưu giữ các bằng chứng về các hoạt động bất hợp pháp xảy ra đối với hệ thống…
Hoạt động ghi lại các thông báo của hệ thống một cách tập trung, nhất quán sẽ gia tăng độ bảo mật cũng như thuận lợi hơn trong việc kiểm soát lỗi Hạn chế tối đa hành động xóa tập tin nhật ký của tin tặc
Linux sử dụng hệ thống syslogd để hiển thị và lưu thông tin miêu tả về các sự kiện
Hệ thống này cho phép kiểm soát chặt chẽ logging của các messages từ kernel, từ các tiến trình đang chạy trên hệ thống, hoặc các hệ thống từ xa Thông báo có thể hiển thị trên console, trong tập tin log và trên màn hình text của người dùng trong hệ thống Nội dung
cấu hình chứa trong tập tin /etc/syslog.conf
auth,user.* /var/log/messages
lpr,news,uucp,local0,local1,local2,local3,local4,local5,local6.*
/var/log/unused.log