Parche para corregir shellshock en bash

Es por todos conocido -o, al menos, eso quisiera creer- el bug Shellshock [EN] que afecta las versiones de bash… bueno, básicamente, todas las versiones de bash hasta la 4.3.25.

Ahora, ¿En qué consiste la falla? Pues, que se pueden bypassear variables y ejecutar código arbitrariamente. Es decir, que cualquiera podría inyectar código en tu shell y hacer cosas muy, muy malas.

Un ejemplo del bug corriendo.

root@orchid:/home/manuel# env x='() { :;}; echo ola qe ase' bash -c "echo shellshock o qe ase"
ola qe ase
shellshock o qe ase

Este ejemplo inocente y sencillo constituye una prueba de concepto. Es decir, en ese momento mi versión de bash era vulnerable.

Es innecesario mencionar lo peligroso de este bug, y de las terribles implicaciones de éste. Me atrevería a decir que es más relevante y peligroso que Heartbleed [EN], aquel conocido bug de OpenSSL que hizo correr a más de un sysadmin.

Pues bien… revisando posibles arreglos a la situación, doy con este hilo de superuser [EN] donde proponen una solución. Puedo decir que a mí me funcionó en ElementaryOS (basado en ubuntu 12).

Y, para llevarlo al punto de la ironía, lo haremos con un bash script:

#!/bin/bash
mkdir src
cd src
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
for i in $(seq -f "%03g" 0 25); do wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done ./configure --prefix=/ && make && make install cd .. cd .. rm -r src

¿Qué hace este script? Descarga la versión 4.3 de bash, aplica parches y actualiza la versión. Nada realmente complicado.

Una vez aplicado el parche, volvemos a intentar ejecutar el código de prueba

