Một số nguyên tắc CIS Benchmark cho Linux (Phần 1)

    Secure Coding, Middleware, Police, SQL Injection,... có lẽ là những cụm từ vô cùng quen thuộc với anh em lập trình web. Nhưng liệu Secure coding có đủ an toàn cho ứng dụng của chúng ta? Câu trả lời rẩt tiếc lại là KHÔNG. Vì thực tế chỉ 20% các trang web bị hack do vấn đề về Secure Coding, còn 80% còn lại là Secure Infra.

    

    Bạn hãy thử tưởng tượng, nếu Secure Infra là được ví như một căn nhà thì Secure Coding sẽ là cái két sắt. Nếu kẻ trộm ngay cả nhà còn không vào được thì làm sao có khả năng động tới két sắt? Và đó là lý do tại sao chúng ta cần quan tâm đến Secure Infra

    Và trong bài viết ngày hôm nay, mình sẽ tìm hiểu về CIS Benchmark cho Linux, một số tiêu chuẩn cấu hình bảo mật được công nhận bởi nhiều tổ chức, chính phủ, doanh nghiệp trên thế giới, cụ thể là tiêu chuẩn để cấu hình Linux.

    CIS Benchmark cho Linux bao gồm các iêu chuẩn này hướng dẫn Audit:

  • Cấu hình theo hệ điều hành: Unix/Linux, Windows, MacOS,..
  • Cơ sở dữ liệu: MySQL, MS-SQL,…
  • Các dịch vụ khác: IIS, Apache, Bind, Directory Service…

1. Filesystem Configuration

  •     Hãy disable các cramfs, freevxfs, jffs2, hfs, hfsplus, udf, FAT filesystems nếu nó không cần thiết

        Audit

    $ modprobe -n -v <filesystem_name> 
    install /bin/true 
    $ lsmod | grep <filesystem_name>
    <No output>
    

        Remediation

    $ install <filesystem_name> /bin/true
    
  •     Phân vùng cho /tmp, /var, /var/tmp, /var/log, /var/log/audit ,/home

        Audit

    $ mount | grep <path>
    

        Ví dụ:

    $ mount | grep /tmp
    tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noexec,relatime)
    

        Remediation

    • Trường hợp cài đặt mới, bạn hãy tạo 1 phân vùng riêng cho những folder trên.
    • Trường hợp hệ thống đã cài đặt, bạn hãy tạo 1 phân vùng mới và config /etc/fstab.
  •     Set nodev, nosuid set on cho /tmp

        Audit

    $ mount | grep /tmp 
    tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noexec,relatime)
    

        Remediation

    $ mount -o remount,nodev /tmp
    
  •     Set nodev, nosuid, noexec cho /var/tmp

        Audit

    $ mount | grep /var/tmp 
    tmpfs on var/tmp type tmpfs (rw,nosuid,nodev,noexec,relatime)
    

        Remediation

    $ mount -o remount,nodev /var/tmp
    $ mount -o remount,nosuid /var/tmp
    $ mount -o remount,noexec /var/tmp
    
  •     Set nodev cho /home

        Audit

    $ mount | grep /home 
    /dev/xvdf1 on /home type ext4 (rw,nodev,relatime,data=ordered)
    

        Remediation

    $ mount -o remount,nodev /home
    
  •     Set nodev, nosuid, noexec cho /dev/shm

        Audit

    $ mount | grep /dev/shm 
    tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime)
    

        Remediation

    $ mount -o remount,nodev /dev/shm
    $ mount -o remount,nosuid /dev/shm
    $ mount -o remount,noexec /dev/shm
    
  •     Set sticky bit cho tất cả các world-writable directories (chmod +t)

        Sticky bit là một quyền đặc biệt, được thiết lập trên một thư mục cấp quyền ghi cho toàn bộ nhóm. Bit này đảm bảo rằng tất cả các thành viên của nhóm có thể ghi vào thư mục, nhưng chỉ người tạo file, hay chủ sở hữu file, mới có thể xóa nó.

        Lệnh sau chmod với flag -t sẽ set sticky bit cho thư mục

        Audit

    $  df --local -P | awk {'if (NR!=1) print $6'} | xargs -I '{}' find '{}' -xdev -type   d \( -perm -0002 -a ! -perm -1000 \) 2>/dev/null
    

        Remediation

    $ df --local -P | awk {'if (NR!=1) print $6'} | xargs -I '{}' find '{}' -xdev -type   d -perm -0002 2>/dev/null | chmod a+t
    
  •     Disable Automounting

        autofs cho phép tự động gắn các thiết bị. Nếu bật autofs, bất kỳ ai có quyền truy cập vật lý đều có thể đính kèm ổ USB hoặc đĩa và có sẵn nội dung vào hệ thống ngay cả khi họ không có quyền gắn nó.

        Audit

    $ systemctl is-enabled autofs 
    disabled
    

        Remediation

    $ systemctl disable autofs
    

2. Filesystem Integrity Checking

  •     Cài đặt AIDE

        AIDE dùng để kiểm tra trạng thái hệ thống file, bao gồm thời gian sửa đổi, quyền và băm tệp, sau đó có thể được sử dụng để so sánh trạng thái hiện tại của hệ thống, nhằm nhanh chóng phát hiện các sửa đổi bất hợp pháp nếu có.

        Audit

    $ dpkg -s aide
    

        Remediation

    $ apt-get install aide
    
  •     Đảm bảo việc kiểm soát tính toàn vẹn của hệ thống

        Cần kiểm tra định kỳ tính toàn vẹn của hệ thống file nhắm phát hiện các thay đổi của hệ thống.

        Audit

        Bạn hãy chạy 2 lệnh sau để kiểm tra việc đặt lịch kiểm tra của AIDE

    $ crontab -u root -l | grep aide 
    $ grep -r aide /etc/cron.* /etc/crontab
    

        Remediation

        Mở file crontab

    $ crontab -u root -e
    

        sau đó thêm dòng này vào cuối file

    0 5 * * * /usr/bin/aide --check
    

        việc này sẽ đảm bảo AIDE luôn check thay đổi của hệ thống vào 5 giờ sáng mỗi ngày.

