viZard | Saludos a todos, esta es la última presentación de esta primera jornada de apertura de umeet 2002 |
viZard | Y, para cerrar está dan kaminsky |
viZard | él trabajó dos años como ingeniero de seguridad para cisco |
viZard | hoy, estará presentando algunas herrmientas de redes llamadas paketto keiretsu |
viZard | así que seas bienvenido dan :) |
viZard | Hola a todos |
viZard | Como Seth ha mencionado, recientemente he liberado un paquete de herramientas que he bautizado como Paketto Keiretsu |
viZard | si lo están buscaando, pueden ser encontrado en http://www.doxpara.com/paketto/paketto-1.0.tar.gz |
viZard | claro que la versión 1.01 deberá salir pronto, en cuanto resuelva un problemilla de compilación |
viZard | Escencialmente, he estado investigando acerca de la siguiente cuestión: |
viZard | Si yo tomo control directo de una red -- fabrico mis propios paquetes, construyo mi propia pila sin ningún respeto por los campos de datos originales... |
viZard | qué podría yo hacer? |
viZard | Romper máquinas no es algo interesante para mí |
viZard | al menos, no aún ;) |
viZard | pero existen muchas funcionalidades interesantes que las redes aún no proveen |
viZard | Buen, no pude triunfar en todo lo que he intentado construir (ej.: aún no existe manera de escanear rápidamente los puertos UDP) |
viZard | *pero* sí encontré unos potenciales datos acerca de las redes TCP/IP |
viZard | y es de eso lo que hablaremos hoy |
viZard | Probablente los más útil de Keiretsu es el scanrand. |
viZard | scanrand. es un escanner con la capacidad secundaria de descubrir rutas así como puntos finales (endpoints) |
viZard | Puede fácilmente averiguar información detallada acerca de hosts, puertos y hops |
viZard | Debido a su característica de infraestructura "Muy rápida" sólo toma un segundo implantando un nuevo significado para ésto |
viZard | durante las pruebas, scanrand fue configurado para examinar la red clase B de una corporación multinacional. |
viZard | Esto fue hecho con su total consentimiento, claro está ;) |
viZard | 65K hosts recibieron una prueba contra sus puertos HTTP |
viZard | 8300 respondieron afirmativamente, muchos más no |
viZard | este escaneo tomó aproximandamente 4 segundos |
viZard | la arquitectura de scanrand es muy simple |
viZard | Ahora, un problema con el tipo de arquitectura es que no estamos dando seguimiento con quien nos comunicamos |
viZard | alguien puede decir "heh, este tío está escaneandonos sin idea de a quien está escaneando... enviémosle respuestas falsas". |
viZard | Ahora, esto es una mera indisposición en el mejor de los casos, pero dependiendo de qué pueda ser creado usando scanrand |
viZard | (particularmente con bases de datos), esto puede ser el canal para serios problemas de seguridad |
viZard | Yo tengo algo de experiencia en seguridad (he hecho algo para OpenSSH), así que esto es inaceptable :-) |
viZard | Así que la solución es usar lo que llamo Inverse SYN Cookies |
viZard | In TCP, cuando se envía un SYN para hacer una petición de conexión, |
viZard | se recibe a la vez un SYN|ACK(el puertom está arriba) o un RST|ACK(el puerto está abajo) |
viZard | Ambos tienen más que solo arriba o abajo... entre otras cosas, contienen toda la información de direcciones que necesitamos para determinar a quien enviamos |
viZard | una petición y a qué puerto estamos mirando. |
viZard | Pero además |
viZard | también contienen número de 32 bits de que hayamos elegido desde el SEQ#er |
viZard | desde el SYN |
viZard | este número es conocido como el Número Secuencial, o SEQ# |
viZard | y este es *reflejado* en el Número de "Conocimiento?", o ACK#, |
viZard | de cualquier SYN|ACK or RST|ACK válido |
viZard | 32 bits es suficiente para incluir variablres criptográficas fuertes que enlacen |
viZard | una respuesta válida de un escaneo |
viZard | En términos técnicos |
Arador | usamos SHA-1 en el HMAC, o Codigo de Autentificacion de Mensaje Haseado |
Arador | contruccion para crear un valor de 160 bits corresponiendo a la combinacion de (IP orign, puerto origen, ip destino, puerto destino) |
Arador | entonces los primeros 32 bits son quitados y lanzados en el SEQ# |
Arador | cuando el SYN|ACK o RST|ACK vielven, invertimos el proceso ( y decrementamos el ACK# por uno, porque la reflfection se incrementa) para ver si este host recibio un escaneo de nosotros |
Arador | HMAC envuelve un valor secreto sabido solo por el escaner |
Arador | por lo tanto esto deja un host con una opcion -- responder con la valida informacion, o no responder -- porque cualquier cosa invalida puede ser facilmente ignorada |
Arador | http://www.doxpara.com/read.php/docs/scanrand_logs.html |
Arador | Ahi encontrareis logs de scanrand siendo usao |
Arador | como podeis ver en el escaneo local -- 254*20 puertos son escaneados en mi LAN local de 100 Mbit, y los resultados son cotejados en 0.182 segundos |
Arador | de nota es la capacidad de hacer una estimacion pasica de hopcounts |
Arador | es una tecnica simple, pero sorprendentemente efectiva |
Arador | Simplemente asume que los host remotos empezaron a enviar paquetes en algun valor modulo 32 --64, 128, 255 |
Arador | por lo tanto cuando escanee Slashdot, parece estar a 12 hops |
Arador | bien, vamos a verificar eso -- pero por supuesto, soy yo, asique vamos a verificarlo sin estados ;) |
Arador | el traceroute sin estados de scanrand toma la ventaja de un hecho ignorado |
Arador | los errores ICMP contienen mas que simplemente "algo desajustado" |
Arador | tambien contienen una copia de la cabecera IP infractora e los primeros 8 bytes de la4 capa contenida dentro |
Arador | TCP/UDP/ICMP |
Arador | asique traceroute funciona asi: |
Arador | existe un valor llamado TTL en la IP |
Arador | (tiempo para expirar) |
Arador | TTL se SUPONE que se refiere a segundos, pero ha evolucionado a ser los hops (saltos) al que el paquete se le permite saltar antes de ser descartado |
Arador | asique si TTL es 5, saltara cuatro hops y morira |
Arador | mandando de vuelta un mensaje ICMP de tipo Time Exceeded Mensage (tiempo de mensaje excedido) (que tiene la ip y la cabecera TCP) |
Arador | asique traceroute simplemente manda todas las iteraciones a la vez -- en el caso del ejemplo, se mandan de la 1 a la 13 |
Arador | cuando las respuestas llegan, miramos las cabeceras IP y TCP contenidas dentro para averiguar a quien estamos intentando escanear |
Arador | en este caso, todo el tiempo estabamos mirando a 66.35.250.150 |
Arador | al final del escaneo vemos que nuestra estimacion de 12 hops (saltos) estaba un poco mal -- de hecho estaba a 13 |
Arador | pero comoveremos mas tarde, la estimacion resulta muy util |
Arador | los ejemplos de despues demuestran los modos mas avanzados de scanrand |
Arador | la resolucion DNS es presentemente sincrona, asique enlentece la operacion...idealmente, usarias una herramienta que tomara los los HTTP con sus ips y las reemplazas con sus nombres DNS |
Arador | hay bastante por ahi, si recuerdo bien |
Arador | una de las cosas mas interesantes sobre un escaner de puertos combinado con traceroute es que lo podemos hacer a la vez |
Arador | esto se muestra en la proxima entrada en los logs de scanread (otra vez: http://www.doxpara.com/read.php/docs/scanrand_logs.html ) |
Arador | los retornos estan fuera de orden, pero como podeis ver, mientras los primeros hops (saltos) son todos identicos, cuanto mas nos alejamos, mas divergente se vuelve nuestro escaneo ;) |
Arador | esto es lo que esperamos por supuesto |
Arador | versiones futuras e scanrand van a soportar explicitamente descubrimiento "mesh" (engranaje?) |
Arador | esto va a implicar al origen del ruteo a n hops (saltos) de distancia, poniendo TTL a n+1, y entonces intentando llegar a varias direcciones que se esperan que esten las unas de otras tan lejos como sea posible en las tablas de rute remoto |
Arador | la velocidad de la aproximacion sin estados deberia desgarrar ka mayoria de las redes traceables en muy poco tiempo |
Arador | pero ya veremos :-) |
Arador | una cosa de notar es el hecho que es factible dividir los procesos de escaneado y recibimiento en varias maquinas |
Arador | asique por ejemplo, un sistema podria ser diseñado como el colector de escaneos, mientras que todo los los demas ha mandado los resultados a traves de el |
viZard | alguien más que ayude a traducir? |
Arador | esto es casi un modo alternativo de "source routing" (fuente de ruteo?) |
Arador | y se demuestra en la entrada final del log |
Arador | lo proximo es paratrace, un fork de scanrand |
Arador | dividido porque realmente hace algo diferente |
Arador | ahi : http://www.doxpara.com/read.php/docs/paratrace_logs.html |
Arador | mientras scanrand inicia nuevas conexiones para buscar redes, paratrace usa las conexiones existentes |
Arador | esta es la unica forma egectiva de monitorizar las "policy routes" (reglas de ruteo?), y puede tembien penetrar a traves de "stateful firewalls" |
Arador | la idea des simple: traceroute es enteramente una actividad de la capa 3 -- iterar el TTL, observar la respuesta ICMP Time Exceeded (tiempo excedido) |
Arador | no import a lo que tengamos en la capa 4 |
Arador | asique si la capa 4 es trafico tcp valido, a traceroute no le importa |
Arador | ahora bien, TCP tiene la capacidad de soportar paquetes redundantes -- es lo que se espera como resultado de la red IP "no de fiar" que ofrece |
Arador | de hecho, esta caracteristica es usada para un tipo de ping TCP "en session" "tcp keealive" |
Arador | Esencialmente, paratrace usa keepalives (permanecer vivo literalmente) como transporte del traceroute IP |
Arador | los resultados son los que e ven en los logs |
Arador | la estimacion pasiva de hopcounts (numero de saltos) se usa para averiguar como esta de lejos el traceroute parasito |
Arador | cambiamos y hablamos de Minwt |
Arador | como mencione, el objetivo original del diseño de Paketto era examinar que podia hacerse directamente manipulanto el cable |
Arador | Minewt es una puerta de enlace NAT que poera enteramente en software, manipulando directamente el cable para "instanciarse" a si mismo |
Arador | no usa recursos del kernel, guarda la conectividad de la red "raw" que se permite a traves de la manipulacion de sockets y bpf de libnet/libpacp |
Arador | BPF? |
Arador | sin duda, nisiquiera la direccion MAC es compartida con el kernel -- literalmente parece como un nuevo dispositivo en el cable |
Arador | linux hace PPF? Creo que tenia netlinkk o algo similar en lugar de bpf... |
Arador | BPF es en Filtro de Paquetes de Berkeley, una interfaz estandarizada para pedir el trafico que coincide con una forma determinada |
Arador | como sarnold apunta, dbf en si mismo no esta implementato en todos los kernels |
Arador | Libpcap implementa de este modo bfp en espacio de usuario cuando se necesite -- aunque creo que tiene su propia interfaz de kernel para linux |
Arador | el principal punto es que Paketto en general esta bastante aislado de las "vagaries" de las dioversas interfaces de red de los kernels; simplemente da estructuras, Yo hago el resto :_) |
Arador | vagaries= extrañezas |
C-Qaz | entonces, buscando los log de minewt en http://www.doxpara.com/read.php/docs/minewt_logs.html |
C-Qaz | esto es lo que sucede |
C-Qaz | ./minewt -ii 10.0.1.180 -I 10.0.1.190 -r 10.0.1.254 -v |
C-Qaz | -i 10.0.1.180 == las sip a las que mi maquinas deberian comunicarse |
C-Qaz | es 10.0.1.190 |
C-Qaz | -r 10.0.1.254 == la ip de lado de afuera que estan a la escucha de 10.0.1.190 |
C-Qaz | -v es la opcion de mostrar todo lo que sucede |
C-Qaz | ahora, lo nuevo es que minewt comienza rapidamente a recoger y manipular con NAT el trafico |
C-Qaz | minewt es unn ´programa muy estable |
C-Qaz | pero muy flexible en los paquetes salientes SYN, TCP Keepalive. contienen lo necesario para comenzar la session |
C-Qaz | entonces, entre esto, y el hecho de que minewt controla sus propias direcciones de MAC |
C-Qaz | actualemente es posible comenzar uhja session de minewt en una maquina |
C-Qaz | luego matarla, comenzar una nueva session en otra pc |
C-Qaz | todo esto sin perder la conexion con el host |
C-Qaz | minewt es un poco mas rapido - sub-ms delay |
viZard | FreeBSD es probablemente la plataforma más rápida |
viZard | pero he tenido mis vueltillas por otro lado |
viZard | En términos de identificación queso/xprobe, minewt solo ofrece un servicio: |
viZard | ICMP Echo -> ICMP Echo Reply |
viZard | Usa ping de entrada para construir el ping respuesta de salida, así que espero que haya alguna forma de ping que *solo* minewt pueda generar |
viZard | aún no he probado esto. |
viZard | Una recibido un ping, minewt tira la tabla de estado presente -- esto se nota al final de los logs. |
viZard | Minew tiene dos características que son moderadamente interesantes |
viZard | Prmero, Minew implementa lo que yo llamo Traducción de Direcciones MAC. |
viZard | esto realmente viene como parte de la infraestructura. |
viZard | Debido a que no uso el kernel, no puedo tomar ventaja de ninguna de sus facilidades como el cache ARP |
viZard | el ARP existe para mapear L3(IP) a L2(MAC) |
viZard | Ahora, aquí está lo interesante |
viZard | la manera en que el NAT funciona es que mapea los puertos locales sobre una conexión de salida a la dirección interna que lo solicitó |
viZard | efectivamente |
viZard | NAT mapea L4(Port) a L3(IP) |
viZard | y ARP map L3(IP) a L2(MAC) |
viZard | así que transitoriamente, podemos tener NAT mapeando L4(port) a la combinación de L3(IP) y L2(MAC) |
viZard | y ya que no tenemos acceso al cache ARP del kernel, tenemos que hacerlo de esta manera |
viZard | Este es un efecto lateral interesante |
viZard | No nos importa cuales direcciones de respaldo usen los clientes |
viZard | si queremos usar 10.*, no hay problema |
viZard | si quieren usar una dirección pública -- La *verdadera* dirección IP -- no hay problema tampoco |
viZard | si 10 de ellos quieren usar direcciones públicas, no hay problema |
viZard | porque todas sus MACs son distintas |
viZard | esto quiere decir, en una limitada gama de circunstancias que la integridad de paquetes puede ser mantenida |
viZard | Una pregunta interesante ha sido planteada: |
Arador | <Zanshin> de manera que con minewt corriendo puedes esconderte detras este router virtual y no ser traceaado? Desde que sales el router se acaba...o hay algun traceo mas? |
Arador | minewt es tan efectivo como cambiar tu direccion MAC e IP. Si esto Evade algunas funcionalidades de traceado, lo ahra winwt |
Arador | casi siempre estaras traceabel en tu subred, desde que minewt necesita rutearse en aglo |
Arador | otra caracteristica interesante es que Minewt |
Arador | soporta Multicast Guerilla |
Arador | esto sera mucho mas profundamente explorado en la proxima revision mayor de Paketto |
Arador | Pero la idea basica es conseguir uno de mis mas mayores enfados con las redes actuales: Un paquete, un destino |
Arador | Quiero enviar un paquete, a muchos destinos, con internet tal como es hoy |
Arador | en el caso de que no lo hayas notado, Internet no soporta multicast(envio a varios destinatarios) muy bien |
Arador | con lo cual lo digo todo :-) |
Arador | Internet -- el universo de ip ruteables -- esta sin duda anclada en el unicast (envio a un destinatario?) |
Arador | pero no conectamos directamente la la capa de IP -- tendemos a usar ethernet con interfaz con IP, y ARP resuelve las direcciones MAC de ethernet en IPs de Internet |
Arador | Ethernet soporta broadcast y multicasting (envio a todas los miembros de la red y envio a algunos mienbros de la red) bien -- MAC de FF:FF:FF:FF:FF:FF o 01:00:5E:??:??:??, respectivamente |
Arador | ahora, recuerdemos como usamos ARP para enlazar MACs con IP? |
Arador | Vamos a usar ARP para enlazar una IP *unicast*, perfecto para internet, a una direccion IP *Broadcast/Multicast*, perfecto para nuestra LAN |
Arador | de esa manera, cuando el router quiera devolver paquetes, haran ARP, veran BC/MC, y enviaran eso al switch -- que por supuesto dividira el trozo para cada parte |
Arador | <sarnold> oooh :) |
Arador | asi es, hay poco que podemos hacer con mas alla de esnifar todo el trafico que salga de Minewt. Trabajo MUCHO mas interesante con esta tecnica viene en futuras versiones |
Arador | la comunidad Helix esta esperando conseguir bastante |
Arador | Una IP en una LAN sera designada la IP unicast mediante la cual todas las demas transmisiones compartidas estan ruteadas |
Arador | Y cada vliente compartira la carga de responder paquetes -- UDP si es necesario, TCP cuando se necesite |
Arador | Pero eso es 1.1/2.0 de la charla :-D |
Arador | Hay muchas, muchas cosas posibles con redes en "raw" |
Arador | bastantes de las cuales espero no tener que escribir |
Arador | Mientras C tiene un gran soporte para conectar directamente al cable, otros lenguajes no. Me gustaria doblar a los programadores de esos lenguajes |
Arador | ese es el proposito de Linkcat, o lc |
Arador | lc es basicamente netcat en capa2 -- dame daatos, los pongo en el cable |
Arador | netcat los lanza en una session TCP |
Arador | linkcat linteralmente los lanza en el ethernet |
Arador | http://www.doxpara.com/read.php/docs/lc_logs.html |
Arador | Esto muestra logs de linkcat permitiendome cortar y pegar un ICMP Echo |
Arador | el modo texto de ethereal me prueba que estamos mandando un paquete valido |
Arador | linkcat soporta ambos, un paquetes en modo cerca del "raw" basado en libpcap (puedes lanzar logs de tcdump en linkcat para retransmitirlos, aunque tcpreplay es una herramienta mejor para eso) |
Arador | y el modo ASCII visto en los logs |
Arador | De alguna nota es el soporte de HMACs en los Trailers de Ethernet |
Arador | IP tiene un campo de longitud fija que dice cuanto preocuparse |
Arador | pero Ethernet te permite lanzar mas, hasta la unidad maxima de transmision (MTU) |
Arador | asique podemos lanzar algunos datos extras ahi -- incluyendo una criptovariable opcional que autentifica los datos! |
Arador | asique si quieres firmar tus ARPs |
Arador | esta es la manera de hacerlo :-) |
Arador | mucho mas trabajo sera hecho usando Trailers Ethernet en futuras versiones -- esto es una prueba del concepto |
Arador | linkcat firmara trozos arbitrarios usando un secreto compartido, como es |
Arador | al final, pero no por ello con menos importancia |
Arador | dibujos bonitos! |
Arador | http://www.doxpara.com/pics/index.php?album=phentropy/ |
Arador | basados en la excelente investigacion e Michel Zalewski (http://razor.bindview.com/publish/papers/tcpseq.html), phentropy provee una visualizacion tridimensional de la arbitrariedad de los conjuntos de datos arbitrarios |
Arador | el uso es simple |
Arador | phentropy datos |
Arador | si estan en formato ascii |
Arador | phentropy -a datos |
Arador | la salida es bastante interesante |
Arador | bash_rand1 es probablemente el mas directamente util -- es un plotting de la variable de bash $RAND |
Arador | bash_rand2 muestra el conjunto de datos rotado |
Arador | la herramienta usada para hacer estos renders es muy rapida. liberado en SIGGRAPH 2002 y disponible en openqvis.sourceforge.net, OpenQVIS rederiza conjuntos de datos tridimensionales *arbitrarios* en tiempo real, usando el hardware "pixel Shader" encontrado en tarjetas 3d avanzadas |
Arador | es bueno hacer mas con el hardware 3d que cosas volatiles :) |
Arador | Intencionalmente la entrada no aleatoria se renderiza *realmente* muy interesante |
viZard | El kernel BSD luce como akin a un Cubo Borg. |
viZard | El trasfondo por defecto de Windows XP termina pareciendo como una serie de 3 triángulos. |
viZard | Una comparación del canal izquierdo y el canal derecho de una música que escribí hace un tiempo, resultó de lo más interesante --- se convirtió en un pipe |
viZard | con un aura en su interior (vea stereo_r_vs_l_8) |
viZard | Lincat tiene un modo -- -o m-n -- para emitar data que encaje con phentropia para visualizarse |
viZard | Será muy interesante dentro de unos meses ver de lo que estén hechos Phentropy/openqvis |
viZard | En términos de lo que Phentropy representa... tome 4 valores de datos: a, b, c, d. Entre esos 4 hay 3 deltas -- b-a, c-b, d-c |
viZard | hagan de esos 3 unos puntos X, Y, Z i emplotenlo |
viZard | Eso es lo que cada punto es. |
viZard | Ahora, el conjunto de todos esos puntos puede ser básicamente interpretado como un comportamiento de cluster -- estas son secciones donde las deltas, sin importar como estén distribuidas a través del total del rango de valores, |
viZard | terminan siempre siendo similares |
viZard | Data realmente aleatoria no tiene clusters |
viZard | mucha data no aleatoria (como los comentarios de slashdot) deberían enfocarse en solo un pequeño grupo de zonas |
viZard | Así que esto es todo amigos! |
viZard | Mucho más de Paketto vendrá en el 2003 |
viZard | pero esto es todo lo que tenemos hasta ahora. |
viZard | Las preguntas ya están hechas, esta traducción se atrasó, y creo que sólo quedamos los traductores despiertos |
viZard | :) |
Arador | :) |
viZard | nadie respondió, creo que así es :) |
Arador | casi 2 horas de traduccion simultanea |
|