Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas

miércoles, 14 de mayo de 2014

Vulnerabilidad Critica en Linux desde hace 5 años


diff-500

Se ha dado a conocer un importante fallo de seguridad en el núcleo Linux que afecta a todas las versiones desde la 2.6.31(¡una versión del 2009!) hasta la actual 3.14.3. Se trata de un fallo que es capaz de corromper la memoria asignada al núcleo y hasta puede permitir que un usuario no-root pueda obtener privilegios de autorización. Red Hat afirma que RHEL 6 no es vulnerable y las distribuciones Fedora y Ubuntu, que tenían acceso por adelantado al CVE-2014-0196 desde hace dos semanas, ya han publicado las actualizaciones de seguridad correspondientes con parches propios. Debian ha lanzado ya una actualización, pero solo para la rama estable. Sin embargo, el proyecto Linux tan solo ha agregado el parche a la rama de desarrollo y las demás distribuciones no han movido ficha aún.


El fallo fue descubierto por un usuario de SuSE, la distribución comercial de Novell. El fallo consiste en que si se da simultáneamente más de una orden de escritura a la misma pseudoterminal (una TTY), se puede producir lo que se conoce como un "desbordamiento de búfer" (buffer overflow); es decir, un intento de escribir más allá de la memoria asignada a una variable del procedimiento que se está ejecutando en ese momento. Como el procedimiento que lleva a cabo una orden de escritura en una pseudoterminal, llamado n_tty_write(), es una función del núcleo Linux, al producirse el desbordamiento, habremos sobreescrito memoria del mismísimo núcleo hasta donde queramos.


¿Por qué es peligroso que se desborde un búfer? Simplemente porque en ejecutables binarios escritos en C o C++ al final de la memoria de cada procedimiento se encuentra la dirección de memoria del procedimiento "padre". Si sobreescribimos esa información con una dirección que nosotros controlamos, podemos entonces ejecutar código arbitrario. Si esto se produce, como en este caso, sobreescribiendo la memoria de un proceso "privilegiado" (el núcleo, un demonio, etc.), el proceso arbitrario que ejecute el atacante también tendrá privilegios de administrador, por lo que podrá modificar el sistema a su antojo sin necesidad de entrar al sistema como "root". Por otro lado, si no se sobreescribe la memoria con nada significativo y solo se produce el desbordamiento, entonces el núcleo se caerá y tendremos un "kernel panic".


Si os fijáis, estoy repitiendo constantemente que se tiene que dar la condición de que se produzca el desbordamiento.Esto se debe porque el fallo sucede en un fenómeno técnicamente conocido como "condición de carrera" (race condition). Desde hace tiempo existe la posibilidad de ejecutar código en paralelo, en "hilos" o "procesos" diferentes (no son sinónimos, pero ambos se refieren a formas de ejecutar órdenes en paralelo). El problema consiste en que no hay forma de predecir el momento ni el orden en que se ejecutan los hilos o procesos (de hecho, cuando se programa en paralelo hay que tener esto muy en cuenta y nunca escribir código paralelizado que asuma uno u otro orden de ejecución). Por lo tanto, puede suceder que dos o más hilos o procesos intenten acceder o modificar una misma región de la memoria, con la consecuencia de obtener un resultado totalmente impredecible en la ejecución del programa (hay formas de protegerse de esto que, básicamente, consiste en marcar temporalmente una variable como "propiedad" de un hilo u otro). En el caso que nos toca hoy, resulta que dependiendo de la sincronización y del orden en que acaban ejecutándose las órdenes paralelas de escritura a la TTY, podemos sufrir el desbordamiento o no.


De hecho, podéis probar esto por vosotros mismos ejecutando esta prueba de concepto de explotación de la vulnerabilidad. A mí me produjo una caída del núcleo tan solo a la tercera vez de ejecutarlo (Arch Linux con 3.14.3 "stock"), pero a la primera y segunda el azar quiso que no tuviera efecto alguno. Compiladla y probadla bajo vuestro riesgo (hará caer el sistema si tiene éxito).


