Check the new version here

Popular channels

Redes Ethernet, Introdución, detectar espias + herramientas

Las redes ethernet estan formadas por un cable común en el que pinchamos todos los equipos, y cualquiera de estos es capaz de espiar todo el tráfico que circula por ella. Una red del tipo Ethernet, es una red de transmision de paquetes basada en bus común. Al bus común conectamos todos los equipos informaticos de la red. El bus puede ser un simple cable coaxial (10Base2), o puede estar formado por elementos pasivos como hubs, que nos facilitan el cableado estructurado de la red por pares trenzados (10BaseT). Bajo esta arquitectura de red, cuando un equipo desea transmitir un paquete, comprueba que el bus esta libre y lo envia. Si dos equipos envian simultaneamente un paquete a la red, se produce una colisión. La colisión es detectada por ambos y esperaran un tiempo aleatorio antes de intentar enviar de nuevo la información al bus. Todos los equipos compatibles ethernet poseen una direccion MAC única en el mundo, de 48 bits de longitud. Cada fabricante de equipos ethernet tiene asignado un segmento de direcciones, y es responsabilidad de este asignar una dirección distinta a cada equipo. Las direcciones MAC estan almacenadas en una pequeña memoria que possen las tarjetas de red. Las direcciones MAC se representan en hexadecimal con el siguiente formato: XX:XX:XX:XX:XX:XX La información es enviada al bus agrupada en forma de tramas o paquetes. Estos paquetes contienen la dirección MAC de destino, la de origen, el tipo de datos, los datos a transmitir y un checksum de comprobación. En condiciones normales, una tarjeta ethernet solo es capaz de oir los paquetes destinados a su dirección MAC o los destinados a todo el mundo (BROADCAST). La direción MAC de BROADCAST es FFFFFFF

Funcionamiento del protocolo IP sobre Ethernet

El protocolo IP (Internet Protocol), es un protocolo de red con direcciones de 32 bits, bajo el conocido formato aaa.bbb.ccc.ddd, formando 4 grupos de 8 bits. La dirección de red IP puede ser dividida en dos partes, la dirección de red y la dirección de equipo. Si estamos en una red conectada a Internet, nuestra dirección de red será unica en Internet, y nuestra dirección de equipo será unica en nuestra red, formando así una dirección IP única a nivel global. Vamos a centrarnos en la conectividad entre maquinas de nuestra propia red IP, funcionando sobre un medio fisico Ethernet. Para enviar un paquete IP desde nuestra estación 192.168.1.1 hacia la estación 192.168.1.2, es necesario conocer la direcion MAC de la estación de destino. Podriamos solucionarlo con un fichero de configuración, asignando a cada dirección IP de nuestra red la correspondiente dirección MAC asociada a cada IP, pero sería poco practico. Para solucionar este problema se desarrolló el protocolo ARP (Address Resolution Protocol). Cuando un equipo desea conocer la dirección MAC correspondiente a una IP, emite un paquete BROADCAST preguntando "¿ Quien es el propietario de 192.168.1.2 ?". Todos los equipos de la red escuchan la petición, pero solo responde el destinatario: "Aqui está 192.168.1.2 desde la dirección MAC xx:xx:xx:xx:xx". Esta respuesta se almacena en el cache ARP del peticionario para usos posteriores, y procede a enviar el paquete al destinatario.

Herramientas para espiar

Desde hace unos años, es habitual que en todos los sistemas operativos Unix se incluya una herramienta de captura y visualizacion de trafico. GNU/Linux incluye "tcpdump" en todas sus distribuciones. El programa tcpdump solo puede ser ejecutado por root, y se trata basicamente, de una herramienta de diagnosis para redes TCP/IP. Puede usarse para analizar nuestro propio trafico, o el de toda nuestra ethernet. Para poder escuchar todo el trafico que circula por una red, es necesario colocar la tarjeta ethernet en modo "promiscuo", que significa que recogerá todos los paquetes de la red, aunque el destinatario no sea su propia dirección MAC. El programa tcpdump no es excesivamente peligroso en sí y es una gran herramienta para los administradores de redes. Pero circulan por Internet unas cuantas herramientas menos inocentes, que estan orientadas especificamente a la captura de claves. Estos programas analizan el contenido de los paquetes de nuestra red, en concreto los primeros paquetes de las sesiones de protocolos que comunmente contienen claves de acceso, como Telnet, FTP, POP, IMAP y Rlogin. Los nombres de usuario y claves obtenidas son depositadas en un fichero de texto, para posterior lectura por parte del espía.

