← Back to list

Analisa Data Log Serangan SSH di Server

Apa username dan password favorit penyerang SSH?

Wima S.Y · 2026-06-21 09:27 · 50 claps · 7.3 min read
#bahasa-indonesia #ssh #server-security #brute-force-attack
Open on Medium ↗

Security — ssh —server — data analysis

Analisa Data Log Serangan SSH di Server

Apa username dan password favorit penyerang SSH?

Photo by rc.xyz NFT gallery on Unsplash

Photo by rc.xyz NFT gallery on Unsplash

Setiap server yang terhubung ke internet, hampir pasti menggunakan SSH untuk remote login, atau akses secara remote.

SSH atau Secure Shell, adalah protokol kriptografi yang menjadi standar utama untuk mengelola server berbasis Unix-like, seperti Linux, FreeBSD, OpenBSD, Darwin, dan sebagainya.

Perannya yang penting, membuat SSH sering menjadi target serangan siber, dan menjadi pintu masuk bagi penyerang untuk mendapatkan akses remote ke server.

Biasanya penyerang melakukan teknik Brute Force, yaitu mencoba kombinasi ribuan atau jutaan username dan password. Penyerang sudah mempunyai kamus atau dictionary kombinasi user password, lalu mengeksekusi menggunakan script secara otomatis.

Data kamus atau dictionary ini didapatkan dari berbagai sumber yang bisa didapatkan di internet.

Jika kombinasi ini ada yang tepat, bisa dipastikan, penyerang akan masuk ke server.

Pertanyaannya: kombinasi seperti apa yang sebenarnya mereka coba, dan username password apa saja yang digunakan ?

Tulisan ini akan membahas cara membangun honeypot SSH sederhana untuk menangkap dan menganalisis pola serangan tersebut, lalu menerjemahkannya menjadi langkah mitigasi yang konkret.

Setelah mengetahui username dan password yang paling banyak dipakai, diharapkan penggunaan kombinasi tersebut bisa dihindari.

Log SSH Default

Default OpenSSH hanya mencatat IP dan username yang digunakan untuk percobaan login, dan tidak menampilkan password. Memang seharusnya begitu, untuk alasan keamanan, karena file log biasanya dalam bentuk file text tanpa enkripsi yang mudah dilihat oleh siapa saja.

Contoh file log default OpenSSH :

root@trap:/var/log# cat auth.log | grep Failed | more 
Jun 21 00:00:32 trap sshd[2802346]: Failed password for root from 45.123.217.22 port 36396 ssh2 
Jun 21 00:00:53 trap sshd[2802542]: Failed password for root from 45.227.254.170 port 58538 ssh2 
Jun 21 00:02:02 trap sshd[2804557]: Failed password for invalid user rose from 103.183.62.2 port 39616 ssh2 
Jun 21 00:02:08 trap sshd[2804640]: Failed password for invalid user steam from 200.175.61.207 port 49170 ssh2

Untuk menampilkan password yang digunakan untuk percobaan login, perlu dilakukan sedikit modifikasi pada OpenSSH.

Modifikasi OpenSSH

OpenSSH melakukan proses autentikasi login SSH menggunakan fungsi auth_password().

auth_password(struct ssh *ssh, const char *password)

Fungsi tersebut ada pada file auth-passwd.c, dan fungsi inilah yang akan dimodifikasi untuk mencatat username password pada log sistem.

Hasil modifikasi akan membuat OpenSSH mencatat username,password yang digunakan untuk percobaan login dan alamat IP asal percobaan login terjadi.

Modifikasi yang dilakukan adalah menambahkan :

logit("Trap Login Username: %s Password: %s IP: %.200s",authctxt->user,password,ssh_remote_ipaddr(ssh));

Secara sederhana, penjelasan modifikasinya adalah :

logit(): Fungsi internal OpenSSH untuk menulis ke system log authctxt->user: Menyimpan username yang dicoba password: Parameter yang berisi password yang dicoba ssh_remote_ipaddr(): Fungsi untuk mendapatkan IP address client

“Trap Login” : digunakan sebagai tagging atau marking log ketika terjadi bruteforce.

Sebagai catatan, dalam tulisan ini digunakan Linux Debian 12. Jika digunakan versi distribusi Linux yang lain, bisa di sesuaikan terlebih dulu.

Langkah 1, Mendapatkan Source OpenSSH

Untuk mendapatkan source OpenSSH, bisa dilakukan dengan beberapa cara, disini hanya ditunjukan cara paling praktis.

