Linux : Memperkuat keamanan server


  Performing Security for Linux Servers – Hindari Scanner Performing Security for Linux Servers Banyak sekali jenis server, banyak pula jenis kelemahan, banyak pula jenis serangan. dan yang paling berbahaya adalah “seni menyerang”. karena semua orang memiliki seni yang berbeda dan beragam. Dalam artikel kali ini, saya ingin membahas bagaimana kita menambah power dari security pada server kita. What I want to do? Menghentikan langkah awal dari sang intruder (penyerang) dalam aksinya mencoba menembus sistem keamanan kita.

Kurang jelas? iya,mari kita lihat bagaimana seorang hacker beraksi. Teknik ini sudah umum sekali digunakan, dan memang sangat diperlukan sebelum benar-benar menyerang.

Let’s see how hacker do.

[ LOOKING UP THE VICTIM ] > [ FOOT PRINTING ] > [ SCANNING ] > [ TESTING VULNERABILITY ] > [ EXPLOITING ] > [ TAKEOVERING ] > [ KILLLING ] Looking up the victim

Dalam hal ini victim adalah para srver administrator, termasuk anda yang membaca tulisan ini. Intruder mungkin sedang mencari-cari sasaran secara acak, atau sedang mencoba keamanan anda. Foot Printing Intruder mengumpulkan segala informasi tentang sasaran.

Dalam hal ini, informasi masih bersifat global dan spesifik kecuali sistem yg akan di serang. Seperti informasi gedung, nomor telepon, topologi, jenis modem, jenis website, data administrator, history sasaran, dan segala informasi. Kenapa ini dilakukan? Semakin banyak informasi sasaran, semkin dekat dengan kemenangan.

Scanning Dalam step ini, intruder akan mencari tau tentang sistem yg akan di serang. Jika sebelumnya hanya info global, dalam step ini intruder akan memutari rumah anda, mengetuk pintu, mencatat merek kunci, mencari informasi secara langsung ke sistem. Scanning biasanya menggunakan tool scan, seperti nmap, nikto, dll. Setelah informasi yg di perlukan sudah dirasa cukup, mulailah testing vulnerability. Sayang sekali saya tidak akan membahasnya.

Karena saya akan fokus membahas pada security pada tahap scanning. Kenapa? jangan kecewa dulu, karena scanning sangatlah penting, maka saya akan mencoba menghentikan langkah ini. Sehingga intruder tidak akan mendapatkan apa-apa dari scanning yang dilakukanya. Jika tahap ini sudah terhenti, intruder akan lebih kesulitan dalam menyerang.

How to do it? So simple, kita hanya perlu mendeteksi jumlah request dari host tertentu yang sangat banyak request dalam wktu yg singkat. Mari kita lihat bagaimana scanner bisa melakukan scanning dengan cepat. Scanning 1 way pasti sangat lama. Maka scanner akan melakukan threading untuk membuat proses scan ke titik yg lain. Threading ini bisa jadi sangat banyak. Masing-masing childprocess (hsil threading), melakukan scan ke sasaran.

Sehingga pada host sasaran akan mendapat banyak request dari host intruder.

Look at simulation: –threading–> [CHILD] ————-scaning————-> [victim] [MAIN SCANNER] –threading–> [CHILD] ————-scaning————-> [victim] –threading–> [CHILD] ————-scaning————-> [victim] –threading–> [CHILD] ————-scaning————-> [victim] –threading–> [CHILD] ————-scaning————-> [victim] –threading–> [CHILD] ————-scaning————-> [victim]

nah, dari cara kerjanya itulah kita akan menangkis jurus scanning si intruder. kita tinggal menghitung aja jumlah request/koneksi yang di lakukan pada ip tersebut.

oke, mari kita coba.

[root@servers ~]# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
     46 192.168.1.200
     27 192.168.0.132
     21 192.18.0.70
      9 192.18.0.95
      5 127.0.0.1
      3 192.17.12.154
      2 192.17.45.22
      2 
      1 servers)
      1 Address

nah nah dari situ terlihat sekali, bahwa ip 192.168.1.200 melakukan koneksi sebanyak 200 pipe (hubungan/koneksi), ip 192.168.0.132 sebanyak 27koneksi, dst. oke, berikut adalah ip saya:

array@xcrew:~$ ifconfig eth0 | grep net
eth0      Link encap:Ethernet  HWaddr 60:eb:69:6f:fc:9a  
          inet addr:192.17.12.221  Bcast:192.17.12.255  Mask:255.255.255.0
          inet6 addr: fe80::62eb:69ff:fe6f:fc9a/64 Scope:Link
array@xcrew:~$

saya akan mencoba scaning ke server tersebut menggunakan nikto

array@xcrew:~/data/xterm/scripts/nikto-2.1.4$ ./nikto.pl --host 192.18.0.70
- Nikto v2.1.4
---------------------------------------------------------------------------
+ Target IP:          192.18.0.70
+ Target Hostname:    192.18.0.70
+ Target Port:        80
+ Start Time:         2012-07-03 09:58:09
---------------------------------------------------------------------------
+ Server: Apache
+ ETag header found on server, inode: 918178, size: 177, mtime: 0x4ab4f429cfd41
+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS

nah, sekarang mari kita lihat berapa banyak koneksi yang dilakukan oleh saya ketika scan

[root@servers ~]#  netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
     92 192.17.12.221   <----- congrats!!!
     24 192.168.0.212
      2 222.124.215.3
      1 servers)
      1 Address
      1 202.154.60.198