A diferencia de la opinión vertida por los redactores de Ars Technica, que consideran que son los servidores los que más peligro de ser atacados por esta vía, creo que el peligro real está en Android. El código vulnerable está presente(líneas 1997 y ss.) en la última versión del núcleo utilizada por Android 4.4 (basado en Linux 3.4) y la imposibilidad de actualizar la mayoría de los dispositivos hace que esto sea un vector de ataque bastante plausible contra aquellos dispositivos que no se verán actualizados jamás. La única recomendación posible aquí es que mientras Google no publique un parche tengáis mucho cuidado en no instalar aplicaciones sospechosas. Es verdad que las distribuciones Linux de escritorio que no hayan actualizado su núcleo aún también son vulnerables, pero si uno se ciñe a los repositorios oficiales, uno debería quedarse tranquilo (lo único que podría pasar es que, por mala suerte, el núcleo se cayera por darse las condiciones para el desbordamiento, pero si no ha pasado aún después de tantos años, es poco probable que pase).

Este año está siendo un año negro de descubrimiento de errores graves en el Software Libre: primero el "goto fail" de Apple (sí, era código libre) y el de de GnuTLS, luego Heartbleed y ahora este. No quiero dar la sensación de que esta noticia sea una buen, porque no lo es, pero sí es verdad que alivia ver cómo la comunidad se mueve para solventar estos fallos una vez descubiertos con una rapidez que ningún proyecto privativo del tamaño de Linux puede permitirse. Recordad que no hay software perfecto, pero sí que hay proyectos que, al funcionar con libertad, permiten que cualquiera contribuya y alerte a la "inteligencia colectiva" de que algo está fallando.

Así que estad atentos a las actualizaciones de seguridad de vuestra distribución e instaladlas lo antes posible.



martes, 6 de mayo de 2014

Squid - Detener Conexión desde el exterior

omaha-squid-web

En ocasiones puede suceder por una muy mala configuración sumado a una ip publica fija que se pueda utilizar nuestro servidor proxy desde internet. Es decir que podemos brindar navegación por proxy a nivel mundial sin saber. Si no me crees los Chinos tienen una linda base de datos con proxys: http://www.cybersyndrome.net/pld.html

Esto en Squid lo podemos solucionar fácilmente:

1) configurando squid (archivo squid.conf) para que solo acepte solicitudes desde la LAN filtrando por IP
2) filtrando por firewall el acceso desde la WAN al squid por el puerto que usa (por defecto 3128)

Si tines dudas, configura (desde una red externa) tu navegador con navegación por proxy ingresando la ip publica mas el puerto de squid, si logras navegar... sorpresa sorpresa :)

miércoles, 25 de diciembre de 2013

Squid: Restricción de acceso a Sitios de Internet


Configuración dcontrole Squid: Restricción de acceso a Sitios de Internet


Autor:dark Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org
Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2011 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.


Denegar el acceso a ciertos Sitios de Red permite hacer un uso más racional del ancho de banda con el que se dispone. El funcionamiento es verdaderamente simple y consiste en denegar el acceso a nombres de dominio o direcciones de Internet que contengan patrones en común.

Este documento considera que se ha leído previamente, a detalle y en su totalidad el documento titulado «Configuración de Squid: Servidor Proxy,» y que ha configurado exitosamente Squid como servidor proxy.

Restricción por expresiones regulares.


Se debe crear un archivo donde se definirá la lista de expresiones regulares.








vim /etc/squid/listas/expreg-denegadas



Esta lista puede contener cualquier expresión regular que se considere sea usualmente utilizadas en las direcciones de ciertos sitios.








adult
celebri
mp3
otrositioindeseable.com
playstation
porn
sex
sitioindeseable.com
taringa
torrent
warez
wii



Esta lista, la cual deberá ser completada con todas las palabras (muchas de estás son palabras obscenas en distintos idiomas) y direcciones de Internet que el administrador considere pertinentes, la guardaremos como /etc/squid/listas/expreg-denegadas.

Edite el archivo /etc/squid/squid.conf:








vim /etc/squid/squid.conf



Añada una lista de control, denominada expreg-denegadas, de acceso tipo url_regex (expresiones regulares del URL), que defina al la lista en el archivo /etc/squid/listas/expreg-denegadas:








acl expreg-denegadas url_regex "/etc/squid/listas/expreg-denegadas"



Habiendo hecho lo anterior, deberemos tener en la sección de Listas de Control de Acceso algo similar a lo siguiente:








#
# Recommended minimum configuration:
acl all src 0.0.0.0/0
acl manager proto cache_object
acl localhost src 127.0.0.1/8
acl localnet src 192.168.1.0/24
acl password proxy_auth REQUIRED
acl expreg-denegadas url_regex "/etc/squid/listas/expreg-denegadas"



A continuación especificaremos modificaremos una Regla de Control de Acceso existente agregando con un símbolo de ! que se denegará el acceso a la Lista de Control de Acceso denominada expreg-denegadas:








http_access allow localnet !expreg-denegadas



La regla anterior permite el acceso a la Lista de Control de Acceso denominada localnet, pero le niega el acceso a todo lo que coincida con lo especificado en la Lista de Control de Acceso denominada expreg-denegadas.

Ejemplo aplicado a una Regla de Control de Acceso combinando el método de autenticación explicado en el documento Configuración de Squid: Acceso por Autenticación:







Reglas de control de acceso: denegación de sitios.

#
# INSERT YOUR OWN RULE(S) HERE TO allow ACCESS FROM YOUR CLIENTS
#
http_access allow localhost
http_access allow localnet password !expreg-denegadas
http_access deny all



Restricción por expresiones regulares.


Para restringir el acceso por dominios, se crea un archivo con lista con dominios.








vim /etc/squid/listas/dominios-denegados



Los nombres pueden ser nombres de dominio específicos:








www.facebook.com
www.twitter.com
plus.google.com



O bien puede definirse todo el dominio completo, incluyendo sub-dominios:








.facebook.com
.twitter.com













Nota.
Si define .dominio.com, es innecesario definir www.dominio.com o mail.dominio.com o ftp.dominio.com, etc., pues todos son subdominios de .dominio.com:


O bien se pueden definir dominios de nivel superior genéricos o geográficos.








.co.jp
.com.cn
.im
.tv
.xxx



O bien una combinación de todo lo anterior.








.co.jp
.com.cn
.facebook.com
plus.gogle.com
.tv
.twitter.com.im
.xxx



Edite el archivo /etc/squid/squid.conf.








vim /etc/squid/squid.conf



Añada una lista de control, denominada dominios-denegados, de acceso tipo dstdomain (dominios de destino), que defina al la lista en el archivo /etc/squid/listas/dominios-denegados.








acl dominios-denegados dstdomain "/etc/squid/listas/dominios-denegados"



Añada una regla de control de acceso que deniegue el acceso a sitios que estén incluidos en la lista de dominios.








http_access allow localnet !expreg-denegadas !dominios-denegados



Permitiendo acceso a sitios inocentes incidentalmente bloqueados.


Si por ejemplo, el incluir una expresión regular en particular, en la lista de expresiones regulares denegadas, afecta incidentalmente el acceso a un sitio de Internet en particular, también puede generarse una lista de dominios que serán excluidos de las restricciones.

Utilice el editor de texto para crear el archivo /etc/squid/dominios-inocentes.








vim /etc/squid/dominios-inocentes



El contenido puede ser una lista de dominios o bien dominios de nivel superior, que se considere deban ser accedidos por la red local en cualqueir momento y sin restricciones.








.alcancelibre.org
.edu
.edu.mx
.eluniversal.com.mx
.gob.mx
.gov
.milenio.com
.org
.org.mx
.unam.mx
www.google.com
www.google.com.mx



Este archivo será definido en una Lista de Control de Acceso del mismo modo en que se hizo anteriormente con el archivo que contiene dominios y palabras denegadas.








acl dominios-inocentes dstdomain "/etc/squid/dominios-inocentes"



