ATTT Linux


HƯỚNG DẪN THỰC HIỆN

1.   Cài đặt hệ điều hành và cập nhật bản vá

-         Nguy cơ: Việc cài 1 bản phân phối Linux với kernel còn chứa các lỗ hổng an toàn an ninh sẽ gây ra nguy cơ giúp Hacker có thể tấn công trực tiếp hệ điều hành và chiếm quyền kiểm soát hệ thống.
-         Yêu cầu khắc phục: Kiểm tra phiên bản kernel của hệ thống đang chạy bằng lệnh ”uname –r”. Với mỗi dòng major version, phiên bản của kernel phải lớn hơn các phiên bản tương ứng sau: 2.6.18.8, 2.6.32.27, 2.6.34.7, 3.0.44, 3.2.30.
-         Version của kernel có format như sau:
Linux-major.minor.patchlevel
           Ví dụ: linux-3.10.5
Trong đó: - Major: Version chính của kernel.(ví dụ: Linux-3).
                 - Minor: Những thay đổi quan trọng của version. (Ví dụ: 10).
                    + Số chẵn: version này đã được kiểm tra và công bố sử dụng. 2.6, 3.10...
                    + Số lẻ: Version này dùng cho mục đích thử nghiệm. Các kernel develop  thường sử dụng.
                 - Patchlevel: Dùng để chỉ phiên bản vá lỗi.(Ví dụ: 5).
-         Với các hệ thống kết nối internet thực hiện nâng cấp kernel theo cách sau:
+ Redhat/Fedora/CentOS:
                        #yum upgrade kernel
+ Debian/Ubuntu:
                       # apt-get dist-upgrade
-         Nâng cấp kernel từ gói .rpm có sẵn do distro đó cung cấp. Ưu điểm là kernel có tính ổn định và an toàn cao khi nâng cấp. Các bước thực hiện như sau:
o   Bước 1: Cài đặt 1 máy ảo với hệ điều hành tương ứng với hệ điều hành máy chủ cần nâng cấp kernel. Chú ý máy ảo này phải có Internet.
o   Bước 2: Download toàn bộ các gói cần cài đặt nâng cấp kernel mà distro cung cấp về máy ảo.
§  Với dòng Redhat dùng lệnh sau:
#mkdir /opt/upgrade
#yum install yum-downloadonly –y
#yum install kernel -y --downloadonly --downloaddir=/opt/upgrade
-       Tải toàn bộ gói .rpm trong thư mục /opt/upgrade của máy tính lên máy chủ và thực hiện cài như cài gói .rpm như thông thường.
Lưu ý: Dùng lệnh rpm –ivh thay cho sử dụng câu lệnh rpm –Uvh và khởi động lại máy chủ khi cài đặt xong để hệ điều hành nhận kernel mới.
§  Với dòng Debian/Ubuntu dùng lệnh sau:
#mkdir /opt/upgrade
#apt-get clean
#apt-get –d dist-upgrade
# cp /var/cache/apt/archives/*.deb dir/
-       Tải toàn bộ gói .deb trong thư mục /opt/upgrade của máy tính lên máy chủ và thực hiện cài như cài gói .deb như thông thường. Lưu ý: Dùng lệnh dbpg –i [packagename] và khởi động lại máy chủ khi cài đặt xong để hệ điều hành nhận kernel mới.

2.   Thiết lập chính sách tài khoản

2.1.      Xóa tất cả các tài khoản không sử dụng trên hệ thống

-         Nguy cơ: Kẻ tấn công có thể tấn công vào các tài khoản không sử dụng để tấn công vào hệ thống.
-         Yêu cầu khắc phục: Rà soát hệ thống, liệt kê những tài khoản đang hoạt động trên hệ thống rồi tìm và xóa những tài khoản không sử dụng ra khỏi hệ thống.
Bước 1: Để tìm những tài khoản đang hoạt động trên hệ thống, ta sử dụng lệnh sau:
 # cat /etc/passwd  | grep  /*sh$ | awk -F: '{print $1}'
Bước 2: Kiểm tra xem các tài khoản này tài khoản nào không sử dụng. Thực hiện xóa các tài khoản đó bằng lệnh sau:
#userdel -r  username
Ví dụ: Trong danh sách có tài khoản game không sử dụng
#userdel –r game

2.2. Yêu cầu tất cả tài khoản đăng nhập phải có mật khẩu

-         Nguy cơ: Kẻ tấn công dễ dàng đăng nhập vào hệ thống mà không phải nhập mật khẩu.
-         Yêu cầu khắc phục: Kiểm tra đảm bảo tất cả các tài khoản người dùng đều có mật khẩu. Nếu tài khoản nào có mật khẩu trống thì phải yêu cầu đặt mật khẩu cho tài khoản đó.
Để tìm tài khoản có mật khẩu trống, ta thực thi lệnh sau :
# awk -F: '($2 == "") {print $1}' /etc/shadow

