; Vince y el mundo del software: Seguridad
Mostrando entradas con la etiqueta Seguridad. Mostrar todas las entradas
Mostrando entradas con la etiqueta Seguridad. Mostrar todas las entradas

jueves, 10 de abril de 2014

Breve y sencilla explicación del bug de OpenSSL "HeartBleed"

El bug recientemente parchado de openssl, llamado "heartbleed", ha estado muy en boca de todo el mundo recientemente. Bueno, al menos del mundo informático, e incluso ha ido más allá.
OpenSSL es la implementación de protoclos de seguridad SSL/TLS más famosa y usada. Los mencionados protocolos son los que se usan para encriptar información en internet. Y se usan en, por ejemplo, https (el candadito en la url), ftps, ssh, etc.
La idea de usar esta encriptación, es por ejemplo en https (lo más usado por los usuarios entre los mencionados anteriormente), que nadie pueda leer la información entre tú y la página web. De esta manera puedes pasar una contraseña a la página web y estar seguro que nadie podrá leerla y saber cuál es haciendo un análisis de tráfico web (o sea por ejemplo alguien espiando tu internet, como puede incluso ser gente de los proveedores de internet o la policía que analice tu tráfico).
Para compartir tráfico encriptado entre usuario y servidor, hay que iniciar una sesión TLS entre ambos, tras lo cual se comparten de manera segura la clave que usarán para cifrar y descifrar los mensajes. Ahora, el problema en SSLv2 y anteriores, es que si pasaba cierto tiempo desde que se inició la sesión tls y no habían paquetes entre las partes, la sesión TLS se cerraba, teniendo que inicarla nuevamente, creando las claves y todo eso, lo cual era tiempo y gasto computacional. Eso se mejoró con la versión 3 de SSL, que implementa un sistema llamado "heartbeat" (latido del corazón, como para avisar que aún sigues vivo), con el cual podías mantener abierta una sesión TLS más tiempo.
Para ello, el cliente manda un mensaje de tipo "TLS1_HB_REQUEST", con dos campos: El payload (el mensaje), y el tamaño del payload. Luego el servidor le manda otro mensaje de vuelta llamado "TLS1_HB_RESPONSE" que copia el payload y lo manda de vuelta, para 'configurar' la respuesta. Los campos del mensaje response del servidor incluyen el mismo payload y el mismo largo.
El truco viene en que OpenSSL no comprueba que el payload tenga el mismo largo que el que se mandó en el campo "largo". Esto hace que OpenSSL "crea ciégamente" que el payload tiene ese largo (sin comprobarlo), y envía de vuelta lo que debiera ser el payload. Pero el truco consiste en mandar un payload de 1 byte, y un campo "largo" diciendo que nuestro payload mide 64KB, es decir varios miles de veces más. Lo que hará OpenSSL será empezar copiando desde el payload, hasta 64KB más adelante de lo que haya en la memoria ram (el payload reside en la ram, entonces copia desde el comienzo del payload hasta 64kilo bytes más adelante, haya lo que haya), copiando así trozos de memoria ram pertenecientes a OpenSSL que no eran parte del payload, sino de trozos de código y datos del mismo OpenSSL.
El problema es que OpenSSL contiene contraseñas, las claves de cifrado, y muchas otras cosas sensibles; de manera que mandando continuamente mensajes truqueados, obtendremos cada vez 64kb de memoria de trozos aleatorios del programa, pudiendo obtener potencialmente gigas y gigas de trozos, que incluyen contraseñas, claves, etc.
Dejo un mono explicativo:


Este fallo se reportó varios años antes, pero no ha sido sino hasta el reciente 7 de abril 2014 que se ha publicado el parche para que no siga ocurriendo. Hasta que las páginas no actualicen su versión de OpenSSL seguirá ocurriendo el problema, y los servidores serán potenciales víctimas de ataques. Eso sí, esto sólo roba las contraseñas que están en la memoria RAM, es decir sólo los ingresos recientes, o activos, así que la recomendación sería no ingresar hasta que sea reportado el que actualizaron el software y repararon el problema.

Fuentes:
Blog de Chema alonso, un experto en seguridad http://www.elladodelmal.com/2014/04/heartbleed-y-el-caos-de-seguridad-en.html
Video explicativo en inglés del fallo, con monitos http://parkerati.com/my-quick-video-post/

