Provided by: sing_1.1-17_i386 bug
 

NOMBRE

        - Send ICMP Nasty Garbage packets to network hosts
 

SINOPSIS

        sing  [-hVRnvqGQOBU]  [-c  count]  [-T wait] [-p patron] [-s datos] [-F
        bytes] [-i interfaz] [-S spoof] [-t ttl] [-TOS tos]  [-l  preload]  [-M
        os] [-L logfile] [-x codigo] [tipo]  host
 

DESCRIPCI N

        sing  es  una  aplicación  para generar diversos tipos de paquetes ICMP
        desde linea de comandos. Su principal motivo es  sustituir  al  comando
        ping   pero  añadiéndole  ciertas  extensiones  como  la  capacidad  de
        enviar/leer paquetes ’spoofeados’, poder enviar Actualmente soporta los
        tipos ICMP de error siguientes: Redirect, Source Quench, Time Exceeded,
        Destination Unreach, Parameter Problem y los tipos ICMP de  información
        siguientes:  Address Mask Request, Timestamp, Information Request, Echo
        Request, Router Solicitation y Router Advertisement.
 
        El host destino puede especificarse también como una lista de  gateways
        (incluyendo host destino) separados por el símbolo ’%’ indicando el uso
        de la pción IP Strict Source Routing o separados  por  el  símbolo  ’@’
        para indicar el uso de la Opción IP Loose Source Routing.
 
        En  la  sección  EJEMPLOS se incluyen una gran cantidad de ejemplos que
        ilustran algunas de las posibilidades reales de uso de este programa.
 

