GNU/Linux >> Belajar Linux >  >> Ubuntu

Panduan Utama untuk Mengamankan Host Ubuntu

Ubuntu disebut sebagai sistem operasi yang sangat aman yang tersedia tetapi memiliki kekurangan dalam instalasi default seperti setiap sistem operasi lainnya. Untuk menghilangkan kelemahan ini, spesialis Keamanan TI telah mengeluarkan panduan untuk memerangi pintu belakang/kelemahan sistem Anda dan melindungi Anda dari beberapa eksploitasi umum Ubuntu. Dalam panduan ini kita akan melihat beberapa pengaturan keamanan penting yang ingin diterapkan oleh setiap administrator sistem di servernya.

1. Perkuat pengaturan boot

Untuk mencegah pengguna non-root mengubah file konfigurasi boot loader yaitu /boot/grub/grub.cfg, setel pemilik dan grup file ini ke root. Jalankan perintah berikut untuk mengubah kepemilikan menjadi root.

# chown root:root /boot/grub/grub.cfg

Untuk mencegah pengguna non-root membaca parameter boot, atur izin file boot loader untuk membaca dan menulis saja. Jalankan perintah berikut untuk mencapai tolok ukur ini.

# chmod og-rwx /boot/grub/grub.cfg

Juga tetapkan kata sandi untuk boot loader, sehingga setiap pengguna yang tidak sah yang mencoba mem-boot ulang sistem harus memberikan kata sandi untuk melanjutkan ke langkah berikutnya. Ini memastikan pengguna yang tidak sah tidak akan dapat mengubah parameter boot seperti menonaktifkan SELinux atau mengubah partisi boot. Jalankan perintah berikut untuk membuat kata sandi boot loader.

# grub-mkpasswd-pbkdf2

Sekarang buat file baru dengan nama /etc/grub.d/00_header dan tambahkan baris berikut.

atur pengguna super=""
password_pbkdf2

Hapus opsi --unrestricted dalam parameter CLASS dari file /etc/grub.d/10_linux . Ini memastikan persyaratan kata sandi wajib untuk melanjutkan ke langkah berikutnya yaitu mengedit parameter boot.

Perbarui grub

# update-grub

2. Sistem file yang aman

Buat partisi berdasarkan kategori yang berbeda seperti data pengguna di partisi /home, swap file di /swap partisi, file sementara di partisi /tmp, file konfigurasi sistem di partisi /etc, file perangkat di partisi /dev dll. Ini akan mencegah kelelahan sumber daya sebagai serta opsi pemasangan yang fleksibel berdasarkan penggunaan data yang diinginkan.

2.1 Buat partisi untuk /tmp

Alasan pertama untuk membuat partisi terpisah untuk /tmp adalah ada kemungkinan kehabisan sumber daya karena direktori /tmp dapat ditulis oleh dunia. Juga membuat partisi terpisah untuk /temp memungkinkan untuk menyetel opsi noexec yang menandainya tidak berguna bagi pengguna yang tidak berwenang untuk mengeksekusi kode dan tautan keras ke program setuid sistem.

2.2 Setel opsi nodev untuk /tmp

Setel opsi nodev untuk partisi /tmp untuk mencegah pengguna membuat file perangkat blok/karakter. Edit file /etc/fstab dan tambahkan baris berikut.

# mount -o remount,nodev /tmp

2.3 Setel opsi nosuid untuk /tmp

Untuk mencegah pengguna membuat set file userid di /tmp file system tambahkan baris berikut di /etc/fstab karena /tmp file-system digunakan untuk penyimpanan file sementara.

# mount -o remount,nosuid /tmp

2.4 Setel opsi noexec untuk /tmp

Untuk mencegah pengguna menjalankan binari yang dapat dieksekusi, setel opsi noexec untuk partisi /tmp. Tambahkan baris berikut di /etc/fstab untuk memblokir menjalankan binari yang dapat dieksekusi.

# mount -o remount,noexec /tmp

2.5 Buat partisi terpisah untuk /var

Daemon sistem dan layanan lain untuk sementara menyimpan data dinamis di /var dengan beberapa direktori mungkin dapat ditulis oleh dunia. Oleh karena itu ada kemungkinan kehabisan sumber daya di /var. Untuk mencegah kehabisan sumber daya di /var, buat partisi terpisah untuk /var di instalasi baru dan untuk sistem yang diinstal sebelumnya, gunakan LVM untuk membuat partisi baru.

2.6 Mengikat /var/tmp ke /tmp

Pemasangan binding dari /var/tmp ke /tmp akan memungkinkan /var/tmp dilindungi dengan cara yang sama seperti /tmp dilindungi. Ini juga akan mencegah /var menghabiskan memori di /var/tmp dengan file-file sementara. Jalankan perintah berikut untuk mengikat /tmp dan /var/tmp

