Hardening SSH Server – Ubuntu 20

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.

Leave a Reply

Your email address will not be published. Required fields are marked *