OPCIONES

        -h, --help
               Ayuda.
 
        -V, --Version
               Versión del programa.
 
        -v, --verbose
               Modo informativo. Más informativo si se usa dos veces.
 
        El tipo de ICMP, siguiendo un orden por código de menor a mayor,  puede
        ser cualquiera de los siguientes:
 
        -du, --dest_unreach
               Destination  Unreach.  El paquete IP no pudo ser entregado. Este
               tipo ICMP es de error.
 
        -sq, --src_quench
               Source Quench. El paquete IP no se entrega a causa de  una  con‐
               gestión en la red. Este es tipo ICMP es de error.
 
        -red, --redirect
               Redirect.  Requerimiento  para  desviar  paquetes IP a través de
               otro router. Este tipo ICMP es de error.
 
        -echo, --echo_request
               Echo Request. Petición a un host para que devuelva una respuesta
               de  eco.  Este  tipo  es el que se envía por defecto. Es un tipo
               ICMP de información.
 
        -rta, --router_advert dirección[/preferencia]
               Router Advertisement. El router comunica  la  disponibilidad  de
               uno o varios routers con dirección dirección y preferencia pref‐
               erencia.  Si se omite esta última se  toma  la  preferencia  por
               defecto que es 0. Este tipo ICMP es de información.
 
        -rts, --router_solicit
               Router Solicitation. Requerimiento por parte de un host para que
               se envíe un anuncio de uno o varios routers. Como  el  anterior,
               forma parte del intercambio de mensajes Router Discovery y es un
               tipo ICMP de información.
 
        -tx, --time_exc
               Time Exceeded. Se ha acabado el tiempo de un  paquete  IP.  Este
               tipo ICMP es de error.
 
        -param, --param_problem
               Parameter  Problem. Valor erróneo en una variable de la cabecera
               IP. Este tipo ICMP es de error.
 
        -tstamp, --timestamp
               Timestamp. Solicitud de la hora de un host. Este tipo ICMP es de
               información.
 
        -info, --info_req
               Information  Request. El host solicita una respuesta Info Reply.
               Este tipo ICMP es de información.
 
        -mask, --mask_req
               Address Mask Request. Averiguar la mascara de red  para  la  red
               local actual. Este tipo ICMP es de información.
 
        Las opciones pueden ser cualquiera de las siguientes:
 
        -n     No usar resolución DNS de nombre de host.
 
        -i interfaz
               Nombre  o  dirección IP del interfaz en el que escuchar paquetes
               respuesta.
 
        -S dirección
               Dirección IP a usar como origen del paquete ICMP.
 
        -T segundos
               Tiempo de espera en segundos para leer  la  respuesta.  Solo  es
               válido para ICMPs de información salvo el tipo Router Advertise‐
               ment (-rta).  Por defecto es de 10 segundos. Si se indica  0  no
               se lee la respuesta. Mirar la opción -m.
 
        -lt, --lifetime segundos
               Tiempo  de vida en segundos de un anuncio de router. Válido solo
               para Router Advertisement (-rta). Por defecto son 1800  segundos
               (30’).
 
        -gw, --gateway dirección
               Host  que  actuará  como  pasarela  de  ruta en un ICMP Redirect
               (-red). Por defecto será la dirección de spoof (-S),  si  se  ha
               especificado,  o la dirección IP del interfaz de salida si no se
               ha especificado.
 
        -dest, --route_dest dirección
               Host o red destino de ruta en  un  ICMP  Redirect  (-red).  Esta
               opción es obligatoria si se envía un ICMP Redirect.
 
        -orig, --orig_host dirección
               Host  origen en la cabecera IP que se envía en la parte de datos
               de un ICMP de error. Por defecto será igual a la IP del host  al
               que se manda el paquete ICMP.
 
        -psrc, --port_src puerto
               Puerto  (tcp o udp) origen a usar en la cabecera IP que se envía
               en la parte de datos de un ICMP de error. Por defecto es 0.
 
        -pdst, --port_dst puerto
               Puerto (tcp o udp) destino a usar en la cabecera IP que se envía
               en la parte de datos de un ICMP de error. Por defecto es 0.
 
        -prot, --protocol nombre|número
               Protocolo  a  usar en la cabecera IP que se envía en la parte de
               datos de un ICMP de error. Debe ser un nombre de protocolo  lis‐
               tado en el fichero /etc/protocols o un número de protocolo. Sólo
               están implementados tcp, udp e icmp,  con  otros  protocolos  el
               resto  del  campo  de  64  bits se rellena con valores 0xFF. Por
               defecto es tcp.
 
        -id, --echo_id identificador
               Identificador de Echo usado en  la  cabecera  IP  que  se  envía
               cuando  es  un  ICMP  de  error y el protocolo de la cabecera IP
               (-prot) de los datos de error es icmp. Por defecto es 0.
 
        -seq, --echo_seq secuencia
               Número de secuencia de Echo usado en la cabecera IP que se envía
               cuando  es  un  ICMP  de  error y el protocolo de la cabecera IP
               (-prot) de los datos de error es icmp. Por defecto es 0.
 
        -p patrón
               Patrón de datos a enviar en un Echo Request (-echo).
 
        -s bytes|max
               Cantidad de bytes basura que se enviarán  en  cualquier  paquete
               ICMP. Con max se envía el máximo posible.
 
        -ptr, --pointer byte
               Puntero  a byte erróneo en un paquete ICMP indicando un problema
               en un parámetro. Válido sólo  para  el  tipo  Parameter  Problem
               (-param).
 
        -R     Usar la opción IP Record Route en el paquete ICMP.
 
        -F bytes
               Fragmentar el paquete ICMP en fragmentos de bytes bytes.
 
        -x, --xcode código|num|max
               Código de ICMP enviado. Código código válido para los tipos Des‐
               tination Unreach (-du), Redirect (-red) y Time Exceeded (-tx).
 
               Se puede especificar un código numérico num para los tipos  ICMP
               que  no  tienen (Echo Request, Information Request, Address Mask
               Request,  Router  Solicitation,  Router  Advertisement,   Source
               Quench, Parameter Problem y Timestamp).
 
               Si  se  usa max se enviará un código ICMP superior a los admiti‐
               dos.
 
               La siguiente sección CÓDIGOS ICMP enumera los  tipos  de  código
               código válidos.
        Los  códigos válidos para usar con los tipos Destination Unreach, Redi‐
        rect y Time Exceeded son,
 
        - Para usar con el tipo Destination Unreach (-du):
 
        net-unreach (Net Unreachable) indica red de destino no accesible.
 
        host-unreach (Host Unreachable) indica host de destino no accesible.
 
        prot-unreach (Protocol Unreachable) indica que el protocolo deseado  no
        está a disposición en el host destino.
 
        port-unreach (Port Unreachable) indica que el puerto deseado en el host
        destino no está disponible.
 
        frag-needed (Fragmentation Needed and Don’t Fragment  was  Set)  indica
        que  el  paquete  IP  tuvo  que  ser fragmentado por su tamaño, pero el
        emisor no lo permitió por medio del flag DF (DON’T FRAGMENT o NO  FRAG‐
        MENTAR).
 
        sroute-fail  (Source Route Failed) indica que no se pudo seguir la ruta
        deseada que se indicaba en el paquete IP.
 
        net-unknown (Destination Network Unknown) indica que no  se  conoce  la
        red de destino.
 
        host-unknown (Destination Host Unknown) indica que no se conoce el host
        de destino, pero sí la red.
 
        host-isolated (Source Host Isolated) indica que no se puede acceder  al
        host de destino.
 
        net-ano  (Communication  with  Destination  Network is Administratively
        Prohibited) indica que el acceso a la red de destino  se  deniega,  vía
        cortafuegos o similar, por parte del receptor.
 
        host-ano  (Communication with Destination Host is Administratively Pro‐
        hibited) indica que el acceso al host de destino se deniega, vía corta‐
        fuegos o procedimiento análogo, por parte del receptor.
 
        net-unr-tos  (Destination  Network  Unreachable  for  Type  of Service)
        indica que no se puede acceder a la red de destino con el tipo de  ser‐
        vicio (TOS, type of service) solicitado.
 
        host-unr-tos  (Destination Host Unreachable for Type of Service) indica
        que no se puede acceder al host destino con el TOS solicitado.
 
        com-admin-prohib (Communication Administratively Prohibited) indica que
        un router no puede encaminar un paquete por filtrado administrativo.
 
        host-precedence-viol  (Host  Precedence Violation) indica que la prece‐
        dencia IP del paquete original no está permitida.
 
        precedence-cutoff (Precedence cutoff in effect) indica que se ha inten‐
        tado  enviar  un  paquete  con  un nivel de precedencia IP menor que el
        mínimo impuesto por los administradores.
 
        - Para usar con el tipo Redirect (-red):
 
        net (Redirect Datagram for the Network) indica que el  destino  es  una
        red.
 
        host (Redirect Datagram for the Host) indica que el destino es un host.
 
        serv-net (Redirect Datagram for the Type Of Service and Network) indica
        que el destino es tipo de servicio y red.
 
        serv-host  (Redirect  Datagram for the Type Of Service and Host) indica
        que el destino es tipo de servicio y host.
 
        y
 
        - Para usar con el tipo Time Exceeded (-tx):
 
        ttl (Time to Live exceeded in Transit) indica que el tiempo de vida  en
        la cabecera de un paquete IP se ha agotado.
 
        frag  (Fragment  Reassembly Time Exceeded) indica que los fragmentos de
        un paquete IP no han podido ser reensamblados.
        Con la opción -O SING usa pequeñas técnicas de ’fingerprinting’ de Win‐
        dow$  y Solaris. Para distinguir entre hosts Window$ y el resto de SSOO
        Ofir Arkin ha descubierto un sencillo método: En viando un código  ICMP
        distinto  de  0  en  un  Echo Request un SO Window$ box responde con un
        código de 0 mientras que los otros SSOO  no  cambian  el  código  ICMP.
        Mirar la sección VER TAMBI   N.
 
        Con  sistemas  Solaris SING utiliza un método descubierto por mi: Si se
        envía un paquete fragmentado de Addres Mask Request  cualquier  sistema
        Solaris  (testeado  desde  2.5.1 a Solaris8 Intel & SPARC) responde con
        una máscara de red de 0.
 
        Mirar la sección EJEMPLOS para ver ejemplos.
        Con la opción -M SING intenta emular cierto  SO.  Por  el  momento  los
        únicos  valores  admitidos  son para emular Window$98/Window$NT4 (valor
        win), UNIX (valor unix), Linux  (valor  linux),  Cisco  (valor  cisco),
        Solaris (valor solaris) o Shiva (valor shiva). Para emularlos SING cam‐
        bia su modo normal de operación respecto al TTL, al número de secuencia
        inicial  ICMP,  al  identificador ICMP y a los datos que cada SO envía.
        Estas técnicas se aplican sólo al usar los tipos Echo  Request  o  Echo
        Reply.
        sing  puede  ser  usado  de  una  forma  muy  sencilla  en  guiones del
        intérprete de comandos que estemos usando.  El  programa  devuelve  los
        siguientes códigos al shell que le invocó:
 
        Valor  Significado
        -----  -----------
        0      Se ha recibido al menos 1 respuesta del host destino.
        1      Error general.
        2      Se ha enviado el paquete OK pero no se ha recibido respuesta.
        3      Sin memoria.
 