3. Secure Boot Settings

  •     Config permissions cho bootloader

        Tệp /boot/grub.grub.cfg chứa thông tin về cài đặt boot và password unlocking các boot options. Việc config permitssion sẽ đảm bào việc non-root (người dùng không có quyền root) nhìn thấy hoặc thay đổi các boot parameters. Các parameters này có thể giúp hacker xác định các điểm yếu về bảo mật khi khởi động hệ thống, từ đó có thể khai thác chúng.

        Audit

    $ stat /boot/grub/grub.cfg 
    Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
    

        Remediation

    $ chown root:root /boot/grub/grub.cfg 
    $ chmod og-rwx /boot/grub/grub.cfg
    
  •     Set password cho bootloader

        Việc set password sẽ đảm bảo luôn yêu cầu bất kỳ ai khởi động lại hệ thống đều phải nhập mật khẩu, trước khi họ có thể thiết lập các boot parameters.

        Audit

    $ grep "^set superusers" /boot/grub/grub.cfg 
    set superusers="<username>" 
    $ grep "^password" /boot/grub/grub.cfg 
    password_pbkdf2 <username> <encrypted-password>
    

        Remediation

        Tạo một mật khẩu được mã hóa bằng grub-mkpasswd-pbkdf2:

    grub-mkpasswd-pbkdf2 
    Enter password: <password> 
    Reenter password: <password> 
    Your PBKDF2 is <encrypted-password>
    

        Sau đó thêm đoạn sau vào file /etc/grub.d/00header hoặc /etc/grub.d

    cat <<EOF 
    set superusers="<username>" 
    password_pbkdf2 <username> <encrypted-password> 
    EOF
    

        Cuối cùng là chạy lệnh update grup config

    $ update-grub
    
  •     Yêu cầu xác thực với single user mode

        Chế độ single user mode được sử dụng để khôi phục hệ thống khi phát hiện ra có sự cố trong quá trình khởi động hoặc là selection từ bootloader

        Yêu cầu xác thực trong chế độ người dùng duy nhất ngăn người dùng trái phép khởi động lại hệ thống thành người dùng duy nhất để có được đặc quyền root mà không cần thông tin đăng nhập.

        Audit

        Kiểm tra mật khẩu có được yêu cầu với quyền root hay không

    $ grep ^root:[*\!]: /etc/shadow
    

        Remediation

    $ passwd root
    

4. Additional Process Hardening

  •     Ensure core dumps are restricted

        Audit

    $ grep "hard core" /etc/security/limits.conf /etc/security/limits.d/*
    * hard core 0
    $ sysctl fs.suid_dumpable
    fs.suid_dumpable = 0
    

        Remediation

        Thêm vào file /etc/security/limits.conf hoặc /etc/security/limits.d/* dòng sau:

    * hard core 0 
    

        Set biến sau trong file /etc/sysctl.conf:

    fs.suid_dumpable = 0
    

        Cuối cùng, chạy lệnh sau để active các kernel parameter:

     $ sysctl -w fs.suid_dumpable=0
    
  •     Bật ASLR ( Address Space Layout Randomization)

        Audit

    $ sysctl kernel.randomize_va_space
    kernel.randomize_va_space = 2
    

        Remediation

        Bạn hãy sửa tham số sau:

    kernel.randomize_va_space = 2
    

        Sau đó chạy lệnh

    $ sysctl -w kernel.randomize_va_space=2
    
  •     Gỡ prelink (nếu có)

        Audit Kiểm tra xem prelink có được cài đặt hay không

    $ dpkg -s prelink
    

        Remediation

        Nếu hệ thống của bạn có prelink, hãy gỡ nó khỏi hệ thống của bạn

    $ apt-get remove prelink
    

5. Warning Banners

    Đảm bảo GDM login banner được config

    GDM hay GNOME Display Manager là giao diện login.

    Audit

    Nếu hệ thống có cài đặt GDM, tồn tại /etc/dconf/profile/gdm chứa:

user-db:user 
system-db:gdm 
file-db:/usr/share/gdm/greeter-dconf-defaults

    thì hãy verify banner-message-enable and banner-message-text option được config trong /etc/dconf/db/gdm.d/01-banner-message:

banner-message-enable=true 
banner-message-text='<banner message>'

    Remediation

    Tạo file /etc/dconf/profile/gdm:

user-db:user
system-db:gdm
file-db:/usr/share/gdm/greeter-dconf-defaults

    Tạo hoặc edit banner-message-enablebanner-message-text options trong /etc/dconf/db/gdm.d/01-banner-message:

[org/gnome/login-screen]
banner-message-enable=true
banner-message-text='Authorized uses only. All activity may be monitored and
reported.'

    Cuối cùng, chạy lệnh sau để update hệ thống

$ dconf update

    Trên đây là một số tiêu chuẩn Initial Setup cho hệ thống mình tìm hiểu được, có thể vẫn còn nhiều thiếu sót, comment góp ý cho mình nhé!

    Hi vọng bài viết có ích với bạn. Cảm ơn và hẹn gặp lại bạn ở những bài viết tiếp theo.

    Tài liệu tham khảo

    CIS Ubuntu Linux 16.04 LTS Benchmark

Nguồn: Viblo

Bình luận
Vui lòng đăng nhập để bình luận
Một số bài viết liên quan