jueves, 9 de febrero de 2017

¿Cómo protege WhatsApp las conversaciones?

Seguridad en WhatsApp

En este post solo explicaré que mecanismo usa WhatsApp para proteger las conversaciones, no hablaré de los fallos que este tiene ni de los "backdoors" de los que ya se ha hablado mucho (aunque también lo haré en algún momento futuro). Pues bien, con esto aclarado, vamos a ello.

Para proteger las conversaciones, WhatsApp utiliza la encriptación de los mensajes utilizando cifrado asimétrico, impidiendo así que nadie, menos el destinatario, pueda leerlos. Para ello, cada usuario cuenta con una clave privada y 100 claves públicas temporales asociadas a esa única privada.
En la práctica, mandar un mensaje de A a B sería algo como esto:
  1. A pide a B su clave pública.
  2. A cifra el mensaje con la clave pública de B.
  3. A envía el mensaje cifrado a B.
  4. B recibe el mensaje cifrado.
  5. B utiliza su clave privada para descifrar el mensaje.
Y listo, una vez "desbloqueado" el mensaje, B ya puede gozárselo con información super privilegiada de A mientras que C se limita a seguir dando rienda suelta a su imaginación...

jueves, 2 de febrero de 2017

Ser un vago es lo mejor que te puede pasar o la historia de cómo hice el trabajo de varios días en 2 horas

12 Reasons Why Every Linux System Administrator Should be Lazy <- Una buena lectura hablando del tema

Desde bien pequeño ya me decían que era un vago y que nunca hacía nada, y en parte tenían razón... Nunca me gustó hacer más de lo estrictamente necesario en temas que no me interesaban suficiente y siempre he intentado optimizar lo más posible trabajos repetitivos. Por ejemplo, cada vez que había comida familiar, era necesario coger unas cuentas sillas extra del garaje para los invitados y siempre intentaba hacer el menor número de viajes posibles, ya fuera encajando una encima de otra, arrastrándolas o como fuera, pero siempre el menor tiempo perdido posible.
Esta manera de ver las cosas la he ido utilizando siempre y me ha llevado a ser, o eso quiero creer, un vago eficiente.

A la hora de administrar un servidor, una red o incluso algo tan simple como un fichero al que hay que hacer cambios, te encuentras demasiadas veces en situaciones en las que, si tuvieras los conocimientos necesarios no necesitarías más que ejecutar un comando, crear un pequeño script o utilizar alguna aplicación ya existente para ahorrarte, en ocasiones, horas de trabajo. Es por eso que siempre que se me plantea un trabajo grande y repetitivo, en lo primero que pienso es en una manera de automatizarlo, en alguna manera de imponer el conocimiento a la fuerza bruta. A veces resulta que tardas más tiempo buscando una solución del que habrías gastado haciendo lo que sea que tenías que hacer pero, la próxima vez, es algo que ya tienes aprendido.


Pasemos a algo más práctico... ¿por qué debes ser un vago?

Pues bien, si ya has tenido que enfrentarte a administrar algo, sea lo que sea, sabrás de sobra de lo que voy a hablar y, en caso de que no sea así, apunta.
Administrar, ya solo como palabra, mete miedo. Significa tener el control absoluto de algo, ver lo que hace, cuando y por qué, supervisar su correcto funcionamiento, tomar decisiones, hablar con gente y un sin fin de responsabilidades asociadas. Es por esto que debemos ser lo más vagos de toda la oficina. Serán necesarios conocimientos que puede que no tengas en un principio y tiempo dedicado a leer, de todo, logs, artículos, preguntas y respuestas, y necesitarás hackear cada proceso, buscar sus vulnerabilidades y usarlas a tu favor. Aquí va un ejemplo de hackear un proceso, por si no queda claro el concepto:
Mi escenario era simple: tenía delante una página web (example.com) en la que había unos 4.000 emails públicos que me interesaban y no podía usar un email crawler ya existente por x motivo. En mi poder tenía un plugin para Chrome llamado Email Extractor que recolectaba todos los emails existentes en la página actual (un email crawler sin profundidad, básicamente). Lo único que sabía era que en un apartado de la web había una lista con todas las entidades de las que necesitaba obtener los correos y estaba organizado de la siguiente manera:

ID
NOMBRE ENTIDAD
TELÉFONO
ID2
NOMBRE ENTIDAD2
TELÉFONO2
ID3
NOMBRE ENTIDAD3
TELÉFONO3

Siendo cada ID un enlace a una página con un script de redirección, por lo que, clickar en ID hacía lo siguiente:
Click en ID ->
-> example.com/redireccion.php?id=$ID -> 
-> example.com/entidades/nombre_entidad (no necesariamente igual al de la tabla)
Viendo el panorama, la solución más obvia era visitar 4000 páginas diferentes para conseguir esos correos, pero lo mismo no.

Obtener el link de cada una de las páginas era fácil, tan solo había que copiar el ID y utilizarlo luego en la url, pero ¿cómo sacar el email de manera automatizada? "¡Ya está! Uso curl para descargar todas las páginas y hago un grep '@' y ya está" pensé. Ciertamente funcionaba, pero me devolvía, mínimo, 5 emails por página y algunos elementos que no eran para nada emails como "deportist@s", así que no era suficiente. Y entonces fue cuando vino el momento de aprender algo. Pensé que seguramente habría algún tipo de programa que te permitiría extraer contenido de un fichero html dándole, como referencia, su anidación. Por ejemplo, dado un fichero con el contenido:

<div class="foo">

    <div class="bar">

      <p>correo@example.com</p>

    </div>

</div>

... el programa sería capaz de sacar lo que hubiese dentro de <p> solo cuando estuviese dentro del div .bar y .foo respectivamente, y así era, este programa existía, por lo que me lo descargué, leí el manual, hice una prueba y me preparé para ahorrarme el trabajo de varios días de una manera bastante elegante.

Con todo esto aprendido, tan solo quedaba escribir un pequeño script que se descargase cada una de las páginas donde se encontraban los emails y que posteriormente la analizase y me sacase como resultado a un fichero todos y cada uno de esos 4000 correos. Y de esa manera, en unas 2 horas, hice el trabajo de varios días.


Al igual que este ejemplo, hay miles y todos tienen una fácil solución: ser un vago.