Cara 1, download versi spesifik dari server resmi OpenSSH

wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.0p1.tar.gz

tar zxvf openssh-10.0p1.tar.gz

Cara ini secara spesifik melakukan download file source dengan versi tertentu. Sehingga jika ada update atau pergantian nama, perlu disesuaikan dengan sumber pada server.

Cara 2, clone repository

Cara ini akan mendapatkan versi terbaru, dan lebih mudah, tidak perlu menggunakan versi spesifik, cukup cloning repository saja.

git clone https://github.com/openssh/openssh-portable.git

Langkah 2, Modifikasi auth-passwd.c

Pada file auth-passwd.c terdapat fungsi auth_password() :

int
auth_password(struct ssh *ssh, const char *password)
{
 Authctxt *authctxt = ssh->authctxt;
 struct passwd *pw = authctxt->pw;

..
}

Modifikasi dilakukan pada baris setelah Authctxt *authctxt = ssh->authctxt;

Setelahnya, fungsi auth_password() menjadi :

int auth_password(struct ssh *ssh, const char *password) 
{ 
 Authctxt *authctxt = ssh->authctxt; 

//baris tambahan
 logit("Trap Login Username: %s Password: %s IP: %.200s", authctxt->user, password, ssh_remote_ipaddr(ssh)); 

 struct passwd *pw = authctxt->pw; .. }

Modifikasi bisa dilakukan dengan menggunakan text editor atau bisa menggunakan sed.

sed -i '/Authctxt \*authctxt = ssh->authctxt;/a \logit("Trap Login Username: %s Password: %s IP: %.200s",authctxt->user,password,ssh_remote_ipaddr(ssh));' auth-passwd.c

Pastikan direktori kerja sudah berada pada direktori source OpenSSH berada.

Langkah 3, Pindahkan SSH Asli ke Port Lain

Agar tidak tercampur dengan login yang valid, atau legal, server SSH asli perlu dipindahkan ke port selain 22. Port 22 ini akan dipakai untuk server OpenSSH hasil modifikasi.

File sshd_config, terletak di /etc/ssh pada Debian 12 yang digunakan dalam contoh ini. Untuk distribusi linux lain, bisa disesuaikan lokasinya.

#/etc/ssh/sshd_config

# sebelum 
#Port 22 

# sesudah 
Port 2222

Port 2222 ini bisa diganti port berapapun, asal bukan port default ssh 22.

Setelah modifikasi, berikutnya adalah restart dan verifikasi.

systemctl restart sshd

Verifikasi :

echo | nc localhost 2222

Jika sshd asli sudah berjalan, akan memberikan respon :

SSH-2.0-OpenSSH_9.2p1 Debian-12+deb12u3
Invalid SSH identification string.

OpenSSH versi 9.2p1 adalah OpenSSH asli Debian 12.

Langkah 4, Kompilasi dan Jalankan Versi Modifikasi

Sebelum proses kompilasi,perlu instalasi library dan tools untuk proses kompilasi.

apt install git build-essential zlib1g-dev libssl-dev

git merupakan opsional dan diperlukan jika digunakan cara clone repository.

Proses kompilasi :

autoreconf 
./configure --prefix=/opt/openssh-portable 
make 
make install

Jika proses kompilasi lancar, hasil kompilasi akan berada pada direktori /opt/openssh-portable.

Untuk menjalankan :

/opt/openssh-portable/sbin/sshd -f /opt/openssh-portable/etc/sshd_config

Verifikasi pada port 22 :

echo | nc localhost 22

Hasil :

SSH-2.0-OpenSSH_10.3
Invalid SSH identification string.

OpenSSH 10.3 adalah versi modifikasi.

Sekarang ada dua server SSH yang berbeda versi dan berjalan pada port yang berbeda.

Port 22: SSH-2.0-OpenSSH_10.3, hasil modifikasi untuk Trap Port 2222 : OpenSSH_9.2p1 Debian-2+deb12u3, asli, untuk login

Analisa Log

Debian 12, secara default menggunakan journald untuk logging.

journalctl -f | grep Login

Hasilnya :

Jun 21 11:27:18 trap sshd-session[50625]: Trap Login Username: abc Password: 111 IP: 182.8.100.94 
Jun 21 11:27:19 trap sshd-session[50625]: Trap Login Username: abc Password: 11 IP: 182.8.100.94

journald menyimpan log dalam bentuk binary, sehingga tidak mudah untuk diproses. Untuk itu perlu digunakan rsyslog.

Proses instalasi rsyslog :

apt install rsyslog

