Category Archives: seguridad

La importancia de la actualización

Desde hace años, me vengo encontrando con sistemas instalados que hay que mantener o sobre los que hay que desarrollar, que son instalaciones de hace 5 ó 7 años. Estas instalaciones suelen ser máquinas con RedHat 9, RedHat EL 2, 3 ó 4, o Fedora Core 2 ó 3. En esos años RedHat estaba muy metido en el entorno empresarial y Fedora Core fue una respuesta libre (totalmente) a la desaparición de RedHat Desktop.

El caso es que la empresa y la comunidad que soportan ambas distribuciones (incluso distros comos OpenSuSE o SuSE, Mandriva y otras similares) les pasa que desarrollan versiones de forma bastante rápida (una o dos al año), con lo que, pasando 5 años, pueden haber salido unas 10 versiones posteriores del producto.

Esto genera problemas, sobre todo para la comunidad y la empresa que las mantiene, que deben de ir cerrando soporte de las antiguas, porque sino sería un caos el mantenimiento de 10 distros con versiones distintas de los códigos que se incluyen. A día de hoy, RedHat no suele mantener nada más que dos versiones, al última y su anterior, y Fedora Core, como mucho, da soporte a las 3 ó 4 últimas, con lo que, yendo actualmente por la versión 12, es lógico que el soporte a la versión 2 y 3 ha expirado hace bastante tiempo.

¿Qué pasa si hemos instalado un servidor web con estas distribuciones y queremos mantenerlo para nuestro correo, página web y otros menesteres?, pues que sino actualizamos, llegará el momento en el que haya vulnerabilidades en el código de nuestro servidor de correo, nuestro servidor web, o que queramos simplemente actualizar la versión del CMS que estamos usando y necesite una versión superior de Python, PHP o Ruby, o no tengamos forma de instalarla, a menos que vayamos tirando de compilación.

En Debian también pasa algo parecido. El ritmo de liberación de las distribuciones es más lento, con lo que da un tiempo mayor de permanencia de una distribución a su siguiente liberación. Pero el cambio es mucho mayor en este sentido, puesto que las versiones, cuando se cambian, son saltos bastante grandes y requiere de un mayor esfuerzo de adaptación.

¿Qué hacer?, básicamente, ir actualizando y mantenerse al tanto de cuando sale la siguiente liberación de la distribución que estamos usando y, sobretodo, planificar tiempos cada 5 ó 6 meses, para actualizar las distribuciones a sus versiones superiores, ya que así estaremos más protegidos de posibles vulnerabilidades.

Tener presente que si el cambio no se realiza, puntualmente, antes de que el soporte oficial a la distro que tenemos instalada expire, nos veremos en la situación de tener un sistema con agujeros de seguridad, que es propenso a fallos y sobre el que, cada día que pase, será más complicado instalar software nuevo.

WordPress y los ataques DoS

De aquí a un tiempo he visto algunos scripts bastante simples que, sorprendentemente, hacen bastante daño a malas configuraciones de sitios con wordpress. El sistema de DoS (Denial of Service, Denegación de Servicio) que se usa para el ataque es de tipo flood (inundación) enviando un número muy alto de peticiones. Por ejemplo: Under Security.

Normalmente, estos scripts se realizan buscando las peticiones más lentas de los sistemas web. Una vez detectadas, se procede a lanzar muchas de estas peticiones en muy poco tiempo. Los servidores web, ante una avalancha de peticiones, normalmente, comienzan a crear forks o workers (según el servidor y modo de funcionamiento) hasta llegar al límite máximo configurado… o a que se sature el sistema y termine no respondiendo.

Los sistemas GNU/Linux, al igual que la mayoría, tienen un uso de memoria limitada por el tamaño de la misma que haya instalada. Estos sistemas manejan una caché bastante grande y por ello, aunque se tenga 1GB o más instalado en el sistema, siempre se anda con una ocupación bastante alta de la memoria del sistema. Cuando esta se agota, se recurre a la memoria de intercambio (swap), que es mucho más lenta que la memoria convencional, por lo que el sistema comienza a ralentizarse.