# sudo mount --bind /tmp /var/tmp

Untuk membuatnya permanen tambahkan baris berikut di /etc/fstab

# /tmp /var/tmp none bind 0 0

2.7 Buat partisi terpisah untuk /var/log

Untuk melindungi data audit sensitif dan perlindungan terhadap kehabisan sumber daya, buat partisi terpisah untuk /var/log di instalasi baru dan untuk sistem yang diinstal sebelumnya, gunakan LVM untuk membuat partisi baru.

2.8 Buat partisi terpisah untuk /var/log/audit

Daemon audit menyimpan data log di direktori /var/log/audit. Untuk melindungi dari kehabisan sumber daya karena log audit dapat tumbuh menjadi ukuran besar dan juga untuk melindungi data audit sensitif, buat partisi terpisah untuk /var/log/audit di instalasi baru dan untuk sistem yang diinstal sebelumnya, gunakan LVM untuk membuat partisi baru.

2.9 Buat partisi terpisah untuk /home

Data pengguna disimpan di direktori /home. Dimungkinkan untuk membatasi jenis file yang dapat disimpan di /home. Untuk mencapai ini, buat partisi terpisah untuk /home di instalasi baru dan untuk sistem yang diinstal sebelumnya, gunakan LVM untuk membuat partisi baru. Juga partisi terpisah untuk /home melindungi dari kehabisan sumber daya.

2.10 Setel nodev untuk /home

Untuk mencegah direktori /home digunakan untuk mendefinisikan karakter dan memblokir perangkat khusus, setel opsi nodev sehingga pengguna tidak dapat membuat jenis file ini. Edit file /etc/fstab dan tambahkan baris berikut di dalamnya.

# mount -o remount, nodev /home

2.11 Setel nodev untuk media yang dapat dipindahkan

Pengguna dapat menipu kontrol keamanan dengan menggunakan karakter dan memblokir perangkat khusus dari media yang dapat dipindahkan untuk mengakses file perangkat sensitif seperti /dev/kmem. Edit file /etc/fstab dan tambahkan baris berikut di dalamnya.

# mount -o remount, nodev { removable device like floppy or cdrom or USB stick etc. }

2.12 Setel noexec ke media yang dapat dipindahkan

Untuk mencegah program dijalankan dari media yang dapat dipindahkan sehingga tidak ada program jahat yang dapat ditempatkan di sistem, tambahkan baris berikut di /etc/fstab

# mount -o remount,noexec { removable device like floppy or cdrom or USB stick etc. }

2.13 Tambahkan nosuid ke media yang dapat dipindahkan

Untuk mencegah media yang dapat dipindahkan tidak digunakan sebagai setuid/setgid, yang memungkinkan pengguna non-root untuk menempatkan program yang diistimewakan dalam sistem. Edit /etc/fstab dan tambahkan baris berikut di dalamnya

# mount -o remount,nosuid { removable device like floppy or cdrom or USB stick etc. }

2.14 Tambahkan opsi nodev untuk partisi /run/shm

Untuk mencegah pengguna membuat file perangkat khusus di partisi /run/shm, tambahkan baris berikut di /etc/fstab. Ini memastikan pengguna tidak akan dapat membuat perangkat di /run/shm

# mount -o remount,nodev /run/shm

2.15 Tambahkan opsi nosuid ke partisi /run/shm

Untuk mencegah /run/shm digunakan sebagai setuid/setgid, yang memungkinkan pengguna non-root untuk menempatkan program istimewa di sistem. Pengguna dapat menjalankan program dengan uid dan gidnya sendiri. Edit /etc/fstab dan tambahkan baris berikut di dalamnya

# mount -o remount,nosuid /run/shm

2.16 Tambahkan noexec ke partisi /run/shm

Untuk mencegah partisi /run/shm digunakan untuk menjalankan program, tambahkan baris berikut di /etc/fstab

# mount -o remount, noexec /run/shm

2.17 Setel sticky bit ke direktori world writable

Untuk mencegah pengguna menghapus atau mengganti nama file di direktori ini yang bukan milik mereka , aktifkan sticky bit.

# chmod +t /tmp
or
# chmod 1777 /tmp

3. Buang sistem lama

Jangan menginstal/menggunakan layanan dan utilitas warisan berikut karena ada kerentanan dalam sistem/utilitas ini. Ini adalah - NIS , RSH server/client , talk server/client , Telenet, TFTP, XINETD, Chargen, Daytime, echo, membuang, waktu

4. Buang layanan tujuan khusus

Jangan menginstal/menggunakan layanan berikut karena ada kerentanan dalam layanan ini. Ini adalah-
Sistem X Window, Avahi Server Print server, DHCP server, LDAP, NFS dan RPC, DNS server, FTP, Samba, SNMP, Rsync, BIOSDEVNAME. Beberapa layanan di atas memang diperlukan untuk operasi sehari-hari seperti server DNS. Dalam situasi itu, disarankan untuk menginstal server ini di host terpisah yang tidak berisi data sensitif apa pun.

