UNICEF y el “phishing”

Unicef y el phishing

Unicef y el phishing

El otro día tocaron a la puerta. Se trataba de una chica con buena presencia que decía venir en nombre de Unicef.

En la mano portaba no más de 15 formularios que a priori parecían ser formularios de registro de nuevos asociados de Unicef.

La chica empezó a contarme las bondades de ser socio de Unicef, tanto a nivel de satisfacción personal como de mejoras fiscales.

La verdad es que llevo ya tiempo dándole vueltas al asunto de contribuir con alguna ONG, y cuando me decida, seguro que optaré por Unicef.  No es que Unicef sea mejor que otras, es que simplemente no me fío de ninguna otra. Son demasiadas las noticias sobre corrupción y malversación de fondos que han ocurrido con otras ONGs conocidas como para confiar mi pequeña contribución a manos desconocidas.

La cuestión es que el objetivo de la amable y educada chica era que me hiciera socio de Unicef donando una cuantía no inferior a 10€ mensuales. Agregó además que la subscripción no se haría efectiva hasta que no recibiera una llamada de la central de Unicef para comprobar datos.

Después de exponer su discurso me tocaba dar una respuesta. La respuesta fue: No, por ahora. Mis argumentos fueron que el día que lo decida entraría en la web de Unicef y lo haría a través de ella. La muchacha se indigno un poco. Volví a insistirle en que desconfío mucho del puerta a puerta y que agradecía su tiempo dedicado. Por supuesto, ella volvió a intentarlo una vez más. Con otro “muchas gracias por su tiempo” dió la batalla por perdida y se despidió cordialmente.

Justo después de cerrar la puerta, decidí entrar en la web de Unicef para comprobar si habia casos de estafa. En la página “Evite fraude” de su web encontré que efectivamente hay mucho phishing en la Red y también en el puerta a puerta.  Esto sólo sirvió para generarme más dudas. Según dicha página es obligatorio que los voluntarios/recaudadores vayan con el peto oficial de Unicef. Aquella muchacha no lo llevaba (¿quizás porque sino nadie le abre la puerta?).  Al final resulta que mi opinión sobre no aceptar nada que me vendan puerta-a-puerta se reafirmo.

Siempre me quedará la duda sobre la legitimidad de su propuesta.

En fin, a ver si me hago socio ya, ¡pero desde la web oficial!

Translate to:English
MenefanteMenéame TwitterTwitter

[Tip] Encripta ficheros fácilmente con mcrypt

Llevo tiempo ya sin escribir en el blog y eso es peligroso. Me gusta escribir, pero como la mayoria de los mortales mi tiempo es muy limitado. Hoy he sacado un pequeño slot de tiempo para hablaros de una utilidad para proteger de los ojos de terceros algunas fotos comprometidas, informes estratégicos de tu empresa o simplemente tu agenda del móvil.

Se trata de mcrypt. Esta disponible en los repositorios de Ubuntu (y en la mayoria de distros conocidas). Tambíen hay una versión para Windows (via Cygwin).

Para los afortunados (o no) de Ubuntu, instalar mcrypt es tan sencillo como ejecutar desde una shell:

 sudo apt-get install mcrypt

A partir de aqui ya podemos encriptar nuestro preciado .tar.gz o .zip.

La forma más sencilla de encriptar es:

 mcrypt <fichero.tar.gz> 

Nos solicita por duplicado la clave (passphrase) para cifrar el fichero y genera en poco tiempo (según el tamaño del fichero) el fichero <fichero.tar.gz>.nc (es decir, agrega la extensión .nc).

Desencriptar como podéis imaginar también es algo trivial. Para el caso anterior, esta es la sintaxis:

 mdecrypt <fichero.tar.gz>.nc 

Como buen comando tipo UNIX, hay múltiples opciones de invocación. Como -f para especificar el fichero de salida o -a para elegir el algoritmo de cifrado.

Bueno espero que os ayude mcrypt si necesitais encriptar algo rápidamente 🙂

Translate to:English
MenefanteMenéame TwitterTwitter

[Tip] Simple serializador para C

Simple Net Serializer

Simple Net Serializer

El otro día necesitaba serializar unos mensajes para una aplicación cliente/servidor que estaba desarrollando.

En un primer momento intenté buscar alguna librería que me diera lo que estaba buscando. Probé con GLib pero no tiene nada para serializar mensajes (se pueden serializar objectos con GObject).

Decidí hacer una implementación sencilla de lo que tenia mente.

Así fue como desarrolle el siguiente código:

// PUSH/POP Simple net serializer

#define PUSH_BEGIN(buff,l)       { int i = 0; int lm = (l); char* b = (char*) (buff);
#define PUSH_BYTE(b)                 assert(i+1 <= lm); b[i++] = (b);
#define PUSH_SHORT(s)                assert(i+sizeof(short) <= lm); { short* ps = (short*) &b[i]; *ps = htons((s)); i += sizeof(short); }
#define PUSH_INT(s)                  assert(i+sizeof(int) <= lm); { int* ps = (int*) &b[i]; *ps = htonl((s)); i += sizeof(int);}
#define PUSH_SZ(s)                  { int l = strlen(s); assert(i+l+sizeof(int) <= lm); PUSH_INT(l); memcpy(&b[i],s,l); i += l; }
#define PUSH_END(l)              (l) = i; }