jueves, 1 de agosto de 2013

Cómo cambiar la dirección MAC en linux fácilmente

Bueno, hace un tiempo que no escribía acá, y qué mejor que con un minituto. Espero más adelante en otro artículo contar mis andanzas con python y kivy durante el tiempo de paro de actividades en mi universidad.
Pero vamos a lo que nos concierne:

¿Qué es una dirección MAC?
En palabras sencillas (lo cual es tónica de este blog), es una dirección formada por 48 bits que identifica a la tarjeta de red. La dirección MAC es única para cada tarjeta de red, y está grabada por hardware, de manera que nunca habrán dos tarjetas de red con la misma dirección MAC.
Eso a nivel de hardware, porque en software todo se puede cambiar; y eso veremos ahora, pero primero:

¿Por qué cambiar la dirección MAC?
Pues porque con ella te identificas en la red, y cambiándola te puedes hacer pasar por otro quedando tú en el anonimato.
Otra razón es para pasar por alto los filtros de bloqueo por dirección MAC. Esto es cuando en un router te bloquean la dirección para que no accedas a internet desde ese punto. Esto puede ser una realidad cuando accedes a una red wifi que no es tuya. Con esto quiero decir que estoy totalmente en contra de usar puntos de acceso a internet en los que no estás autorizado.

Bueno, vamos a los pasos:
Lo primero es saber a cuál interfaz le quieres cambiar la dirección MAC, para lo cual basta con introducir el siguiente comando:
$ ifconfig
El cual te listará las interfaces. Yo personalmente tengo 3, las cuales son: "eth0" que es la conexión por cable (el cable rj45, cable de red); luego está "lo" que es la red local de linux; y luego "wlan0" la cual es la interfaz de wifi.
A un lado del nombre aparecen tabuladas las características de la interfaz tales como la ip, lo subido y bajado, y en la primera verás: "direcciónHW" y a un lado una serie de números y letras.
En realidad las letras también son números, ya que están codificados en base 16, pero eso es tema aparte. El asunto es que esos números son tu dirección MAC, y eso son los que cambiaremos (por software). Recuerda que cada vez que reinicies el pc volverá la dirección MAC de fábrica; punto a tener en consideración.

Lo primero que tienes que hacer es apagar la interfaz; esto se hace como root (recordad que el signo peso representa comandos en modo usuario y el gato en modo root), y es el siguiente comando:
# ifconfig <interfaz> down
ejemplo:
# ifconfig wlan0 down

Luego de apagarla procedes a cambiarle la MAC address. para ello basta con el siguiente comando:
# ifconfig <interfaz> hw ether <dirección>
 un ejemplo sería:
# ifconfig wlan0 hw ether 03:a0:04:d3:00:11

Sin embargo uno comúnmente va a querer cambiarle a una dirección MAC aleatoria, para lo cual estar variando siempre los números no tiene mucho sentido. Para hacer ésto vamos a usar el programa "macchanger"
Primero instala el programa con tu gestor de paquetes preferido, en ubuntu sería algo como:
# apt-get install macchanger
si quieres instalar la versión en gtk (personalmente no me gusta, además si tienes un error te lo mostrará en consola y no en interfaz por lo que no tiene mucho sentido instalarla) puedes instalar también  el paquete "macchanger-gtk"

Bien, una vez instalado el programa macchanger, y apagada la interfaz, procedemos a cambiarle la mac address; para lo cual basta con:
# macchanger -r <interfaz>
ejemplo:
# macchanger -r wlan0
Así de simple.

Ahora procedemos a prender nuestra interfaz con:
# ifconfig <interfaz> up

¡Y es todo!
Apéndice:
Si usas una tarjeta wifi Ralink (como la que yo uso), asegúrate de no estar usando el kernel 3.8.0, porque -al menos en ubuntu- en el módulo viene desactivada la función de cambiar la mac address, a lo cual te mandará un error de "argumento inválido". Personalmente me pasé a la versión 3.10 y no tengo problema.

Recuerda que si no quieres pasar de usuario a cada rato, puedes usar el comando "sudo" antes de los comandos especificados en este tutorial para los casos en que se requiera ser root (donde sale el gato o almohadilla).

¡Y eso es todo! Recuerda comentar ante cualquier duda o comentario (gracias capitán obvio).