5. Konfigurasi jaringan dan firewall

5.1 Nonaktifkan penerusan IP

Untuk mencegah server digunakan untuk meneruskan paket yaitu bertindak sebagai router, setel parameter net.ipv4.ip_forward ke 0 di /etc/sysctl.conf

net.ipv4.ip_forward = 0

Sekarang muat ulang konfigurasi sysctl

# sudo sysctl -p

5.2 Nonaktifkan pengalihan sendpacket

Pengguna yang tidak sah dapat menggunakan host yang dikompromikan dari mengirim paket pengalihan ICMP ke perangkat perutean lain ke perutean yang rusak. Untuk menonaktifkan pengalihan paket, setel parameter net.ipv4.conf.all.send_redirects dan net.ipv4.conf.default.send_redirects ke 0 di /etc/sysctl.conf

# net.ipv4.conf.all.send_redirects = 0

# net.ipv4.conf.default.send_redirects =0

Sekarang muat ulang konfigurasi sysctl

# sudo sysctl -p

5.3 Nonaktifkan penerimaan paket rute sumber

Menggunakan paket yang dirutekan sumber, pengguna dapat memperoleh akses ke alamat pribadi sistem karena rute dapat ditentukan.
Setel parameter net.ipv4.conf.all.accept_source_route dan net.ipv4.conf.default.accept_source_route ke 0 di /etc/sysctl.conf

# net.ipv4.conf.all.accept_source_route=0
# net.ipv4.conf.default.accept_source_route=0

Sekarang muat ulang konfigurasi sysctl

# sudo sysctl -p

5.4 Nonaktifkan penerimaan pengalihan ICMP

Pengguna dapat mengubah tabel perutean untuk mengirim paket ke jaringan yang salah menggunakan pengalihan ICMP palsu sehingga memungkinkan paket ditangkap. Untuk menonaktifkan ICMP Redirect Acceptance atur parameter net.ipv4.conf.all.accept_redirects dan net.ipv4.conf.default.accept_redirects ke 0 di /etc/sysctl.conf

# net.ipv4.conf.all.accept_redirects = 0
# net.ipv4.conf.default.accept_redirects parameters = 0

Sekarang muat ulang konfigurasi sysctl

# sudo sysctl -p

5.5 Nonaktifkan Penerimaan Pengalihan ICMP Aman

Pengalihan ICMP aman dan pengalihan ICMP hampir sama, hanya perbedaannya adalah sumber paket pengalihan ICMP aman adalah gateway. Jika gateway sumber dikompromikan maka pengguna dapat memperbarui tabel perutean menggunakan pengalihan ICMP Aman.
Setel parameter net.ipv4.conf.all.secure_redirects dan net.ipv4.conf.default.secure_redirects ke 0 di /etc/sysctl.conf untuk menonaktifkan Penerimaan Pengalihan ICMP Aman.

net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0

Sekarang muat ulang konfigurasi sysctl

# sudo sysctl -p

5.6 Mencatat Paket Mencurigakan

Administrator dapat mendiagnosis sistem saat penyerang mengirim paket palsu.

Setel parameter net.ipv4.conf.all.log_martians dan net.ipv4.conf.default.log_martians ke 1 di /etc/sysctl.conf untuk mencegah hal ini.

# net.ipv4.conf.all.log_martians=1

# net.ipv4.conf.default.log_martians=1

Sekarang muat ulang konfigurasi sysctl

# sudo sysctl -p

5.7 Aktifkan abaikan permintaan siaran

Untuk mencegah serangan smurf di jaringan, setel net.ipv4.icmp_echo_ignore_broadcasts ke 1 yang akan memungkinkan sistem mengabaikan semua permintaan ICMP echo dan timestamps ke alamat broadcast dan multicast. Setel parameter net.ipv4.icmp_echo_ignore_broadcasts ke 1 di /etc/sysctl.conf

# net.ipv4.icmp_echo_ignore_broadcasts=1

Sekarang muat ulang konfigurasi sysctl

# sudo sysctl -p

5.8 Aktifkan perlindungan pesan kesalahan yang buruk

Untuk mencegah penyerang mengirimkan respons yang melanggar RFC-1122 dalam upaya memasukkan file log sistem dengan pesan kesalahan yang tidak berguna. Setel parameter net.ipv4.icmp_ignore_bogus_error_responses ke 1 di /etc/sysctl.conf untuk memblokir respons kesalahan palsu.

# net.ipv4.icmp_ignore_bogus_error_responses=1

Sekarang muat ulang konfigurasi sysctl

# sudo sysctl -p

