Setelah sebelumnya saya sudah menulis tentang 2 tulisan terkait dengan SSH server (Baca : Secure Shell (SSH) & Instalasi SSH Server), selanjutnya adalah melakukan hardening terhadap SSH server yang digunakan.
Hardening ini dilakukan supaya SSH server bisa terlidungi dari ancaman-ancaman orang-orang yang tidak bertanggung jawab, yang mungkin saja berniat untuk mengambil data-data penting yang ada di server.
Walaupun hardening ini bisa dibilang sudah menjadi hal yang wajib untuk dilakukan, tapi saya memberi rekomendasi untuk melakukan uji coba hardening SSH server ini pada server development terlebih dahulu, jangan langsung di terapkan pada server production yang sudah berjalan. Kenapa? Karena jika konfigurasi hardening yang dilakukan tidak benar & tidak sesuai kebutuhan. Bisa saja yang terjadi adalah kita sebagai user yang eligible tidak bisa remote login SSH ke server bersangkutan karena hardening yang dilakukan terlalu ketat. Maka dari itu, pastikan konfigurasi hardening yang akan di terapkan pada server production, di uji coba terlebih dahulu menggunakan server testing.
Berikut adalah konfigurasi-konfigurasi hardening yang bisa rekan-rekan lakukan untuk meningkatkan keamanan SSH server.
Disable Root Login
Secara default, remote login SSH menggunakan user root pada server berbasis Linux Ubuntu sudah dibatasi aksesnya, yaitu tidak bisa login sebagai user root menggunakan metode password tetapi harus menggunakan metode SSH key (SSH key akan dijelaskan pada tulisan selanjutnya.
Lain halnya dengan server Ubuntu, server lain seperti Fedora, Red hat ataupun Linux enterprise secara default memperbolehkan akses remote login SSH menggunakan akun root. Hal ini tentu saja bisa menjadi celah keamanan yang dapat dimanfaatkan oleh orang-orang yang menyusupi sistem server kita.
Mengapa berbahaya? Bukankah akun root sama saja dengan yang lainnya? Tentu saja akun root ini berbeda dengan akun yang lain. Akun root pada sistem operasi Linux merupakan superuser/administrator yang memiliki full hak akses terhadap sistem, sehingga bisa sangat berbahaya apabila akun root bisa diakses oleh sembarangan orang.
Maka dari itu, root login SSH perlu kita disable. Berikut adalah langkah-langkahnya.
- Remote login ke SSH server
- Pertama edit file konfigurasi SSH dengan perintah “sudo nano /etc/ssh/sshd_config” atau “sudo vi /etc/ssh/sshd_config” lalu cari baris berikut
PermitRootLogin prohibit-password
Ubah “prohibit-password” menjadi “no”
PermitRootLogin no
- Restart service SSH dengan perintah berikut
# sudo systemctl restart ssh
User SSH
Selain user root, user lain juga perlu dibatasi aksesnya. Biasanya dalam sebuah sistem operasi Linux ada beberapa user-user yang sengaja dibuat untuk berbagai macam kebutuhan ataupun sekedar user yang digunakan oleh individual admin-admin yang menangani server tersebut.
Secara prinsip, sebenarnya kita bisa hanya mengizinkan user-user tertentu yang bisa remote login SSH, sehingga user-user yang tidak ada di list allow tidak bisa remote login SSH.
Misalnya, kali ini saya akan membuat user dengan nama “remote” dan hanya menggunakan user tersebut untuk remote login. Dari sisi sistem juga akan dibuat supaya remote login SSH hanya bisa dilakukan dengan akun “remote”. Berikut adalah langkah-langkah untuk melakukannya.
- Pertama, create user yang akan digunakan khusus untuk remote login SSH. User yang akan saya buat adalah user dengan nama “remote“. Jalankan perintah berikut untuk membuat user baru
# sudo adduser remote Adding user `remote' ... Adding new group `remote' (1001) ... Adding new user `remote' (1001) with group `remote' ... Creating home directory `/home/remote' ... Copying files from `/etc/skel' ... New password: (Masukkan password baru) Retype new password: (Masukkan password baru) passwd: password updated successfully Changing the user information for remote Enter the new value, or press ENTER for the default Full Name []: remote Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
- Masukkan user yang tersebut ke dalam grup sudo, supaya user remote bisa menjalankan command sebagai superuser/root dengan cara menjalankan perintah berikut
# sudo usermod -aG sudo remote
- Selanjutnya allow user remote pada file konfigurasi SSH. Edit file konfigurasi SSH lalu tambahkan baris berikut di bagian paling bawah
AllowUsers remote
Note : Apabila user yang di allow untuk remote login lebih dari satu, maka format penulisannya adalah seperti ini “AllowUsers user1 user2“, dipisahkan oleh spasi
- Restart service SSH dengan perintah berikut
# sudo systemctl restart ssh
- Bandingkan saat login menggunakan user yang tidak di allow & user yang di allow
# Unallowed# ssh raihan@192.168.100.56 raihan@192.168.100.56's password: Permission denied, please try again.
# Allowed
# ssh remote@192.168.100.56 remote@192.168.100.56's password: Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-42-generic x86_64) .... Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. remote@server:~#
Port SSH
Secara default SSH client & server melakukan komunikasi menggunakan port TCP 22, tetapi penggunaan port TCP tersebut bisa diganti dengan port non-standard. Misalnya menggunakan port-port yang tidak diketahui oleh orang lain selain diri kita sendiri. Tujuannya tentu saja untuk menghindari percobaan pembobolan sistem via SSH, karena port yang kita gunakan tidak terpikirkan oleh orang lain.
Perubahan konfigurasi port ini dilakukan di sisi SSH server, sedangkan dari sisi SSH client cukup menyesuaikan port yang digunakan pada saat remote login dilakukan. Dengan syarat port non standard yang dipilih belum digunakan oleh aplikasi lain di SSH server. Berikut adalah langkah-langkah untuk melakukan perubahan port SSH server.
- Edit file konfigurasi SSH lalu cari baris berikut
#Port 22
Hilangkan tanda pagar dan ubah angka 22 menjadi port SSH yang akan digunakan, misalnya “2020”
Port 2020
- Restart service SSH dengan perintah berikut
# sudo systemctl restart ssh
- Remote login SSH dengan port SSH yang baru, jalankan perintah SSH dengan tambahan “-p (port-baru)” atau sesuaikan port SSH yang baru jika menggunakan Putty Windows
# ssh remote@192.168.100.56 -p 2020
Banner & MOTD
Selain hardening dalam hal pengamanan akses SSH, kita juga bisa membuat semacam peringatan kepada orang-orang yang mencoba untuk meretas SSH server via SSH. Bahkan bukan hanya sekedar peringatan, tapi bisa saja kalimat yang tampil adalah kalimat ancaman sehingga orang-orang tersebut akan berpikir 2x sebelum melanjutkan aksinya. Hal tersebut bisa dilakukan dengan cara mengaktifkan banner & menambahkan teks pada MOTD (Message of The Day).
Banner
Banner merupakan teks yang muncul saat melakukan remote login SSH. Secara default banner ini tidak diaktifkan. Berikut adalah cara untuk mengaktifkan banner pada SSH server.
- Edit file konfigurasi SSH lalu cari baris berikut
#Banner /etc/issue.net
Hilangkan tanda pagar pada baris tersebut
Banner /etc/issue.net
- Selanjutnya, penambahan ataupun pengubahan teks banner bisa dilakukan dengan cara edit /etc/issue.net. Isi default file tersebut kurang lebih seperti ini (Sesuai dengan versi Ubuntu yang digunakan)
Ubuntu 20.04.1 LTS
Rekan-rekan bisa menambahkan teks-teks tertentu sebagai warning kepada orang yang ingin melakukan remote login ke server SSH. Misalnya seperti ini
############################################################# # SERVER DEVELOPMENT RAIHAN # # SERVER INI TERMONITOR OLEH PENULIS BLOG COLAMEN.ID # # https://colamen.id # #############################################################
Setelah perubahan dilakukan, save file issue.net
- Testing remote login SSH, dan lihat kalimat yang muncul
MOTD
Sedangkan MOTD (Message of The Day) adalah teks yang muncul setelah login berhasil dilakukan. Secara default MOTD ini sudah aktif pada sistem operasi Linux, biasanya berisi informasi tentang versi sistem operasi yang digunakan. Tetapi kita bisa menambahkan teks tertentu pada MOTD tersebut, misalnya kalimat peringatan. Berikut adalah langkah-langkahnya.
- Sebelum melakukan perubahan pada MOTD, lakukan backup file MOTD (/etc/update-motd.d/00-header) terlebih dahulu, dengan perintah berikut
# cd /etc/update-motd.d/ # sudo cp 00.header 00.header.save
- Edit file /etc/update-motd.d/00-header lalu tambahkan pesan peringatan ataupun ancaman dengan format printf “pesan”, contohnya seperti ini
printf "#########################################################################\n" printf "# INI SERVER SECURE SSH! #\n" printf "# JANGAN LANJUTKAN APABILA ANDA BUKAN PENULIS BLOG COLAMEN.ID ! #\n" printf "#########################################################################\n"
- Testing remote login SSH, masukkkan password dan lihat kalimat yang muncul setelah berhasil login
SSH Audit Tool (Enkripsi)
Walaupun SSH ini sudah menggunakan metode enkripsi yang powerful sehingga sangat sulit untuk dibaca datanya, tetapi enkripsi yang digunakan oleh aplikasi openssh ini bisa diganti dengan metode yang lebih rumit sehingga hacker makin sulit untuk melakukan dekripsi data-data yang dikirimkan via SSH.
Sebelum melakukan improvement di sisi enkripsi SSH, kita perlu melakukan pengecekkan terhadap konfigurasi SSH, supaya terlihat apa saja enkripsi yang bisa di improve. Pengecekkan bisa dilakukan menggunakan script SSH Audit. Script SSH audit tidak bisa digunakan langsung dari SSH server yang akan dilakukan pengecekkan, melainkan harus dilakukan dari komputer lain. Berikut adalah langkah-langkah untuk melakukan pengecekkan SSH audit serta meningkatkan enkripsi yang digunakan.
Pengecekan SSH Audit
Note : Pengecekan SSH audit yang akan saya lakukan menggunakan komputer dengan sistem operasi Linux. Jika teman-teman menggunakan sistem operasi Windows dan kesulitan menjalankan script python, silakan melewati bagian pengecekkan SSH audit & langsung lanjut ke bagian improvement enkripsi SSH
- Akses terminal SSH client berbasis Linux
- Install aplikasi pendukung SSH audit, yaitu pyhton & git dengan perintah berikut
# sudo apt-get update # sudo apt-get install python git -y
- Clone git repository SSH audit dengan perintah berikut
# git clone https://github.com/arthepsy/ssh-audit.git # cd ssh-audit
- Edit file script ssh-audit (ssh-audit.py) & temukan baris berikut
oport, port = '22', 22
Sesuaikan nomor port yang digunakan oleh SSH server, disini saya menggunakan port 2020
oport, port = '2020', 2020
- Jalankan script ssh-audit dengan perintah”python ssh-audit.py (ip address server)”
- Terlihat dari pengecekkan yang dilakukan, bahwa ada beberapa metode enkripsi SSH yang bisa kita tingkatkan
Improvement Enkripsi SSH
- Edit file konfigurasi SSH lalu tambahkan baris berikut di bagian paling bawah
KexAlgorithms curve25519-sha256@libssh.org Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
- Restart service SSH dengan perintah berikut
# sudo systemctl restart ssh
- Lakukan pengecekkan kembali dengan SSH audit setelah improvement dilakukan
Beberapa konfigurasi yang ada diatas sebenarnya belum mencakup semua hardening yang bisa dilakukan pada SSH server. Masih ada beberapa hal lagi yang bisa dilakukan untuk mengamankan SSH server yang kita miliki. Tetapi karena pertimbangan tingkat kesulitan konfigurasi hardening lainnya, maka saya akan menunjukkan konfigurasi hardening lainnya pada tulisan terpisah.