Sebagai catatan, karena log sekarang berisi password mentah (meskipun milik penyerang), perlakukan file log seperti data sensitif, batasi permissionnya dan terapkan retention policy, jangan dibiarkan menumpuk tanpa batas.

Hasil Analisis

Untuk menghitung frekuensi, digunakan kombinasi grep, sed, sort dan uniq :

cat /var/log/auth.log | grep Trap | sed -n 's/.*Username: \([^ ]*\).*/\1/p' | sort | uniq -c | sort -nr | more

auth.log adalah file tempat menyimpan log system, dan Username: dapat ganti dengan Password: atau IP: sesuai kebutuhan.

Hasil dari script tersebut pada server yang sudah berjalan sebelumnya :

20 Username yang paling banyak dicoba, beserta frekuensinya:

  19318 root
   2526 admin
   1380 user
   1027 ubuntu
    645 test
    483 deploy
    332 ftpuser
    330 oracle
    298 debian
    289 postgres
    284 pi
    273 guest
    244 claude
    235 git
    216 support
    215 dev
    214 deployer
    212 user1
    207 minecraft
    193 server

20 Password yang paling banyak dipakai :

   2367 123456
   1052 123
    925 1234
    741 password
    670 1
    628 12345678
    613 root
    606 12345
    407 123456789
    330 admin
    305 qwerty
    290 abc123
    283 111111
    279 test
    262 P@ssw0rd
    229 toor
    204 ubuntu
    203 1234567890
    194 user
    179 123123
    175 admin123
    175 Aa123456
    165 123321

20 IP yang aktif melakukan bruteforce :

   3690 87.251.64.149
   2607 66.212.18.237
   2151 95.85.245.51
   1623 5.182.26.69
   1522 91.92.40.239
   1454 176.65.139.247
   1381 176.65.139.92
    963 154.89.153.73
    910 87.251.64.147
    813 176.65.139.246
    761 91.92.42.61
    761 91.92.42.195
    761 91.92.40.200
    761 45.153.34.149
    761 192.109.200.220
    761 176.65.139.215
    759 176.65.139.217
    758 45.153.34.181
    744 91.92.40.153

Beberapa IP teratas terlihat berasal dari blok yang berdekatan (mis. rentang 176.65.139.x dan 91.92.40.x muncul berulang), pola ini sering mengindikasikan satu penyedia hosting/VPS yang dipakai sebagai basis serangan terdistribusi, dan layak ditelusuri lebih lanjut lewat WHOIS atau lookup ASN sebelum memutuskan langkah blokir.

Hasil log bisa diolah data, sesuai kebutuhan. Analisa data lanjutan bisa menggunakan python untuk fleksibilitas dan penampilan data yang lebih rinci.

Contoh, jika ingin menampilkan presentase, scrip bisa di modifikasi :

grep "Trap Login" auth.log | sed -n 's/.*Username: \([^ ]*\).*/\1/p' | sort | uniq -c | sort -nr | head -20 | awk -v total="$(grep -c "Trap Login" auth.log)" '{printf "  %6d  %s (%.1f%%)\n", $1, $2, ($1/total)*100}'

Hasil tampilannya :

   19318  root (44.0%)
    2526  admin (5.8%)
    1380  user (3.1%)
    1027  ubuntu (2.3%)
     645  test (1.5%)
     483  deploy (1.1%)
     332  ftpuser (0.8%)
     330  oracle (0.8%)
     298  debian (0.7%)
     289  postgres (0.7%)
     284  pi (0.6%)
     273  guest (0.6%)
     244  claude (0.6%)
     235  git (0.5%)
     216  support (0.5%)
     215  dev (0.5%)
     214  deployer (0.5%)
     212  user1 (0.5%)
     207  minecraft (0.5%)
     193  server (0.4%)

Selain username password dan IP, waktu serangan juga bisa digunakan sebagai data untuk analisa.

Contoh script menghitung frekuensi serangan pada waktu tertentu :

LOG_FILE="auth.log"
TOTAL=$(grep -c "Trap Login" "$LOG_FILE" 2>/dev/null || echo "0")
grep "Trap Login" "$LOG_FILE" 2>/dev/null | \
    grep -oE "[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}" | \
    cut -d'T' -f2 | cut -d':' -f1 | \
    sort | uniq -c | \
    awk -v total="$TOTAL" '
    {
        count[$2] = $1
        if ($1 > max) max = $1
    }
    END {
        for (h = 0; h < 24; h++) {
            hour_str = sprintf("%02d", h)
            count_val = count[hour_str] + 0
            if (count_val > 0) {
                bar_length = int((count_val / max) * 50)
                bar = ""
                for (i = 0; i < bar_length; i++) bar = bar "+"
                pct = (count_val / total) * 100
                printf "  %s:00  %6d  %s (%.1f%%)\n", hour_str, count_val, bar, pct
            } else {
                printf "  %s:00  %6d  %s (0.0%%)\n", hour_str, 0, "                                                  "
            }
        }
    }'

