S01: POP 3 ( POST OFFICE PROTOCOL)

AUTOR: D'OVIDIO, David

 

 

 

POP 3 ( POST OFFICE PROTOCOL)

 

Introducción

 

Post Office Protocol (POP 3) es uno de los primeros protocolos para mensajes de Internet, junto con Simple Mail Transfer Protocol (SMTP). Estos protocolos posibilitan el envío y recepción de e-mails a través de una combinación de servidores y clientes.

SMTP es un método para enviar e-mails a un sistema de mensajes y especifica cómo debe hacer la aplicación de mail del cliente para enviar un texto cualquiera. Cuando un cliente accede a un servidor SMTP, se especifican los campos "de quien", " a quien" y "fecha y hora" en el encabezado del mensaje.

POP3 complementa las funciones de envío de SMTP, dando las herrramientas necesarias para la recuperación de mensajes desde la casilla ubicada en el servidor. De esta manera los mensajes enviados por SMTP y guardados en la casilla, mediante POP3 pueden pasar directamente desde el servidor hacia la workstation del cliente.

Estos protocolos combinados dan la perfomance necesaria para que el e-mail sea operable a través de las funciones de envío y recuperación. La adopción universal de estos ha dado un alto grado de interoperatividad a lo largo de Internet y todas aquellas aplicaciones realacionadas con e-mail.

 (volver al inicio)

Esquema Básico

 

 

 

El cliente "originador" utiliza un programa de correo electónico para enviar un mail con SMTP hacia el Servidor de SMTP. Ahora el servidor origen envía el mail al servidor SMTP destino. Este guarda el mail en una cuenta individual de POP3. El cliente destinatario debe utilizar un programa de correo electrónico para abrir el mail en el server con POP3.

(volver al inicio)

 

Conceptos Básicos

 

POP 3 es un protocolo de la capa de aplicación que utiliza TCP como protocolo de capa de enlace. Como dijimos, este protocolo está pensado para recuperar mensajes de correo accediendo al servidor en forma dinámica desde una workstation.

Inicialmente el servidor comienza el POP 3 "escuchando" el port 110 de TCP. Cuando un host cliente desea hacer uso de este servicio, establece una conexión TCP con el host server y en ese momento el servidor de POP3 envía un " saludo". Luego de esto comienza un intercambio de comandos y respuestas en ambos sentidos, hasta que la conexión se cierre o se aborte.

El progreso de una sesión de POP 3 marca el paso a través de una serie de estados. El primero de ellos es el de " AUTORIZACION" . Este estado comienza cuando el servidor envía el "saludo" una vez iniciada la sesión y durante el cual el cliente debe identificarse ante el servidor. Una vez que la identificación ha sido satisfactoria, comienza el período de "TRANSACCION" en el que el cliente solicita acciones al servidor de POP3. En cuanto el cliente envía el comando QUIT la sesión pasa a un estado de "ACTUALIZACION" en el que el servidor libera todos los recursos utilizados durante la etapa de "transacción" y se deshace la sesión. De este modo se cierra la conexión TCP.

(volver al inicio)

 

Comandos de cada estado

 

Estado de "AUTORIZACION":

Establecida la conexión TCP solicitada por el cliente, el servidor de POP 3 envía el "saludo" que puede ser algo como sigue:

 

s: +OK POP3 server ready

 

Ahora el cliente debe identificarse ante el servidor y lo puede hacer por dos mecanismos, a través de los comandos de USER y PASS o por el comando APOP. Estos mecanismos son de autenticación y el servidor está obligado a soportar como mínimo alguno de estos.

Ante los comandos mencionados, el server debe enviar un +OK o un -ERR como respuesta, indicando el usuario y password correctos o alguno de ellos incorrecto respectivamente.

Otro comando utilizado en esta etapa es el QUIT, que el usuario puede enviar cuando el servidor no termina por sí solo la conexión, ante el envío de un indicador de estado negativo de la casilla por el cual no se le puede dar acceso al cliente.