oke, dari sini, kita sudah tau bagaimana cara mengetahui jumlah koneksi yang dilakukan oleh host/ip tertentu. dari jumlah tersebut, mungkin ada yg cukup mencurigakan. normalnya manusia melakukan koneksi tidak lebih dari 5.

so, saya anggap koneksi sampe puluhan seperti itu sangat mencurigakan sekali. Jadi apa yang harus kita lakukan untuk mencegah scanning? simple way, just BANNED it's ip berikut adalah command pendek untuk melakukan banning ip dengan menggunakan iptables

/sbin/iptables -I INPUT -s 192.168.0.221 -j DROP

OKE, Sekarang secara konsep kita sudah tau bagaimana mendeteksi dan mencegahnya dengan banning. command juga sudah. next, seperti biasa, CODING. kenapa musti coding? karena aq gak akan melihat monitor 24jam perhari demi melototin serangan dan mengetik command secara manual. dan saya rasa semua administrator juga setuju dengan pendapat saya.

Coding, dalam hal ini, membuat script / little aplikasi / aplikasi kecil / aplikasi imut2, yang bertugas melakukan pengawasan, dan jika ada yg mencurigakan, langsung sikattttt dengan jurus banned. hehehe terdengar bagus? let's did it. dalam contoh kali ini, saya menggunakan perl? kenapa? gak kenapa2, pengen aja. script saya buat simple2 aja. kalau mau yg kompleks, boleh deh di bahas lebih lanjut, terutama di forum. hehehe. secara sederhana, dan super simple, scriptnya sih kayak gini

#!/usr/bin/perl

my $maxcon = 20; #ini batas max yg mencurigakan. mencapai angka ini, lgsg sikat gak pake ampun.

while(1){
        system("netstat -ntu | awk '{print \$5}' | cut -d: -f1 | sort | uniq -c | sort -nr >$tmplog");
        open(LOG,$tmplog);
        @log = ;

        foreach $line (@log) {

script tersebut akan melakukan banned terhadap ip yg batas limitnya adalah 20 ($maxcon). but, apakah kita gak butuh untuk melihat ip mana aja yg kena ban? y butuh sih. so, kita bikin log nya dalam sebuah file. kenapa file? agar lebih mudah aja ntar mau di apain. mari kita tambahkan fungsi kecil untuk log.

$bannedip = "/root/log_banned_tukang_scan";

sub logban {
    $ipx = $_[0];
    $cx  = $_[1];

    open(BAN, ">>$bannedip");
    print BAN "$ipx
";
    close(BAN);

    $time = localtime;

    print LOG "$time banned $ipx with $cx connection
";
    close(LOG);
}
    open(LOG, ">>$bannedlog");

nah, kita tinggal tambahkan aja baris berikut setelah banning dengan iptables.

logban($ip, $c);

so kalau kita mau tau ip mana yg kena ban, tinggal cat aja file nya. udah keliatan banget. silahkan di save dalam bentuk apa aja. lalu run as background process, contoh seperti ini:

./namafile.pl &

tanda & di belakang akan mengarahkan proses ke dalam background. sebagai tambahan, biasanya kita mungkin perlu memonitoring ip yg konek dan jumlah koneksinya, dengan mata manusia, dan mungkin bos kita minta display seukuran 70inci untuk memantau secara langsung, berikut ada script kecil. ya lagi2 pake perl. suka banget pake perl? ndak juga sih, semua bahasa juga suka. yang penting happy.

#!/usr/bin/perl

my $seconds = 0.2; 

while(1){

    if($counter == 0){
        system("clear");
        system("echo '';");
        system("echo 'TCP Connection Monitor';");
        system("echo '---------------------------------------------------------------------------';");
        system("echo \"netstat -ntu | awk '{print \$5}' | cut -d: -f1 | sort | uniq -c | sort -nr\";");
        system("echo '---------------------------------------------------------------------------';");
        system("netstat -ntu | awk '{print \$5}' | cut -d: -f1 | sort | uniq -c | sort -nr");
        system("echo '---------------------------------------------------------------------------';");
        system("date");
    }

    $counter++;

    if($counter >= (4200000*$seconds)){
        $counter = 0;
    }

}
exit;

tinggal run dah beres. previewnya kayak gini.

[root@servers ~]# ./monitor.pl 

TCP Connection Monitor
---------------------------------------------------------------------------
netstat -ntu | awk '{print }' | cut -d: -f1 | sort | uniq -c | sort -nr
---------------------------------------------------------------------------
     50 192.23.1.200
     27 192.168.0.132
     21 192.18.0.70
     18 192.18.0.95
      5 192.17.12.154
      5 127.0.0.1
      2 192.17.45.22
      1 servers)
      1 Address
      1 192.17.45.2
      1 192.17.12.198
      1 
---------------------------------------------------------------------------
Mon Jul  2 10:33:03 WIT 2012

script ini semoga berguna, terutama bagi para netmin. dan bagi semua yang membaca artikel ini. harapan saya lebih khusus lagi, semoga artikel ini bisa menunjukkan kepada kita semua bahwa begitu bergunanya pengetahuan akan "coding". tidak hanya untuk bermain-main, tidak hanya untuk hacking, tidak hanya untuk iseng, tidak hanya untuk membuat primbon, tidak hanya untuk membuat hacking tool. Tetapi banyak sekali hal berguna dan bermanfaat yang bisa kita lakukan dengan code. ./ArRay

sumber

Fahmi

We’re still Pioneers, We Barely Begun. Our Greatest Accomplishments cannot be behind us, cause our destiny lies above us.

1 Comment

  • Benedict
    April 2, 2015 at 3:08 pm

    emang penting ya berarti belajar coding.. biar ga dikit2 servis

Leave a Reply