Medidas preventivas

Como administradores de redes, una de nuestras obligaciones es la seguridad, o al menos eso creen nuestros jefes. Si este es nuestro caso, lo mejor es permanecer cerca del mundillo underground, para mantener la forma. No tendremos activos servicios innecesarios en nuestros sistemas. Cualquier dia nos llevamos un disgusto por una brecha de seguridad en un servicio que jamás hemos utilizado, pero que teniamos activo. Intentaremos que todos nuestros equipos dispongan de las últimas actualizaciones en seguridad. Si esto no es posible por motivos de presupuesto, será mejor que obtengamos por escrito la negativa por parte del responsable de dotación presupuestaria. No suelen negarse cuando les solicitas una respuesta escrita y les explicas las posibles consecuencias de no actualizar. Otra de nuestras funciones será analizar cuidadosamente el diseño de red, ver las partes sensibles de esta, y realizar un informe por escrito, ofreciendo una solución preventiva, basada en conmutadores ethernet o firewalls departamentales con criptación de trafico, para minimizar el impacto de un posible ataque espía. En realidad, nuestra opinión no será tomada en consideración en ningun caso, pero podremos rescatar nuestro informe en el futuro, cuando suframos un ataque. Debemos ser duros con nuestros usuarios, y obligarles, de forma automatica preferiblemente, al cambio periodico de claves de acceso, y a que dichas claves no sean faciles de adivinar. Seria lamentable que el usuario "presidente" usase la clave "presidente". Podemos estar seguros que a los primeros que señalarán cuando pase algo, será a nosotros, por no proteger las cuentas de los usuarios. Nunca debemos acceder a nuestros sistemas usando sesiones no encriptadas, al menos si vamos a operar como administradores. Un buen sustituto de Telnet, rlogin y rsh es ssh. Existen clientes para Windows, y las versiones unix son libres y gratuitas. Realizaremos o obligaremos a la realización de copias de seguridad, diariamente o semanales. El periodo solo depende del riesgo. Evitaremos en lo posible las relaciones de confianza entre maquinas, especialmente si no las administramos todas nosotros. Evitaremos conectar directamente nuestros recursos a Internet o a redes de terceros. Sí fuera necesario hacerlo, lo primero será instalar un servicio cortafuegos separando nuestras redes interna y externa. Definiremos una politica de restricción total, y abriremos paulatinamente a medida que se nos solicite por escrito, y esté correctamente aprovado. No facilitaremos las claves de administrador a nadie que no deba utilizarlas. Si nuestro jefe no sabe administrar los equipos, es mejor no darselas, pues las apuntará el algun papel. Intentaremos violar la seguridad de nustros propios sistemas periodicamente. Si en la red hay más de un administrador, es un juego muy divertido y provoca un alto grado de adicción. Analizaremos o realizaremos herramientas que analicen nuestros ficheros de alarmas e historicos. Localizadas las cuentas mas sensibles y comprobaremos que solo acceden desde las direcciones habituales. Si aparece un acceso desde una posicion extraña, hablaremos con el propietario de la cuenta para comprobar la autenticidad del acceso. Este tipo de comprobaciones conciencian a los usuarios de que en el departamendo de informatica nos tomamos muy en serio nuestro trabajo.

Herramienta para la detección de espias

El programa que acompaña al articulo, es un detector de tarjetas ethernet en modo promiscuo. Se llama NePED, y podeis encontrarlo en el CDROM de este més. NePED es una herramienta imprescindible para cualquier administrador de redes TCP/IP y la forma de uso es muy sencilla: # neped Al ejecutarlo, el programa nos informará de todos los equipos conectados a nuestra red local con la tarjeta ethernet en modo promiscuo: # neped eth0 ---------------------------------------------------------- > My HW Addr: 00:004:C2:0E:2A > My IP Addr: 192.168.1.1 > My NETMASK: 255.255.255.0 > My BROADCAST: 192.168.1.255 ---------------------------------------------------------- > Scanning .... *> Host 192.168.1.2, 00:60:08:64:06F **** Promiscuous mode detected !!! > End. La técnica empleada para la detección es sumamente sencilla. Se trata de realizar una simple petición ARP para cada una de las IPs de nuestra red, con la salvedad de que los paquetes no van destinados a broadcast (FFFFFFF), sino a una dirección arbitraria (cualquiera que no exista). Solo las maquinas con la ethernet en modo promiscuo son capaces de ver estos paquetes, y por lo tanto, solo ellas contestarán a nuestras peticiones.

