LinuxParty
Internet es inherentemente insegura. Siempre que envíe datos a través de ella, existe la posibilidad de que esos datos podrían ser inhalados (to sniff), que traduciremos como "escuchados", y alguien podría terminar con sus datos personales. Esperemos que una vez que haya leído este artículo, usted tendrá una mejor comprensión de cómo evitar que esto suceda.
Cuando los datos viajan a través de Internet, es necesario pasar a través de varias conexiones para llegar a su destino final. La mayoría de las personas no se dan cuenta de que los datos pueden ser leídos por cualquier máquina que pasa a través de este viaje.
Con las herramientas adecuadas, usted leer estos datos usted mismo, y cualquier dato que pase a través de su red. Esto es porque la mayoría de las redes envían realmente los datos destinados a cualquier usuario de la red de todas las máquinas en su red, y su equipo pasará por alto todo lo que no sea para él. Esto es especialmente cierto para la mayoría de las redes inalámbricas, incluso las redes que están "aseguradas con WPA o WEP.
Vamos a intentar leer algunos de los datos en su propia red. En primer lugar, es necesario instalar una herramienta llamada Wireshark. La mayoría de las distribuciones la tienen disponible en su gestor de paquetes, y para Ubuntu / Fedora, deberá usar, (aplicar según convenga)
(Debian / Ubuntu) sudo apt-get install wireshark
(CentOS / Fedora) sudo yum install wireshark
Si su distribución no proporciona este paquete, usted puede encontrar el código fuente en www.wireshark.org/download.html, junto con instrucciones sobre cómo compilar e instalarlo.
En la mayoría de los casos, Wireshark necesita ser ejecutado como usuario root en el sistema. Para ejecutar Wireshark, ejecute el comando wireshark gksu. Se te pedirá su contraseña de root, después de que Wireshark se carga, dando un aviso escrito de que se está ejecutando como root, y que podría ser peligroso. En general, usted puede ignorarlo, sin embargo, cualquier programa que se ejecuta como usuario root puede ser peligroso, así que advertidos quedáis!
Una versión más actual, puede encontrarla aquí:
Cómo analizar tráfico de red con Wireshark: Guía básica para principiantes
Sin embargo, si te explicamos que...
¿Cómo puedo evitar que la gente me espíe?
Todos los ejemplos anteriores muestran lo fácil que es obtener datos confidenciales de una conexión. La mejor manera de evitar que esto suceda es codificar los datos que se envían de manera que un extraño no la pueda decodificar. Esto se conoce como cifrado. Si alguna vez has comprado en línea, usted probablemente ha notado como barra de dirección en su navegador se vuelve verde (y en menor medida, la barra de dirección azul), es una señal visual de que su navegador está utilizando una conexión cifrada. (segura)
Los métodos de encriptación más utilizado en Internet son SSL (Secure Sockets Layer) y TLS (Transport Layer Security). Ambos trabajan de acuerdo con la noción de certificados y claves. El cliente (usted) obtiene un certificado del servidor y la utiliza para cifrar los datos en el servidor, que sólo pueden ser descifrados con la clave privada del servidor. Esta clave privada puede cifrar datos de forma que sólo puede ser descifrado por el certificado. Para hacerlo más seguro, cuando se configura una conexión segura, se genera una clave aleatoria y se utiliza junto con la clave privada y el certificado para cifrar los datos entre usted y el servidor.
Para que usted sea capaz de crear sus propias conexiones cifradas, es necesario generar los certificados SSL. En primer lugar usted necesita para generar la clave privada. Para ello, ejecute el comando:
openssl -genkey -out privey.pem 4096
Esto generará su clave privada de la entropía en su sistema. Una vez que haya creado esto, debe generar un Certificate Signing Request (CSR). Certificados SSL (normalmente) están firmados por una autoridad de certificación, la cual verifica quien eres y firman su certificado para confirmar su identidad. Puede generar un RSC al ejecutar el comando siguiente:
openssl req -new -key privkey.pem -out cert.csr
Se le pedirá para algunos detalles al hacerlo. Rellenarlos y asegúrese de que el CommonName (CN) se establece en el nombre de dominio para su servidor:
mez@lazy % openssl req -new -key privkey.pem -out cert.csr
Country Name (2 letter code) [AU]:UK
State or Province Name (full name) [Some-State]:West Midlands
Locality Name (eg, city) []:Birmingham
Organization Name (eg, company) [Internet Widgits Pty Ltd]:.
Organizational Unit Name (eg, section) []:.
Common Name (eg, YOUR name) []:lazy.sourceguru.net
Email Address []:Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
A continuación, deberá enviar su RSE a su autoridad de certificación, que le enviará una copia de seguridad de un certificado firmado. Guardela como signed.pem. Para hacer la vida más fácil, vamos a combinar la clave y el certificado en un archivo, por lo que sólo tenemos que establecer nuestras configuraciones para firmar un fichero.
cat privkey.pem signed.pem > certificate.pem
Ahora tenemos una llave SSL y certificado que puede utilizar. Vamos a ponerlos en práctica.
Ya sabes...
Cómo analizar tráfico de red con Wireshark: Guía básica para principiantes
Internet es inherentemente inseguro. Cada vez que envía datos a través de él, existe la posibilidad de que los datos puedan ser olfateados, y alguien podría terminar con sus datos personales. Esperemos que una vez que hayas leído este artículo, tendrás una mejor comprensión de cómo evitar que esto suceda.
Cuando los datos viajan a través de internet, necesita pasar a través de múltiples conexiones para llegar a su destino final. La mayoría de la gente no se da cuenta de que los datos pueden ser leídos por cualquier máquina que pase en este viaje.
Con las herramientas adecuadas, puedes oler estos datos tú mismo, y cualquier dato que pase a través de tu red. Esto se debe a que la mayoría de las redes realmente envían datos destinados a cualquier persona en esa red a todas las máquinas de su red, y su computadora ignorará cualquier cosa que no esté destinada a ello. Esto es especialmente cierto para la mayoría de las redes inalámbricas, incluso para las redes que están 'se aseguradas' con WEP/WPA.
Ooh, que es ese olor?
Vamos a intentar olfatear algunos de los datos de su red. En primer lugar, necesita instalar una herramienta llamada Wireshark. La mayoría de las distribuciones tienen esto disponible en su gestor de paquetes, y para Ubuntu, yo dirigí el comando
sudo apt-get install wireshark
Si su distribución no proporciona este paquete, puede encontrar el código fuente en www.wireshark.org/download.html, junto con instrucciones sobre cómo compilarlo e instalarlo.
En la mayoría de los casos, Wireshark necesita ser ejecutado como el usuario root en su sistema. Para correr Wireshark, ejecute el comando gksu wireshark. Debes ser preguntado por tu contraseña raíz, después de lo cual Wireshark se cargará, dándole una breve advertencia de que la estás ejecutando como raíz, y que podría ser peligroso. Generalmente puede ignorar esto para este tutorial, sin embargo, cualquier programa que se ejecuta como raíz podría ser peligroso, así que ser advertido.