Para hacer uso de el archivo, sólo bastará utilizar la expresión ! en la misma línea utilizada para la Regla de Control de Acceso establecida para denegar el mismo.








http_access allow all dominios-inocentes



La regla anterior especifica que se permitirá el libre acceso, en todo momento, a los dominios incluidos en la lista de control de acceso denominada dominios-inocentes.

Finalizando procedimiento.


Finalmente, sólo bastará recargar la configuración de Squid para que tomen efecto los cambios y se puedan realizar pruebas.








service squid reload







http://www.alcancelibre.org/staticpages/index.php/19-2-como-squid-restriccion-web

martes, 4 de junio de 2013

LliureX - Linux para sistemas educativos

LliureX es un sistema operativo y una colección de aplicaciones


LliureX tiene un sistema operativo como lo son Microsoft Windows, Apple Mac OSX o Google Android. Un sistema operativo es el conjunto de programas que gestiona los recursos físicos del ordenador y provee de servicios básicos a los programas de aplicación. Junto con el sistema operativo, son necesarios otros programas para poder realizar tareas útiles con el ordenador: los programas de aplicación. Los más conocidos son los programas ofimáticos, los navegadores web y los reproductores multimedia que, por supuesto, tienen alternativas libres en LliureX.


Desde un primer momento, LliureX se ha preocupado por ofrecer un sistema que sea tan fácil como "enchufar y listo", además de por facilitar aún más la experiencia del usuario haciendo que tareas que no son tan sencillas de realizar, finalmente lo acaben siendo.




Esta distribución ofrece características como:






  • Incluye paquetes de software para las diferentes áreas educativas de la enseñanza obligatoria: Matemáticas, Lenguaje, Física, …

  • Está disponible en varias versiones dependiendo del personal educativo que la vaya a usar: Escritorio, Infantil, Biblioteca...

  • Utiliza el entorno de escritorio GNOME.

  • Disponible en español y valenciano.


Imagen tomada de: http://www.bilib.es/recursos/catalogo-de-aplicaciones/ficha-de-aplicacion/app/lliurex/ Imagen tomada de: http://www.bilib.es/recursos/catalogo-de-aplicaciones/ficha-de-aplicacion/app/lliurex/


Para complementar más diré que estas son sus versiones estables para descarga:


LliureX Biblioteca: es una adaptación de la distribución LliureX para las bibliotecas de los centros educativos ,que incorpora la aplicación PMB para la gestión y control de bibliotecas.


Cliente Aula: LliureX Modelo de Centro (con versión para servidores y clientes) amplía el tradicional modelo de aula. En el modelo de aula, las aulas de informática forman una red independiente que dispone de un servidor al que se pueden conectar tanto estaciones de trabajo como clientes ligeros (clientes). El nuevo modelo de centro, además, permite la interconexión de las diferentes aulas con un servidor de centro.


LliureX Escritorio: es la adaptación de la distribución LliureX genérica, diseñada para los ordenados personales, de la sala de profesores, secretarías... Es decir, está destinada a ser instalada en los ordenadores que no dependen de un servidor (que no están dentro del aula de informática, o en biblioteca...).


LliureX Infantil: es la adaptación LliureX para los niveles educativos de Infantil y primeros cursos de Primaria.


LliureX Ligero: es la adaptación de la distribución LliureX con unos requerimientos hardware menores y que, por lo tanto, permite la reutilización de equipamiento de bajo rendimiento que no cumple los requisitos mínimos para su utilización como estación de trabajo independiente LliureX Escritorio (Desktop).


LliureX Música: es la adaptación LliureX para los equipos multimedia, con necesidades de software específicos de audio, video y multimedia.


LliureX Pime:  es una adaptación que se ha desarrollado para su uso en los ciclos formativos de las familias de Admistración y Gestión y de Comercio y Marketing. Incluye una selección de aplicaciones adaptadas al entorno empresarial, y se han eliminado los programas orientados a los niveles educativos de infantil, primaria y secundaria, así como las aplicaciones de apoyo a la docencia. Es por estos motivos que Lliurex-Pime es un buen candidato para aquellas pymes que quieran iniciarse en el software libre, especialmente para las de la comunidad valenciana, dado que el entrorno está traducido al valenciano y al castellano, como en el resto de adaptaciones de LliureX.