Implementación de la herramienta

La implementación es exclusivamente GNU/Linux, puesto que utilizamos sockets del tipo SOCK_PACKET, que solo existen en nuestra plataforma. Haremos uso de ioctl() para averiguar nuestar propia MAC, IP, IP_NETMASK e IP_BROADCAST. El primer paso es crear un socket por el que podamos enviar y recibir paquetes ARP, con la capa ethernet modificada. Linux nos permite crear sockets de la familia AF_INET del tipo SOCK_PACKET, en nuestro caso el socket ethernet solo escuchará paquetes de protocolo ARP:



ethsock = socket (AF_INET, SOCK_PACKET, htons (ETH_P_ARP));
El segundo paso es conocer nuestra dirección MAC, para conseguirla necesitaremos hablar con la capa netdev del kernel mediante ioctl()'s al socket que hemos creado:


unsigned char myMAC[6]; /* 48 bits */
struct ifreq if_data;

strcpy (if_data.ifr_name, "eth0"); /* interfaz de red */
ioctl (ethsock, SIOCGIFHWADDR, &if_data); /* Get HW Address */
memcpy (myMAC, if_data.ifr_hwaddr.sa_data, MAC_LEN);
Necesitamos ademas, nuestras direcciones IP, Netmask y Broadcast. Para obtenerlas usaremos el mismo mecanismo ioctl():


ioctl (ethsock, SIOCGIFADDR, &if_data);
memcpy (&myIP, if_data.ifr_addr.sa_data + 2 , IP_LEN);
myIP = ntoh( myIP );

ioctl (ethsock, SIOCGIFNETMASK, &if_data);
memcpy (&myNETMASK, if_data.ifr_netmask.sa_data + 2 , IP_LEN);
myNETMASK = ntoh( myNETMASK );

ioctl (ethsock, SIOCGIFBRDADDR, &if_data);
memcpy (&myBROADCAST, if_data.ifr_broadaddr.sa_data + 2 ,
IP_LEN);
myBROADCAST = ntoh( myBROADCAST );
Configuramos el socket en modo no bloqueante, así podremos leer sin necesidad de esperar la llegada de paquetes. Para cambiar este flag, usamos fcntl() :



int skflags;
skflags = fcntl (ethsock, F_GETFL);
fcntl (ethsock, F_SETFL, skflags | O_NONBLOCK);
Ya tenemos todas las direcciones necesarias y procedemos a ejecutar el bucle, desde la primera dirección IP de nuestra red, hasta la última, preguntando mediante ARP, y esperando respuestas por parte de las interfaces promiscuas.



for (dIP = (myIP & myNETMASK) + 1; dIP < myBROADCAST; dIP++)
{
enviar_peticion_ARP( dIP );
esperar_un_tiempo();
if( recibir_respuesta_ARP( dIP ) )
alarma_promiscuidad( dIP );
}
Para enviar la petición ARP a la red, es necesario crear previamente el contenido del paquete que enviaremos. Si nos fijamos, la dirección MAC de destino no es FFFFFFF, tal y como describe el standard, sino una dirección cualquiera, que con toda seguridad no existirá en nuestra red.



/* Dir. MAC destino (00:01:02:03:04:05) */
memcpy(arp_pkt.dst_mac, "12345", MAC_LEN);
/* Dirección MAC de origen (la real de nuestra tarjeta) */
memcpy(arp_pkt.src_mac, myMAC, MAC_LEN);

/* Tipo de pakete (no usamos 802.3) */
arp_pkt.pkt_type = htons( ETH_P_ARP );

/* Opciones ARP: */
/* Dirección Hardware tipo Ethernet, de 48bits,*/
/* Dirección Protocolo tipo Internet, de 32bits,*/
/* Peticion de resolucion. */
arp_pkt.hw_type = htons( ADDR_TYPE_MAC );
arp_pkt.hw_len = MAC_LEN;
arp_pkt.pro_type = htons( ADDR_TYPE_IP );
arp_pkt.pro_len = IP_LEN;
arp_pkt.arp_op = htons ( ARP_REQUEST );

/* Datos del peticionario (nosotros) */
memcpy (arp_pkt.sender_eth, myMAC, MAC_LEN);
ip = htonl (myIP);
memcpy (arp_pkt.sender_ip, &ip, IP_LEN);