Untuk script di atas, format timestamp yang digunakan adalah format ISO : 2026–06–17T19:49:31.249789+07:00

Hasil :

  00:00    1947  +++++++++++++++++++++ (4.4%)
  01:00    1903  ++++++++++++++++++++ (4.3%)
  02:00    1693  ++++++++++++++++++ (3.9%)
  03:00    1596  +++++++++++++++++ (3.6%)
  04:00    1921  +++++++++++++++++++++ (4.4%)
  05:00    1638  ++++++++++++++++++ (3.7%)
  06:00     926  ++++++++++ (2.1%)
  07:00    1999  ++++++++++++++++++++++ (4.6%)
  08:00    1980  +++++++++++++++++++++ (4.5%)
  09:00    1111  ++++++++++++ (2.5%)
  10:00    1915  +++++++++++++++++++++ (4.4%)
  11:00    2215  ++++++++++++++++++++++++ (5.0%)
  12:00    1242  +++++++++++++ (2.8%)
  13:00    1338  ++++++++++++++ (3.0%)
  14:00    1329  ++++++++++++++ (3.0%)
  15:00    1023  +++++++++++ (2.3%)
  16:00    1743  +++++++++++++++++++ (4.0%)
  17:00    4536  ++++++++++++++++++++++++++++++++++++++++++++++++++ (10.3%)
  18:00    3278  ++++++++++++++++++++++++++++++++++++ (7.5%)
  19:00    2247  ++++++++++++++++++++++++ (5.1%)
  20:00    2086  ++++++++++++++++++++++ (4.8%)
  21:00    1453  ++++++++++++++++ (3.3%)
  22:00    1392  +++++++++++++++ (3.2%)
  23:00    1372  +++++++++++++++ (3.1%)

Penutup

Setelah mengumpulkan ribuan percobaan login SSH dari internet, terlihat bahwa sebagian besar serangan masih menggunakan kamus username dan password yang sangat umum.

Username seperti:

root
admin
ubuntu
user
postgres

masih mendominasi percobaan login.

Sementara password yang paling sering dicoba masih berupa:

123456
password
qwerty
admin
root

Temuan ini menunjukkan bahwa sebagian besar serangan brute force masih bersifat oportunistik dan otomatis.

Bagi administrator sistem, pelajaran yang dapat diambil cukup sederhana:

  • Hindari password yang umum digunakan.
  • Gunakan password unik dan panjang.
  • Nonaktifkan login root jika memungkinkan.
  • Gunakan autentikasi berbasis SSH key.
  • Terapkan pembatasan akses dan monitoring login.

Meskipun terdengar sederhana, langkah-langkah tersebut sudah cukup untuk menggagalkan sebagian besar serangan brute force otomatis yang setiap hari berkeliaran di internet.

Teknik Honeypot yang dipakai disini adalah dengan sshd asli yang modifikasi untuk logging. Ada resiko, jika penyerang secara kebetulan menebak kombinasi user/password yang benar, maka penyerang akan bisa login ke server.

Honeypot disini, bukan versi yang aman, sehingga disarankan hanya membuat server ini untuk keperluan jebakan saja bukan server produksi.

Modifikasi fungsionalitas kriptografi dan autentikasi OpenSSH sangat berbahaya jika diterapkan pada server produksi.

Pastikan eksperimen ini hanya di lingkungan sandbox, VPS uji coba, atau Virtual Machine. Jangan pernah mencatat password dalam bentuk cleartext di server produksi yang aktif.

Untuk keperluan yang lebih serius, disarankan menggunakan tools honeypot profesional seperti Cowrie.


메타데이터
post_id
78a7ea5cfac3
slug
analisa-data-log-serangan-ssh-di-server-78a7ea5cfac3
url
https://medium.com/@wimasy/analisa-data-log-serangan-ssh-di-server-78a7ea5cfac3
canonical_url
https://medium.com/@wimasy/analisa-data-log-serangan-ssh-di-server-78a7ea5cfac3
author_url
https://medium.com/@wimasy
status
ok
fetched_at
2026-07-21 21:51:53