Detección de intrusos - Pasos a seguir para detectar a un intruso

2 - Pasos a seguir para detectar a un intruso


Tutorial creado por Conde Vampiro . Extraido de: http://www.mononeurona.org/index.php?idp=334
27 Octubre 2005
""Lo primero que debemos hacer, es seguir una serie de pasos los cuales nos ayudaran a descubrir si realmente ha entrado un intruso, ya que en muchas ocasiones pensamos que ha entrado alquien pero no es cierto. Por eso, ante todo CALMA, esto es lo mas importante para un buen administrador.
Realmente en muchas ocaciones es facil detectar a un intruso, ya que suelen seguir un patron detectable, el cual seria el siguiente:

Este esquema es basicamente los pasos de un intruso, primero entra al sistema, si solo tiene acceso como usuario explotara algun fallo del sistema para obtener ID 0 o lo que es lo mismo, privilegios de root, en caso de entrar como root u obtenerlo de alguna otra manera, se dedicara a controlar el sistema, dejando algun mecanismo para volver cuando quiera, seguramente copiara el fichero /etc/passwd y el /etc/shadow, en caso de que el sistema use "Shadow", luego le dara rienda suelta a su imaginacion, como por ejemplo, instalar un sniffer, troyanos, leer mail's ajenos, etc. Y en caso de ser un pirata malicioso puede causar desastres en el sistema, como seria el caso de modificar paginas web, borrar ficheros o mail's, producir un DoS (Denial of Service), cambiar passwords de usuarios legitimos, etc.
A continuacion pongo diferentes pasos a seguir por diferentes colectivos de seguridad como son el CERT, ISS, etc.
Esto son los pasos a seguir del CERT (http://www.cert.org):
Examinar los ficheros log como el 'last' log, contabilidad, syslog, y los C2 log buscando conexiones unusuales o cosas sospechosas en el sistema. Aunque ahi que tener especial cuidado en guiarnos por los log's, ya que muchos intrusos utilizaran diversas herramientas para borrar sus huellas.
Buscar por el sistema ficheros ocultos o unusuales (ficheros que empiezan por un '.' (punto), no salen con un simple 'ls'), ya que pueden ser usado para esconder herramientas para romper la seguridad del sistema, por ejemplo un crackeador o incluso contener el /etc/passwd del sistema o de otros sistemas al cual ha entrado nuestro intruso. Muchos piratas suelen crear directorios ocultos utilizando nombres como '...' (punto-punto-punto), '..' (punto-punto), '..^g' (punto-punto control+G). En algunos casos un pirata ha utilizado nombres como '.x' o '.hacker' o incluso '.mail'.
Buscar ficheros SET-UID por el sistema. Ya que en muchas ocasiones los piratas suelen copiar y dejar escondido copias del /bin/sh para obtener root. Podemos utilizar el comando 'find' para buscar este tipo de ficheros por el sistema (el comando 'find' puede ser sustituido por un troyano para esconder ficheros del pirata, por lo que no es totalmente fiable), para ello ejecutamos la siguiente linea:
# find / -user root -perm -4000 -print
Revisar los ficheros binarios del sistema para comprobar que no han sido sustituidos por un troyano, como por ejemplo los programas 'su', 'login', 'telnet' y otros programas criticos del sistema. (Existen varias herramientas conocidas como 'RootKit' que permite a un pirata cambiar los binarios del sistema por troyanos que son copias exactas de los originales). Lo recomendado es comparar con las copias de seguridad aunque puede que las copias de seguridad tambien hayan sido sustituidas por un troyano.
Examinar todos los ficheros que son ejecutados por 'cron' y 'at'. Ya que algunos piratas depositan puertas traseras que le permiten volver al sistema aunque los hayamos echado del sistema. Asegurarse que todos los ficheros son nuestros y no tienen permiso de escritura.
Examinar el fichero /etc/inetd.conf en busca de cambios, en especial aquellas entradas que ejecuten un shell (por ejemplo: /bin/sh o /bin/csh) y comprobar que todos los programas son legitimos del sistema y no troyanos.
Examinar los ficheros del sistema y configuracion en busca de alteraciones. En particular, buscar entradas con el signo '+' o 'host names' no apropiados en ficheros como /etc/hosts.equiv, /etc/hosts.lpd y en todos los ficheros .rhost del sistema, con especial interes los de 'root', 'uucp', 'ftp' y otras cuentas del sistema. Estos ficheros no deberian tener atributo de escritura.
Examinar cuidadosamente todos los ordenadores de nuestra red local en busca de indicios que nuestra red ha sido comprometida. En particular, aquellos sistemas que compartan NIS+ o NFS, o aquellos sistemas listados en el /etc/hosts.equiv. Logicamente tambien revisar los sistemas informaticos que los usurios comparten mediante el acceso del .rhost.
Examinar el fichero /etc/passwd, en busca de alteraciones en las cuentas de los usuarios o la creacion de cuentas nuevas, especialmente aquellas cuentas con ID 0, las que no tienen password, etc.
Estos nueve puntos, como ya he dicho son los pasos a seguir recomendados por el CERT, los cuales estan muy bien pero se quedan un poco cortos de soluciones practicas para el administrador. Para ello nos vamos a basar en un excelente trabajo de un grupo de Hackers conocidos como Technotronic (http://www.technotronic.com), los cuales se basan en el mismo documemento pero explicando los metodos de los piratas y como combatirlos. Los cuales son los siguientes:
Los ficheros Log:
* messages: Este fichero contiene bastante informacion, por lo que debemos buscar sucesos unusuales.
* xferlog: Si el sistema comprometido tiene servicio FTP, este fichero contiene el loggeo de todos los procesos del FTP. Podemos examinar que tipo de herramientas a subido el pirata y que ficheros ha bajado de nuestro servidor.
* utmp: Este fichero contiene informacion en binario de todos los usuarios conectados al sistema en el momento. Por lo que puede ser muy util para determinar quien esta conectado al sistema en este momento. Para ello ejecutaremos el comando 'who' o 'w'.
* wtmp: Cada vez que un usuario entra al servidor, sale del mismo, la maquina resetea, este fichero es modificado. Este fichero al igual que el anterior esta en binario por lo que tendremos que usar alguna herramienta especial para ver el contenido de este fichero. Este fichero contiene la informacion en formato usuario, hora de conexion, e IP origen del usuario, por lo que podemos averiguar de donde provino el pirata (decir que aunque contemos con esta informacion puede que haya sido falseada por el pirata utilizando alguna tecnica para ocultar su IP original o haya borrado su entrada).
* secure: Algunos sistemas Unix loggean mensajes al fichero secure, ya que utilizan algun software de seguridad para ello, como el TCP Wrapper.
Muchos piratas intentaran borrar sus huellas utilizando unos programas conocidos como 'Zapper's' o 'Zap'. Los mas habituales, debido aque estan ampliamente disponibles por Internet, son los siguientes, aunque existen mas en realidad:
* marry.c
* zap.c
* zap2.c
* remove.c
* cloak.c
Por supuesto contamos con mecanismos para detectar este tipo de programas, esto lo explicare en la seccion de herramientas.
Debemos buscar cuidadosamente ficheros SETUID o SETGID (especialmente aquellos ficheros SETUID de root). Para ello podemos utilizar, otra vez, el comando 'find' y escribimos lo siguiente:
# find / -group kmen -perm -2000 -print
o también:
# find / -user root -perm -4000 -print -xdev
incluso
# ncheck -s /dev/rsd0g
Este ultimo comando 'ncheck' nos permitira buscar ficheros SETUID por las particiones.
Buscar troyanos en nuestros ficheros binarios. Ya que suele ser una de las tareas principales de un pirata cuando a comprometido la seguridad de un servidor. Una lista pero no exhaustiva de posibles binarios que un pirata puede sustituir, es la siguiente:
* login
* su
* telnet
* netstat
* ifconfig
* ls
* find
* du
* df
* libc
* sync
* asi como los binarios listados en /etc/inetd.conf.
Al igual que antes tenemos varias utilidades ampliamente disponibles para detectar estos troyanos, por otro lado, los piratas tambien tienen ampliamente disponible estos paquetes de troyanos, conocidos como 'RootKit', como ya mencione antes.
Otras de las principales tareas de un pirata consiste en la utilizacion de sniffers, para capturar informacion confidencial. Y como siempre los sniffers mas usados por los piratas, son los siguientes:
* linsniff666.c
* esniff.c
* solsniff.c
* sunsniff.c
* sniffit
Ahora nos enfocaremos en la parte de los passwords, no veo necesario explicar el fichero /etc/passwd ademas de donde se haya. Un pirata intentara por todos los medios obtener el fichero de passwords, para usar un programa especial que le permitira averiguar los passwords de los usuarios. Los principales 'crackeadores' son:
* Crack
* John The Ripper 1.5
* Cracker Jack
* Hades
Bueno ya hemos visto diferentes tecnicas que emplearan los piratas contra nuestro sistema, por lo que estamos mejor preparados para enfrentarnos a ellos. Ahora nos enfocaremos de forma mas practica a los diferentes pasos a seguir cuando hemos detectado un pirata.
Si hemos pillado al intruso en el momento, tenemos varias opciones:
* Hablar con el, usando el comando 'talk', aunque debemos tener en cuenta que puede contestar de forma amistosa (ayudandomos con la seguridad del sistema) o agresiva (borrarando el sistema para no dejar rastro).
* Desconectarle del sistema, usando el comando 'kill', pero para evitarnos que vuelva a entrar, antes de usar 'kill', usaremos el comando 'passwd' para cambiar el password de la cuenta por el cual el pirata entro, por ejemplo, podemos ejecutar los siguientes comandos:
# ps -aux
USER PID %CPU %MEN VSIZE RSIZE TT STAT TIME COMMAND
ROOT 1434 20.1 1.4 968K 224K 01 R 0:00 ps aux
intruso 147 1.1 1.9 1.02K 304k p3 S 0:07 ~ (csh)
intruso 321 10.0 8.7 104k 104k P3 S 0:09 cat /etc/passwd
intruso 339 8.0 3.7 2.05K 456k P3 S 0:09 crack
# passwd intruso
Changing password for intruso
New password: noentrasmas
Retype new password: noentrasmas
# kill -9 147 321 339
Utilizar las utilidades del sistema para recopilar informacion del pirata, en caso de denuncia sera necesaria. Por lo que trataremos de 'tracearle', usando los siguientes comandos:
* who
* w
* last
* lastcomm
* netstat
* snmpnetstat
* Obtener informacion del router.
* Examinar el fichero /var/adm/messages.
* Examinar el syslog.
* Examinar los log del wrapper.
* Ejecutar el comando 'finger' en todos los usuarios locales, para comprobar cuando fue la ultima vez que estuvieron en el sistema.
* Examinar los ficheros history del shell, como el .history, .rchist y ficheros similares.
Ejecutando el comando 'finger', intentaremos sacar informacion del host de donde provino el ataque, como por ejemplo:
# finger @intruso.es
o también:
# finger intruso@intruso.es
Si tenemos suerte podremos sacar informacion del host del cual provino el ataque.
Tambien podemos dirigirnos a Internic (http://www.internic.net) donde podemos pedir informacion de cualquier servidor del mundo, siempre y cuando no sea militar. Alli ponemos el dominio del servidor donde provino el ataque, y podremos ver con quien debemos ponernos en contacto con el servidor atacante. Si existe un telefono de contacto, lo mejor seria llamar a la persona encargada, ya que si enviamos un mail informandole que tiene un pirata puede que el pirata intercepte el mensaje y se haga pasar por el administrador. En caso de vernos forzados a escribir un mail, poner cualquier pretexto para tener que hablar por telefono con el administrador del servidor atacante, si es necesario ofrecenos a pagar la llamada nosotros mismos, en calidad de buenas intenciones. A parte del website de Internic tambien podemos conectar via Telnet para solicitar informacion de un servidor.
Ahora que tenemos bastante informacion del atacante, lo mejor seria desconectar nuestro servidor de Internet y dedicarnos unos dias a repasar cuidadosamente lo sucedido. Ademas si nadie accede al servidor durante unos dias podremos trabajar mejor y mas rapido.
Tendremos que hacer una copia de seguridad, por lo que ejecutaremos la siguiente sentencia:
# dd if=/dev/sda of=/dev/sdb
En caso de duda de como usar el comando 'dd', lo mejor seria recurrir al comando 'man'.
Tener a mano un block de notas y un lapiz, para escribir todo lo que nos parezca importante, asi como todos los pasos que estamos realizando por el sistema comprometido.
Ahora solo nos queda realizar un exhaustivo analisis mediante los pasos anteriormente descritos.
Ya a estas alturas conocemos los peligros y pasos a seguir para recuperar el control en nuestro sistema, asi de como echar al pirata. Por lo que ahora listare un lista mas generalizada de los puntos que ahi que mirar con detalle, ademas nos sera util para poder consultar rapidamente.
* Creacion de cuentas nuevas o alteracion de algunasexistentes.
* Excesivo comsumo de memoria o disco duro.
* Directorios o ficheros sospechosos.
* Alteracion en la configuracion del sistema.
* Procesos sospechosos.
* Conexiones de servidores unusuales.
* Reconfiguracion de los modems.
* Serie de repeticiones de conexion al mismo puerto.
* Conexion de usuarios en horas o dias unusuales.""

Autor y licencia de 'Detección de intrusos'


Tutorial de Conde Vampiro . Extraido de: http://www.mononeurona.org/index.php?idp=334 CopyLeft
Este trabajo está licenciado bajo la Creative Commons License. 1999-2005 © :: MonoNeurona.org ::
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.