Wireshark requiere privilegios de root para correr, así que asegúrese de no molestar accidentalmente nada.
Cuando ejecutes Wireshark, te presentarán una pantalla desnuda, con algunos iconos en la parte superior. Por ahora podemos ignorar esos elementos, ya que primero necesitamos capturar algunos datos. En Wireshark, vaya al Menú Capture y haga clic en Interfaces. En esta ventana, seleccionamos las interfaces en las que queremos capturar datos. Lo más simple aquí es usar la interfaz 'Any', que es la forma de Wireshark de decir "Recoge todos y cada uno de los datos que puedo ver en la red". Haga clic en Inicio junto a la interfaz de Any, y debe ver su pantalla principal dividida en tres, y la parte superior de la ventana debe comenzar a llenarse de datos. Si, como yo, eres la única persona en la red (o has manejado interruptores en tu red), entonces es posible que no veas aparecer mucho datos. Tener una ronda de navegación rápida en Internet, y verás que aparecen más y más datos (Wireshark captura cualquier dato que viene y viene de tu computadora, así como otras cosas en la red).

Wireshark te permite escuchar en cualquiera de tus conexiones de red.
Olfateando WordPress
Para dar un ejemplo del tipo de cosas que se pueden olfatear, corrí a través de una instalación de WordPress localmente, y capté los datos que se generaron a medida que lo instalé.
Como sé, WordPress funciona como una página web, y las páginas web utilizan HTTP, encendí Wireshark para mostrar sólo paquetes HTTP. Esto se hace fácilmente tecleando 'http' en la caja Filter. Ahora debería empezar a ver alguna información en la columna Info de los datos. Veamos cómo me ingresé en WordPress.
Cuando envía un formulario en la web, envía datos al servidor utilizando un método de HTTP llamado POST. O, cuando recibes una página, usas el método HTTP GET. Para encontrar dónde he iniciado sesión en el panel de administración de WordPress, necesito encontrar el POST al script de inicio de sesión. Wireshark proporciona un montón de maneras de manipular los datos, así que vamos a buscar todas las solicitudes de POST que he hecho.
Haga clic en el botón Borrar junto al cuadro de filtros y luego haga clic en el botón Expresión. Esta ventana nos permite crear una expresión para filtrar los datos. Usted puede ver en la lista de nombres de campo justo lo mucho que Wireshark entiende, pero por ahora, sólo estamos interesados en encontrar solicitudes POST, así que desplácese hacia abajo a HTTP en esa lista, y ampliarlo haciendo clic en la flecha al lado de ella. Ahora podemos seleccionar http.request.method debajo de él, esto dice que queremos añadir un filtro relacionado con el método de solicitud que se utilizó. Seleccione http.request.method y en el cuadro Relación, seleccione "Ye escriba POST en el cuadro Valor, luego haga clic en Aceptar.
Ahora he reducido mi lista a sólo unos pocos artículos, y puedo ver un artículo donde he publicado en /wordpress/wp-login.php, así que echemos un vistazo a eso en un poco más de detalle.
Usted debe notar que la pantalla ahora está mostrando tres secciones (si no lo es, intente maximizar la ventana). La sección central de la ventana permite perforar en los diferentes bits del paquete. La parte que nos interesa aquí es la sección "Datos de texto basados en la línea", que muestra una línea, que contiene lo siguiente
log=admin&pwd;=HCnr9%5E%40rWsbt&wp-submit;=Log-In&redirect;-to=http%3A%2F%2Fserver%2Fwordpress%2Fwp-admin%2F&testcookie;=1
Estos datos son un valor de nombre codificado por URL Pair String. La decodificación nos da los datos mostrados en la tabla, por debajo de la izquierda.
Como puede ver, esto muestra el nombre de usuario y la contraseña que solía iniciar sesión en WordPress. Esto significa que cualquiera que olfatee tu conexión ahora tiene el nombre de usuario y la contraseña para tu blog, y puede hacer lo que quiera con ella hasta que cambies tu contraseña.
Datos de WordPress olfateados
Clave | Valor |
tronco | admin |
pwd | HCnr9-Wsbt |
wp-desmit | Iniciar sesión |
redireccionar. | https://server/wordpress/wp-admin |
testcookie | 1 |
Dios mío, eso da miedo.
Qué hay de tu email? Si estás usando un cliente de correo electrónico normal, entonces podrías encontrar que capturas una conversación que se ve algo así:-
220 stupor.sourceguru.net ESMTP Postfix (Ubuntu) EHLO sourceguru.net 250-stupor.sourceguru.net AUTH PLAIN JiM2NTUzMztseGZ1c2VyJiMTUzMztse GZwYXNzd29yZA 235 2.7.0 Autitud exitosa MAIL DESDE:Mez.sourceguru.net. SIZE=456 AUTH= 250 2.1,0 Ok - RCPT TO:-mez.debian.org- ORCPT=rfc822;mez.debian.org 250 2.1,0 Ok DATA 354 Datos finales con el CR-LF. - .. . . . . . . . . . . . . . . . . . . . . . . . . Fecha: Sol, 13 sep 2009 20:59:06 0100 De: Martin Meredith Mez.debian.org. A: mez.debian.org Asunto: Email de prueba - Wireshark también puede olfatear su correo electrónico. - . 250 2.0.0 Ok: haciendo cola de 095CA94024 - QUIT 221 2.0.0 Adiós
Esto es un poco más aterrador que el ejemplo anterior. Imagínese a alguien sentado fuera de su casa con su computadora portátil, escuchando su tráfico Wi-Fi. No sólo pueden leer su correo electrónico, sino que, desde la línea inocua que comienza AUTH PLAIN, pueden averiguar el nombre de usuario y la contraseña de su cuenta de correo electrónico (que en este caso, he sustituido por lxfuser/lxfpassword). El método de autenticación SMTP PLAIN simplemente combina su nombre de usuario y contraseña, y base64 las codifica (que cualquiera puede decodificar - basta con probar en https://linkpot.net/scripture).
¿Cómo puedo evitar que la gente me husmee?
Todos los ejemplos anteriores muestran lo fácil que es obtener datos sensibles de fisgonear en una conexión. La mejor manera de evitar que esto suceda es codificar los datos que se están enviando de una manera que un forastero no puede decodificar. Esto se llama cifrado. Si alguna vez has comprado en línea, probablemente hayas notado la infame barra de direcciones verdes en tu navegador (y en menor medida, la barra de dirección azul), que es un signo visual de que tu navegador está usando una conexión cifrada.
Los métodos de cifrado más comúnmente utilizados en Internet son SSL (Secure Sockets Layer) y TLS (Transport Layer Security). Ambos trabajan según la noción de certificados y llaves. El cliente (usted) obtiene un certificado del servidor y utilizalo para cifrar datos al servidor, que solo se puede descifrar utilizando la clave privada del servidor. Esta clave privada también puede cifrar los datos para que sólo pueda ser descifrada por el certificado. Para que esto sea más seguro, cuando se configura una conexión segura, se genera una clave aleatoria, y esto se utiliza junto con la clave y el certificado privado para cifrar los datos entre usted y el servidor.
Para que puedas configurar tus propias conexiones cifradas, necesitas generar los certificados SSL. En primer lugar, necesitas generar tu llave privada. Para ello, ejecuta el comando:
opensl -genkey -out privey.pem 4096
Esto generará su clave privada a partir de la entropía en su sistema. Una vez que haya creado esto, necesita generar una Solicitud de Firma de Certificado (RSC). Los certificados SSL están (generalmente) firmados por una autoridad de certificación, que verifica quiénes son, y firman su certificado para confirmar su identidad. Puede generar una RSE ejecutando el siguiente comando:
openssl req -new -key privkey.pem -out cert.csr
Se te pedirán detalles cuando hagas esto. Llene y asegúrese de que el CommonName (CN) está configurado al nombre de dominio de su servidor:
mez-lazy % abresl req -new -key privkey.pem -out cert.csr Nombre del país (2 carta código) [AU]:UK Nombre del Estado o de la Provincia (nombre completo) [Some-State]: West Midlands Nombre de localidad (por ejemplo, ciudad) []:Birmingham Organization Name (por ejemplo, empresa) [Internet Widgits Pty Ltd]:. Nombre de la Unidad Organugura (por ejemplo, sección) []: Nombre común (por ejemplo, TU nombre) []:lazy.sourceguru.net Dirección de correo electrónico []:martin.sourceguru.net
A continuación, usted necesita enviar su RSE a su autoridad de certificación, quien le enviará de vuelta un certificado firmado. Guardaremos esto como firmado. Para hacer la vida más fácil, combinaremos la llave y el certificado en un solo archivo, de modo que solo tengamos que establecer nuestras configuraciones para apuntar a ese único archivo.
cat privkey.pem firmado.pem
Ahora tenemos una clave y un certificado SSL que podemos usar. Pongámoslos en práctica.
Certificación SSL
Comúnmente, los certificados SSL están firmados por una autoridad certificadora para validar la identidad de la persona que envía el certificado. Si has visto una barra de dirección verde en tu navegador, entonces el certificado que se le ha enviado ha hecho una Verificación Extendida. Esto significa que usted es capaz de decirle que el servidor con el que está hablando pertenece a la empresa con la que usted está tratando.
La mayoría de las autoridades de certificación cobran para verificar quién eres, y en algunos casos, esto puede ascender a miles de libras. Una alternativa para aquellos sin la cantidad de efectivo requerido para estos certificados comerciales es utilizar CAcert, una organización que pretende proporcionar certificados firmados gratuitos para todos sus usuarios. CAcert trabaja en un modelo de Web of Trust (WoT) para verificar a sus usuarios. Para convertirse en un usuario verificado de CAcert, necesitas conocer a otros usuarios de CAcert y proporcionarles pruebas de identidad. Estos usuarios, si están contentos con la identificación que ha proporcionado, le darán 'puntos'. Una vez que llegues a 50 puntos, puedes crear certificados 'asegurados', lo que significa que CAcerte confía en tu identidad. Si bien CAcert no está plenamente reconocido en todos los navegadores por defecto, la mayoría de los distros de Linux se enviarán con los archivos necesarios para permitir que los certificados verificados de CA sean tratados al igual que un certificado generado por una empresa comercial lo sería.

La barra de direcciones verdes le permite saber que su conexión a un servidor web está cifrada.
Configuración de sus servidores
El uso más común de SSL es para sitios web seguros, por lo que es conveniente que Apache haga que el proceso de configurar un servidor seguro sea muy simple. En primer lugar, necesitamos crear un "sitio" dentro de Apache. Puede hacerlo creando un archivo que contenga lo siguiente en el directorio /etc/apache2/ssite-disponible (la ruta a nuestro archivo será /etc/apache2/sites-disponible/lazy.sourceguru.net):
NameVirtualHost *:443 <VirtualHost *:443> ServerName lazy.sourceguru.net DocumentRoot /var/www/ SSLEngine On SSLCertificateFile /path/to/certificate.pem </VirtualHost>
Después de hacer esto necesita para habilitar el módulo SSL en Apache, habilite el sitio que acaba de crear y reiniciar Apache.
a2enmod ssl a2ensite lazy.sourceguru.net /etc/init.d/apache2 restart
Si ahora visita su sitio, usando un enlace como https://lazy.sourceguru.net debe ver que su conexión ahora está cifrada (debe tener una barra de dirección azul o verde).
El correo electrónico es un poco más complicado, sin embargo, ya que en la mayoría de los casos, tendrás un servidor para recibir y otro para enviar tu correo electrónico. Para este ejemplo, usaré Postfix y Courier, pero si tienes una configuración diferente encontrarás mucha orientación de configuración en la web.
Después de la conversación
A veces, los datos que Wireshark presenta pueden ser abrumadores, especialmente si estás capturando datos para una red ocupada (en tu lugar de trabajo, por ejemplo). Para ayudarle a simplificar las cosas, Wireshark tiene la funcionalidad para seguir una secuencia TCP, lo que le permite reunir todos los paquetes relevantes para una sola conversación entre dos máquinas. Por ejemplo, imagine que estás mirando a través de una captura, y encuentra algunos paquetes relacionados con alguien que chatea en IRC. Puede seguir la conversación completa haciendo clic derecho en el paquete y haciendo clic en Follow TCP Stream.

Wireshark le permite seguir una conversación TCP, por ejemplo, esta charla con el Sr. .ubuntu-uk conducida a través de IRC.
Correo electrónico seguro
Primero, pongamos en marcha Postfix. Si su configuración de correo requiere que use un nombre de dominio diferente al que hemos creado un certificado para arriba, entonces usted necesitará crear un nuevo certificado. Una vez que hayas hecho esto, Postfix es fácil de configurar. Añada las siguientes líneas a su archivo /etc/postfix/main.cf:
smtpd_tls_cert_file = /path/to/certificate.pem smtpd_tls_key_file = $smtpd_tls_cert_file smtpd_tls_log_level = 0 smtpd_tls_recieved_header = yes smtpd_tls_security_level = may smtpd_use_tls = yes smtpd_tls_auth_only = yes
Reinicia Postfix, y ahora deberías poder usar TLS.
Courier es un servicio que proporciona soporte POP e IMAP. Mostraremos cómo configurar su servidor POP aquí, pero los pasos son casi exactamente los mismos para el servidor IMAP.
En Ubuntu, primero necesita instalar el paquete de mensajería-pop-ssl. Una vez que haya hecho esto, copia su archivo de certificado a /etc/courier/pop3d.pem. Ahora, edite /etc/courier/pop3d y cambie la línea:
POP3DSTART=YES
a
POP3DSTART=NO
Esto desactiva la capacidad normal de la interfaz POP3 para empezar. Sin embargo, como probablemente ya está funcionando, tenemos que detenerlo, y reiniciar la versión SSL.
/etc/init.d/courier-pop stop /etc/init.d/courier-pop-ssl restart
Ahora tienes una configuración de correo segura. No olvides cambiar a tu cliente para usar la nueva configuración.
Como dijimos al comienzo del artículo, internet es inherentemente inseguro. La forma más simple y efectiva de combatir esto es utilizar cifrado. Te hemos enseñado cómo cifrar el tráfico hacia y desde tu servidor, pero no se detiene ahí. Casi cualquier protocolo en Internet se puede fisgonear, desde su mensajero instantáneo hasta esos videos interesantes que ve a las 3 am de la mañana. Así que use cifrado donde pueda - la mayoría de los programas basados en servidores le permiten configurarlo de forma sencilla y fácil. Si eres programador, y estás escribiendo algo nuevo, recuerda a tus usuarios, y dales la opción de dejarles usar tu servicio de forma segura.

Wireshark captura una gran cantidad de datos, no todos los cuales pueden ser útiles.
Azar = mejor seguridad
Muchos métodos de cifrado utilizan datos aleatorios para ayudar a que el cifrado sea más seguro. En muchas máquinas, (especialmente escritorios de Linux, VPS y cualquier cosa en la nube) la cantidad de datos aleatorios disponibles para el sistema (llamado entropía) se agota muy rápidamente. Linux generalmente recoge su entropía midiendo eventos como diferencias minúsculas en los tiempos de acceso al disco, así que si su aplicación no está causando mucho acceso al disco, es posible que tenga una entropía disponible para evitar que alguien descubre qué números aleatorios se están generando.
Simtec Electronics ha creado un producto que resuelve este problema: una pequeña tecla USB que se puede conectar a un sistema y utiliza generadores de ruido cuántico y luego una gran cantidad de matemáticas y criptografía para abastecer de forma segura a su sistema datos aleatorios a mayor velocidad de lo que su sistema puede generar normalmente.
Puede encontrar más detalles en www.entropykey.co.uk.