5.9 Aktifkan validasi rute sumber yang direkomendasikan RFC

Menggunakan pemfilteran jalur terbalik, kernel dapat menentukan apakah paket tersebut valid, jika tidak maka akan menjatuhkan paket.
Setel parameter net.ipv4.conf.all.rp_filter dan net.ipv4.conf.default.rp_filter ke 1 di /etc/sysctl.conf

# net.ipv4.conf.all.rp_filter=1
# net.ipv4.conf.default.rp_filter=1

Sekarang muat ulang konfigurasi sysctl

# sudo sysctl -p

5.10 Aktifkan cookie TCP SYN

Penyerang dapat memulai serangan DOS di server dengan membanjiri paket SYN tanpa menginisialisasi jabat tangan tiga arah. Untuk mencegah hal ini, setel parameter net.ipv4.tcp_syncookies ke 1 di /etc/sysctl.conf

# net.ipv4.tcp_syncookies=1

Sekarang muat ulang konfigurasi sysctl

# sudo sysctl -p

5.10 Nonaktifkan iklan router IPv6

Aktifkan server untuk tidak menerima iklan router karena ini dapat menjebak lalu lintas perutean ke sistem yang disusupi.
Setel parameter net.ipv6.conf.all.accept_ra dan net.ipv6.conf.default.accept_ra ke 0 di /etc/sysctl.conf

# net.ipv6.conf.all.accept_ra=0
# net.ipv6.conf.default.accept_ra=0

Sekarang muat ulang konfigurasi sysctl

# sudo sysctl -p

5.12 ​​Nonaktifkan penerimaan pengalihan IPv6

Aktifkan server untuk tidak menerima iklan router karena ini dapat menjebak lalu lintas perutean ke sistem yang disusupi. Direkomendasikan untuk menyetel rute yang sulit dalam sistem untuk melindungi sistem dari rute yang buruk.

Setel parameter net.ipv6.conf.all.accept_redirects dan net.ipv6.conf.default.accept_redirects ke 0 di /etc/sysctl.conf

# net.ipv6.conf.all.accept_redirects=0
# net.ipv6.conf.default.accept_redirects=0

Sekarang muat ulang konfigurasi sysctl

# sudo sysctl -p

5.13 Nonaktifkan IPv6

Untuk mengurangi kemungkinan serangan dalam sistem, nonaktifkan IPv6
Edit file /etc/sysctl.conf dan tambahkan baris berikut:

# net.ipv6.conf.all.disable_ipv6=1
# net.ipv6.conf.default.disable_ipv6=1
# net.ipv6.conf.lo.disable_ipv6=1

Sekarang muat ulang konfigurasi sysctl

# sudo sysctl -p

5.14 Instal pembungkus TCP

Gunakan pembungkus TCP untuk semua layanan yang mendukung pembungkus TCP.

Instal tcpd:

# apt-get install tcpd

5.15 Buat /etc/hosts.allow

Untuk memastikan bahwa hanya sistem resmi yang dapat terhubung ke server, gunakan /etc/hosts.allow
Edit /etc/hosts.allow dan tambahkan yang berikut

"ALL: <net>/<mask>, <net>/<mask>, …"
e.g <net> = 192.168.10.100 , <mask> = 255.255.255.0

5.16 Verifikasi izin di /etc/hosts.allow

Penting untuk melindungi /etc/hosts.allow dari akses tulis yang tidak sah. Jalankan perintah berikut untuk menemukan izin /etc/hosts.allow

# ls -l /etc/hosts.allow

-rw-r--r-- 1 root root 2055 15 Feb 11:30 /etc/hosts.allow

Jika izin salah maka gunakan perintah berikut untuk memperbaikinya

#chmod 644 /etc/hosts.allow

5.17 Buat /etc/host s.deny

Tolak akses ke server menggunakan /etc/hosts.deny . File /etc/hosts.deny dikonfigurasi untuk menolak

semua host yang tidak disebutkan di /etc/hosts.allow. Buat file /etc/hosts.deny

echo "ALL:ALL">> /etc/hosts.deny

5.18 Verifikasi izin pada /etc/hosts.deny

Penting untuk melindungi /etc/hosts.deny dari akses tulis yang tidak sah. Jalankan perintah berikut untuk menemukan izin dari /etc/hosts.deny

# ls -l /etc/hosts.deny
-rw-r--r-- 1 root root 2055 Feb 15 11:30 /etc/hosts.deny

5.19 Pastikan firewall aktif

Untuk membatasi komunikasi di dalam dan di luar kotak ke alamat IP dan port tertentu, gunakan firewall. Ubuntu menyediakan Uncomplicated Firewall (UFW) untuk mengkonfigurasi konfigurasi firewall dengan mudah.
Instal UFW

# sudo apt-get install ufw

Aktifkan ufw:

# sudo ufw enable

