DNS Recursivo, y ataques DDoS a que se refiere?

Antes de verse intimidado por la cantidad exagerada de texto de este post, si usted administra un servidor DNS, debería de leer lo siguiente:

Primero aclararemos que DNS es el acrónimo en inglés para Sistema de Dominio de Nombres, en otras palabras es un medio que nos permite traducir una dirección web a IP y viceversa, por ejemplo linux.org.sv a la IP 68.178.241.185 y la IP 68.178.241.185 a linux.org.sv. Esto se pensó con el propósito de que la navegación en Internet fuera cómoda.

En forma general, existen dos tipos de servidores DNS, que son los servidores recursivos y los servidores autoritativos, y es posible que ambos se ejecuten en la misma máquina.

El autoritativo es un servidor que conoce información acerca de uno o más dominios (lo que normalmente se denominan zonas), por lo general es uno o dos dominios, y no sabe información sobre otros dominios.

El recursivo es un servidor capaz de encontrar la respuesta a cualquier consulta DNS, y puede encontrar información acerca de casi todos los dominios, por ejemplo google.com, linux.org, gentoo.org . Generalmente estos servidores están abiertos a cualquier IP , en otras palabras, pueden ser consultados por cualquier maquina en el mundo.

El problema es que muchas entidades hacen que el mismo servidor actúe tanto como autoritativo como recursivo. Una práctica sana es tenerlos separados, lo cual previene el problema denominado “envenenamiento de cache”.
Si es imposible tenerlos separados, es recomendable que permitan recursión a solo un rango de IPs “confiables”.

Para clasificar la inseguridad de tener un servidor DNS recursivo abierto a internet es comparable a tener un “Open Proxy” en un servidor proxy o un “Open Relay” en un servidor de correos. Simplemente era algo que hasta cierta fecha no fue aprovechado por “mentes siniestras” pero que ahora es aprovechado y utilizado para fines oscuros.

Posibles riesgos de tener un servidor recursivo en Internet
Ser una víctima de ataques de envenenamiento de caché, la cual hace que el servidor afectado almacene información falsa. Dicha información puede ser utilizada para comprometer la seguridad de los clientes que hacen consultas al servidor afectado, por ejemplo redireccionar google.com a un sitio con malware, o redireccionar sitios de bancos con la intención de obtener información confidencial del usuario.

El servidor podría ser ocupado para un ataque DoS distribuido el cual puede tener las siguientes consecuencias:

  • La gran cantidad de consultas DNS recibidas por el servidor y la gran cantidad de respuestas enviadas a la víctima pueden consumir una considerable cantidad de ancho de banda
  • Problemas legales ya que si, por ejemplo, un equipo de un ISP ataca a un cliente, seguramente el cliente lo demandará

Un ejemplo de las consecuencias de la recursividad (Ataque DDoS)

Aquí

En que consiste el ataque? me da curiosidad saber…
Trataré de explicarlo de la manera mas sencilla: con ejemplos.
Para dar un ejemplo, a veces un dominio x recibe respuestas ICMP echo, porque “alguien” modifico los paquetes para que parecieran como si el dominio x hizo la petición ICMP echo, en otras palabras recibimos respuesta de un ping que NUNCA salio de nuestro dominio.
Ahora de otra manera, como los paquetes UDP son fragmentados por los servidores, y UDP puede ser fácilmente modificado su IP de origen, el servidor DNS recibe un paquete grande, que se hace mas grande (técnicamente, mas fragmentos), enviando la respuesta al blanco atacado. Imaginemos muchos DNS recursivos enviando respuestas al “blanco atacado”. Si, eso es una Denegación de servicio distribuida (DDoS).

Si sienten la explicación anterior muy sencilla o vaga, pueden leer http://www.isotf.org/news/DNS-Amplification-Attacks.pdf :)

Soluciones al problema

Entonces algunos podrían decirme, y no es esa la intención de un DNS, resolver todos los dominios a todo el mundo?
No, esa es una función de un servidor recursivo, como hemos hablado anteriormente puede ser autoritativo y contener información solamente para un dominio. Lo mas conveniente es que permita la recursividad solamente a un rango de IPs

