Analisa Hidden Proccess dengan lsof

Jadi satpam server memang lebih sering nganggur daripada kerja. Tapi sekali ada orang iseng masuk ke server kadang suka pusing mencar-cari bagaimana cara dia masuk, dan bagaimana mendeteksi apakah server kita sudah di apa-apakan oleh tamu tak diundang tersebut.
Banyak cara yang bisa dilakukan untuk deteksi dini intrusi di server kita tetapi karena saya masih amatiran maka cara termudah lah yang saya pilih.

Pertama saya akan melihat process yang sedang berjalan dengan command ps aux, kemudian dicoba analisa apakah ada sesuatu yang aneh dan dari sana bisa terdeteksi ada yang mencurigakan atau tidak.
Contoh nya seperti dibawah ini

ps aux|grep nobody
USER       PID %CPU %MEM   VSZ  RSS  TT  STAT STARTED      TIME COMMAND
nobody    6003  0.0  0.2  3952 3556  ??  S     7:02AM   0:31.37 /bin/bash (perl)
..........
..........
[dan seterusnya]

Setelah menemukan ada proses yang mencurigakan, Kita lihat lebih lanjut dengan ps axj|grep nobody

ps axj|grep nobody
USER       PID  PPID  PGID   SESS JOBC STAT  TT       TIME COMMAND
nobody    6003     1  6003 c83f5c40    0 S     ??    0:31.46 /bin/bash (perl)
nobody   17104 18172 18172 c5123900    0 S     ??    0:00.37 /usr/local/apache/bin/httpd -DSSL
nobody   19345 18172 18172 c5123900    0 S     ??    0:00.15 /usr/local/apache/bin/httpd -DSSL
..........
..........
[dan seterusnya]

Makin mencurigakan, disini user nobody terlihat seolah-olah mengeksekusi /bin/bash padahal dia menjalankan perl dengan PPID 1 (Parent Process ID) 😀

Selanjutnya kita akan focus ke pid dari proses tersebut.
ok kita periksa lebih dalam lagi dengan lsof

lsof -i -a -n -p 6003
COMMAND  PID   USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
perl    6003 nobody    3u  IPv4 0xe5892a00      0t0  TCP *:sd (LISTEN)
lsof -a -d cwd -p 6003
COMMAND  PID   USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
perl    6003 nobody  cwd   VDIR 116,131072     1024    2 /

Dan benar sekali dugaan saya ternyata bukan /bin/bash yang di eksekusi tetapi pearl dan lebih parah nya lagi aplikasi tersebut membuka port bernama sd hmmm sd apa an ya port berapa lagi yang dibuka.

Berhubung saya tidak tahu port sd itu berapa, tetapi saya tahu bahwa apabila port terdeteksi dengan nama tertentu maka port tersebut tercatat di /etc/services maka kesanalah saya mencari reverensi.

cat /etc/services |grep sd
sd              9876/tcp   #Session Director
sd              9876/udp   #Session Director

nah port nya sudah ketauan yaitu port 9876 makin jelas aja nih kayaknya ada yang pasang sesuatu di server ini.
Sekarang kita lihat apakah benar port 9876 ini sedang aktif dengan perintah netstat.

netstat -an |grep 9876
tcp4       0      0  *.9876                 *.*                    LISTEN

Tuh kan bener open port tcp di 9876. Tapi jangan panik dulu dan jangan dimatikan dulu process nya kita telusuri sejauh mana kita dapat informasi dari process id ini.

setelah tahu bahwa ada open port 9876 yang harus kita lakukan sekarang adalah mencoba port tersebut sebetulnya ada apa disana..

telnet localhost 9876
Trying 127.0.0.1...
Connected to 127.0.0.1.

Escape character is '^]'.
Sua senha:
Senha Incorreta!
Connection closed by foreign host.

Nah keliatan ada sesuatu ketika kita mencoba login di port tersebut, ada kata Sua Senha: disana dan dengan bantuan Google saya bisa tahu bahwa senha artinya password apalagi setelah dicoba ketik sembarang muncul kalimat Senha Incorreta! yang artinya password salah 😀
Dari hasil test diatas saya bisa menebak bahwa kemungkinan port yang terbuka ini adalah semacam bot atau shell dengan back connect system.

Setelah ditemukan proses nya, sekarang kita coba cari dimanakah gerangan file yang di eksekusi berada. hidden process memang akan menyulitkan admin untuk mencari lokasi asli aplikasi yang dijalankan tetapi bukan tidak mungkin ditemukan. Untuk bisa mengeksekusi sebuah aplikasi tentu saja aplikasi tersebut harus ada di box yang bersangkutan.
Kebiasaan yang terjadi pada sebuah server hosting adalah, adanya script yang memiliki bug yang bisa di exploitasi sehingga cracker bisa menyimpan atau mengeksekusi command dari luar untuk mendownload file tertentu. Dan aplikasi yang biasa dipakai adalah WGET oleh karena itu saya akan coba fokus mencari adakah aplikasi php yang memiliki fungsi download mendownload dengan menggunakan wget.

find ./*/public_html/ -depth 1 -name "*.php" | xargs grep "wget"

./rajabisn/public_html/samiyo.php:echo sr(15,"".$lang[$language.'_text16'].$arrow."","".in('hidden','dir',0,$dir).ws(2)."".$lang[$language.'_text17'].$arrow."".in('text','rem_file',78,'http://'));

./gpsdimor/public_html/mod.php:echo sr(15,"".$lang[$language.'_text16'].$arrow."","".in('hidden','dir',0,$dir).ws(2)."".$lang[$language.'_text17'].$arrow."".in('text','rem_file',78,'http://'));

Tuh kan ada file yang memiliki fungsi untuk mendownload sekarang yang kita lakukan adalah menghapus file bersangkutan, patch aplikasi (cms) yang memiliki bug. Atau kalau itu bukan milik anda biasanya saya suspend saja account nya 😀 sedikit sadis tapi lumayan efektif.

Dan jangan lupa anda juga harus kill process yang sedang berjalan.

Selanjutnya.. Rajin-rajin siskamling biar keamanan server anda terjaga.


About this entry