contoh:
Izinkan layanan SSH dan http.

# sudo ufw allow TCP/80
# sudo ufw allow TCP/22
# sudo ufw reload

6. Logging dan Audit

Dengan menggunakan kerangka kerja audit yang kuat, sistem dapat melacak banyak jenis peristiwa untuk memantau dan mengaudit sistem.
Instal auditd menggunakan perintah berikut

sudo apt-get install auditd audispd-plugins

Jika perlu buat tautan awal yang tepat untuk auditd di /etc/rc*.d dengan menjalankan perintah berikut dari masing-masing direktori yang relevan:

# ln -s /etc/init.d/auditd S37auditd

Tautan awal harus dibuat untuk level lari

6.1 Konfigurasikan Ukuran Penyimpanan Log Audit

Ukuran file log audit harus dipilih dengan hati-hati sehingga tidak mempengaruhi sistem dan tidak ada data audit yang hilang.
Setel parameter max_log_file di /etc/audit/auditd.conf

max_log_file = <MB>

6.2 Nonaktifkan Sistem pada Log Audit Penuh

Daemon auditd dapat dikonfigurasi untuk menghentikan sistem ketika log audit penuh. Lakukan hal berikut untuk menentukan apakah auditd dikonfigurasi untuk memberi tahu administrator dan menghentikan sistem saat log audit penuh.

space_left_action = email
action_mail_acct = root
admin_space_left_action = halt

6.3 Simpan Semua Informasi Audit

Dalam konteks keamanan yang tinggi, manfaat mempertahankan riwayat audit yang panjang melebihi biaya penyimpanan riwayat audit. Tambahkan baris berikut ke file /etc/audit/auditd.conf.

max_log_file_action = keep_logs

6.4 Rekam Peristiwa yang Mengubah Informasi Tanggal dan Waktu

Untuk memantau perubahan yang tidak biasa pada tanggal dan/atau waktu sistem yang merupakan indikasi aktivitas tidak sah pada sistem.
Untuk sistem 64 bit, tambahkan baris berikut ke file /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b64 -S clock_settime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

Untuk sistem 32 bit, tambahkan baris berikut ke file /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

6.6 Rekam Peristiwa yang Mengubah Informasi Pengguna/Grup

Perubahan tak terduga pada /etc/group, /etc/passwd, /etc/gshadow, /etc/shadow, /etc/security/opasswd adalah indikasi yang jelas dari pengguna yang tidak sah mencoba menyembunyikan aktivitas mereka atau membahayakan akun tambahan.
Tambahkan baris berikut ke file /etc/audit/audit.rules.

-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

6.7 Rekam Peristiwa yang Mengubah Lingkungan Jaringan Sistem

Untuk mencegah perubahan yang tidak sah pada host dan nama domain sistem untuk merusak parameter keamanan yang ditetapkan berdasarkan nama tersebut, tambahkan baris berikut di /etc/audit/audit.rules
Untuk sistem 64 bit, tambahkan baris berikut ke file /etc/audit/audit.rules.

-a exit,always -F arch=b64 -S sethostname -S setdomainname -k system-locale
-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

Untuk sistem 32 bit, tambahkan baris berikut ke file /etc/audit/audit.rules.

-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

6.8 Rekam Peristiwa yang Mengubah Kontrol Akses Wajib Sistem

Setiap perubahan pada file di /etc/selinux merupakan indikasi pengguna yang tidak berwenang mencoba untuk mengubah kontrol akses dan mengubah konteks keamanan untuk mendapatkan akses ke sistem.
Tambahkan baris berikut ke /etc/audit/audit.rules

-w /etc/selinux/ -p wa -k MAC-policy

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

6.9 Kumpulkan Acara Masuk dan Keluar

Untuk memantau informasi yang terkait dengan serangan login/logout/brute force tambahkan baris berikut ke file /etc/audit/audit.rules.

-w /var/log/faillog -p wa -k logins
-w /var/log/lastlog -p wa -k logins
-w /var/log/tallylog -p wa -k logins

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

6.10 Kumpulkan Informasi Inisiasi Sesi

Pantau acara inisiasi sesi. Administrator sistem dapat memantau login yang terjadi pada waktu yang tidak biasa, yang dapat mengindikasikan aktivitas yang tidak sah.
Tambahkan baris berikut ke file /etc/audit/audit.rules.

-w /var/run/utmp -p wa -k session
-w /var/log/wtmp -p wa -k session
-w /var/log/btmp -p wa -k session

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

6.11 Kumpulkan Acara Modifikasi Izin Kontrol Akses Kebijaksanaan

Temukan perubahan atribut file yang merupakan indikasi aktivitas penyusup.
Untuk sistem 64 bit, tambahkan baris berikut ke file /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

Untuk sistem 32 bit, tambahkan baris berikut ke file /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