2.3. Yêu cầu chỉ duy nhất tài khoản root có UID = 0

-         Nguy cơ: Trong Linux, mặc định chỉ có duy nhất tài khoản root có UID=0, nếu tồn tài một tài khoản khác có UID = 0 thì hệ thống có thể đã bị tấn công.
-         Yêu cầu khắc phục: Kiểm tra đảm bảo chỉ tồn tại duy nhất tài khoản root có UID = 0 trên hệ thống.
Để tìm tất cả các tài khoản có UID = 0, ta thực thi lệnh sau:
# awk  -F: '( $3 == "0") {print}' /etc/passwd

2.4. Mật khẩu phải có độ dài tối thiểu 8 ký tự, bao gồm cả chữ, số, ký tự thường, ký tự hoa và ký tự đặc biệt

-         Nguy cơ: Nếu người dùng sử dụng mật khẩu đơn giản, kẻ tấn công có thể dễ dàng đoán được.
-         Yêu cầu khắc phục: Áp dụng chính sách mật khẩu mạnh trên tất cả các tài khoản người dùng trên hệ thống. Mật khẩu có độ dài tối thiểu 8 ký tự, bao gồm chữ thường, chữ hoa, số và ký tự đặc biệt.
Trên Linux, ta có thể sử dụng module pam_cracklib, hoặc module pam_passwdqc của PAM để thiết lập chính sách mật khẩu mạnh.
Trên Redhat/Fedora/CentOS, quản trị viên mở file cấu hình cấu hình /etc/pam.d/system-auth
Trên Debian/Ubuntu/OpenSuse quản trị viên mở file cấu hình /etc/pam.d/common-password
Trong các file cấu hình của PAM, thêm hoặc cập nhật cấu hình sau:

·         Nếu sử dụng module pam_cracklib:
 password    required    pam_cracklib.so try_first_pass retry=3 minlen=8 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

·         Nếu sử dụng module pam_passwdqc:
password requisite pam_passwdqc.so min=disabled,disabled,disable,disable,8

Để sử dụng module pam_cracklib và pam_passwdqc, tùy hệ điều hành có thể phải cài đặt thêm gói
Đối với Debian/Ubuntu ta sử dụng lệnh sau:
           #  apt-get install libpam-cracklib libpam-passwdqc

Đối với OpenSuse:
          #  yum install pam-passwdqc

Đối với Fedora/Redhat:
         # yum install pam-passwdqc

 

2.5. Mật khẩu phải được lưu dưới dạng mã hóa sử dụng thuật toán băm SHA-512

-         Nguy cơ: Mật khẩu tài khoản thường được lưu trữ dưới dạng mã hóa và lưu trữ trong file /etc/shadow. Đối với các hệ điều hành phiên bản cũ, mật khẩu thường được mã hóa với thuật toán md5, sha-128, sha-256. Tuy nhiên các thuật toán mã hóa đó không còn mạnh trong thời điểm hiện nay. Do vậy hacker có thể phá mã và tìm lại được mật khẩu gốc của người dùng.
-         Phòng chống: Kiểm tra và nâng cấp phương thức mã hóa mật khẩu, sử dụng thuật toán băm SHA-512.
Trong các phiên bản mới bản phân phối Linux, password mặc định đã được lưu trữ dưới dạng mã hóa sử dụng thuật toán băm SHA-512.
Với các phiên bản cũ và các phiên bản phân phối khác nhau, việc nâng cấp thuật toán băm lưu trữ password có thể khác nhau. Ví dụ trong hệ điều hành Linux cũ, ta cấu hình như sau:
Bước 1: Mở file /etc/pam.d/system-auth (Với Redhat/Fedora/CentOS) hoặc/etc/pam.d/common-password (Với Debian/Ubuntu/OpenSuse), trong phần password, ta thay thế thuật toán băm khác bằng thuật toán sha-512. Ví dụ như sau:
password           sufficient      pam_unix  sha512 shadow [existing options]
Bước 2: Mở file /etc/login.defs, thêm hoặc sửa lại 2 lựa chọn sau:
       MD5_CRYPT_ENAB no
      ENCRYPT_METHOD  SHA512
Bước 3: Mở file /etc/libuser.conf, thêm hoặc sửa lựa chọn sau:
      crypt_style = sha512                            
Bước 4: Yêu cầu người sử dụng thay đổi lại mật khẩu để có hiệu lực.

2.6. Đối với tài khoản người dùng, thiết lập thời gian tối đa bắt buộc phải đổi mật khẩu là 90 ngày

-         Nguy cơ:  Một mật khẩu được sử dụng trong thời gian quá lâu gây ra những rủi ro có thể bị hacker tìm ra mật khẩu.
-         Yêu cầu khắc phục: Đối với mật khẩu người dùng, thiết lập thời gian tối đa bắt buộc phải đổi mật khẩu là 90 ngày.
Quản trị viên có thể thiết lập thời gian hết hạn mật khẩu bằng cách như sau:
Mở file /etc/login.defs,  thay đổi tuy chọn PASS_MAX_DAYS, ví dụ:
        PASS_MAX_DAYS  90