Servidor: LliureX Modelo de Centro (con versión para servidores y clientes) amplía el tradicional modelo de aula. En el modelo de aula, las aulas de informática forman una red independiente que dispone de un servidor al que se pueden conectar tanto estaciones de trabajo como clientes ligeros (clientes). El nuevo modelo de centro, además, permite la interconexión de las diferentes aulas con un servidor de centro.







Fuentes:




  1. http://www.bilib.es/recursos/catalogo-de-aplicaciones/ficha-de-aplicacion/app/lliurex/

  2. http://mestreacasa.gva.es/web/lliurex/


jueves, 30 de mayo de 2013

Squid - Disco Duro Completo / Squid no inicia


Introducción


En mi trabajo, la red se encuentra dividida en tres subredes, en todas ellas se controla el acceso a internet mediante el proxy Squid con dos servidores distintos:


Uno proporciona el servicio de proxy para la red 192.168.2.x y el otro servidor controla las redes 192.168.1.x y 192.168.3.x


Cabe destacar que la principal y más importante es la 1.x


Todo está configurado y no hay mucha necesidad de “meter mano”, solo cuando se desea habilitar un contenido o web específica o crear una cuenta de usuario para el proxy.


Sin embargo, una mañana simple y tranquila me informan textualmente que no hay “internet”


Los síntomas


Como buena persona trabajadora en mi área procedí a chequear el pc afectado, grande fue mi sorpresa al percatarme que:




  1. El cable de red no estaba desconectado

  2. Existía respuesta “ping” del equipo al servidor.

  3. Otras personas empezaron a decirme que tampoco tenían internet


Luego de eso y chequeando la red 2.x me percate que si tenían salida a internet. Todo funcionaba bien.


El problema fue al ingresar al terminar del servidor y al darle al comando # /etc/init.d/squid restart este no detenía el servicio de squid mostrando un lindo mensaje de [FAILED] pero posteriormente mostraba burlescamente el mensaje de [OK]. Digo burlescamente porque si bien mostraba el mensaje que el servicio de squid fue iniciado este no levantaba y la red seguía caída.


Bitmap_VS_SVG.svg

El diagnostico


Ya me comencé a preocupar. El día anterior todo funcionaba bien, no había modificado nada en los servidores y sin embargo el problema estaba allí, no había acceso a internet desde una parte de la red.

Con la ayuda de mi amigo RC5 (experto en Linux) mire los registros en /var/log/squid/squid.out el cual me ayudo a percatarme del problema:

[caption id="attachment_1000" align="aligncenter" width="519"]02 squid: ERROR: Could not send signal 0 to process ...
FATAL: Failed to make swap squid: ERROR: Could not send signal[/caption]

Así es, el disco duro estaba lleno y basto un df- h para corroborar la dramática situación
03

La solución


Esta vendría siendo la primera solución la cual debería funcionar sin problema alguno, también les dejo un sitio donde hay un script bach que hace la limpieza.




  • Borrar todo en /var/log/squid


Sin embargo esto no me soluciono nada por lo que decidí inspeccionar el servidor físicamente y chequear el disco duro, con lo que me lleve una gran sorpresa:




  • En el directorio /var/www/sarg existían carpetas de cache de squid con mas de 2 años de antigüedad, las cuales contenían obviamente archivos que ocupaban todo la capacidad del disco duro.


Consejo:


Este directorio deberia ser borrado automaticamente cada 3 meses, si no es así se deberá hacer manual hasta configurar squid.conf

Anexo - Limpiar caché del servicio SQUID en GNU/Linux CentOS 5.6


Publicado por lsilva en http://www.centosni.net/limpiar-cache-del-servicio-squid-en-gnulinux-centos-5-6/
 

jueves, 4 de abril de 2013

Entrar mediante usuario y contraseña en Squid