6.12 Kumpulkan Upaya Akses Tidak Sah yang Gagal ke File

Temukan upaya yang gagal untuk membuka, membuat, atau memotong file untuk mendapatkan akses tidak sah ke sistem.
Untuk sistem 64 bit, tambahkan baris berikut ke file /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

Untuk sistem 32 bit, tambahkan baris berikut ke file /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

6.13 Kumpulkan Penggunaan Perintah Istimewa

Cari tahu apakah ada penggunaan perintah istimewa oleh pengguna yang tidak memiliki hak istimewa untuk mendapatkan akses ke sistem. Pertama jalankan perintah berikut lalu tambahkan output dari perintah berikut ke file /etc/audit/audit.rules

# find PART -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk '{print \ "-a always,exit -F path=" $1 " -F perm=x -F auid>=500 -F auid!=4294967295 \ -k privileged" }'

6.14 Kumpulkan File System Mount yang Gagal

Untuk melacak pemasangan sistem file oleh pengguna yang tidak memiliki hak istimewa, tambahkan aturan berikut di file /etc/audit/audit.rules
Untuk sistem 64 bit, tambahkan baris berikut ke file /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S mount -F auid>=500 -F auid!=4294967295 -k mounts
-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

Untuk sistem 32 bit, tambahkan baris berikut ke file /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

6.15 Kumpulkan Peristiwa Penghapusan File oleh Pengguna

Untuk mengetahui apakah terjadi penghapusan file dan atribut file yang terkait dengan file yang dilindungi, tambahkan aturan berikut.
Untuk sistem 64 bit, tambahkan berikut ini ke file /etc/audit/audit.rules.

-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete
-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

Untuk sistem 32 bit, tambahkan berikut ini ke file /etc/audit/audit.rules.

-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

6.16 Kumpulkan Perubahan pada Cakupan Administrasi Sistem

Perubahan dalam file /etc/sudoers dapat menunjukkan bahwa perubahan yang tidak sah telah dilakukan pada lingkup aktivitas administrator sistem.

Tambahkan baris berikut ke file /etc/audit/audit.rules.

-w /etc/sudoers -p wa -k scope

# Jalankan perintah berikut untuk memulai kembali auditd

# sudo service auditd restart

6.17 Kumpulkan Tindakan Administrator Sistem (sudolog)

Untuk mencegah pengguna yang tidak sah menggunakan perintah istimewa, cari tahu apakah ada perubahan yang terjadi di /var/log/sudo.log.
Tambahkan baris berikut ke file /etc/audit/audit.rules.

-w /var/log/sudo.log -p wa -k actions

Mulai ulang audit

# sudo service auditd restart

6.18 Kumpulkan Pemuatan dan Pembongkaran Modul Kernel

Untuk mengetahui apakah ada pengguna yang tidak sah menggunakan insmod, rmmod dan modprobe dan dengan demikian membahayakan keamanan sistem, Tambahkan baris berikut ke file /etc/audit/audit.rules.

-w /sbin/insmod -p x -k modules
-w /sbin/rmmod -p x -k modules
-w /sbin/modprobe -p x -k modules

Untuk sistem 32 bit, tambahkan

-a always,exit -F arch=b32 -S init_module -S delete_module -k modules

Untuk sistem 64 bit, tambahkan

-a always,exit -F arch=b64 -S init_module -S delete_module -k modules

Mulai ulang audit

# sudo service auditd restart

6.19 Jadikan Konfigurasi Audit Tidak Dapat Diubah

Untuk mencegah pengguna yang tidak sah melakukan perubahan pada sistem audit untuk menyembunyikan aktivitas jahat mereka dan kemudian mengembalikan aturan audit, tambahkan baris berikut ke

/etc/audit/audit.rules file.

-e 2

Ini harus menjadi baris terakhir dalam file /etc/audit/audit.rules
Mulai ulang audit

# sudo service auditd restart

7. Akses Sistem, Otentikasi dan Otorisasi

7.1 Tetapkan dan Izin Pengguna/Pemilik Grup di cron

Jalankan perintah berikut untuk membatasi akses baca/tulis dan pencarian ke pengguna dan grup root, mencegah pengguna normal mengakses file/direktori ini.

# chown root:root /etc/crontab
# chmod og-rwx /etc/crontab
# chown root:root /etc/cron.hourly
# chmod og-rwx /etc/cron.hourly
# chown root:root /etc/cron.daily
# chmod og-rwx /etc/cron.daily
# chown root:root /etc/cron.weekly
# chmod og-rwx /etc/cron.weekly
# chown root:root /etc/cron.monthly
# chmod og-rwx /etc/cron.monthly
# chown root:root /etc/cron.d
# chmod og-rwx /etc/cron.d

7.2 Konfigurasi PAM