Luego que el servidor ha abierto el desagote de la casilla del lado cliente y a la vez ha cerrado la entrada para evitar el ingreso de nuevos mails durante este período, asigna un número de mensaje a cada mensaje y declara el tamaño de cada uno en octetos. Aquí ya estamos en el estado de transacción.

 

Estado de "TRANSACCION":

 

Ahora el cliente puede utilizar los siguientes comandos:

STAT : el servidor puede responder positivamente con una línea conteniendo la cantidad de mensajes en la casilla y la cantidad de octetos total de todos los mensajes. Un ejemplo puede ser:

c: STAT

s: + OK 2 320

Otro comando es el LIST (msg): Si el server responde positivamente, envía una línea conteniendo información sobre el mensaje determinado en el argumento del comando.

Ejemplo:

c: LIST

s: +OK 2 messages (320 octets)

s: 1 120

s: 2 200

.

.....

c: LIST 2

s: +OK 2 200

....

c: LIST 3

s: -ERR no such message, only 2 messages in maildrop

 

Otro camando es RETR msg: El servidor ante una respuesta positiva envía el mensaje indicado en el argumento del comando.

Ejemplo:

c: RETR 1

s: +OK 120 octets

s: "the pop 3 server sends the entire message here"

s: ...

Otro comando permitido en esta etapa es el DELE msg: con esto el server marca el mensaje a borrar pero realmente no lo hará hasta que la sesión de POP3 entre en el estado de "ACTUALIZACION". Cualquier referencia posterior al mensaje será errónea.

Ejemplo:

c:DELE 1

s:+OK message 1 deleted

 

Estado de "ACTUALIZACION" :

 

Cuando el cliente envía el comando QUIT del estado de "TRANSACCION", la sesión POP3 entra en el estado de "ACTUALIZACION". Si la sesión termina por cualquier otra razón distinta del comando QUIT, la sesión no entra en el estado "ACTUALIZACION" y no debe remover ningún mensaje de la casilla.

En este estado remueve los mensajes marcados como "borrados". Sea que la remoción de los mensajes sea satisfactoria o no, el servidor libera la entrada de mensajes y cierra la conexión TCP.

(volver al inicio)

 

Comandos opcionales

 

Existe una serie de comandos opcionales que permiten manejar con mayor soltura los mensajes. Uno de estos comandos es TOP . La sintaxis correcta de este comando es:

TOP msg n

luego del +OK inicial, el servidor de POP3 envía el encabezado del mensaje,una línea blanca separando el encabezado del cuerpo y luego el número de líneas del cuerpo del mensaje indicadas en el argumento del comando. Solamente se utiliza en el estado de "TRANSACCION".

Ejemplo:

c: TOP 1 10

s: + OK

s: "the POP3 servers sends the headers of the message, a blank line, and the first 10 lines of the body of the message"

Otro comando opcional también del estado de "TRANSACCION" es el UIDL.

UIDL (msg)

da como resultado una línea que contiene el id único del mensaje indicado en el argumento del comando. Este id único es un string determinado por el mismo server que consta de 1 a 70 caracteres en el rango 0x21 a 0x7E, que identifica en forma única un mensaje dentro del buzón y que persiste durante toda la sesión.

(volver al inicio)

 

Comandos que Brindan Seguridad

 

Existen comandos que brindan mayor seguridad sobre todo en la etapa de "AUTORIZACION" que es la más critica dado que en ella es necesario dar el nombre de usuario y password al server.

El primero que trataremos es el comando APOP. Su sintaxis correcta es como sigue:

 

APOP name digest

 

Normalmente, cada sesión POP3 comienza con el intercambio de USER/PASS. Esto hace que tanto el usuario y password se envíen en forma clara por la red. Si el uso no es demasiado frecuente esto no implica mucho riesgo. En cambio si el uso es mas intenso, el riesgo de la captura del password por algún curioso también aumenta.

