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.