------------------------ Intro ---------------------------------- Este es un pequeño tutorial sobre ARP spoofing en Windows y Linux. No es el mas completo pero contiene lo necesario para empezar. ------------------------ Que es ARP Spoofing? ---------------------------------- ARP spoofing es un metodo en la que se explota la interacion de la IP y el protocolo de Ethernet. Esto permite al atacante ver todo lo que tu computadora manda y recibe. Un poco mas: Cuando tu computadora manda informacion a una red, necesita una forma de encontrar su destinario, esto se logra en varias capaz dependiendo de que tan lejos tiene que viajar. En la primera capa, se encuentra la direccion MAC. La direccion MAC solo se usa para comunicar dentro de segmentos de la red local, la cual se llaman subnets. Una vez que pasa por el router o switch y pasa a otro subnet entra a la segunda capa. En esta capa se tiene que transformar el MAC porque la base de datos seria demasiado grande para poder procesar rapidamente ya que la direccion de MAC es un hex de 48bits. Para esto existen diferentes servicios como DNS (Domain Name Service), WINS (Windows Internet Naming Service), y la IP (Internet Protocol) que se encargan del manejo de data. Para facilitar la transmicion de esta infomacion se invento ARP (Address Resolution Protocol). ARP se encarga de manejar la relacion entre el identificador MAC y la IP. ------------------------ Que pasa exactamente? ---------------------------------- Una computadora que esta conectada a una LAN Ethernet tiene dos direcciones, la MAC y la IP. La direccion MAC (Media Access Control) es la direccion fisica de tu tarjeta de red, tambien conocido como NIC (Network Interface Card). Esta direccion es "unica" y esta guardada en la tarjeta. La direccion MAC es necesaria ya que no se puede depender solamente de la IP para identificar a tu maquina en la red. Por ejemplo, si dos computadoras en una red empezaran a usar la misma IP, estarian competitiendo por su data y la conexion no se podria mantener, es por eso que es necesaria. La IP, como su nombre lo dice, es un protocolo que sirve para identificar a una computadora en el internet. Se podria decir que es unica por cada maquina pero "muchas maquinas pueden compartir IP si salen por proxy o gateway" (hkm) ah y claro, se puede spofear. Ethernet crea frames de data que tienen un header conteniendo tu direccion de MAC y la del destinario. Similarmente, la IP crea paquetes de data parecidas a las del Ethernet pero con diferente estructura. Para que se pueda mandar este paquete, tiene que pasar por el Data Link Library, en este caso vendria siendo el Ethernet. Ethernet divide los paquetes en frames, le agrega su header y los manda hasta que llega al switch. Cuando llega al switch, ella decide a que puerto mandar el frame, comparando la direccion destinataria del frame con la tabla interna la cual mapea puertos con direcciones de MAC. Para que se pueda crear una frame de Ethernet, tiene que ser construido de un paquete de IP. Al momento en que se contruye el frame, no se sabe la direccion MAC que es necesaria para su header, solo tiene la direccion de IP del destinario conseguida por el IP header. Para obtener la direccion MAC de la maquina destinaria se manda un paquetes de Request Arp en modo broadcast. Esto basicamente le pregunta a toda las maquinas en la red si su direccion de IP es x.x.x.x y si lo es, la maquina le contesta con su MAC. Para disminuir la cantidad de paquetes ARP Request que se mandan, el OS (Sistema Operativo) guarda una lista cache de ARP Replies, conocida como el Arp Table. Cuando una maquina recibe un ARP reply, actualiza su ARP Cache con la nueva IP/MAC. ------------------------ Aplicando la maciza ---------------------------------- Como dice el titulo, aqui es donde uno se aprovecha del ARP Table. Al mandar ARP Replies modificados a 'maquina A', engañas a la maquina que te mande los paquetes a ti(maquina C) envez de 'maquina B'. Para mantener la comunicacion entre las maquinas tienes que redireccionar los paquetes. Este tipo de ataque se le conoce como "Man in the middle" o "ARP Poisoning". Todo esto sucede sin que 'Maquina A' se de cuenta y se puede hacer facilmente con programas, si no es una weba. COMPUTADORA A <---------><--------> COMPUTADORA B ~~~~~~ ANTES DEL ATAQUE COMPUTADORA A <---------><-- COMPUTADORA C --><--------> COMPUTADAORA B ~~~~~~ DESPUES DEL ATAQUE (espero que se entienda esto) - 'Maquina C' envenena el ARP CACHE de 'Maquina A y C' - 'Maquina A' associa la IP de 'Maquina B' con la MAC de 'Maquina C' - 'Maquina B' associa la IP de 'Maquina A' con la MAC de 'Maquina C' - Todo el trafico de 'Maquina A y B' pasara por 'Maquina C' primero envez de llegarle a ellos directamente, luego 'Maquina C' redireccionara el trafico a la maquina correspondiente. Es importante reconocer que no solo la tarjeta de red tiene direccion MAC, es usado para cualquier aparato de red como routers, modems, impresoras y switches lo usan. Para esto, no solo computadoras pueden ser envenenados, si no routers/gateways igual. En otras palabras, puedes hacer ARP Poisoning a una computadora y a un router, asi interceptando toda la informacion que sale y entra al internet de esa computadora. Ten en mente que tienes que activar una funcion del sistema operativo que se llama IP forwarding, algunos programas pueden hacer eso por ti, si no lo puedes hacer tu modificando el registro. 1.- Abre Regedit (Start/Run/Regedit) 2.- Agrega esto: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 3. Pon este valor en el registro: Value Name: IPEnableRouter Value type: REG_DWORD Value Data: 1 El valor 1 activa el TCP/IP forwarding en toda las conexiones de red instaladas en la maquina. 4.- Ya chingaste! ------------------------ MAC Flooding ---------------------------------- MAC Flooding solo es necesario cuando andan detras de un switch. La diferencia de un HUB y un switch es la manera en que controlan los paquetes. Un switch es mas inteligente y guarda la localizacion de donde esta conectado cada dispositivo. Asi no se permite que intercepten la conexion. Pero, como todo, hay una forma de pasarlo. Al mandar varios spoofed ARP Replies al ARP Table del switch, el switch entra a "hub" mode. Esto pasa porque le haces flood a su ARP Table y se llena, el switch queda muy ocupado para poder checar la localizacion de cada paquete y cambia a modo hub. Un buen programa para esto en *nix es Parasite. Parasite busca ARP Requests en una LAN y automaticamente manda spoofed ARP Replies. Esto logra un Man in the Middle en una switch. Parasite no limpia bien su desmadre cuando deja de correr, causando un ataque DoS (Denial of Service) en su maquina. Esto pasa porque su ARP Cache esta apuntando a una MAC que ya no esta redireccionando sus frames. Entradas ARP deberan expirar antes de poder continuar. ------------------------ Cloning ---------------------------------- Para cambiar tu MAC Address en Linux se requieren solo dos comandos en la consola. ifconfig eth0 down hw ether 00:00:00:00:00:01 ifconfig eth0 up o tambien podrias bajar un programa como "MAC Changer" aunque no lo veo necesario. ---------------------------------- En Windows es mas complicado como suele ser con varias cosas de configurabilidad. Se puede hacer de dos maneras tambien. La primera como podrias haber adivinado es moviendole al registro. Toda la informacion de tus NICs se encuentran en: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\ pero no ire a mas detalle ya que hkm tiene un buen texto sobre esto (http://hakim.ws/textos/MACSpoofing.txt). La segunda manera vendria siendo con un programa Ya sea SMAC o Etherchange aunque recomiendo Etherchange. ------------------------ Defensa ---------------------------------- Como ARP Cache Poisoning es el resultado de una falta de seguridad en el protocolo requerido para que el TCP/IP funcione, no hay forma de arreglarlo pero existen metodos para prevenirlo. 1.- Puedes usar direcciones de IP y ARP Tables fijas. Usando ipconfig /all en la consola de Windows o ifconfig en la de 'NIX, puedes ver la direccion de MAC e IP de cada dispositivo en la red. Luego usando arp -s puedes agregar una entrada fija ARP para todo tus dispositivos conocidos. Aunque, entradas fijas de ARP son dificiles de mantener en redes grandes. Eso es porque cada dispositivo tendria que se agregado manualmente a la ARP Table. Ejemplo: arp -s 10.0.0.80 00-AA-00-4F-2A-9C 2.- Puedes configurar una opcion que se llama "Port Security" tambien conocido como "Port Binding" o "Mac Binding" en tu switch que permite que solo una direccion de MAC sea asignada por cada puerto fisico en el switch. Esto previene al atacante mapear su MAC Address con un dispositivo de la red. 3.- Existen programas que analizan los paquetes ARP y te avisa si hay actividad rara. Uno es ARPWatch que es para *nix, puedes encontrar su link bajo "Tools". ------------------------ Ejemplos ---------------------------------- Bueno, mostrare unos ejemplos haciendo esto en Windows y Linux. Windows -------- Primer paso fue abrir Cain and Abel, de aqui hice click en Sniffer, y esto busco todo los dipositovos en la red. IP address MAC address OUI fingerprint 192.168.1.102 0001E6900069 Hewlett-Packard Company 192.168.1.109 000625108A24 The Linksys Group, Inc. 192.168.1.1 001217CDA4B6 Cisco-Linksys, LLC 192.168.1.104 0030652BB823 APPLE COMPUTER, INC. 192.168.138.254 005056F3C76E VMWare, Inc. Luego en el TAB inferior me voy a APR y le hago click a la cruz azul, esto me permite agregar 'Maquina A y B' para envenenar. Una vez que ya hayas agregado las dos maquinas, haz click en los primeros dos botones (El primero que es como un chip, este es para snifear, y el segundo, el simbolo de actividad nuclear que sirve para envenenar. Status IP address MAC adress Packets -> <- Packets MAC address IP address Poisoning 192.168.1.104 0030653BB823 2,268 2013 001217CDA4B6 192.168.1.1 Como pueden ver, he envenenado la conexion de la computadora Apple que esta corriendo Mac OS X y la de mi router. De aqui le puedo hacer click en el tab inferior donde dice Passwords y me mostrara los passwords que ha snifeado. Timestamp FTP Server Client Username Password 21/04/2005 - 01:58:10 63.19.24.66 192.168.1.104 userName yElPassword Y asi de facil es ya que Ftp, Telnet, MSN, y otros protocolos no encriptan la informacion que manda y lo muestra en Plain Text. Ahora les enseñare de Etherreal, que igual snifea conexiones. Lo abro, hago click en el primer boton y me aparece una ventana de opciones Aqui escoges tu dispositivo en Interface, puedes agregar filtros para que busque ciertas palabras o cosas mientras snifea pero yo solo le hago click a Enable network name resolution y le doy a OK. Esto empieza a capturar todo tipo de paquetes. Despues de un ratito le doy stop y me muestra todo lo que capturo aunque en display options puedes poner la opcion que muestre los paquetes en tiempo real. De aqui me voy a File/EXport/"As Plan Text" Al abrir el archivo que exporte veo todo tipo de cosas, como paginas que estan viendo, conversaciones de msn y un username y password para una cuenta de FTP. File Transfer Protocol (FTP) 220---------- Welcome to Pure-FTPd [TLS] ----------\r\n Response code: Service ready for new user (220) Response arg: --------- Welcome to Pure-FTPd [TLS] ---------- 220-You are user number 4 of 50 allowed.\r\n 220-Local time is now 16:50. Server port: 21.\r\n 220 You will be disconnected after 15 minutes of inactivity.\r\n No. Time Source Destination Protocol Info 167 32.974860 192.168.1.104 host.com TCP 55678 > ftp [ACK] Seq=1 Ack=205 Win=33580 Len=0 File Transfer Protocol (FTP) USER userName\r\n Request command: USER Request arg: userName No. Time Source Destination Protocol Info 182 36.314851 host.com 192.168.1.104 TCP ftp > 55678 [ACK] Seq=205 Ack=15 Win=5840 Len=0 Frame 182 (54 bytes on wire, 54 bytes captured) Checksum: 0x933d (correct) File Transfer Protocol (FTP) 331 User userName OK. Password required\r\n Response code: User name okay, need password (331) Response arg: User userName OK. Password required No. Time Source Destination Protocol Info 206 41.968925 192.168.1.104 host.com FTP Request: PASS yElPassword File Transfer Protocol (FTP) PASS yElPassword\r\n Request command: PASS Request arg: yElPassword MSN Messenger Service MSG 869 N 151\r\n MIME-Version: 1.0\r\n Content-Type: text/plain; charset=UTF-8\r\n X-MMS-IM-Format: FN=Letter%20Gothic%20MT; EF=; CO=ff0000; CS=0; PF=32\r\n \r\n hoy la peda o que? <------------ Igual se ven convesaciones de MSN Messenger, esto se puede evitar Con programas como SimpLite que encripta el mensaje antes de mandarlo, en Linux puedes usar algun messenger como Kopete que tiene un plugin para hacer esto. Solo funciona si la otra persona igual lo esta usando. Linux ------ Este no sera tan extenso porque estoy sacando el ejemplo de un libro (HACKING the art of explotacion - Recomendado) Primero es necesario entrar a modo promiscuo, en Windows igual haces esto pero los programas lo hacen automaticamente. consola$ ifconfig eht0 BROADCAST MULTICAST MTU:1500 Metric:1 consola$ ifconfig eth0 promisc consola$ ifconfig eth0 BROADCAST PROMISC MULTICAST MTU:1500 Metric:1 consola$ tcpdump -l -X 'ip host 192.168.1.104' tcpdump: listining on eth0 y mostrara el dump de todo capturado. o mas facil... consola$ dsniff -n dsniff: listening on eth0 ----------------- 12/10/02 21:43:21 tcp 192.168.1.104.32782 -> 192.168.0.118.21 (ftp) USER leech PASS l8@nite ----------------- 12/10/02 21:43:21 tcp 192.168.1.104.32785 -> 192.168.0.118.23 (telnet) USER root PASS 5eCr3t ------------------------ Tools ---------------------------------- http://neworder.box.sk/codebox.links.php?key=sniff&txt=Sniffers --- Aqui podras encontrar la mayoria de programas referentes a sniffing (*nix/Windows) http://web.syr.edu/~sabuer/arpoison/ --- ARPoison .. crea spoofed ARP Replies permitiendote especificar direcciones IP/MAC (*nix) http://www.securityfocus.com/tools/142 --- ARPwatch .. Monitorea paquetes ARP (*nix) http://oxid.it --- Cain and Abel .. Programa muy util (Windows) http://www.monkey.org/~dugsong/dsniff/ --- Dsniff - Coleccion de programas utiles (*nix) http://ntsecurity.nu/toolbox/etherchange/ --- Etherchange .. Cambia direccion MAC (Windows) http://www.ethereal.com/download.html --- Ethereal .. Snifea conexion (Windows) http://ettercap.sourceforge.net/ --- Ettercap .. Hace varias cosas utiles (*nix) http://www.atstake.com/products/lc/ --- LC5 .. Programa muy util (Windows) http://www.alobbs.com/modules.php?op=modload&name=macc&file=index - Mac Changer .. Nombre dice todo (*nix) http://www.packetfactory.net/projects/nemesis/ --- Nemesis - Packet Injector (*nix/Windows) http://www.thehackerschoice.com/realease.php --- Parasite .. Util para switches (*nix) http://www.secway.fr/products/simplite_msn/download.php? --- SimpLite .. Encripta mensajes de messenger (Windows) http://www.klcconsulting.net/smac/ --- SMAC .. Cambiar MAC (Windows) http://www.tcpdump.org/ --- Tcpdump .. Nombrelo dice (*nix) http://www.nextsecurity.net/ --- WinArpSpoof .. Nombre lo dice (Windows) *LC5 y Cain and Abel son recuperadores de passwords que traen la opcion de snifear. ------------------------ Referencias ---------------------------------- http://node99.org/projects/arpspoof/arpspoof.pdf http://www.governmentsecurity.org/articles/TheIngredientstoARPPoison.php ------------------------ FINAL ---------------------------------- LightOS - http://www.suckea.com/lightos/ LightOS@gmail.com - Por cualquier cosa. --