PAM (Pluggable Authentication Modules) adalah layanan yang mengimplementasikan modul otentikasi modular pada sistem UNIX. PAM harus dikonfigurasi dengan hati-hati untuk mengamankan otentikasi sistem.

7.2.1 Menyetel Parameter Persyaratan Pembuatan Kata Sandi Menggunakan pam_cracklib

Modul pam_cracklib memeriksa kekuatan kata sandi. Itu melakukan pemeriksaan seperti memastikan kata sandi bukan kata kamus, itu adalah panjang tertentu, berisi campuran karakter (misalnya alfabet, numerik, lainnya) dan banyak lagi.
Atur parameter pam_cracklib.so sebagai berikut di /etc/pam.d/common-password

password required pam_cracklib.so retry=3 minlen=14 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

7.2.2 Menyetel Penguncian untuk Upaya Kata Sandi yang Gagal

Mengunci pengguna setelah upaya login berturut-turut yang gagal untuk mencegah serangan brute force password terhadap sistem Anda.
Edit file /etc/pam.d/login dan tambahkan baris auth di bawah ini:

auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900

7.2.3 Batasi Penggunaan Ulang Sandi

Memaksa pengguna untuk tidak menggunakan kembali 5 kata sandi mereka sebelumnya akan memperkecil kemungkinan penyerang dapat menebak kata sandinya. Atur pam_unix.so ingat parameter ke 5 di /etc/pam.d/common-password

password sufficient pam_unix.so remember=5

8. Konfigurasi SSH

Edit file /etc/ssh/sshd_config untuk mengatur parameter berikut agar aman.

Protocol 2
LogLevel INFO
X11Forwarding no
MaxAuthTries 4
IgnoreRhosts yes
HostbasedAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
PermitUserEnvironment no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
ClientAliveInterval 300
ClientAliveCountMax 0
AllowUsers <userlist>
AllowGroups <grouplist>
DenyUsers <userlist>
DenyGroups <grouplist>
Banner <your bannerfile>

9. Restrict Access to the su Command

Use sudo instead of su as it provides a better logging out and audit mechanism. The another motivation for using sudo is to restrict the uses of su. Uncomment the pam_wheel.so line in /etc/pam.d/su, so that su command will be available to users in the wheel group to execute su.

# grep pam_wheel.so /etc/pam.d/su
auth required pam_wheel.so use_uid
# grep wheel /etc/group
wheel:x:10:root, <user list>.....

10. User Accounts and Environment

10.1 Set Password Expiration Days

Reduce the maximum age of a password.

Set the PASS_MAX_DAYS parameter to 120 in /etc/login.defs

PASS_MAX_DAYS 60

Modify active user parameters to match:

# chage --maxdays 120 <user>

10.2 Set Password Change Minimum Number of Days

To prevent the user from changing their password until a minimum no of days have passed since the user changed the password. Set the PASS_MIN_DAYS parameter to 7 in /etc/login.defs

PASS_MIN_DAYS 7

Modify active user parameters to match:
# chage --mindays 7

10.3 Set Password Expiring Warning Days

The administrator can notify the users about the expiry of their password using ASS_WARN_AGE parameter in /etc/login.defs.

Set the PASS_WARN_AGE parameter to 7 in /etc/login.defs

PASS_WARN_AGE  7

Modify active user parameters to match

# chage --warndays 7 <user>

11. System Accounts

11.1 Disable System Accounts

To prevent the system account from being used to get an interactive shell, append “/usr/sbin/nologin” at the end of each system accounts in /etc/passwd

11.2 Set Default

umask for Users
Set umask of 022 will make files readable by every user on the system.
Edit the /etc/login.defs file and add the following line

UMASK 022

11.3 Lock Inactive User Accounts

To make the system more secure, execute the following command to lock the inactive accounts.

# useradd -D -f 35

11.4 Remove OS Information from Login Warning Banners

To prevent the OS and patch level information from login banners, edit the /etc/motd, /etc/issue and /etc/issue.net files and remove any lines containing \m, \r, \s or \v.

12. Verify System File Permissions

12.1 Verify Permissions on /etc/passwd, /etc/shadow, /etc/group

These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the permissions for these files

# chmod 644 /etc/passwd
# chmod o-rwx,g-rw /etc/shadow
# chmod 644 /etc/group

12.2 Verify User/Group Ownership on /etc/passwd, /etc/shadow, /etc/group

These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the ownership for these files

# chown root:root /etc/passwd
# chown root:shadow /etc/shadow
# chown root:root /etc/group

13. Check for rootkits

There are few tools available through which you can check for rootkit in the server. The two popular rootkit hunters are RKHunte and CHKRootKit, use anyone of them periodically to check for rootkit in the system

Install chkrootkit

# sudo apt-get install chkrootkit

To run chkrootkit, execute the following command in the terminal

# chkrootkit