Yo estoy protegido, porque ocupo Bind en Linux/BSD :)
No, la recursión no se refiere a un sistema operativo o software en específico :(

Espero lo anterior les haya despertado la curiosidad sobre el tema, saludos

Curioso script de perl

Recientemente vagando en el Internet me hallé el siguiente script de perl con forma de camello:

                                                       #
                                                   sub j(\$){($
                     P,$V)=                      @_;while($$P=~s:^
                 ([()])::x){                    $V+=('('eq$1)?-32:31
           }$V+=ord(  substr(                 $$P,0,1,""))-74} sub a{
          my($I,$K,$  J,$L)=@_               ;$I=int($I*$M/$Z);$K=int(
         $K*$M/$Z);$J=int($J*$M             /$Z);$L=int($L*$M/$Z); $G=$
         J-$I;$F=$L-$K;$E=(abs($          G)>=abs($F))?$G:$F;($E<0) and($
          I,$K)=($J,$L);$E||=.01       ;for($i=0;$i<=abs$E;$i++ ){ $D->{$K
                  +int($i*$F/$E)      }->{$I+int($i*$G/$E)}=1}}sub p{$D={};$
                 Z=$z||.01;map{    $H=$_;$I=$N=j$H;$K=$O=j$H;while($H){$q=ord
                substr($H,0,1,"" );if(42==$q){$J=j$H;$L=j$H}else{$q-=43;$L =$q
              %9;$J=($q-$L)/9;$L=$q-9*$J-4;$J-=4}$J+=$I;$L+=$K;a($I,$K,$J,$ L);
              ($I,$K)=($J,$L)}a($I,$K,$N,$O)}@_;my$T;map{$y=$_;map{ $T.=$D->{$y}
              ->{$_}?$\:' '}(-59..59);$T.="\n"}(-23..23);print"\e[H$T"}$w= eval{
              require Win32::Console::ANSI};$b=$w?'1;7;':"";($j,$u,$s,$t,$a,$n,$o
              ,$h,$c,$k,$p,$e,$r,$l,$C)=split/}/,'Tw*JSK8IAg*PJ[*J@wR}*JR]*QJ[*J'.
               'BA*JQK8I*JC}KUz]BAIJT]*QJ[R?-R[e]\RI'.'}Tn*JQ]wRAI*JDnR8QAU}wT8KT'.
               ']n*JEI*EJR*QJ]*JR*DJ@IQ[}*JSe*JD[n]*JPe*'.'JBI/KI}T8@?PcdnfgVCBRcP'.
                '?ABKV]]}*JWe*JD[n]*JPe*JC?8B*JE};Vq*OJQ/IP['.'wQ}*JWeOe{n*EERk8;'.
                  'J*JC}/U*OJd[OI@*BJ*JXn*J>w]U}CWq*OJc8KJ?O[e]U/T*QJP?}*JSe*JCnTe'.
                   'QIAKJR}*JV]wRAI*J?}T]*RJcJI[\]3;U]Uq*PM[wV]W]WCT*DM*SJ'.  'ZP[Z'.
                      'PZa[\]UKVgogK9K*QJ[\]n[RI@*EH@IddR[Q[]T]T]T3o[dk*JE'.  '[Z\U'.
                        '{T]*JPKTKK]*OJ[QIO[PIQIO[[gUKU\k*JE+J+J5R5AI*EJ00'.  'BCB*'.
                             'DMKKJIR[Q+*EJ0*EK';sub h{$\ = qw(% & @ x)[int    rand
                              4];map{printf  "\e[$b;%dm",int(rand 6)+101-60*   ($w
                               ||0);system(  "cls")if$w ;($A,$S)=    ($_[1],   $
                                _[0]);($M,   @,)= split  '}';for(     $z=256
                                ;$z>0; $z   -=$S){$S*=   $A;p @,}      sleep$_
                                [2];while   ($_[3]&&($    z+=$ S)       <=256){
                                p@,}}("".   "32}7D$j"     ."}AG".       "$u}OG"
                                ."$s}WG"    ."$t",""      ."24}("        ."IJ$a"
                                ."}1G$n"    ."}CO$o"     ."}GG$t"        ."}QC"
                                 ."$h}"      ."^G$e"    ."})IG"          ."$r",
                                 "32}?"       ."H$p}FG$e}QG$r".          "}ZC"
                                 ."$l",          "28}(LC" .""            ."".
                                 "$h}:"           ."J$a}EG".             "$c"
                                 ."}M"             ."C$k}ZG".            "$e"
                                 ."}"             ."dG$r","18"          ."}("
                                ."D;"            ."$C"  )}{h(16         ,1,1,0
                               );h(8,          .98,0,0   );h(16         ,1,1,1)
                               ;h(8.0         ,0.98,0,     1);         redo}###
                             #written                                 060204 by
                           #liverpole                                  @@@@@@@
                        #@@@@@@@@@@@

Si, ES UN SCRIPT DE Perl! y también pueden descargarlo aquí , lo más interesante es ver la salida del comando. Ahora me ha quedado muy claro que perl es facilísimo de interpretar :|

Alianza Secreta entre OpenRanger y MarkVision

