Brute Force SSH di Linux (Countermeasure)

Posted on Posted in Linux Networking

Jika terjadi serangan brute force SSH terhadap sistem Linux, maka pada file /var/log/secure akan tercatat IP Address maupun usernama yang digunakan oleh attacker. Anda dapat melihatnya dengan menggunakan perintah sebagai berikut :

[root@rendra ~]# cat /var/log/secure |grep ‘invalid user’ |more
Jul  4 19:26:58 rendra sshd[1221]: input_userauth_request: invalid user admin
Jul  4 19:26:58 rendra sshd[1219]: input_userauth_request: invalid user admin
Jul  4 19:26:58 rendra sshd[1228]: input_userauth_request: invalid user admin
Jul  4 19:26:58 rendra sshd[1223]: input_userauth_request: invalid user admin
Jul  4 19:26:58 rendra sshd[1220]: input_userauth_request: invalid user admin
Jul  4 19:26:58 rendra sshd[1222]: input_userauth_request: invalid user admin
Jul  4 19:26:58 rendra sshd[1226]: input_userauth_request: invalid user admin
Jul  4 19:26:58 rendra sshd[1224]: input_userauth_request: invalid user admin
Jul  4 19:26:58 rendra sshd[1225]: input_userauth_request: invalid user admin
Jul  4 19:26:58 rendra sshd[1211]: Failed none for invalid user admin from 10.10.10.6 port 34773 ssh2
Jul  4 19:26:59 rendra sshd[1213]: Failed password for invalid user admin from 10.10.10.6 port 34774 ssh2
Jul  4 19:26:59 rendra sshd[1210]: Failed password for invalid user admin from 10.10.10.6 port 34772 ssh2
Jul  4 19:26:59 rendra sshd[1212]: Failed password for invalid user admin from 10.10.10.6 port 34775 ssh2
Jul  4 19:26:59 rendra sshd[1217]: Failed password for invalid user admin from 10.10.10.6 port 34781 ssh2
Jul  4 19:26:59 rendra sshd[1214]: Failed password for invalid user admin from 10.10.10.6 port 34778 ssh2
Jul  4 19:27:00 rendra sshd[1216]: Failed password for invalid user admin from 10.10.10.6 port 34780 ssh2
Jul  4 19:27:00 rendra sshd[1215]: Failed password for invalid user admin from 10.10.10.6 port 34777 ssh2
Jul  4 19:27:00 rendra sshd[1209]: Failed password for invalid user admin from 10.10.10.6 port 34771 ssh2
Jul  4 19:27:00 rendra sshd[1240]: input_userauth_request: invalid user admin
Jul  4 19:27:02 rendra sshd[1232]: Failed password for invalid user admin from 10.10.10.6 port 39819 ssh2
Jul  4 19:39:19 rendra sshd[1364]: input_userauth_request: invalid user admin
Jul  4 19:39:19 rendra sshd[1365]: input_userauth_request: invalid user admin
Jul  4 19:39:19 rendra sshd[1366]: input_userauth_request: invalid user admin

 

Dengan bantuan script berikut, maka IP Addres yang tercatat pada file /var/log/secure tersebut akan dimasukkan ke file /etc/hosts.deny. Jika IP Address attacker sudah tercatat pada file /etc/hosts.deny, maka server tidak akan menerima akses SSH dari IP Address tersebut. Adapun script yang dapat digunakan adalah sebagai berikut :

#!/bin/bash
#This script will monitor for failed login attempts and after a specified number of times add the ip to a deny list
#Chad
LOGFILE=”/var/log/secure”
HOSTSDENY=”/etc/hosts.deny”
BADCOUNT=”5″
# read logfile and look for invalid login attemps
grep sshd $LOGFILE |grep “Invalid user”| awk ‘{print $NF}’|sort|uniq -c|sort -n|sed “s/[[:space:]]*//” | while
read i
do
# read number of failed attempts
count=echo $i | cut -d" " -f1
# read ip address from failed attempt
ip=echo $i | cut -d" " -f2
#check hostdeny file to see if IP already exist
already=grep $ip $HOSTSDENY | grep sshd
#if IP does not exist add it to hostdeny file
if [ -z “$already”  ]
then
if [ “$count” -ge “$BADCOUNT” ]
then
echo “sshd: “$ip >> $HOSTSDENY
fi
fi
done

 

Buatlah sebuah file (misalnya logssh) pada direktori /root, kemudian isikanlah script di atas pada file tersebut. Langkah berikutnya adalah gantilah permission file tersebut menjadi file eksekusi seperti perintah berikut ini.

[root@rendra ~]#touch /root/logssh

[root@rendra ~]#chmod 777 /root/logssh

 

Setelah itu jalankanlah file logssh tersebut dengan perintah :

 

[root@rendra ~]#./logssh

 

Setelah menjalankan perintah tersebut seharusnya pada file /etc/hosts.deny akan tercantum IP Address dari penyerang (dalam contoh di atas adalah 10.10.10.6). Contoh file /etc/hosts.deny yang sudah menyimpan daftar IP Address penyerang dapat dilihat dengan perintah sebagai berikut :

[root@rendra ~]# cat /etc/hosts.deny
#
# hosts.deny    This file contains access rules which are used to
#               deny connections to network services that either use
#               the tcp_wrappers library or that have been
#               started through a tcp_wrappers-enabled xinetd.
#
#               The rules in this file can also be set up in
#               /etc/hosts.allow with a ‘deny’ option instead.
#
#               See ‘man 5 hosts_options’ and ‘man 5 hosts_access’
#               for information on rule syntax.
#               See ‘man tcpd’ for information on tcp_wrappers
#
sshd: 10.10.10.6
sshd: 10.10.10.9
sshd: 10.10.10.7
sshd: 10.10.10.8
sshd: 10.10.10.4
sshd: 10.10.10.10

 

Untuk memasukkan IP Address yang ada di /var/log/secure maka Anda harus menjalankan file logssh tadi secara berulang-ulang. Jika dijalankan secara manual, maka akan sangat merepotkan, belum tentu Anda dapat menjalankannya setiap waktu. Sehingga untuk membuat file tersebut selalu dijalankan dengan durasi waktu tertentu, maka diperlukan service crond. Untuk menjalankan service crond, dapat digunakan perintah sebagai berikut :

 [root@rendra ~]# /etc/init.d/crond start
Starting crond:                                            [  OK  ]

 

Untuk memastikan bahwa crond selalu dijalankan pada saat server pertama kali dihidupkan, maka dapat digunakan perintah sebagai berikut :

[root@rendra ~]# chkconfig crond on

 

Langkah terakhir adalah menentukan kapan file logssh tadi akan dijalankan oleh crond. Sebagai contoh jika ingin menjalankan file logssh tersebut setiap 5 menit, maka dapat digunakan perintah crond sebagai berikut :

[root@rendra ~]# crontab –e

 

Kemudian isikanlah baris-baris berikut :

5 * * * * /root/logssh
10 * * * * /root/logssh
15 * * * * /root/logssh
20 * * * * /root/logssh
25 * * * * /root/logssh
30 * * * * /root/logssh
35 * * * * /root/logssh
40 * * * * /root/logssh
45 * * * * /root/logssh
50 * * * * /root/logssh
55 * * * * /root/logssh
0 * * * * /root/logssh

 

Maksud konfigurasi crontab diatas adalah file /root/logssh akan dijalankan di menit ke -5, ke-10, ke-15 dan seterusnya. File tersebut juga akan dijalankan setiap jam dan setiap hari.

— end —

 

 

Share Button

Leave a Reply

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

*