Algo que veo realmente indispensable en un filtro es la opción de entrar mediante un usuario y una contraseña para poder navegar.

Podríamos, de manera muy básica (hay programas dedicados para ello) crear un tipo de hotspot que deniegue todo el tráfico pero que mediante el uso de cuentas de usuario permita la navegación.

Squid permite ésta opción, y es que, por muy básica que sea, se ajusta perfectamente a las necesidades.

Seguir leyendo 'Entrar mediante usuario y contraseña en Squid'

Puesta en escena

Imaginemos que tenemos montado un hotspot y queremos que cuando alguien entre en el pida un usuario y contraseña para poder navegar.

En squid, podríamos crear usuarios y contraseñas y habilitarlos y de ésta forma, controlar un poco más el tráfico que realizan nuestros clientes y dar una capa más de seguridad a nuestro proxy.

Puesta en marcha

Haremos uso de regla tipo password para habilitar el acceso mediante cuentas de usuario en squid.

Lo primero que vamos a hacer es crear el archivo de configuración en el que iremos guardando los usuarios.

Como realizaremos todo el trabajo desde la carpeta de squid nos movemos a esa ruta y creamos el fichero:
   cd /etc/squid

   touch usuarios

Ahora, cambiamos los permisos del archivo (como adminstador) para que solamente el pueda modificar los usuarios.
   chmod 600 usuarios

Una vez hecho ésto, ya podemos crear los usuarios. Ésto lo haremos mediante el programa htpasswd, que podremos instalar mediante la órden (en ubuntu):
   sudo apt-get install htpasswd

y creamos nuestro primer usuario:
   htpasswd usuarios usuario1

Nos fijamos en que el usuario que hemos creado se llama usuario1 y se ha añadido a nuestro fichero de usuarios. Si todo ha ido bien, tras haber lanzado ésta orden el sistema habrá pedido que introduzcamos una contraseña.

Una vez creado el usuario, podremos configurar nuestro servidor proxy para que pida contraseña cada vez que alguien entre a navegar.

La siguiente regla la añadimos debajo de la configuración básica de squid en el archivo /etc/squid/squid.conf
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/usuarios

para que use el archivo usuarios para comprobar los usuarios y contraseñas.

Ahora pasamos a crear el acl que indique que se requiere de contraseña:
acl password proxy_auth REQUIRED

Lo único que nos falta ahora es decirle a squid a quíen debe pedir contraseña. Para poner un ejemplo, tengo configurado dos acl's:

   acl all 0.0.0.0/0.0.0.0

   acl red 192.168.10.0/255.255.255.0

y a red le permito navegar y a all no (para que no se metan intrusos desde otra red).
   http_access allow red

http_access deny all

Ahora, si queremos que red tenga acceso pero mediante el uso de contraseña, dejamos la línea de ésta forma:

http_access allow red password

Listo, reiniciamos nuestro servidor squid y ya podremos acceder mediante usuario y contraseña.

Abajo os dejo mi configuración de squid para que véis como ha quedado la configuración de squid mediante usuario y contraseña.
http_port 3128

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/usuarios


#Definir acceso:

acl all src 0.0.0.0/0.0.0.0

acl red src 192.168.10.0/255.255.255.0

acl password proxy_auth REQUIRED


#Permitir o bloquear:

http_access allow red password

http_access deny all

viernes, 5 de septiembre de 2008

LTSP - Linux Terminal Server Projet

LTSP (Linux Terminal Server Projet) permite crear un servidores Linux con sus respectivos terminales.

Estos terminales Linux se conectan al servidor y pueden usar los programas que este ofrece. La ventaja de esto es que se puede implementar con equipos en desuso y armar una red para que los estudiantes tengan la oportunidad de trabajar y navegar por internet. Tambien es ecológico porque reutilizamos estos equipos en vez de botarlos a la basura.

"Ya sabes! No tires tu PC viejo! Reutílizalo!"




Más información: Experiencia LTSP - Wiki Educalibre
emerge © , All Rights Reserved. BLOG DESIGN BY Sadaf F K.