Recientemente me “regalaron” una memoria Markvision de esas que son feas pero que no caen mal :P y traía un volante con el siguiente texto:

Publicidad voip en Markvision

y pensé que seguramente era alguna empresa extranjera haciéndose publicidad, al visualizar los archivos contenidos en la USB me encontré con lo siguiente:


Léase el archivo “vivophone.exe” , ese es seguramente otro producto calidad OpenRanger quienes han hecho una alianza internacional!

Habilitando plugin de flash en Liferea+xulrunner

Ahora que Adobe ha sacado a la luz el plugin flash 10 para GNU/Linux 64 bits me he atrevido a probarlo en la laptop primero con Mozilla Firefox y luego con Liferea, un lector de feeds del cual he hablado antes, ya que al utilizar el plugin de flash en 32 bits literalmente cocinaba el CPU.

Cabe destacar que aunque el plugin no es algo superliviano y sigue siendo software privativo, tiene un desempeño más aceptable que las versiones anteriores.

Para leer los artículos Liferea permite utilizar un navegador incrustrado que puede ser Mozilla/Firefox/XulRunner , GtkHTML o Seamonkey, entre otros.

En mi caso ocupo XulRunner porque me permite independizarme de cualquier navegador y para instalar el plugin se hace de la siguiente manera:

En caso tengamos el plugin en nuestro Firefox

# ln -s /usr/lib/mozilla-firefox/plugins/libflashplayer.so /usr/lib/xulrunner/plugins

En caso que no

#wget link

# tar xfz libflashplayer*tar.gz

# cp libflashplayer.so /usr/lib/xulrunner/plugins

Listo, podremos leer aquellos feeds que tengan contenido flash

Desactivando Control + Alt + Backspace en X

Recientemente un usuario de emacs me comentaba que para ellos la combinación de teclas Control Alt Backspace tiene un significado especial, y que normalmente lo deshabilitan. También es útil deshabilitarlo para evitar alguna pérdida de datos al teclear involuntariamente dicha combinación.

El cambio es sencillo, se edita /etc/X11/xorg.conf tal como sigue:

Section "ServerFlags"
   Option "DontZap" "True"
EndSection

Se reinicia X (si deseamos utilizando Ctrl+Alt+Backspace por última vez XD ) y la combinación de tecla queda deshabilitada.

666 Días funcionando

Haciendo una revisión rutinaria a un servidor, me encuentro con lo siguiente:

[root@proxy ~]# uptime
09:19:19 up 666 days, 35 min, 3 users, load average: 0.05, 0.01, 0.00

Aparte de el número 666 que causa un poco de morbo, cabe notar el hecho que ha estado casi dos años funcionando sin necesidad de reiniciar.

Cuánto es el mayor tiempo que han tenido uptime una máquina Linux ??

PD: Linux Rocks

Ascii Art en errores de kernel GNU/Linux @ Sparc

Jugando con una UltraSparc II en GNU/Linux me dio un curioso crash dump:

