TDCTF Academy Logo TDCTF ACADEMY

SSH Security

Definisi

SSH (Secure Shell) adalah protokol jaringan kriptografi yang menyediakan remote login, eksekusi perintah jarak jauh, dan tunneling aman antara dua perangkat. SSH menggantikan protokol tidak aman seperti Telnet, rlogin, dan rsh yang mengirim data dalam bentuk teks polos (plaintext). SSH berjalan di port 22 TCP dan menggunakan model client-server.

SSH Protocol Versions

SSHv1 (1995)

SSH versi 1 adalah protokol awal yang sekarang dianggap tidak aman. Kerentanan utama:

  • CRC-32 integrity check yang lemah - rentan terhadap serangan insertion attack
  • Tidak ada perlindungan sesi setelah login
  • Algoritma kriptografi usang
  • EOL (End of Life) - semua implementasi modern seharusnya menonaktifkan SSHv1

SSHv2 (1996, distandarisasi 2006)

SSH versi 2 adalah protokol yang aman dan digunakan secara luas. Perbaikan utama:

  • HMAC untuk integrity check yang lebih kuat
  • Diffie-Hellman key exchange yang wajib
  • Dukungan berbagai algoritma kriptografi modern
  • Strict host key checking
  • Session rekeying untuk PFS

Semua sistem operasi modern sudah menggunakan SSHv2 secara default. Jika masih ada yang mengaktifkan SSHv1, harus segera dinonaktifkan.

Key Types

SSH menggunakan pasangan kunci publik-privat untuk otentikasi. Berikut jenis kunci yang umum:

Jenis Algoritma Ukuran Keamanan Kinerja
RSA Rivest-Shamir-Adleman 2048-4096 bit Kuat (4096) Sedang
ECDSA Elliptic Curve DSA 256-521 bit Setara RSA 3072 (256-bit) Cepat
Ed25519 Edwards-curve DSA 256 bit Sangat kuat Sangat cepat

Ed25519 adalah pilihan terbaik untuk kunci SSH modern:

  • Ukuran kecil (~68 byte public key)
  • Tanda tangan cepat dan deterministik
  • Keamanan tinggi (Curve25519)
  • Didukung oleh OpenSSH 6.5+

RSA masih banyak digunakan dan kompatibel dengan sistem lama. Disarankan ukuran minimal 2048 bit, idealnya 4096 bit. ECDSA aman tetapi ada kekhawatiran tentang kurva NIST (backdoor potensial). Ed25519 tidak memiliki kekhawatiran tersebut.

Hardening sshd_config

Berkas konfigurasi utama SSH server adalah /etc/ssh/sshd_config. Berikut rekomendasi hardening:

1. Disable Root Login

PermitRootLogin no

Mencegah login langsung sebagai root. Administrator harus login sebagai user biasa, lalu menggunakan sudo atau su. Ini membatasi serangan brute-force terhadap akun root.

2. Key-Only Authentication

PasswordAuthentication no
PubkeyAuthentication yes

Matikan autentikasi password - hanya izinkan login dengan kunci publik. Password rentan terhadap brute-force, sedangkan kunci SSH secara praktis tidak bisa ditebak.

3. Change Port (Opsional)

Port 2222

Mengubah port default (22) ke port lain mengurangi serangan bot otomatis yang memindai port 22. Ini bukan langkah keamanan sesungguhnya (security through obscurity) tetapi mengurangi noise log.

4. AllowUsers / AllowGroups

AllowUsers alice bob charlie
AllowGroups ssh-users

Batasi user atau grup mana yang bisa login SSH. User yang tidak tercantum ditolak secara otomatis.

5. Disable Empty Passwords

PermitEmptyPasswords no

Pastikan akun dengan password kosong tidak bisa login.

6. Limit Authentication Retries

MaxAuthTries 3
MaxSessions 2

Batasi jumlah percobaan autentikasi untuk mencegah brute-force.

7. Idle Timeout

ClientAliveInterval 300
ClientAliveCountMax 0

Putuskan koneksi SSH yang idle setelah 5 menit.

8. Protocol Version

Protocol 2

Pastikan hanya SSHv2 yang diaktifkan.

9. Strong Ciphers and MACs

MACs hmac-sha2-512
KexAlgorithms curve25519-sha256,diffie-hellman-group-exchange-sha256

Contoh sshd_config Aman

Port 2222
Protocol 2
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers alice bob
MaxAuthTries 3
MaxSessions 2
ClientAliveInterval 300
ClientAliveCountMax 0
PermitEmptyPasswords no

Fail2ban

Fail2ban adalah tools keamanan yang memindai log file (misalnya /var/log/auth.log) untuk mendeteksi pola serangan brute-force. Ketika terdeteksi banyak percobaan login gagal dari IP yang sama, fail2ban menambahkan aturan iptables/nftables untuk memblokir IP tersebut sementara.

Konfigurasi dasar untuk SSH:

[sshd]
enabled = true
port = ssh,maxretry = 3
bantime = 3600
findtime = 600

Parameter:

  • maxretry = 3: blokir setelah 3 kali gagal
  • bantime = 3600: blokir selama 1 jam
  • findtime = 600: dalam jendela 10 menit

Fail2ban sangat efektif mengurangi percobaan brute-force dan membersihkan log dari percobaan otomatis.

SSH Audit

SSH audit adalah proses memeriksa konfigurasi SSH server untuk memastikan keamanan. Tools yang bisa digunakan:

ssh-audit (Python)

ssh-audit.py example.com

Tool ini secara otomatis memeriksa:

  • Algoritma kunci host yang didukung
  • Ciphers, MACs, dan KEX algorithms
  • Level keamanan tiap algoritma (baik/warn/lemah)
  • Versi protokol SSH
  • Rekomendasi peningkatan

Lynis

Lynis adalah security auditing tool untuk Linux yang mencakup audit SSH detail:

lynis audit system

Lynis akan memeriksa sshd_config dan memberikan skor serta rekomendasi.

Manual Check

Cek langsung konfigurasi dengan:

sudo sshd -T

Perintah ini menampilkan konfigurasi efektif SSH (termasuk default) yang sedang digunakan.

Kesimpulan

Keamanan SSH adalah fondasi penting administrasi server. Beberapa langkah kunci: gunakan SSHv2 saja, pilih Ed25519 untuk kunci, terapkan key-only authentication, nonaktifkan root login, dan lindungi dengan fail2ban. Audit konfigurasi secara berkala dengan tools seperti ssh-audit untuk memastikan tidak ada algoritma lemah yang masih diaktifkan. Dengan kombinasi langkah-langkah ini, risiko serangan terhadap layanan SSH dapat diminimalkan secara signifikan.

PADA HALAMAN INI