root@orchid:/home/manuel# env x='() { :;}; echo ola qe ase' bash -c "echo shellshock o qe ase"
bash: aviso: x: ignoring function definition attempt
bash: error al importar la definición de la función para `x'
shellshock o qe ase

¿Y eso qué quiere decir? Pues, esas dos primeras líneas de la salida significan que no se puede importar una variable. Como lo otro es un simple echo, éste se muestra sin problemas.

Happy patching and hacking.

Comunicado a favor de la libertad y neutralidad de la red

Nosotros, los abajo firmantes, en nuestra condición de ciudadanos venezolanos, miembros de las comunidades organizadas de usuarios de Software Libre y activistas de la libertad del conocimiento y la neutralidad de la red, defendemos un Internet libre y abierto, apegándonos a la Declaración por la Libertad de Internet la cual citamos en su totalidad:

«Apoyamos procesos transparentes y participativos para regular internet y el establecimiento de cinco principios básicos:

Expresión: No se debe censurar internet.
Acceso: Promover acceso universal a redes rápidas y asequibles.
Apertura: Internet debe seguir siendo una red abierta donde todas las personas son libres de conectarse, comunicar, escribir, leer, ver, decir, escuchar, aprender, crear e innovar.
Innovación: Proteger la libertad de innovar y crear sin permiso. No se deben bloquear las nuevas tecnologías, y no se debe castigar a los innovadores por las acciones de los usuarios.
Privacidad: Proteger la privacidad y defender la capacidad de la gente para controlar como se utilizan sus datos y dispositivos.»

CONSIDERANDO
La violación al derecho de libre acceso a la información evidenciada recientemente por:

  1. Restricción del acceso a los siguientes sitios Web:
    1.1. twimg.com, que hospeda imágenes de la red social Twitter
    1.2. pastebin.com, utilizado para compartir información como texto plano.
    1.3. bit.ly, acortador de enlaces
    1.4 zello.com, aplicación walkie-talkie virtual para hablar con otras personas en canales públicos y privados.
    1.5 Diversos portales de noticias a nivel nacional.

Esta lista es meramente enunciativa y no restrictiva, por cuanto el bloqueo de sitios se extiende a un número bastante mayor de éstos, de aproximadamente 500; pero debido a falta de transparencia desde el ente regulador respecto a cuales son estos sitios bloqueados no se cuenta con una lista completa. Los sitios bloqueados han sido reportado por usuarios alrededor del mundo en un proceso de monitoreo constante, y verificados de igual manera.

CONSIDERANDO
2. La violación a la privacidad de los ciudadanos evidenciada por la instalación de un Centro Estratégico de Seguridad y Protección de la Patria (CESPPA), entre cuyas actividades, delineadas en el decreto 458 de la Presidencia de la República Bolivariana de Venezuela, publicado en la Gaceta Oficial N°:40266 del 7 de octubre de 2013 y cuyo reglamento interno se define en la resolución número 011-14 del Ministerio para el Poder Popular del Despacho de la Presidencia y seguimiento a la gestión de Gobierno de la república Bolivariana de Venezuela, publicada en la Gaceta Oficial N°: 40355 del 13 de Febrero de 2014, está la vigilancia permanente de los flujos de información, aún cuando la Constitución de la República Bolivariana de Venezuela establece el derecho inalienable a la privacidad en su artículo 48.

CONSIDERANDO
3. El corte generalizado del acceso a internet a una región del país por parte de la compañía nacional de teléfonos de Venezuela (CANTV) desde el día miércoles 19 de febrero de 2014 hasta el viernes 21 de febrero de 2014 evidenciado por múltiples reportes ciudadanos en el estado Táchira, en atención a que las Relatorías de Libertad de Expresión de la OEA en su comunicado R50/11 consideran el acceso a Internet parte fundamental del acceso libre a la información y expresión y por tanto necesario en el ejercicio de estos derechos humanos. Agregando que existe un precedente, presentado el 14 de abril del 2013, cuando el acceso a Internet fue cortado por 4 minutos en expresas palabras del Ministro Arreaza, en respuesta a ataques a sitios y cuentas oficiales.

CONSIDERANDO
4. Las repetidas y consuetudinarias violaciones a la neutralidad de la red, principio plasmado en nuestra Ley Orgánica de Telecomunicaciones, el libre acceso a la información y la prohibición de la censura previa, presentes en la Constitución de la República Bolivariana de Venezuela (art. 58 ejusdem), e incluso normas supraconstitucionales a las que el Estado Venezolano debe apegarse por haber suscrito acuerdos, entre ellos la Declaración Universal de los Derechos Humanos en su artículo 19.

ACORDAMOS
Fijar nuestra posición en los siguientes términos:

  1. Apoyamos la declaración de la neutralidad de la red y el acceso libre a la información como principios fundamentales para el desarrollo de nuestra nación.

  2. Expresamos nuestro desacuerdo con la creación del Centro Estratégico de Seguridad y Protección de la Patria (CESPPA), fundamentado en los siguientes puntos:
    2.1. Viola nuestro ordenamiento constitucional, nuestros derechos humanos y por tanto constituye un abuso de poder.
    2.2 Está en contra de los ideales y principios que defendemos como parte de los movimientos de Software y Conocimiento Libre, puesto que CESPPA se configura en un ente de censura previa a partir de criterios de seguridad y defensa de la nación, contraviniendo normas constitucionales establecidas en el art. 57 ejusdem.
    2.3. Es un acto irresponsable de nuestra parte como ciudadanos, usuarios y especialistas en tecnologías; no hacer de conocimiento publico nuestra opinión al respecto.

  3. Expresamos nuestro desacuerdo con las acciones por parte de cualquier empresa o institución nacional y/o extranjera que puedan representar restricciones al acceso a la información.

  4. Consideramos evidente la necesidad de motivar la concientización de los ciudadanos sobre las ventajas y riesgos del uso de Internet, así como el desarrollo de habilidades que les permitan tener un desenvolvimiento activo en el mismo.

  5. Reconocemos la existencia de un instrumento legal en la Ley Especial Contra los Delitos Informáticos, para la protección, prevención y sanción de delitos cometidos contra sistemas que utilicen tecnologías de información, la cual sanciona el espionaje electrónico como delito contra la privacidad de las personas en sus artículos 20, 21 y 22. Consideramos que cualquier acción ejecutada por cualquier entidad en aras de protegerse o prevenir ataques informáticos debe estar enmarcada en los preceptos establecidos en esta Ley.

  6. Reconocemos las potencialidades del sistema educativo, así como el crecimiento de la Fundación Infocentro, que ha hecho posible el acceso de millones de venezolanos a recursos de computación e Internet de manera libre y gratuita. Consideramos que el uso eficiente de estas herramientas pueden garantizarle a los ciudadanos el desarrollo de habilidades necesarias para un uso libre, sano y positivo de Internet y de las herramientas informáticas.

  7. Consideramos que la privacidad de los ciudadanos no se puede garantizar sin hacer uso de Software libre y estándares abiertos, por lo que hacemos énfasis en la necesidad de promover el cumplimiento de la Ley de Infogobierno promulgada en Gaceta Oficial N° 40.274, que establece que todo programa informático que se desarrolle, adquiera o implemente en el Poder Público deberá ser Software Libre, con estándares abiertos, transparente y comunitario, salvo las excepciones expresamente establecidas en la Ley y previa autorización del ente competente.

Suscriben

Manuel Lucena Pérez, UNPLUG

PS1: Sólo aparece mi firma acá, porque es mi blog y sólo yo puedo hacerme responsable de las cosas que acá publico. En la petición [Ver abajo] se encuentran las firmas de todos quienes suscribieron el comunicado.

PS2: Puedes suscribir el comunicado firmando La petición en change.org

Barquisimeto Chicken Wings

En una de esas típicas salidas de las madres, un buen día llega la mía con 1Kg de Alas de Pollo y me dice:
– «Aja… ¿Qué es lo que dijiste tú que ibas a hacer?»
– «Bufallo Wings, mamá»
– «Ahí están las alas de pollo»
– «Perfecto… ¿Tienes salsa picante, paprika, pimienta de Cayena…?»
– :poker face:

En cualquier otra circunstancia, habría preparado esas alas de pollo para dárselas de comer a mi perro, que, como eventualmente comentaré, también es Gourmet. Pero, en este caso (y básicamente para evitar «picarle la lengua» a la señora) dije que iba a improvisar.

Al final, la receta que llamé «Barquisimeto Chicken Wings», quedó así:

INGREDIENTES:
1Kg de alas de pollo
3 Cucharadas de margarina, derretida.
1 Cucharada de comino.
1/2 cucharadita de sal
1/2 cucharadita de pimienta negra
una pizca de tomillo

PREPARACIÓN:
Cortar las alas de pollo por la articulación
Mezclar en bowl aparte los ingredientes del marinado.
Meter las alas de pollo y 3/4 partes del marinado en bolsa plástica, cerrar, esperar media hora
Precalentar el horno a 180º
Descartar el exceso de la marinada en la bolsa y poner el pollo en una bandeja
Hornear hasta dorar
Poner el resto de la marinada apenas sacado el pollo del horno.

Swap de 4GB en un Galaxy Spica. Te lo tengo

En realidad, es bastante sencillo. Tomé la referencia de este post de samdroid, y funcionó básicamente a la primera.

El escenario es el siguiente: Un Samsung Galaxy Spica rooteado, y con CyanogenMod 7.9 (usando este tutorial), con Kernel 3.0.55, corriendo Gingerbread. Desde que se realizó la actualización, el equipo presenta problemas serios de funcionamiento, debido a la poca memoria RAM que posee. En un primer lugar, se aplicó una forma de usar la SD como partición swap, pero sólo logró incrementar en 512mb la misma, lo que en realidad hacía un flaco servicio, a pesar de ser bastante configurable.

Al poseer tan poca memoria, correr aplicaciones que consuman bastante RAM, como la cámara o el navegador, se hacía una verdadera pesadilla. Al punto de no poder usar el botón de cámara, la galería de CM7 y otros. Al principio, no presentaba demasiado problema, porque siempre puedes usar aplicaciones más ligeras o prescindir de algunos servicios por no ser vitales. La cosa cambia cuando quieres usar whatsapp, o line o el mismo reluciente hangouts, lo que me llevó a googlear un poco y dar con esta solución sencilla:

Necesitas:
1. Tener el teléfono rooteado (paso previo para poder instalar algún mod)
2. Algún cliente de terminal (si tienes CM7, lo más probable es que ya tengas uno instalado)
3. Una SD con suficiente espacio.
4. Un respaldo general (puedes googlear para averiguar cómo se hace), en caso de que rompas algo.
5. Conocimientos generales de comandos CLI. Recuerda que Android es una especie de Linux.
6. Alguna aplicación para correr comandos automáticamente al [re]iniciar el dispositivo. Recomiendo Autostart
7. Root explorer. Lo consigues en el play store.
8. Algún cliente para mover archivos de la pc al teléfono o algún editor de texto plano.

Mise en place:
1. Haz el respaldo general.
2. Particiona tu sd (Paso opcional, pero altamente recomendable)
3. Instala Autostart y todas las demás apps que necesites.
4. Crea un archivo (Y los directorios, si hace falta) /sdcard/data/opt/autostart.sh. Puedes hacerlo en la pc y usar algún app para moverlo al teléfono, o usar un editor de texto plano.
5. Darle permisos 777 a /mnt/sdcard/data/opt/autostart.sh.

Proceso:
1. En el terminal, te logueas como root. (O sea, tecleas «su», sin las comillas). Eso hará que aparezca un popup preguntándote si realmente quieres darle acceso de superusuario a esa aplicación. Dile que sí.
2. Luego de logueado como root, escribirás en el terminal: dd if=/dev/zero of=/sdcard/swapfile bs=1024 count=xyz, donde:
xyz = Cualquier número múltiplo de 1024: 2048, 3072, 4096… O, si lo hacemos como dice el tutorial, Cualquier número cuyo módulo de 1024 sea igual a cero (xyz % 1024 == 0).
Ahora bien, ¿qué hace este comando? Crea un archivo llamado /sdcard/swapfile, que es básicamente la ubicación de tu nuevo swap. bs es el tamaño del bloque (en este caso 1024 bytes) y count es la cantidad de bloques que quieres crear.
3. En el mismo terminal, ahora ejecutas swapon /sdcard/swapfile. Es decir, activas la swap.
4. Ejecuta free. Debe aparecer una pantalla así:
Nota el 4227064, es decir, 4GB.
5. Ahora, pones en el terminal echo 'swapon /sdcard/swapfile' > /sdcard/data/opt/autostart.sh Para añadir el comando de activar el swap en el script de inicio. O, puedes abrir de nuevo tu editor de texto y pones swapon /sdcard/swapfile
6. Reinicia el teléfono, abres el terminal y ejecutas «free» de nuevo. Debería haber funcionado.

Mise en Place para SysAdmins

Uno de los mayores aportes de los franceses a la humanidad ha sido su gastronomía. Y, dentro de ese amplísimo aporte, está la metodología para el manejo profesional de una cocina. Una de esas metodologías (¿O debería llamarle más bien «procedimiento»?) es el «Mise en place», que no es otra cosa que -como dice su traducción- la puesta en sitio de los implementos, ingredientes y materiales que requieres en el servicio, así como todo el proceso de preparación previa.

Hay gente que considera el Mise en place como una religión (Hello, Mr. Bourdain), por lo vital que es dentro de una cocina. ¿Cuántas veces no les ha pasado que vienen con un plato en mente, y cuando llegan a casa, no hay un ingrediente vital para la preparación? O, peor: empezar a cocinar y darte cuenta que ese ingrediente falta. Sin una preparación previa, e incluso sin un estudio situacional de tu área de trabajo, los resultados son, en la franca mayoría de las ocasiones, un completo desastre en el que la improvisación termina siendo el pan del día y las soluciones dejan de ser tales para ser «pañitos de agua caliente».

Una de las áreas en las que eso se nota con mayor énfasis es en la de Administración de Sistemas (O servidores), en donde una práctica descuidada puede traer consecuencias realmente graves. Y aquí habla mi experiencia personal: Las veces que no se hace un estudio previo, se toman en cuenta todas las posibles situaciones y se realizan planes de acción acordes a ellos, se suele terminar dando carreras de última hora tratando de solventar esa situación que no se preveyó en su momento y que, en el mejor de los casos, sólo te quita tiempo. Pero, la verdad sea dicha, suele quitarte también dinero y un poquito de orgullo.

Entonces, ¿qué tiene que ver los procedimientos de cocina francesa con el System Administration? Pues, precisamente el Mise en place, como podrán haber notado. Casi en cualquier carrera, puedes hacer una variante de la puesta a punto para poder trabajar lo menos estresado posible. Ahora bien, ¿Qué cosas en concreto se pueden hacer?

1. Documentarse, siempre documentarse: El viejo refrán dice «El saber no ocupa espacio». Antes de realizar una implementación, o de saltar a decir «TE LO TENGO» sin siquiera saber de qué diantres hablan, es mejor usar un par de horas (o de días, depende de la magnitud del requerimiento y nuestro sempiterno nivel de ignorancia) para hojear y luego leer en profundidad aquellas literaturas relacionadas con el tema que ocupa. Admitir desconocimiento es bueno. Es mejor decir «No domino el tema, pero si me das un par de días, te puedo dar una respuesta e incluso hacerte un presupuesto» que luego llegar con la pata de palo y el loro en el hombro.

2. Estudiar la situación: Sí, claro… me presionan y quiero salir de ese rollo rápido. Pero, como les dije anteriormente, es preferible perder un par de horas analizando cada posible detalle y planteándose cada mínimo escenario para, de ese modo, no tener que llevarse sorpresas -mayormente desagradables- en el camino de la implementación. No hay preguntas tontas, sino tontos que no preguntan. El realizar todas las preguntas que aclaren todas las dudas, y dejar que tu contraparte haga todas las preguntas, detalle todos los requerimientos y sea absolutamente claro con la forma en la que espera que las cosas salgan. Ese período en el que la comunicación fluye y las diferencias de opinión surgen debe ser aprovechado, para de ese modo saber exactamente qué toca hacer.

3. Tener siempre a mano un servidor de pruebas: Con la posibilidad de crear máquinas virtuales en equipos con cada vez mayores y mejores prestaciones de hardware, es prácticamente un pecado no tener entornos en los que se pueda probar y, -más frecuentemente de lo que se quisiera admitir- romper. Allí, en ese espacio confinado y cerrado como un laboratorio, podrás hacer todas las pruebas, con un enfoque más o menos metodológico, dependiendo de tus capacidades o de la naturaleza de las pruebas. A través del ensayo y error, y error, y error, y error, y error…

4. Preparar los ingredientes: En el caso particular del System Administration, implementar un servicio en particular, o realizar alguna labor de respaldo o recuperación, requiere de cierta cantidad de software e incluso de configuración en mitad de la implementación. Entonces, a medida que vayas necesitando una librería, un paquete de desarrollo, un addon, un plugin o todo un paquete, asegúrate de tomarlo en cuenta mientras estés en tu entorno de pruebas. De ese modo, al pasar a producción, podemos aplicar esas correcciones o preparaciones de una manera más o menos automática.

5. Crear tu libro de recetas: Complementando los dos puntos anteriores, una vez que ya perfeccionaste la técnica, que manejas y respetas los ingredientes, que tienes una idea clara de qué tiempos manejar y cómo preparar todo, puedes pasar a hacer tu receta para la implementación. Eso logra dos cosas: 1- Regular el proceso, logrando de esa manera un estándar (que puede o no haber sido ya definido), y 2- Permitirte crear scripts de shell que hagan el trabajo por ti. Pueden creerme cuando les digo que llega un momento en el que instalar y configurar BIND9+Apache2+PHP5+MySQL+Postgres+RVM+Ruby 1.9.3+Rails 3.0+Git+Capistrano+Perolitos de seguridad diversos llega a ser fastidioso.

6. Cocinar (o administrar) como un rockstar: Y, no… No me refiero a consumiendo drogas, en un camerino con groupies o en medio de una gira. Me refiero a hacerlo con confianza, a hacerlo incluso con un poco de arrogancia. Si todo tu Mise en place fue bien hecho, vas a disfrutar la experiencia de [cocinar/implementar un servidor] sin ningún contratiempo ni sobresalto. Es decir, las cosas saldrán fluidas porque te encargaste de que el proceso estuviese libre de stress. Total, el stress ya lo pasaste en los cinco pasos previos.

Estoy confiado en que disfrutaron la lectura, aunque no hayan sido más que respuestas obvias. Pero, si Paulo Coelho hace tanto dinero haciendo exactamente lo mismo, ¿Por qué yo no puedo escribir sandeces? ¡¡Hasta otra!!