Un método alternativo de autenticación es el uso del comando APOP dando seguridad al originante tanto con la autenticación como con la protección en la respuesta.

Un server que maneje APOP deberá incluir un string en el mensaje de bienvenida. Este string corresponde a una identificación de mensaje y debe ser diferente cada vez que se inicie una sesión POP3. Este string sigue un algoritmo MD5 y la sintaxis es:

"process-ID.clock@hostame"

donde "proces -id" es un valor decimal del proceso PID ( en UNIX), clock es el valor decimal del sistema de reloj y hostname es el nombre de dominio del servidor sobre el cual corre POP3.

Los parámetros de este comando tienen una semántica idéntica a la del parámetro "name" del comando USER. El parámetro "digest" se calcula aplicando un algoritmo MD5 al string que representa al timestamp, seguido de una clave secreta que conocen el servidor y el cliente. Se debe tener gran cuidado para prevenir el conocimiento de este secreto, ya que conociéndolo permitirá a cualquier entidad enmascararse como el usuario que pretende ser. El "digest" tiene en sí 16 octetos que se envían en formato hexadecimal con caracteres ASCII minúsculos.

Cuando el servidor POP3 recibe el comando APOP, verifica el digest provisto. Si es correcto envía una respuesta positiva, entrando así en el estado de TRANSACCION. Si es negativa pemanece en el estado de AUTORIZACION.

La clave secreta debe tener una longitud tal que se llega a una solución de compromiso entre la dificultad de descifrarla por algún atacante y la dificultad en escribirla por el usuario.

Ejemplo:

S: +OK POP3 server ready <1896.697170952"deb.mtview.ca.us>

C: APOP mrose c4c9334bac560ecc979e58001b3e22fb

S: +OK maildrop has 1 message (369 octets)

En el ejemplo la clave secreta es el string "tan_staaf", de modo que aplicando el algoritmo MD5 al string

<1896.697170952"deb.mtview.ca.us>tanstaaff

produce el valor

c4c9334bac560ecc979e58001b3e22fb

 

Otro comando que provee seguridad a la hora de la identificación del usuario es el comando AUTH.

Este comando opcional sirve para indicar un mecanismo de autenticación al server, establecer un intercambio de protocolo de autenticación y opcionalmente negociar un mecanismo de protección para protocolos subsecuentes. Estos mecanismos también son utilizados por IMAP4.

 La sintaxis es:

 

AUTH mechanism

 

Se utiliza solamente durante el estado de "AUTORIZACION"

Este comando indica al server un mecanismo de autenticación. Si el server lo soporta se produce un intercambio entre server y usuario a través de un protocolo de autenticación para "autenticar e identificar al usuario". El intercambio depende exclusivamente del mecanismo de autenticación utilizado.

Cuando el servidor responde que está listo lo hace con una línea con "+" , un espacio en blanco y un string codificado en BASE 64. El cliente también contesta con un string codificado en BASE 64.

Si el mecanismo solicitado fue aceptado, este mecanismo se aplica a todos los datos siguientes.

Ejemplo:

S: +OK POP3 server ready

C: AUTH KERBEROS_V4

S: + AmFYig==

C:BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IjmrMG+25ª4DT+nZImJjnTNHJUtxAA+o0KPKfHEcAFs9a3CL5Oebe/ydHJUwYFdWwuQ1Mwiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKi1Qh

S: + or//EoAADZI=

C: DiAF5A4gA+oOIALuBkAAmw==

S: +OK Kerberos V4 authentication successful

 

(volver al inicio)

Inseguridades de este protocolo

 

 (volver al inicio)

 

Pregunta

¿Qué medidas tomaría frente al hecho de que por protocolo no existe una definición en cuanto a la cantidad de veces que un usuario puede intentar su password sin que el servidor cierre la conexión?