El Protocolo generador de caracteres ( CHARGEN ) es un servicio de Internet Protocol Suite definido en RFC 864 en 1983 por Jon Postel . Está destinado a fines de prueba, depuración y medición. El protocolo se usa raramente, ya que sus defectos de diseño permiten un uso indebido fácil. [1]
Un host puede conectarse a un servidor que admita el protocolo generador de caracteres en el puerto número 19 del Protocolo de control de transmisión (TCP) o del Protocolo de datagramas de usuario (UDP) . Al abrir una conexión TCP, el servidor comienza a enviar caracteres arbitrarios al host que se conecta y continúa hasta que el anfitrión cierre la conexión. En la implementación UDP del protocolo, el servidor envía un datagrama UDP que contiene un número aleatorio (entre 0 y 512) de caracteres cada vez que recibe un datagrama del host de conexión. Se descartan todos los datos recibidos por el servidor.
Implementación de Inetd
En la mayoría de los sistemas operativos similares a Unix, un servidor CHARGEN está integrado en el demonio inetd o xinetd . El servicio CHARGEN generalmente no está habilitado de forma predeterminada. Se puede habilitar agregando las siguientes líneas al archivo /etc/inetd.conf y diciéndole a inetd que vuelva a cargar su configuración:
chargen stream tcp nowait root internochargen dgram udp esperar raíz interna
Aplicaciones
El servicio CHARGEN se puede utilizar como fuente de un flujo de bytes para depurar el código de red TCP para la correcta verificación de límites y gestión del búfer. También puede ser una fuente de carga útil genérica para la medición del ancho de banda y / o el ajuste fino de QoS. [ cita requerida ] Aunque se debe considerar si la compresión de hardware está activa, ya que la salida del servicio CHARGEN se comprime fácil y eficientemente. Esta compresión puede hacer que las pruebas de ancho de banda informen el tamaño de los datos después de la descompresión, en lugar de la cantidad real de datos que pasaron el cable.
Sesión de muestra
Una sesión de servicio CHARGEN típica se ve así: el usuario se conecta al host mediante un cliente telnet . El usuario recibe un flujo de bytes . Aunque el formato específico de la salida no está prescrito por RFC 864 , el patrón recomendado (y un estándar de facto ) son líneas desplazadas de 72 caracteres ASCII que se repiten.
$ telnet localhost chargenIntentando 127.0.0.1 ...Conectado a localhost.El carácter de escape es '^]'. ! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abcdefg! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abcdefgh"# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abcdefghi# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghij$% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijk% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijkl& '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklm'() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmn() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmno) * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnop* +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopq+, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqr, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrs-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu/ 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuv0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvw123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwx23456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxy3456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {56789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|6789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|} 89:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!9:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!":; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" #; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $<=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $%=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% &>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '? @ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '(@ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '()ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() *BCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +CDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +,DEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -EFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -.FGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. /GHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0HIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 01IJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 012JKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123KLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 01234LMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 012345MNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456NOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 01234567OPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 012345678PQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789QRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789:RSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789 :;STUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789:; <TUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789:; <=UVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789:; <=>VWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789:; <=>?WXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789:; <=>? @XYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789:; <=>? @ AYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789:; <=>? @ ABZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789:; <=>? @ ABC[\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789:; <=>? @ ABCD\] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789:; <=>? @ ABCDE] ^ _ `abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789:; <=>? @ ABCDEF^ _`abcdefghijklmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFG_`abcdefghijklmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGH`abcdefghijklmnopqrstuvwxyz {|}!" # $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIabcdefghijklmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJbcdefghijklmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKcdefghijklmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLdefghijklmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMefghijklmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNfghijklmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOghijklmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPhijklmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQijklmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRjklmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSklmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTlmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUmnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVnopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWopqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXpqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYqrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZrstuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [stuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\tuvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\]uvwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^vwxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _wxyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _`xyz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` ayz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abz {|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abc{|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abcd|}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abcde}! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abcdef ! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abcdefg! "# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abcdefgh"# $% & '() * +, -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abcdefghi^]telnet> salirConexión cerrada.
Esto continúa hasta que se cierra la conexión TCP como se muestra en el seguimiento al finalizar la sesión de telnet.
Abuso
El servicio se utilizó maliciosamente para bloquear los servidores de nombres de dominio (DNS) de Microsoft que ejecutan Windows NT 4.0 al canalizar los caracteres arbitrarios directamente al puerto de escucha del servidor DNS (telnet ntbox 19 | telnet ntbox 53). [2] [3] Sin embargo, el ataque puede haber sido un síntoma de una gestión incorrecta del búfer por parte del servicio DNS de Microsoft y no directamente relacionado con el servicio CHARGEN. [ cita requerida ]
UDP CHARGEN se usa comúnmente en ataques de denegación de servicio. Al usar una dirección de origen falsa, el atacante puede enviar tráfico de rebote desde una aplicación UDP CHARGEN a la víctima. UDP CHARGEN envía de 200 a 1000 veces más datos de los que recibe, dependiendo de la implementación. Esta "multiplicación de tráfico" también es atractiva para un atacante porque oculta la dirección IP del atacante de la víctima.
CHARGEN se implementó ampliamente en impresoras conectadas a la red. Dado que el firmware de la impresora rara vez se actualizaba en modelos más antiguos antes de que se conocieran CHARGEN y otros problemas de seguridad, es posible que todavía haya muchas impresoras conectadas a la red que implementen el protocolo. Cuando son visibles en Internet, invariablemente se utilizan indebidamente como vectores de denegación de servicio. Los atacantes potenciales a menudo escanean redes en busca de fuentes CHARGEN del puerto UDP 19.
Tan notoria es la disponibilidad de CHARGEN en las impresoras que algunos troyanos distribuidos de denegación de servicio ahora usan el puerto UDP 19 para su tráfico de ataque. El supuesto objetivo es desviar a los investigadores de la pista; para que busquen impresoras antiguas en lugar de computadoras subvertidas.
Ver también
Referencias
- ^ "NVD - CVE-1999-0103" . nvd.nist.gov . Consultado el 5 de febrero de 2018 .
- ^ "Infracción de acceso en Dns.exe causada por un ataque Telnet malicioso" . Support.microsoft.com. 2006-11-01 . Consultado el 31 de mayo de 2009 .
- ^ "Servidor DNS de MS sujeto a ataque de denegación de servicio" . IT Pro . 1997-05-27 . Consultado el 5 de febrero de 2018 .