EJEMPLOS

        -  Queremos  saber  si  www.solarisbox.xx usa el SO Solaris. Si lo hace
        entonces se debería imprimir SOL! en cada una de sus respuestas:
 
        sing -mask -O  www.solarisbox.xx
 
        - Saber si www.winbox.xx usa el SO  Window$.  Si  lo  hace  se  debaría
        imprimir WIN! en cada una de sus repsuestas:
 
        sing -O  www.winbox.xx
 
        -  En  repuesta  a un paquete enviado con origen en el puerto TCP 100 y
        con destino en el puerto 90, queremos enviar un ICMP  Redirect  a  ton‐
        toligo.es  para  modificar  su tabla de rutas con los siguientes datos:
        10.12.12.12 como gateway hacia el host death.es enmascarando el  origen
        del paquete como originado desde el host infect.comx:
 
        sing  -red  -S infect.comx -gw 10.12.12.12 -dest death.es -x host -prot
        tcp -psrc 100 -pdst 90 tontoligo.es
 
        - En respuesta a un paquete ICMP  Echo  Request  enviado  con  un  ECHO
        REQUEST  id  100  y  un  numero  de secuencia ECHO REQUEST 90, queremos
        enviar un ICMP Redirect al host almorranas.es para modificar  su  tabla
        de  rutas  con  los siguientes datos: el host pizza.death como pasarela
        hacia el host death.es enmascarando el origen del paquete  como  origi‐
        nado desde el host infect.comx:
 
        sing  -red  -S infect.comx -gw pizza.death -dest death.es -x host -prot
        icmp -id 100 -seq 90 almorranas.es
 
        - Queremos enviar un paquete ICMP Destination Unreach al host  10.2.3.4
        diciéndole  que  nuestro  puerto TCP numero 20, conectado con su puerto
        TCP 2100, es inalcanzable. Nos enmascaramos como el host 10.1.1.1:
 
        sing -du -S 10.1.1.1 -x port-unreach -prot  tcp  -psrc  2100  -pdst  20
        10.2.3.4
 
        -  Queremos enviar un paquete ICMP Destination Unreach al host 10.2.3.4
        diciéndole que el host inferno.hell y su puerto TCP 69, relacionado con
        su  puerto TCP 666 es inalcanzable. Nos enmascaramos como como el gate‐
        way router.comx:
 
        sing -du -S router.comx -x host-unreach -prot tcp -psrc  666  -pdst  69
        -orig inferno.hell 10.2.3.4
 
        -  Queremos  enviar un paquete ICMP Source Quench al host ldg02.hell en
        respuesta a un paquete destinado  al  host  ldg00  con  protocolo  UDP,
        puerto  origen  100  y  destino  200.  Nos enmascaramos como el gateway
        10.10.10.1:
 
        sing -sq -S 10.10.10.1 -prot  udp  -psrc  100  -pdst  200  -orig  ldg00
        ldg02.hell
 
        -  Queremos  enviar un paquete ICMP Time Exceeded al host ldg02.hell en
        respuesta a un paquete destinado  al  host  ldg00  con  protocolo  UDP,
        puerto  origen 100 y puerto destino 200. Nos enmascaramos como el gate‐
        way ldg04.hell:
 
        sing -tx -S ldg04.hell -x frag -prot udp  -psrc  100  -pdst  200  -orig
        ldg00 ldg02.hell
 
        -  Queremos  enviar  un  paquete ICMP Address Mask Request y esperar 10
        segundos para ver las respuestas. Enmascararemos el paquete con  origen
        en 10.2.3.4 y lo mandaremos a la dirección 10.0.1.255:
 
        sing -mask -S 10.2.3.4 -to 10 10.0.1.255
 
        -  Queremos  enviar  un  paquete ICMP Timestamp al host sepultura.hell.
        Enmascaramos el paquete como enviado por el host  10.2.3.1.  Usamos  el
        tiempo de espera por defecto, 5 segundos:
 
        sing -tstamp -S 10.2.3.1 sepultura.hell
 
        -  Queremos  enviar  un  paquete ICMP Information Request al host nomi‐
        nas.hell.  La dirección origen sera nuestra propia dirección IP,  y  el
        tiempo de espera sera de 20 segundos:
 
        sing -info -to 20 nominas.hell
 
        -   Queremos  enviar  un  paquete  ICMP  Router  Solicitation  al  host
        vagos.hell. La dirección de origen sera nuestra propia dirección IP,  y
        el tiempo de espera sera de 20 segundos:
 
        sing -rts --timeout 20 vagos.hell
 
        -  Queremos  enviar un paquete ICMP Echo Request al host vagos.hell con
        un el patrón de datos ’MiNombreEsGump’. La dirección origen sera  nues‐
        tra  propia  dirección IP. El tiempo de espera para leer los datos será
        de 2 segundos:
 
        sing  -data MiNombreEsGump -to 2 vagos.hell
 
        - Queremos enviar un paquete ICMP Echo Request  a  10.12.0.255  con  el
        siguiente  patrón  de  datos:  ’D  E  A  T  H’ (espacios inclusive). La
        dirección origen la enmascararemos como 192.168.0.255,  y  no  queremos
        leer las respuestas:
 
        sing  -S 192.168.0.255 -data ’D E A T H’ -to 0 192.168.0.255
 
        -  Queremos  enviar  un  ICMP Destination Unreach al host destino.death
        pero enviándolo con un código ICMP superior  a  los  legales  añadiendo
        además 60K de datos basura:
 
        sing -du -x max -gbg 60000 destino.death
 
        -  Queremos  enviar  un  ICMP  Router  Advertisement  al host death.es,
        diciéndole que los routers a usar son: router1.xtc con preferencia  20,
        router2.xtc  con  preferencia  50  y  router3.xtc  con  preferencia por
        defecto (0). Nos enmascararemos como el router routerpadre.xtc
 
        sing  -rta  router1.xtc/20  -rta  router2.xtc/50  -rta  router3.xtc  -S
        routerpadre.xtc death.es
 
        -  Queremos  enviar  un  ICMP  Parameter  Problem al host desgracias.es
        diciéndole que el paquete que ha enviado al host paleto.org con  proto‐
        colo  udp,  puerto  origen 13 y puerto destino 53, tiene un error en el
        byte 13 de la cabecera IP.   Además,  le  añadiremos  todos  los  bytes
        basura posibles:
 
        sing -S paleto.org -param -ptr 13 -prot udp -psrc 13 -pdest 53 -gbg max
        desgracias.es
 
        - Queremos enviar un paquete ICMP Timestamp al host www.paletos.org con
        el código 38 en lugar del código (0) que llevaría normalmente:
 
        sing -tstamp -x 38 www.paletos.org
 
        -  Lo mismo de antes sin el código 38 y usando using Loose Source Rout‐
        ing entre los routers cisco, 10.13.1.1 y wakeup.man:
 
        sing -tstamp cisco@10.13.1.1@wakeup.man@www.hicks.org
 
        - Y ahora lo mismo pero con Strict Source Routing:
 
        sing -tstamp cisco!10.13.1.1!wakeup.man!www.hicks.org
 
        - Usar Record Route IP Option par aver la ruta hacia ftp.target.xx:
 
        sing -R p.target.xx
        Postel, John, "Internet Control Message Protocol - DARPA Internet  Pro‐
        gram  Protocol Specification", RFC 792, USC/Information Sciences Insti‐
        tute, September 1981.
 
        Mogul,  Jeffrey  and  John  Postel,   "Internet   Standard   Subnetting
        Procedure",  RFC  950,  Stanford,  USC/Information  Sciences Institute,
        August 1985.
 
        Braden, Robert, "Requeriments for Internet Hosts -  Communication  Lay‐
        ers", RFC 1122, USC/Information Sciences Institute, October 1989.
 
        Deering,  Stephen,  "ICMP  Router  Discovery Messages", RFC 1256, Xerox
        PARC, September 1991.
 
        Baker, Fred, "Requeriments for IP Version 4 Routers", RFC  1812,  Cisco
        Systems, June 1995.
 
        Arkin,   Ofir,   "ICMP   usage   in   scanning",   http://www.sys-secu     
        rity.com/archive/papers/ICMP_Scanning.pdf,  Sys-Security  Group,   July
        2000.
 
        El  código  fuente de Linux, en especial todo lo referente al código de
        red, y principalmente lo referido al protocolo ICMP.
 

AUTOR

        El autor del programa ping fue Mike Muuss (¡buen trabajo!).
 
        sing  ha  sido  escrito  por  Alfredo   Andres   Omella,   Slay   <aan‐
        dres@s21sec.com>