Với tài khoản đã tồn tại, có thể thay đổi thời gian hết hạn mật khẩu bằng lệnh sau:
# chage  -M 90   username
Với các mật khẩu dịch vụ, trong trường hợp chưa triển khai được chính sách thay đổi mật khẩu tự động, quản trị viên có thể dùng lệnh trên để thiết lập bằng tay thời hạn mật khẩu của tài khoản đó.

2.7. Thiết lập giới hạn người dùng sử dụng lại mật khẩu cũ, mật khẩu mới không được trùng với 05 mật khẩu gần nhất

-         Nguy cơ:  Dùng lại mật khẩu nhiều lần gây ra rủi ro bị mất mật khẩu.
-         Yêu cầu khắc phục: Đối với mật khẩu người dùng, thiết lập bắt buộc mật khẩu mới phải không trùng với 5 mật khẩu gần nhất.
Quản trị viên có thể sử dụng module pam_unix.so của PAM để thiết lập số lần mật khẩu không được trùng lặp. Ví dụ trong Redhat, ta cấu hình như sau:
Mở file /etc/pam.d/system-auth (Với Redhat/Fedora/CentOS) hoặc/etc/pam.d/common-password (Với Debian/Ubuntu/OpenSuse), cấu hình thuộc tính remember của tùy chọn password như sau:
password  sufficient pam_unix.so  [các option trước đó] remember=5

3.   Thiết lập cấu hình log cho hệ điều hành

3.1. Yêu cầu thiết lập log cho hệ điều hành

-       Nguy cơ: Ghi log đầy đủ, chính xác cung cấp thông tin cho việc tra cứu, truy vết các vi phạm, lỗi xảy trong hệ thống. Do vậy nếu hệ thống không ghi log, ghi log không đầy đủ, dữ liệu log không được đảm bảo tính toàn vẹn (bị sửa, xóa) làm mất tính chính xác của thông tin log.
-       Yêu cầu khắc phục:
o  Yêu cầu thiết lập cấu hình ghi log tối thiểu các loại sau: message log, dmesg log, secure log.
o  Thiết lập cấu hình thời gian lưu log tối thiểu 03 tháng.
§  Bước 1: Cấu hình nội dung file /etc/rsyslog.conf với nội dung sau:
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 *
uucp,news.crit                                      /var/log/spooler
local7.*                                                /var/log/boot.log
§  Bước 2: Cấu hình rotation log với nội dung sau:
Weekly
rotate 12
create
dateext
include /etc/logrotate.d
/var/log/wtmp {
    create 0664 root utmp
}
/var/log/btmp {
    create 0600 root utmp
}
§  Bước 3: Cấu hình log cho các file messagelog, syslog, kernel.log... như sau:
-       Trên Ubuntu/Debian
Chạy lệnh sau:
#vi /etc/logrotate.d/rsyslog
Và sửa nội dung file thành:
/var/log/syslog
{
        compress
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
        compress
        delaycompress
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}
-       Trên CentOS/Redhat
- Chạy lệnh:
#vi /etc/logrotate.d/syslog
Sửa nội dung file thành:
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    compress
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
§  Bước 4: Restart lại ứng dịch vụ logs
#/etc/init.d/rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
-         Kiểm tra đảm bảo tất cả các sự kiện quan trọng đều được ghi lại log. Quản trị viên có thể phân nhóm các sự kiện và ghi ra thành các file riêng biệt để thuận tiện trong việc theo dõi, giám sát.
-         Trong các bản phân phối linux, có 2 dịch vụ quản lý log được sử dụng, đó là syslog và rsyslog. Các phiên bản hệ điều hành cũ hầu hết sử dụng syslog. Tuy nhiên syslog có nhiều hạn chế trong việc lưu trữ từ xa an toàn, do vậy trong các phiên bản mới của hệ điều hành, rsyslog được khuyến nghị sử dụng.
-         Cấu hình các sự kiện ghi log được lưu trong file /etc/syslog.conf đối với syslog và /etc/rsyslog.conf đối với rsyslog.
-         Syslog và rsyslog hỗ trợ nhiều loại log hệ thống với nhiều mức log, cụ thể như sau:
·      kern – kernel
·      user – Log các ứng dụng của người dùng
·      mail/news/UUCP/cron – Email/NNTP/UUCP/cron
·      daemon – system daemons
·      auth – Log liên qua với xác thực người dùng.
·      lpr – Log liên quan tới dịch vụ in.
·      mark – inserts timestamp into log data at regular intervals
·      local0-local7 – 8 Log cho các tùy chọn kiểm tra đối soát (audit)
·      syslog – Các log khác của dịch vụ syslog
·      authpriv – Các log xác thực không thuộc hệ thống
Log hệ điều hành có các mức: emerg, alert, crit, warning, notice, info, debug
Ví dụ: Có thể cấu hình log hệ thống trong file /etc/rsyslog.conf như sau:
*.info;mail.none;authpriv.none;cron.none            /var/log/messages
kern.*                                                                     /var/kernel
authpriv.*                                                              /var/log/secure
mail.*                                                                    /var/log/maillog
cron.*                                                                   /var/log/cron
uucp,news.crit                                                      /var/log/spooler
local7.*                                                                /var/log/boot.log
Để quá trình log ra file được tự động chia thành nhiều file nhỏ, quản trị viên phải cấu hình chính sách chia nhỏ trong file cấu hình /etc/logrotate.d/syslog hoặc /etc/logrotate.d/rsyslog (tương ứng với dịch vụ syslog hoặc rsyslog được sử dụng). Ví dụ ta cấu hình file log /var/log/message như sau:
/var/log/messages {
        rotate 3
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                invoke-rc.d rsyslog reload >/dev/null 2>&1 || true   #Giả sử hệ thống sử dụng rsyslog
        endscript
}