Oct 15 12:03:54 quetzalcoatl [  253.145378] spitfire_data_access_exception:
SFSR[0000000000801009] SFAR[fffff800be90bf88], going.
Oct 15 12:03:54 quetzalcoatl [  253.145472]               \|/ ____ \|/
Oct 15 12:03:54 quetzalcoatl [  253.145495]               "@'/ .. \`@"
Oct 15 12:03:54 quetzalcoatl [  253.145517]               /_| \__/ |_\
Oct 15 12:03:54 quetzalcoatl [  253.145540]                  \__U_/
Oct 15 12:03:54 quetzalcoatl [  253.145636] emerge(3364): Dax [#1]
Oct 15 12:03:54 quetzalcoatl [  253.145687] TSTATE: 0000004411009606 TPC:
00000000004c3dd0 TNPC: 00000000004c3dd4 Y: 00000000    Not tainted

La imagen de una persona sacandome la lengua en un crash dump no es tan divertida como pensó el desarrollador del kernel…

Bootchart: Graficando el proceso de arranque de GNU/Linux

Recientemente me encontré con una herramienta muy curiosa que muestra de forma gráfica el proceso de arranque de un GNU/Linux denominada Bootchart, la cual realiza su trabajo recolectando información de los procesos durante el arranque y renderizando el resultado a un archivo png, svg (Scalable Vector Graphics) o a un eps (PostScript).

La intención de bootchart es mostrar cuando arrancan los procesos, cuánto tiempo de CPU utilizan, utilización de disco, en otras palabras, una imagen que muestre lo que sucede durante el proceso de arranque y ayude a la posterior depuración/optimización del mismo.

Instalando…

La instalación en Gentoo es sencilla

Desenmascaramos el paquete (en mi caso tengo el keyword amd64, para otros será x86)

# echo “app-benchmarks/bootchart ~amd64″ >> /etc/portage/package.keywords

Agregamos la use flaga java para poder generar archivos png

# echo “app-benchmarks/bootchart java” >> /etc/portage/package.use

Instalamos

# emerge app-benchmarks/bootchart

Configurando bootchart

Es necesario agregar init=/sbin/bootchartd al final de la línea del kernel correspondiente, dentro del archivo /boot/grub/menu.lst por ejemplo:

kernel /boot/kernel-2.6.25-gentoo-r7-vostorga-0.33 init=/sbin/bootchartd

Es necesario editar el archivo /etc/conf.d/rc y cambiar

RC_USE_BOOTCHART="yes"

El archivo de configuración /etc/bootchartd.conf está muy bien documentado, pero igualmente las opciones siguientes son posiblemente en las que estaremos más interesados:

#Esta opción nos permite utilizar BSD Accounting el cual nos permite que la visualización de procesos sea más exacta, pero para activarlo necesitamos que la opción CONFIG_BSD_PROCESS_ACCT_V3 (General setup-> BSD Process Accounting-> BSD Process Accounting version 3 file format) esté activada en el Kernel , igualmente bootchart funciona si la dejamos como “no”

PROCESS_ACCOUNTING=”yes”

#Localización del archivo comprimido donde estarán los logs de Bootchart

BOOTLOG_DEST=/var/log/bootchart.tgz

#Determina si se realizará automáticamente el gráfico una vez termine el proceso de arranque

AUTO_RENDER=”yes”

#Determina el formato del gráfico, las opciones disponibles son png, svg y eps

AUTO_RENDER_FORMAT=”png”

#Directorio donde se guardarán los gráficos

AUTO_RENDER_DIR=”/var/log”

Y la prueba……la gráfica

Por ultimo, reiniciamos y obtenemos algo como lo siguiente:

…..47 segundos en mi caso, cuáles son sus tiempos?

PD: No reinicio muchas veces ya que suspendo, pero es divertido debugguear el arrance

PD2: Luego daremos un vistazo al baselayout2+openrc que seguro disminuye el arranque en Gentoo GNU/Linux

Sitio de software libre para Solaris

Vagando por la red me he encontrado por el sitio http://sunfreeware.com el cual incluye un amplio repertorio para las siguientes combinaciones en Solaris :

  • Sparc / Solaris 2.5 , 2.6 , 7, 8, 9, 10
  • x86 / Solaris 2.5, 2.6, 7, 8, 9, 10

Lo interesante es que explica como instalar cada software, además de describir algunos “trucos” y en algunos casos, las limitaciones del software en Solaris

Así que no hay excusas para probar software libre en los Unix!

Curioso bug en avahi 0.6.22

Una brevísima introducción a avahi

Avahi es una implementación del concepto “exploración de la red para descubrir servicios”, en otras palabras del estándar Zeroconf , utilizado por ejemplo para descubrir impresoras de red, compartidos de win2, servidores ftp, hosts, mas que todo en LANs.

Avahi no es exclusivo de GNU/Linux, sino que hay implementaciones en otros sistemas operativos, por ejemplo el famoso Bonjour de OS X.

El bug

Recientemente revisando rutinariamente los logs me fijé en lo siguiente:

Sep 24 08:38:57 phoenix ath_pci: wifi0: Atheros 5424/2424: mem=0xf2000000, irq=16
Sep 24 14:38:57 phoenix avahi-daemon[11671]: Joining mDNS multicast group on interface wlan0.IPv4 with address 192.168.11.70.
Sep 24 14:38:57 phoenix avahi-daemon[11671]: New relevant interface wlan0.IPv4 for mDNS.
Sep 24 14:38:57 phoenix avahi-daemon[11671]: Registering new address record for 192.168.11.70 on wlan0.IPv4.
Sep 24 08:41:48 phoenix acpid: received event “ac_adapter ACAD 00000080 00000001″
Sep 24 08:41:48 phoenix acpid: notifying client 6097[106:1009]

Como se puede notar la fecha reportada en el syslog en las líneas correspondientes a avahi se muestran incorrectamente e investigando esto se debe a que avahi corre en un chroot y no maneja bien la configuración de zonas horarias; la solución para que se muestre correctamente es copiar el archivo tz en el directorio /etc/avahi

# mkdir /etc/avahi/etc

#cp /etc/localtime /etc/avahi/etc/

Reiniciamos el servicio y listo.

Hay un ticket sobre lo anterior en http://avahi.org/ticket/221

Powered by WordPress with GimpStyle Theme design by Horacio Bella.
Entries and comments feeds. Valid XHTML and CSS.