Para evitar estos problemas, lo ideal es configurar de forma adecuada el servidor web, acorde a la memoria disponible, el número máximo de hilos que se puedan crear y el número máximo de forks o workers que se puedan lanzar para atender peticiones. Con esto evitamos que la memoria se use en exceso y, aunque las peticiones se atiendan más lentas, se asegure que el sistema permanecerá estable.

También habría que revisar la pila de entrada TCP para el puerto 80 (se puede ver a través de netstat en cualquier sistema GNU/Linux), por si acaso se saturase mucho, comenzar a cortar, vía cortafuegos (iptables), las direcciones IP que estén haciendo flood.

Spam por relay

A la mayoría no solo le sonará este artículo, sino que lo habrá experimentado en propias carnes. Esto se detecta fácilmente, cuando comienzan a llevar emails que vienen con el remitente MAILER-DAEMON. En este momento puedes planteartes dos posibles escenarios:

  • han entrado en tu servidor y han comenzado a enviar un montón de emails desde tu cuenta de usuario, o
  • alguien ha comenzado a enviar un montón de emails a servidores mal configurados, con tu dirección de email como remitente, para hacerte llegar todos esos mensajes.

Visto por cualquiera de las formas pinta mal, pero a la que nos referimos cuando hablamos de spam por relay es la segunda. Tu sistema está bien configurado, nadie ha entrado y no has enviado ningún email, pero sin embargo comienzan a llegar emails de MAILER-DAEMON o similares, diciendo que no han podido entregar tu email (y te lo ponen completo) porque no se encuentra el usuario, porque está mal formado, o por cualquier otro error intencionado que ha introducido el spammer.

El problema se da, y lo sé porque lo he vivido, cuando abres la bandeja de entrada y ves nada más y nada menos que de 30 a 60 mensajes diarios con el mismo asunto. Después, leyendo las cabeceras del email (esas que no se ven a simple vista, ni desde MUAs como Outlook), se puede ver, en la lista de los Received, el último que aparece (que es el primero que se escribió):

Received: (from nj.ua@localhost)
	by nj.ua (8.13.8/8.13.8/Submit) id a862dvhn858019;
	Thu, 21 Jan 2010 09:36:45 +0800

Ha sido enviado por alguien que no se conoce, la siguiente línea es la del que recibe el email, directamente, por lo que no ha pasado, siquiera, por nuestro servidor. Estamos seguros… pero eso no nos quita el problema… y realmente, y lamentablemente, no hay una solución real a este problema, ya que al intentar comunicar a cada uno de los sitios la configuración que deben de poner para que esto no pase (validación de SPF, uso de EHLO o HELO,…) o no saben cómo hacerlo y pasan, o pasan directamente.

Por lo que, el spam ha conseguido otra vía de acceso a través de los sistemas de email más pobremente configurados (y hay muchos así) de Internet. ¿Habrá forma de pararlos?

Debootstrap: probar sin ensuciar

Desde hace tiempo, llevo usando esta herramienta para generar jaulas de modo que pueda probar nuevos sistemas, servidores y/o configuraciones, sin necesidad de desconfigurar mi sistema actual.

El sistema se basa en tener una copia exacta y nueva de un sistema operativo basado en Debian GNU/Linux, que se instala en un directorio específico de nuestro árbol de directorios. El comando que genera la jaula, que tiene el nombre de debootstrap, se encarga de realizar la instalación del sistema a partir del directorio solicitado y con las fuentes solicitadas, es decir, si queremos instalar un woody, sarge, etch, lenny… o un gutsy, hardy, ibex… pues solo tenemos que indicarlo, con la URL de donde conseguir los paquetes y listo.

Por ejemplo, instalar en nuestro directorio /home/usuario/lenny una distribución lenny de Debian, sería hacer lo siguiente:

# debootstrap lenny /home/usuario/lenny http://ftp.rediris.es/debian