3.2. Các file log chỉ được phép đọc ghi bởi quyền root.

-         Nguy cơ:  Khi thực hiện các cuộc tấn công, hacker thường tìm cách thay đổi, xóa log trong hệ thống nhằm che giấu dấu vết. Do vậy, nếu cấu hình phân quyền việc đọc ghi các file log không tốt, thì thông tin trong dữ liệu log không đảm bảo tính tin cậy.
-         Yêu cầu khắc phục:  Kiểm tra đảm bảo các file log của hệ thống chỉ được đọc ghi bởi quyền root.
Bước 1:  Giả sử toàn bộ file log của hệ thống được lưu trong thư mục /var/log. Ta thiết lập như sau:
     # chown  root:root /var/log/[file log của hệ thống]
Bước 2: # chmod  600 /var/log/[file log của hệ thống]

4.   Cấu hình tường lửa mềm

4.1. Yêu cầu sử dụng tường lửa mềm trên hệ thống

-         Nguy cơ: Ngăn chặn các tấn công từ máy chủ lân cận trong cùng một hệ thống hoặc các tấn công từ ngoài Internet vào hệ thống.
-         Yêu cầu khắc phục: Kiểm tra đảm bảo tường lửa mềm được bật.
Để kiểm tra firewall có được bật hay không, ta sử dụng lệnh sau:
·         Trên hệ điều hành Redhat/Fedora/CentOS:
           # /sbin/chkconfig iptables on
·         Trên Debian/Ubuntu:
          # service ufw status
·         Trên OpenSuse:
          #  systemctl status SuSEfirewall2.service
Để firewall được tự động bật trong quá trình khởi động của server, ta cấu hình như sau:
·         Trên Redhat/Fedora/CentOS:
         #/sbin/chkconfig --level 345 iptables on
·         Trên Debian/Ubuntu:
         #ufw enable
·         Trên OpenSuse:
         #systemctl enable SuSEfirewall2.service

4.2. Cấu hình tường lửa mềm chỉ mở vừa đủ các kết nối vào/ra trên hệ thống

-         Nguy cơ: Trên một server, có rất nhiều dịch vụ được chạy trên đó. Nếu quản trị viên không kiểm soát các truy cập vào ra, hệ thống có thể bị kẻ tấn công khai thác và tấn công các dịch vụ đó.
-         Yêu cầu khắc phục: Sử dụng tường lửa để chặn hết tất cả các kết nối mạng theo cả hai chiều vào ra, chỉ mở các kết nối mạng cần thiết cho hệ thống.
Chú ý: Template các kết nối khác để có thể truy cập các dịch vụ theo cả hai chiều vào ra xem phụ lục 02 đi kèm.

4.3. Ghi log toàn bộ những bản tin vào ra không hợp lệ

-         Nguy cơ: Việc ghi lại log những bản tin tấn công sẽ giúp quản trị viên phát hiện sự tấn công và đưa ra các biện pháp ngăn chặn kịp thời.
-         Yêu cầu khắc phục: Trong các luật của tường lửa, đối với những luật quan trọng, cần ghi lại log với đầy đủ thông tin giúp quản trị viên có thể nhận biết, truy vết nguồn gốc và phương thức tấn công.
Chú ý:
o   Cách ghi log các bản tin không hợp lệ được hướng dẫn trong phụ lục 02 đính kèm.
o   Các log của iptables sẽ được lưu theo loại log kernel.warning được cấu hình trong dịch vụ syslog của hệ thống.

5.   Hệ thống chỉ chạy các phần mềm tối thiểu đúng với chức năng được thiết kế

