30 abril 2007

Todos deberiamos trabajar como lo hacen en Google

La gente de Google apuesta por una estructura casi plana y por trabajadores versátiles, más que por los "super-preparados" y solitarios.

Y ofrecen muchos alicientes a la gente que trabaja allí, para que se encuentren a gusto en su puesto de trabajo. No todo es el sueldo. A cierto nivel (en cuanto uno cubre sus necesidades básicas), se empiezan a valorar los "detalles añadidos". Y en Google tienen detalles como el dar a un empleado dos semanas de vacaciones si su pareja tiene un hijo, el regalar 5000 dólares a quien compre un coche eléctrico o híbrido, el tener una cafetería (pagada) dentro de la oficina para no necesitar salir a comer si no quieres, el que la propia empresa ponga autobuses lanzadera para recoger a los empleados de las ciudades cercanas, la política de no hacer reuniones a primeras horas de la mañana ni a últimas horas de la tarde, los cuestionarios de "qué mejorarías?", el poder llevar tu perro al trabajo...

Una foto de cómo podría ser el ambiente de trabajo en una empresa así:

http://www.zdnet.com.au/news/hardware/soa/Photo-gallery-Googleplex-in-Sydney/0,130061702,139256655-17,00.htm

O de cómo sería una reunión:

http://www.zdnet.com.au/news/hardware/soa/Photo-gallery-Googleplex-in-Sydney/0,130061702,139256655-16,00.htm

Y, como no, de la cafetería:

http://www.zdnet.com.au/news/hardware/soa/Photo-gallery-Googleplex-in-Sydney/0,130061702,139256655-1,00.htm


Esperemos que poco a poco vayan siendo más empresas las que tomen ejemplo (o simplemente abran los ojos), valoren a sus empleados y se den cuenta de que ellos son lo que las hace permanecer donde están. Con empleados descontentos es imposible que una empresa prospere. Son los empleados los que están en contacto con nuestros clientes y/o los que generan nuestro producto final. Pero en mi entorno la gran mayoría de las empresas tienen una enorme enorme enorme falta de visión...

Esa visión de Google (no sólo de puertas afuera, sino incluso en el interior de la empresa) es lo que la hace ser una empresa número uno a nivel mundial.


Para más detalles, una entrevista a la "jefe de cultura organizacional" de Google (en ZdNet, en inglés).

13 abril 2007

No son bugs, sino características

A cualquier programador le suena a conocido eso de "no es que mi programa tenga un bug, es que ése es su comportamiento".

De hecho, hay una frase similar en tono de humor que dice algo como "no es que mi programa tenga bugs... es que desarrolla características al azar".

Pues parece ser que la gente de Microsoft se ha aplicado (otra vez) el cuento de la primera frase.

Resulta que en ciertas circunstancias, con ciertos documentos, Word 2007 falla y abandona la aplicación de repente. No he podido probarlo por mí mismo, porque no uso Word 2007, pero un investigador israelí informó de este suceso como posible fallo de seguridad.

Alguien de Microsoft ha dado la respuesta: los "crashes" de Microsoft no son bugs, sino características de diseño. Ha dicho algo como "De hecho, el comportamiento observado en Microsoft Word 2007 en este ejemplo es un comportamiento diseñado, que mejora la seguridad y la estabilidad, saliendo de Microsoft Word cuando se queda sin opciones para probar y mostrar de forma fiable un documento Word incorrectamente formado".

Uno de los gurús de seguridad de Microsoft, David LeBlanc, ha secundado la respuesta diciendo que es mejor abandonar el programa que dejar que el código maligno se pasee a sus anchas.

Mi opinión es que... ¡¡¡ es una chapuza !!!.

Si un documento es incorrecto y/o no aceptable, lo menos es mostrar un mensaje de aviso y permitir seguir trabajando con Word. ¿Qué ocurre si yo estaba trabajando con otro documento cuando intenté abrir el erróneo? ¿Pierdo todo el trabajo realizado en el otro documento? ¿Y eso les parece aceptable?

Es algo que a mí me ha ocurrido con frecuencia con Word 2000 manipulando documentos "moderadamente grandes" (apenas 30-40 páginas y 20 imágenes). De repente, Word "efectuaba una operación no válida" y se cerraba, perdiendo todo el trabajo desde la última vez que salvé. Y si ocurría mientras salvaba, documento corrompido y trabajo perdido. Entonces empecé a coger la costumbre de guardar cada 10 minutos o menos, y cada nueva versión con un nombre distinto: proyectoFP01.doc, proyectoFP02.doc, proyectoFP03.doc, ...

Ya en Word 2000 me parecía inaceptable tener que hacer esos malabarimos para "esquivar" fallos (¿o eran características?) del programa. Pero han pasado 7 años desde entonces. Nuestras herramientas deberían haber mejorado. ¿O seguimos pensando más en el calendario a la hora de sacar programas al mercado que en las características que debería tener?

Para más detalles, el artículo "Microsoft: Word 2007 crashes aren't a bug, they're a feature" de ComputerWorld (en inglés).

08 abril 2007

Crackeando ficheros ZIP

A raíz del último post, me he preguntado cuanto tiempo se tardaría en descubrir claves usando "fuerza bruta" en el caso de que hubiera además que acceder a un fichero que contenga la información encriptada. Un caso típico sería el de intentar descubrir la contraseña de un fichero Zip.

Como era de esperar, los resultados en un caso "normal" no son tan favorecedores para el "atacante" como los que aparecían en el Blog original. En mi caso, un Zip con una contraseña de 3 letras ha tardado más de 10 minutos en encontrarla.