14. PSAD IDS/IPS

To detect the intrusion in your network, you can use toos like snort or cipherdyne's psad. The later has the capability of intrusion detection and log analysis with iptables. PSAD is a lightweight system daemons that analyze the iptables log message to detect scans and other spurious traffic.

Install PSAD

#sudo apt-get install psad

Now configure psad to detect scans, Intrusion Detection and Intrusion Prevention

15. Prevent IP Spoofing

Add following lines in /etc/host.conf to prevent IP spoofing

order bind,hosts
nospoof on

16. Enabling automatic security updates

It is highly recommended to enable automatic security updates and patches to keep the system secure. You will be notified every time you logged in to the system using SSH about security updates and patches. In Ubuntu Desktop, to enable automatic security updates, click on "System" select "Administration" and then "Software Sources" menu. Now select the "Internet Updates" and enable "Check for updates automatically" specifying daily". If Ubuntu issues a new security release then you will be notified via the "Update Manager" icon in the system tray. You can use unattended-upgrades which can handle automatic installation of security upgrades in Ubuntu system. Running sudo unattended-upgrade will install all the security package available for upgrade.

Install this package if it isn't already installed using

# sudo apt-get install unattended-upgrades

To enable it type

# sudo dpkg-reconfigure unattended-upgrades

and select "yes".

17. Harden PHP

Edit the php.ini file /etc/php5/apache2/php.ini and add uncomment/add following lines.

safe_mode = On

safe_mode_gid = On

disable_functions = hp_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec,

system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid,

posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit,

posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times,

posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo

register_globals = Off

expose_php = Off

display_errors = Off

track_errors = Off

html_errors = Off

magic_quotes_gpc = Off

mail.add_x_header = Off

session.name = NEWSESSID

allow_url_fopen = Off

allow_url_include = Off

session.save_path = A secured location in the server

18. Harden Apache

Edit Apache2 configuration security file /etc/apache2/conf-available/security.conf and add the following-

ServerTokens Prod

ServerSignature Off

TraceEnable Off

Header unset ETag

FileETag None

The web application firewall ModSecurity is effective way to protect web server so that it's much less vulnerable to probes/scans and attacks. First install mod_security using following command.

# sudo apt-get install libapache2-mod-security2

# mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Edit /etc/modsecurity/modsecurity.conf

Activate the rules by editing the SecRuleEngine option and set to On and modify your server signature

SecRuleEngine On

SecServerSignature FreeOSHTTP

Now edit the following to increase the request limit to 16 MB

SecRequestBodyLimit 16384000

SecRequestBodyInMemoryLimit 16384000

Download and install the latest OWASP ModSecurity Core Rule Set from their website.

# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/master.zip

# unzip master.zip

# cp -r owasp-modsecurity-crs-master/* /etc/modsecurity/

# mv /etc/modsecurity/modsecurity_crs_10_setup.conf.example /etc/modsecurity/modsecurity_crs_10_setup.conf

# ls /etc/modsecurity/base_rules | xargs -I {} ln -s /etc/modsecurity/base_rules/{} /etc/modsecurity/activated_rules/{}

# ls /etc/modsecurity/optional_rules | xargs -I {} ln -s /etc/modsecurity/optional_rules/{} /etc/modsecurity/activated_rules/{}

Now add the following line in /etc/apache2/mods-available/mod-security.conf

Include "/etc/modsecurity/activated_rules/*.conf"

Check if the modules has been loaded-

# sudo a2enmod headers

# sudo a2enmod mod-security

Now restart Apache2

# service apache2 restart

Apart from ModSecurity, install modevasive to protect your server from DDOS (Denial of Service) attacks

Once you've hardened the system, run some vulnerability scans and penetration tests against it in order to check that it's actually rock solid as you're now expecting it. However attack on your server can happen, it is up-to you to scan the log files regularly to find out any breaches have been occurred. You can use log analyzer tool like ELK stack to drill through servers log files quickly. If you find evidences of breaches then quickly disconnect your server from the internet and take remedial measures.


Ubuntu
  1. Debian – Memindahkan /var, /home Untuk Memisahkan Partisi?

  2. Ubuntu – /usr/bin/host Tidak Mengambil Perubahan Pada /etc/hosts Bahkan Setelah Reboot?

  3. Ubuntu 14.04 "tidak Mendapatkan Uri Pemutaran Saat Masuk File:///*"?

  1. Otentikasi Proksi Dengan Terminal Ubuntu 14.04?

  2. Pasang /tmp Dan /home Untuk Memisahkan Hard Drive?

  3. Mengapa meletakkan hal-hal selain /home ke partisi terpisah?

  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Bagaimana Cara Memasang Kembali Partisi Yang Berbeda Sebagai /home?

  3. Perbedaan dan penggunaan yang benar untuk /tmp dan /var/tmp