/* Datos solicitados (las IPS de nuestra red, una a una) */
memcpy (arp_pkt.target_eth, 0, MAC_LEN);
ip = htonl (dip);
memcpy (arp_pkt.target_ip, &ip, IP_LEN);
Cuando tengamos el paquete ARP confeccionado procederemos a su envio, con un sencillo sendto() indicando el interfaz de salida adecuado:



struct sockaddr to;
int to_len;

memset(&to, 0, sizeof(to); /* inicializamos con ceros */
to.sa_family = AF_INET; /* familia Internet */
strcpy(to.sa_data, "eth0"); /* interfaz de red "eth0" */
to_len = sizeof(to);

sendto( ethsock, &arp_pkt, sizeof(arp_pkt), 0, to, to_len );
La recepción la realizaremos como en cualquier otro socket de datagramas, mediante recvfrom(). En caso de recibir alguna respuesta ARP comprobaremos que se trata de la solicitada más recientemente, e informaremos de la detección de una tarjeta ethernet en modo promiscuo:



len = recvfrom (rec, long_packet, MAX_PACK_LEN, 0,
&from, &from_len);




Como afrontar un caso de espionaje

Ante cualquier caso de detección de espias, lo primero que debemos realizar es una localización fisica del equipo espía. En pequeñas instalaciones no es dificil, pero cuando el numero de equipos supera los 50, repartidos en diversas plantas de uno o varios edificios, el proceso puede resultar laborioso. Un ayudante o un ordenador portatil se hacen imprescindibles. Una vez localizado el equipo, se procederá a su desconexión inmediata de la red, y a su inspección detallada para realizar un informe sobre el impacto en nuestra seguridad. Lo primero será averiguar que claves ha conseguido, que nivel de confidencialidad o riesgo tienen las claves afectadas. Tras la detección de una brecha de seguridad, suelen exigir resposabilidades desde arriba, es el momento de poner enfasis en la falta de recursos del departamento de informatica. CASO 1) Somos Administradores en una Empresa El espía puede ser alguien de nuestra empresa, y con las claves de acceso obtenidas, imitar la identidad de otro usuario de nuestra red. Estos casos son especialmente peligrosos, pues el espía sabe exactamente que hacer, como, y cuando. Si como administradores detectamos un caso de estos, mi consejo es que lo dejemos en manos de Recursos Humanos. Nunca puedes predecir como reaccionará el individuo cuando se entere que ha sido descubierto. La gente de Recursos Humanos sabe como "disuadir" de la forma más acertada a este tipo de elementos. CASO 2) Somos administradores en una Universidad El espía puede ser un estudiante en una universidad. La situación es incluso más peligrosa que la anterior. El estudiante no tiene tanto a perder como un empleado en una empresa, y normalmente, cree que tiene mucho a ganar. Imaginemos por un momento que haría un estudiante con la cuenta y clave del departamento de gestión academica. Ante casos como estos, es más importante proteger con rapidez que buscar al culpable concreto. Lo primero será valorar que posible trafico ha visto desde su posición en la red. Haremos una lista de sistemas afectados y los iremos desconectando de la red. Revisaremos cuidadosamente los historicos de accesos a esos sistemas, y comprobaremos la integridad de sus sistemas operativos. Caducaremos TODAS las cuentas, obligando al cambio de clave en la proxima sesión. Cuando hayamos realizado el informe de situación, solicitaremos permiso para reconectar los equipos a la red de una forma más segura posible. Este es un buen momento para recordar nuestro informe de seguridad preventiva, probablemente seamos escuchados. CASO 3) Somos administradores en un Proveedor de Servicios Internet Mas vale prevenir. Es fundamental separar las redes de los distintos clientes para evitar el espionaje cruzado. Los casos de espionaje a proveedores suelen tener mal principio y peor final. CASO 4) Una intrusión externa En cualquiera de los tres supuestos anteriores, ante una intrusión externa, espiaremos un tiempo al intruso. El suficiente para saber como ha conseguido entrar, donde tiene el nido, y cuantas maquinas ha dominado. Desconectaremos todos los accesos externos, incluidos modems o y accesos RDSI. Corregiremos el agujero y posibles alteraciones en los sistemas operativos. Cambiaremos las cuentas con acceso a shell de todas las maquinas espiadas. Y conectaremos de nuevo, esperando su pronto regreso.

0
0
0
12
0No comments yet