-         Nguy cơ: Kẻ tấn công có nhiều lựa chọn tấn công thông qua khai thác các lỗ hổng của các dịch vụ đang chạy trên hệ thống. Mức độ nguy hiểm càng tăng nếu các dịch vụ không sử dụng mà vẫn được bật.
-         Yêu cầu khắc phục:
o   Cài đặt tối thiểu các phần mềm, dịch vụ theo đúng chức năng được thiết kế của server.
o   Yêu cầu khi cài đặt mới hệ điều hành phải cài ở chế độ minimum.
o   Gỡ bỏ hoặc vô hiệu hóa các gói dịch vụ không cần thiết, các gói dịch vụ lỗi thời có nguy cơ bị mất an toàn thông tin.
Để tìm các gói phần mềm đã cài đặt trên hệ thống, ta thực thi lênh sau:
Trên Debian/Ubuntu:          dpkg --get-selections
      Trên  Redhat/Fedora/CentOS/OpenSuse:        rpm --qa
Các dịch vụ không an toàn:  telnet, rlogin, rsh, rcp, nis, tftp

6.   Quản trị từ xa qua kênh truyền đã được mã hóa

-          Nguy cơ: Nếu quản trị sử dụng công cụ quản trị từ xa không an toàn và không được mã hóa đường truyền. Kẻ tấn công có thể chặn bắt gói tin trên đường truyền giữa quản trị và máy chủ để lấy được username và password đăng nhập.
-          Yêu cầu khắc phục: Để đảm bảo an toàn yêu cầu chỉ sử dụng công cụ quản trị từ xa có mã hóa đường truyền. Cụ thể nếu sử dụng SSH thì thực hiện các thiết lập sau:

§  Chỉ cho phép sử dụng giao thức SSH version 2

Mở file cấu hình /etc/ssh/sshd_config, sửa lại tùy chọn:
Protocol 2

§  Cấu hình chỉ những tài khoản được cho phép sử dụng SSH

Mở file cấu hình /etc/ssh/sshd_config,  thêm tùy chọn sau: 
AllowUsers user1 user2

§  Thiết lập thời gian tự động ngắt phiên nếu phiên không có hoạt động trong 3 phút

Mở file cấu hình /etc/ssh/sshd_config,  thêm cấu hình sau: 
                   ClientAliveInterval 180

§  Không cho phép tài khoản root đăng nhập trực tiếp từ xa

Mở file cấu hình /etc/ssh/sshd_config,  sửa hoặc thêm tùy chọn sau: 
PermitRootLogin no

7.   Phân quyền tệp tin và thư mục

7.1. Yêu cầu biến môi trường PATH không chứa các đường dẫn tương đối, không chứa đường dẫn trống, không bao gồm các thư mục không rõ nguồn gốc.

-         Nguy cơ: Nếu biến môi trường PATH của tài khoản người dùng có chứa đường dẫn tương đối, đường dẫn trống, hoặc đường dẫn của thư mục không rõ, khi đó các lệnh thực thi của người dùng có nguy cơ bị giả mạo, thay vì thực thi các file nằm trong đường dẫn chuẩn của hệ điều hành, hệ điều hành sẽ thực thi file có cùng tên nằm trong 1 thư mục giả mạo xuất hiện trong biến môi trường PATH.
-         Yêu cầu khắc phục: Kiểm tra biến môi trường PATH không chứa các đường dẫn tương đối, không chứa đường dẫn trống, không bao gồm các thư mục không rõ.
Để kiểm tra đường dẫn PATH, ta dùng lệnh sau: 
# echo $PATH
Ví dụ:
PATH có chứa đường dẫn trống: /usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin::
PATH có chứa đường tương đối: /usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:./src/bin
PATH có chứa đường nguy hiểm: /usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/tmp

7.2. Thiết lập giá trị UMASK = 022 cho các tài khoản người dùng, UMASK = 077 cho tài khoản root.

-         Nguy cơ: Giá trị UMASK của hệ thống cho phép thiết lập quyền mặc định đối với file, thư mục mà tài khoản đó tạo ra. Nếu quyền đó không chặt chẽ, các file, thư mục đó có thể bị sử dụng trái phép, gây ra nguy cơ mất an toàn an ninh.
-         Yêu cầu khắc phục: Thiết lập giá trị UMASK = 022 với tài khoản người dùng, 077 với tài khoản root.
Bước 1: Mở các file cấu hình /etc/profile, /etc/bashrc, /etc/csh.cshrc, thêm hoặc cập nhật tùy chọn : 
       UMASK 022
Bước 2: Mở các file /etc/login.defs, thêm hoặc cập nhật tùy chọn :
     UMASK 077