Esto tardará unos minutos hasta realizar la instalación completa, ya que se tiene que descargar los paquetes de internet, pero en el momento de finalizar, tendremos un sistema básico de lenny instalado en la ruta indicada.

Para poder usarlo, solo tendremos que hacer lo siguiente:

# mount -t proc proc /home/usuario/lenny/proc
# chroot /home/usuario/lenny

El hecho de montar el directorio proc es para poder tener acceso, desde la jaula, al kernel y poder lanzar servidores como apache, proftpd, postfix o similares.

Una vez dentro, podremos realizar las instalaciones y configuraciones que queramos realizar sin miedo de estar estropeando nuestra configuración normal.

Servidor de hora en GNU/Linux

En las redes internas de la mayoría de empresas, se sucede la necesidad, muchas veces, de tener sincronización horaria en las máquinas para mejorar el rendimiento y la calidad de los datos a almacenar, de cara  a anotaciones y lanzamiento de tareas programadas.

La sincronización horaria es completamente posible de llevar, simplemente, instalando un servidor de hora NTP dentro de nuestra red, para que nos haga de servidor de sincronización.

En España, generalmente, se suele usar hora.rediris.es como servidor de hora, puesto que es un sistema formado por varios servidores, algunos de ellos con el uso de relojes GPS.

Muchos sistemas ya tienen el servidor ntpd instalado. En otros habrá que hacer la instalación, ya sea del paquete con nombre: ntp, ntp-server, ntpd…

El archivo de configuración, normalmente: /etc/ntp.conf; debería de tener un contenido parecido a este:

driftfile /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/
 
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
 
server hora.rediris.es
 
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
 
restrict 127.0.0.1
restrict ::1
 
restrict 192.168.123.0  mask  255.255.255.0 notrust
 
broadcast 192.168.123.255
disable auth
broadcastclient

Con esto, el servidor de hora recién instalado, servirá como repetidor para los equipos de la red interna. En caso de tener un solo equipo, en ese caso es mejor tomar el archivo de /etc/ntp.conf y modificarlo levemente para hacer que el sistema fucnione, y nada más.

Espero que os sirva de ayuda.

¿Mi sistema es realmente seguro?

Es una pregunta que llega a plantearse mucha gente muchas veces, ¿es mi equipo realmente seguro?

Estas preguntas surgen siempre por desconocimiento y, realmente es bueno que nos las hagamos, ya que hay también mucha gente que dice saber y, cuando dicen eso de: “en mi equipo es imposible que entren”; es donde están realmente equivocados.

Nuestros equipos informáticos, en la amplia mayoría, están conectados a Internet. Reciben una cantidad de información muy grande a diario, y envian también mucha información a la red de redes.

Cuando se configura un ordenador, normalmente, se hace conectado a un router. Este tipo de conexión, a priori, hace que sea imposible que un atacante pueda acceder directamente al equipo que está detrás del router. Pero en sí, el router también podría contener algún tipo de vulnerabilidad, con la que pudiera ser saltado, por lo que no nos da una seguridad total.

Por otra parte, no es necesario que entren por ahí, desde tiempos inmemoriales, las mejores tácticas para atacar a alguien, sin que este se diese cuenta y usando el factor sorpresa, han sido con engaños. Los programas que parecen inofensivos y se instalan en nuestro sistema, pueden actuar como el famoso caballo de Troya (y a cuyo nombre deben el suyo propio: troyanos).

Este tipo de malware se encarga de tomar información propia y, normalmente, de convertir nuestro sistema en un zombie.

¿Es nuestro equipo realmente seguro? Depende del uso que le demos, depende de que no se reproduzca contenido recibido de fuentes no seguras y, de que nuestros equipos, si usan Windows, tengan el software preciso y necesario para evitar males mayores.

¿Un sistema GNU/Linux es más seguro? Normalmente sí, pero no es totalmente seguro, debe de mantenerse el mismo cuidado, no visualizar contenido del que se desconozca su origen, y deshabilitar los permisos de tipo ejecución en todos los ficheros “sospechosos”, es una buena práctica.