#define POP_BEGIN(buff,l)        { int i = 0; int lm = (l); char* b = (char*) (buff);
#define POP_BYTE(b)              assert(i < lm); (b) = b[i]; i++;
#define POP_SHORT(s)             assert(i+sizeof(short) <= lm); (s) = ntohs(  *((short*) &b[i])     ); i += sizeof(short);
#define POP_INT(s)               assert(i+sizeof(int) <= lm); (s) = ntohl(  *((int*) &b[i])     ); i += sizeof(int); printf("val: %i\n",(s));
#define POP_SZ(s)                { int l = 0; POP_INT(l);  assert(i+l <= lm); (s) = (char*) malloc(l+1); memcpy(s,&b[i],l); s[l] = '\0'; i += l; }
#define POP_END()             }

A poco que examinéis el código comprobareis que se trata en realidad de una macro.

Esta implementación cumple mis requisitos:

  • Eficiente. Las macros se resuelven en el código y es equivalente a las funciones inline.
  • Sencillo. La nomenclatura de las macros auto-describe su propósito, PUSH_x para agregar y POP_x para extraer.
  • Poca sobrecarga. La mayoría de los serializadores incluyen el tipo de dato del dato agregado. En este caso el tipo está bien determinado e identifica unívocamente el tipo de mensaje.
  • Depuración. Gracias a los assert() puede comprobar que el tamaño de los bufferes para el envio/recepción de los mensajes es correcto durante la fase de pruebas.
  • Portable. El uso de ntoh/hton posibilita la independencia de arquitectura big/little endian.

Así por ejemplo si queremos mandar el siguiente mensaje: “bote de champú”,3,”suave”, éste seria el código resultante:


#define MAXBUFFER 1024

char buff[1024];
int len;

PUSH_BEGIN(buff,MAXBUFFER)
PUSH_SZ("bote de champu")
PUSH_INT(3)
PUSH_SZ("suave")
len= PUSH_END()

Seguro que no es la mejor implementación y es probable que tenga algun bug. Si ves algo que no te gusta o bugs, te animo a que lo modifiques y comentes. Libero el código bajo licencia BSD.

Translate to:English
MenefanteMenéame TwitterTwitter

Sicur ’10

Sicur '10: feria de seguridad

Sicur '10: feria de seguridad

El pasado martes estuve en SICUR 2010 en el Ifema. No es una feria de visita obligada para mi, pero asistí para acompañar a unos buenos amigos.

No voy a hablar mucho sobre SICUR porque no es un terreno donde me sienta cómodo. Me voy a limitar a una pequeña descripción y dar mi opinión sobre un aspecto que creo que es denominador común de los expositores y feriantes. Creo que si queréis conocer mejor SICUR, su página oficial hará una mejor presentación que la mía.

SICUR es una feria destinada al sector de seguridad. Pregunta rápida, ¿qué encuentro en SICUR? Cámaras de vigilancia (diurna, nocturna, FLIR, vía IP), cajas de seguridad, control de accesos, armas (semiautomáticas, largo alcance, cuerpo a cuerpo), detectores de metales, etc.

El aspecto común que me llamo la atención lo llamo “mi secreto“. La mayoría de las empresas que vi optan por fabricar productos cerrados (tanto hardware como software). Alguna que otra, sólo se limitan a soltar un tímido “open framework” sin entrar en más detalles.

El principal argumento que dan estos fabricantes para defender sus arquitecturas cerradas es la seguridad. Todos sabemos que el verdadero motivo es que tú no te puedas ahorrar algún dinero sustituyendo alguna pieza por otra un poco más económica de otro fabricante. Lo cual es harina de otro costal.

Voy a reflexionar sobre el mito “cerrado = mayor seguridad“.

Poco (o nada) me acuerdo del esquema de AES para el cifrado de datos que aprendí en la asignatura de criptografía. No obstante me gusta quedarme con los fundamentos y las reflexiones sobre éstos. Mi profesor decía que: “la seguridad NO se encuentra en el algoritmo criptográfico, sino en la clave“. Esa es la clave. En la antigüedad reciente y pasada, el algoritmo o el diseño del “cacharro” era protegido, ya que su conocimiento significaba una posible rotura de la seguridad. Cuando comprendieron esto, optaron por realizar concursos donde se presentaban algoritmos que eran estudiados por todos (a la vez que depurados)  y donde la clave encerraba la seguridad.

La mayoría de los fabricantes usan cifrado AES de 128 bits. Este algoritmo con esta longitud de clave sigue sin poder romperse a día de hoy (ya veremos que ocurre si el computador cuántico sale a la luz algún día).  Para mi esto es garantía de seguridad (siempre que la clave generada no sea leak). Creo que aumentaría sus ventas si dieran posibilidad de incluir hardware/software de terceros en su arquitectura.  Como comenté en un párrafo anterior, ya están empezando a hacer algunos sistemas abiertos que cumplen este anhelo.

Volviendo a la feria, poco I+D+i encontré. En el campo más cercano a mi. la vigilancia mediante cámaras locales o IP, “poca nueva chicha”. Me recorrí la zona más propensa a la innovación, la periferia del pabellón. En esta zona suele encontrarse stands de poco más de 15 m2 donde empresas pequeñas se arriesgan apostando por la innovación. Fue en un de estos sitios donde vi una plataforma que sí hace uso de las doctrinas del Computer Vision. El sistema era capaz de reconocer a individuos sospechosos, enumerar a dichos sujetos y hacerles un tracking automático (moviendo la cámara y haciendo zoom). Esto no es nada nuevo pero fue de lo poco que vi en ejecución en SICUR. Espero que con los nuevos chipsets de GPU, CUDA/OpenCL tenga mucho que decir en este campo.

Concluyo animando al lector a que visite la feria (si así lo estima conveniente) y dé su opinión.

Translate to:English
MenefanteMenéame TwitterTwitter