Bước 3: Kiểm tra cac file /etc/csh.login và các file /etc/profile.d/*, đảm bảo giá trị umask có giá trị bằng 022
Bước 4: Mở các file /root/.bashrc, /root/.bash_profile, /root/.cshrcvà /root/.tcshrc, cập nhật hoặc thêm tùy chọn:
UMASK 077
Chú ý: Nếu tùy chọn chưa có thì sẽ tiến hành thêm vào cuối file cấu hình.

7.3. Không cho phép các file thực thi lạ được bật cờ SUID và SGID

-         Nguy cơ: Nếu có một file thực thi không rõ nguồn gốc được thực thi với cờ SUID hoặc SGID, file đó sẽ được phép thực thi như với quyền của owner hoặc group.
-         Yêu cầu khắc phục: Kiểm soát các file thực thi được thiết lập cờ SUID và SGID. Loại bỏ những file được thiết lập sai phép.
Thực thi lệnh sau để tìm các file có cờ SUID và SGID :
#find <Đường dẫn thư mục cần kiểm tra> \( -perm -4000 -o -perm -2000 \) -type f -print
Để tắt cờ SUID và GUID của 1 file thực thi không hợp lệ, ta dùng lệnh sau:
# chmod u-s [tên file]
# chmod g-s [tên file]

Danh sách các file thực thi cơ bản của hệ thống được mặc định thiết lập cờ SUID và SGID:

File
Set-ID
/bin/mount
Uid
/bin/ping
uid
/bin/ping6
uid
/bin/su
uid
/bin/umount
uid
/sbin/mount.nfs
uid
/sbin/mount.nfs4
uid
/sbin/netreport
gid root
/sbin/pam timestamp check
uid
/sbin/umount.nfs
uid
/sbin/umount.nfs4
uid
/sbin/unix chkpwd
uid
/usr/bin/at
uid
/usr/bin/chage
uid
/usr/bin/chfn
uid
/usr/bin/chsh
uid
/usr/bin/crontab
uid/gid root
/usr/bin/gpasswd
uid
/usr/bin/locate
gid slocate
/usr/bin/newgrp
uid
/usr/bin/passwd
uid
/usr/bin/ssh-agent
gid nobody
/usr/bin/sudo
uid
/usr/bin/sudoedit
uid
/usr/bin/wall
gid tty
/usr/bin/write
gid tty
/usr/bin/Xorg
uid
/usr/kerberos/bin/ksu
uid
/usr/libexec/openssh/ssh-keysign
uid
/usr/libexec/utempter/utemper
gid utmp
/usr/lib/vte/gnome-pty-he
gid utmp
/usr/sbin/ccreds_validate
uid
/usr/sbin/lockdev
gid lock
/usr/sbin/sendmail.sendmail
gid smmsp
/usr/sbin/suexec
uid
/usr/sbin/userhelper
uid

Khi cài đặt mới hệ điều hành với các gói phần mềm tối thiểu, quản trị viên có thể tìm và lưu lại danh sách các file thực thi SUID/SGID. Từ danh sách này, quản trị viên có thể kiểm soát được các file SUID/SGID trong hệ thống. Với 1 file được bật cờ SUID/GUID không hợp lệ, quản trị viên sẽ tìm hiểu nguyên nhân, từ đó có thể thiết lập lại cờ hợp lệ, hoặc xóa file đó đi.

7.4. Không cho phép hệ thống có file unowner

-         Nguy cơ: Các file unowner cho biết hệ thống có vấn đề bất thường trong quá trình hoạt động. Có thể hệ thống đã bị tấn công, hoặc có thể do hệ thống bỏ sót trong quá trình gỡ gói phần mềm.
-         Yêu cầu khắc phục: Đảm bảo hệ thống không tồn tại các file unowner. Trong trường hợp phát hiện ra các file như trên, quản trị viên cần xem lại log và tìm hiểu nguyên nhân. Nếu không phát hiện hệ thống bị tấn công, quản trị viên có thể xóa những file đó.
Thực thi lệnh sau để tìm các file unowner:
#find <Đường dẫn thư mục cần kiểm tra> -xdev \( -nouser -o -nogroup \) -print
Xem xét các file đó và xóa bỏ nếu không cần sử dụng.

8.   Thiết lập đồng bộ thời gian cho hệ điều hành

-         Nguy cơ: Các hệ thống không được cấu hình đồng bộ thời gian có thể bị sai lệnh về thời gian. Các thông tin như log, file cước, dữ liệu trong cơ sở dữ liệu... từ đó bị sai lệch.
-         Yêu cầu khắc phục: Bật dịch vụ NTP để đồng bộ thời gian từ máy chủ thời gian chuẩn.
Bước 1: Chuẩn bị
-       Download gói ntp dạng rpm tương ứng với hệ điều hành cài đặt. (Ví dụ 4.2.6p5-1.el5.pp cho RHEL6.3 64bit).
Bước 2: Cài đặt dịch vụ NTP
-       Copy file cài đặt lên máy chủ, chuyển tới thư mục chứa file và chạy lệnh.
# rpm -ivh {Tên File}
-       Cấu hình để dịch vụ ntpd luôn chạy khi khởi động máy chủ.
# chkconfig ntpd on
-       Sửa file cấu hình /etc/ntp.conf như sau:
restrict default ignore
restrict {Time server} mask {subnet-mask} nomodify notrap noquery
# định nghĩa các time server
server 192.168.181.50
server time.nist.gov
server time.windows.com
# Hạn chế các NTP client theo IP, ví dụ 192.168.100.0/24
restrict 192.168.100.0 mask 255.2055.255.0 nomodify notrap noquery
-       Cập nhật luật iptables để cho phép các NTP client truy cập
# vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -s 192.168.100.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT
-       Chạy dịch vụ ntpd và khởi động lại dịch vụ iptables bằng lệnh:
# service ntpd start
# service iptables restart
-       Kiểm tra lại dịch vụ bằng lệnh:
# netstat -tulpn

9.   Chỉ tài khoản Root có quyền sửa các file cấu hình của dịch vụ CRON.

-         Nguy cơ: Dịch vụ CRON cho phép quản trị viện có thể lập lịch tác vụ định kỳ, là một tiện ích được sử dụng phổ biến trong quá trình vận hành hệ thống. Tuy nhiên tất cả các tài khoản đều sử dụng được dịch vụ CRON sẽ gây ra những nguy cơ về an toàn bảo mật, ví dụ như sau khi tấn công thành công tài khoản một người dùng, kẻ tấn công có thể lập lịch định kỳ mở backdoor để tránh sự phát hiện của quản trị viên ...
-         Yêu cầu khắc phục:
o   Hạn chế tài khoản được phép sử dụng dịch vụ CRON.
o   Chỉ tài khoản root mới được phép sửa trực tiếp các file cấu hình của dịch vụ cron.
Bước 1: Thực thi lệnh xóa file cron.dey:
      # rm /etc/cron.deny
Bước 2: Thêm file cron.allow nếu hệ thống chưa có:
    #touch /etc/cron.allow
Bước 3: Sửa file /etc/cron.allow, cập nhật hoặc thêm các tài khoản được phép sử dụng dịch vụ CRON:
      User1
     User2
  
Bước 4:Hạn chế quyền sửa các file cấu hình của CRON:
#chown root:root /etc/crontab
#chmod 600 /etc/crontab
# chown  -R root:root /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly /etc/cron.d
# chmod  -R go-rwx /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly /etc/cron.d


PHỤ LỤC 02: HƯỚNG DẪN CẤU HÌNH IPTABLES
1.      Đối với dòng Linux nói chung:
Sử dụng 2 lệnh chính sau:
-         “iptables-save”: save lại toàn bộ rule set ra 1 file text có định dạng đặc biệt
-         “iptables-restore”: load file text đó lại vào rule của iptables
Ưu điểm:
-         Đặc điểm của 2 lệnh này đó là nó thực hiện việc save và load toàn bộ rule set chỉ 1 request duy nhất, do vậy tốc độ sẽ nhanh hơn so với việc dùng add từng dòng lệnh rất nhiều, nhất là đối với số lượng rule lớn.
-         Nếu một trong các rule bị sai cú pháp, hệ thống sẽ báo lỗi và bộ rule mới không được áp dụng, hệ thống vẫn giữ bộ rule cũ.
Lệnh iptables-save:
#iptables-save > /etc/iptables-save
Lưu ý: /etc/iptables-save là file sẽ lưu lệnh iptables, có thể thay đổi thành file bất kỳ.
Lệnh iptables-restore:
#iptables-restore  < /etc/iptables-save
Tất cả các rules, trong file /etc/iptables-save sẽ được load và áp dụng vào iptables
Ý nghĩa của một file được lưu ra bằng lệnh iptables-save
Ví dụ:
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
 Trong đó:
-         “*filter”: Là chỉ bắt đầu các rule của table filter, table dùng để viết các rule lọc gói tin
-         :INPUT ACCEPT [0:0]
o   INPUT: Là chain của iptables, table filter có 3 chain là INPUT, OUTPUT, FORWARD. Trong đó INPUT là thời điểm gói tin đi vào hệ thống, OUTPUT là thời điểm gói tin đi ra hệ thống, còn FORWARD là thời điểm gói tin đi từ card mạng này sang card mạng khác.
o   ACCEPT: Chain policy của chain INPUT, OUTPUT và FORWARD. Ý nghĩa: Nếu gói tin sau khi được kiểm tra bởi tất cả các rule của iptables mà không có rule nào khớp thì gói tin sẽ được ACCEPT.
o   [0:0]: Số đầu tiên chỉ ra số lượng gói tin, số thứ 2 chỉ ra dung lượng của các gói tin. Đây là các thông số thống kê về các gói tin không khớp luật nào của iptables, và do đó được thực hiện Chain policy là ACCEPT.
-         Các luật tiếp theo: Là luật lọc của iptables, sẽ áp dụng từ trên xuống dưới.
-         COMMIT: Đánh dấu kết thúc bảng filter.
Cách sửa luật iptables:
Tạo 1 file có nội dung như sau, ví dụ là file /etc/iptables:
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
########Cho phép các gói tin thuộc 1 connection đang tồn tại hoặc có liên quan đến 1 connection đang tồn tại đi vào, không cần phải kiểm tra#####
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
########Cho phép ping echo request đến server#######
-A INPUT -p icmp --icmp-type 8 -j ACCEPT
########Những gói tin từ card mạng loopback thì không cần lọc######
-A INPUT -i lo -j ACCEPT
######Thêm các luật lọc chiều INPUT tại đây##########
###Ví dụ luật lọc INPUT SSH cho 1 IP hoặc 1 dải IP###
-A INPUT -m state --state NEW -s 192.168.1.10 -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -s 192.168.2.0/24 -m tcp -p tcp --dport 22 -j ACCEPT
###Ví dụ luật cho phép HTTP##########################
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
###Ví dụ luật cho phép SNMP của ipms#################
-A INPUT -m state --state NEW -m udp -p udp --dport 161 -j ACCEPT
######Thêm các luật lọc chiều OUTPUT tại đây##########
######Chỉ khi server cần chủ động tạo kết nối ra ngoài thì mới cần thêm các luật tiếp theo#####
###Ví dụ cho phép từ server hiện tại được ssh đến server 10.10.10.10######
-A OUTPUT -m state --state NEW -d 10.10.10.10 -m tcp -p tcp --dport 22 -j ACCEPT
#####Chặn toàn bộ các kết nối còn lại, ghi log lại trước khi chặn######
-A INPUT -j LOG --log-level 4 --log-prefix "IPTABLES DROP"
-A FORWARD -j LOG --log-level 4 --log-prefix "IPTABLES DROP"
-A OUTPUT -j LOG --log-level 4 --log-prefix "IPTABLES DROP"
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Cách cấu hình để iptables nạp các rule khi server khởi động lại:
Sửa trong file /etc/rc.local
Thêm 1 dòng sau
iptables-restore  < /etc/iptables
Cách tạm thời tắt tất cả các luật của iptables để troubleshoot:
Sử dụng các lệnh sau
#iptables -F
#iptables -X
#iptables -P INPUT ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD ACCEPT
Ý nghĩa các lệnh:
-         Lệnh đầu tiên để xóa tất cả các rule trong tất cả các chain của iptables
-         Lệnh thứ 2 xóa tất cả các chain do người dùng tự tạo
-         Lệnh thứ 3,4,5 thiết lập chain policy cho chain INPUT, OUTPUT, FORWARD là ACCEPT. Khi đấy server cho phép toàn bộ kết nối vào / ra server.
Chú ý: Chỉ dùng bộ lệnh này trong trường hợp cần tắt toàn bộ luật iptables để troubleshoot kết nối.
2.      Đối với dòng có deamon iptables (như Redhat)
Riêng đối với các dòng Redhat như Centos, Redhat, Fedora, Oracle enterprise Linux … thì có init script và file config riêng cho việc chạy iptables. Khi đấy không cần dùng lệnh iptables-save, iptables-restore như trên.
Để sử dụng iptables có thể sử dụng init script là /etc/init.d/iptables:
-         “/etc/init.d/iptables save”: lưu các rule vào file /etc/sysconfig/iptables, tương đương với lệnh iptables-save > /etc/sysconfig/iptables
-         “/etc/init.d/iptables stop”: flush (xóa) tất cả các rule, các chain người dùng tự định nghĩa và thiết lập lại chain policy
-         “/etc/init.d/iptables start”: load rule từ file /etc/sysconfig/iptables, tương đương với lệnh iptables-restore < /etc/sysconfig/iptables
-         “/etc/init.d/iptables restart”: thực hiện lệnh stop rồi sau đó là start
Để chạy lệnh “#/etc/init.d/iptables start” khi khởi động server thì dùng lệnh
#chkconfig iptables on
Như vậy khi đó iptables sẽ tự động nạp rule ở file /etc/sysconfig/iptables
Có thêm file cấu hình /etc/sysconfig/iptables-conf cho scrip init ở trên
-         Các tham số về việc load module của iptables
o   IPTABLES_MODULES: danh sách các module sẽ được load mỗi khi start iptables lên.
o   IPTABLES_MODULES_UNLOAD="yes": có reload lại các module mỗi khi iptables stop hoặc restart hay không. Mặc định là có.
-         Các tham số về việc có save rule của iptables
o   IPTABLES_SAVE_ON_STOP="no": có save lại rule hiện tại khi iptables stop hay không. Mặc định là không.
o   IPTABLES_SAVE_ON_RESTART="no": có save lại rule hiện tại khi iptables restart hay không. Mặc định là không.
-         Do script init của iptables sẽ save và load rule mặc định trong file /etc/sysconfig/iptables nên có thể chỉnh sửa các rule trực tiếp trong file này, sau đó restart lại iptables thì các rule mới sẽ được áp dụng.

0 nhận xét:

Đăng nhận xét