Ha sido un ataque "poco eficiente". En concreto, he usado un programa muy simple y que accedía continuamente a un descompresor externo. En estas circunstancias, ha tardado 11 minutos y 42 segundos en probar 10.159 contraseñas de tres letras. Eso quiere decir que era capaz de probar "sólo" 14,5 contraseñas por segundo (como curiosidad, esos son tiempos medidos en Windows; este mismo fuente compilado bajo Linux, y funcionando en circunstancias similares era capaz de probar 125,3 contraseñas por segundo, casi 9 veces más rápido).

Entonces, saquemos cuentas para claves formadas sólo por letras minúsculas (26) o por cualquier carácter ASCII imprimible de 7 bits (95 símbolos, aunque muchos compresores permiten también usar contraseñas con caracteres extendidos).

Longitud de la contraseña
Cualquier ASCII imprimible
Sólo minúsculas
1 carácter
2 caracteres
3 caracteres
4 caracteres
5 caracteres
6,55 segundos
10,37 minutos
16,42 horas
65,01 días
16,92 años
1,79 segundos
46,62 segundos
20,20 minutos
8,75 horas
9,48 días

Como se ve, en ataques tan simples, una contraseña de 5 símbolos no alfabéticos para un fichero ZIP ya daría una seguridad razonable. Pero sólo contra ataques así de simples.

¿Mejoras posibles? Innumerables, claro. Pero se puede hacer que sea MUCHO más rápido apenas con tres cambios:
  • No usar un descompresor externo, sino una rutina de descompresión que sea parte de nuestro fuente, con lo que se evita la carga debida a la llamada a un programa externo.
  • Si tenemos los datos en memoria, en vez de leer el fichero para cada prueba, también se ganaría mucha velocidad.
  • No escribir en pantalla cada clave que se prueba, y menos todavía usando el modo de consola de Windows.

Queda como reto para quien se atreva con ello... ;-)


Por cierto, el fuente de prueba, para los curiosos, era simplemente así (C estándar, usando un descompresor que usa el parámetro -s para indicar la contraseña y -o para sobreescribir resultados en vez de pedir confirmación si el fichero ya existe):


#include <stdio.h>
#include <stdlib.h>

int main() {
int resultado;
long contador = 0;
char clave[4]="aaa";
char orden[200];
char a,b,c;

for (a='a'; a<='z'; a++)
for (b='a'; b<='z'; b++)
for (c='a'; c<='z'; c++) {
clave[0] = a;
clave[1] = b;
clave[2] = c;
printf("Probando: %s...\n", clave);
sprintf(orden, "unzip -s%s -o 1.zip", clave);
resultado=system(orden);
contador++;
if (resultado == 0) {
printf("\n\nEncontrada. Es: %s\n", clave);
printf("Claves intentadas: %ld\n", contador);
return 0;
}
}
printf("Clave no encontrada!");
return 1;
}


04 abril 2007

Es fácil tu contraseña?

¿Es tu contraseña fácil de adivinar? En One Man's Blog se hace un estudio (en inglés) del tiempo que tardaría en encontrarse una contraseña por "fuerza bruta" (probando todas las posibles combinaciones), según la cantidad de letras que la forman, y según si emplea todos los caracteres posibles o sólo letras en minúscula. Las cifras asustarían a la mayoría de gente:

Longitud de la contraseña
Cualquier letra
Sólo minúsculas
3 caracteres
4 caracteres
5 caracteres
6 caracteres
7 caracteres
8 caracteres
9 caracteres
10 caracteres
11 caracteres
12 caracteres
13 caracteres
14 caracteres
0.86 segundos
1.36 minutos
2.15 horas
8.51 días
2.21 años
2.10 siglos
20 milenios
1,899 milenios
180,365 milenios
17,184,705 milenios
1,627,797,068 milenios
154,640,721,434 milenios
0.02 segundos
0.46 segundos
11.9 segundos
5.15 minutos
2.23 horas
2.42 días
2.07 meses
4.48 años
1.16 siglos
3.03 milenios
78.7 milenios
2,046 milenios

Vemos que una contraseña de 5 caracteres que estuviera formada sólo por letras minúsculas (ej: nacho) se podría descubrir en 11.9 segundos... o menos. Si al menos tuviera alguna cifra numérica, algún signo de puntuación y/o alguna mayúscula, se necesitaría (como mucho) unas dos horas.

Lo razonable es no bajar de las 7 letras, y que incluyan algún carácter que no sea letras en minúscula, porque si un atacante necesita 2 años para encontrar nuestra contraseña, generalmente no se molestará en intentarlo.

Pero la cosa puede ser peor:
  • Son tiempos estimados para un "ordenador medio". Si se usa un ordenador de gran potencia, se podría tardar todavía menos (y los ordenadores tienen cada vez más potencia, lo que quiere decir que cada vez será necesario menos tiempo).
  • Hay ataques todavía más rápidos: si usamos como contraseña una palabra que pueda aparecer en diccionarios, los tiempos de búsqueda pueden ser muchísimo menores.
  • También se puede acortar si el "atacante" conoce a su "víctima", porque mucha gente usa contraseñas como el nombre de su mascota, o de su pareja, su número de teléfono o de DNI...
  • Y también está la opción de atacar a través de otras páginas que "la víctima" frecuente, como foros de internet, porque mucha gente usa la misma contraseña (o un número muy reducido de contraseñas), de modo que se puede descubrir en un sitio "débil" y ya tenemos el acceso a todos los demás sitios.
  • Si se tiene acceso al ordenador del "atacado", la situación puede ser enormemente fácil, simplemente mirando las cookies de su navegador, porque la mayoría de gente no se molesta en borrar la información privada al terminar la sesión (a pesar de que en Firefox se puede hacer de forma automática).
Así que ahora te toca meditar... ¿es fácil descubrir tu contraseña?

Recuerda: tienes el artículo original (en inglés) en One Man's Blog.