jueves, 20 de enero de 2011

Detección de agentes P2P: Emule/Edonkey

La detección de agentes P2P no autorizados es una tarea importante en un entorno corporativo pero más importante aun en entornos gubernamentales.

Un agente o cliente P2P no controlado implica una serie de riesgos:
- Puede ser utilizado por un usuario para compartir intencionadamente o accidentalmente documentos sensibles.
- Puede ser una vía de entrada a la red si el software utilizado presenta vulnerabilidades.
- Algunas variantes de malware permiten utilizar redes P2P como canal de control.

Sin olvidar que una vía habitual de infección por malware es la descarga de versiones pirata infectadas de software popular compartidas maliciosamente en redes P2P. Este era por ejemplo uno de los medios de infección de la Botnet Mariposa

Uno de los clientes P2P más popular en España en los últimos años ha sido Emule, derivado del original Edonkey. Emule permite utilizar 2 protocolos: ED2K (Edonkey 2000) y KAD.

ED2K: es el protocolo original de Edonkey. Utiliza una red semicentralizada basada en servidores que realizan labores de interconexión y búsqueda de archivos. Este protocolo trabaja normalmente sobre TCP.

Un cliente de Edonkey puede realizar 2 tipos de conexiones:
- Al servidor para realizar búsquedas.
- Directamente a otro cliente principalmente para transferir archivos.

KAD: es un protocolo de búsqueda descentralizado basado en Kademlia (un tipo de red DHT). KAD trabaja normalmente sobre UDP.

Para detectar clientes Emule o derivados de Edonkey podemos utilizar dos mecanismos:

Análisis del tráfico de red: La forma más sencilla de detectar clientes P2P consiste en realizar capturas del tráfico saliente hacia Internet y buscar señales que indiquen el uso de protocolos de este tipo a menos que el usuario haya tomado medidas para evitar su detección.

El protocolo original de Edonkey no incluía la opción de ofuscar el tráfico. Emule a partir de la versión 0.47b si incluye la opción de realizar ofuscación de protocolo, aunque esta opción no está activada por defecto. Otros clientes P2P basados en Edonkey no soportan esta funcionalidad.

El usuario también podría encapsular su tráfico sobre una red TOR o sobre una VPN para dificultar su detección.

En caso contrario podemos buscar los 2 protocolos que utiliza de la siguiente forma:
  • Búsqueda basada en dirección IP de destino: ED2K se basa en una red de servidores fijos. Podemos obtener un listado de las direcciones IP de estos servidores y si algún equipo de nuestra red hace una conexión a alguno de ellos, sabremos que tiene un cliente P2P instalado.

Una lista medianamente actualizada y bastante extensa puede encontrarse en: http://ed2k.2x4u.de/gl8wmw7k/max/server.met

Por otra parte KAD utiliza una red descentralizada de forma que no podemos realizar la detección basándonos en una lista prefijada de direcciones IP.

  • Búsqueda basada en puerto de origen o destino: Versiones antiguas de Emule utilizaban puertos de escucha fijos; el 4662/TCP para ED2K y el 4672/UDP para KAD. Pero las nuevas versiones asignan estos puertos aleatoriamente de forma que no es un método fiable para detectar trafico P2P.

  • Búsqueda basada en la firma del protocolo: Wireshark incorpora un disector del protocolo Edonkey aunque no es muy completo.

Para detectar tráfico ED2K podemos analizar el principio del payload de un stream TCP. El primer byte debe ser 0xE3 (OP_EDONKEYPROT).

Para detectar tráfico KAD el primer byte de un payload UDP debe ser 0xE4 (OP_KADEMLIAPROT) o 0xE5 (OP_KADEMLIAPACKEDPROT) si el paquete va comprimido.

Barrido de puertos: Otra forma de detectar agentes P2P en una red consiste en realizar un barrido de puertos de los equipos que sospechemos que tienen este tipo de software instalado.

Este enfoque es más limitado ya que necesitamos realizar un barrido completo de todos los puertos TCP y UDP posibles, tarea normalmente lenta. Además el equipo puede tener filtrados los puertos correspondientes al software de P2P de forma que no seremos capaces de detectarlos correctamente.

Si optamos por esta opción, deberemos primeramente utilizar un scanner de puertos para hacer el barrido de los 65535 puertos TCP y UDP. Y proceder a identificar todos los servicios abiertos.

Algunas herramientas permiten realizar el fingerprint de un servicio durante el escaneo, como por ejemplo Nmap. Otras como Amap nos permiten hacer el fingerprint posteriormente. Pero por desgracia a día de hoy ninguna de ellas soporta detección de ED2K o de KAD, de forma que tendremos que hacer el fingerprint a mano para comprobar que realmente el puerto detectado corresponde a un agente P2P.

Para detectar un servicio de ED2K lo más sencillo es hacer un pequeño programa que construya y lance un paquete de saludo (OP_HELLO) y ver si se obtiene respuesta. A continuación tenéis un pequeño ejemplo en C de cómo se construiría el paquete:



Detectar mediante un barrido de puertos un servicio de KAD es más complejo ya que se basa en UDP. Aun así podemos programar nuestro propio scanner para que lance una petición de saludo (KADEMLIA_HELLO_REQ) a modo de barrido. Para terminar un pequeño ejemplo en C de cómo se construiría y enviaría cada paquete:


7 comentarios:

  1. En un entorno corporativo este tema lo dejaríamos en manos del IDS, aunque habría que convencer a la gente de MicroInformática para que cree las políticas de seguridad correctas en los equipos de usuario final (ActiveDirectory te permite mucho juego en plataformas Windows) que eviten la instalación del software.

    Un usuario puede hacer pocas cosas simultáneamente por lo que si el IDS detecta un número creciente de tráfico con IP externas diferentes puede ser motivo de alarma.

    Recuerdo un caso de un jefazo que tenía permisos de instalación (porque el lo vale) y empezó a bajar cosas de la mula sin demasiado éxito... porque en cuanto bajaba una canción o video... el sistema no le dejaba guardarlo (los temporales síque se guardaban, pero al finalizarse la descarga se perdía).

    ResponderEliminar
  2. En mi modesta opinion, un problema al que nos enfrentamos es a lo rapido que aparecen o se 'metamorfosean' nuevas formas y aplicaciones de descarga, agentes de redes bots... y a lo poco que han evolucionado las soluciones de algunos de los principales fabricantes tradicionales.
    Hay que estar muy atento y probar los denominados Firewalls de Nueva Generacion, que no todos los que así se llaman lo son, pero algunos de ellos, -yo ya he probado uno-, parece que prometen.

    ResponderEliminar
  3. Buenas! Enhorabuena por el blog,me parece muy interesante :)

    Con relación al tema que comentáis de inspección de paquetes yo hace algún tiempo vi funcionar un paloalto y me parecía muy caro para los resultados que daba (aunque imagino que habrán evolucionado, claro).

    Os dejo dos enlaces a un paper realmente interesante acerca de identificación de protocolos y cómo mejorar la ofuscación de los mismos.
    http://arstechnica.com/tech-policy/news/2010/08/encrypted-and-obfuscated-your-p2p-protocol-can-still-be-ided.ars
    http://www.cse.chalmers.se/%7Ejohnwolf/publications/hjelmvik_breaking.pdf

    saludos!

    ResponderEliminar
  4. Buenos Días.

    Soy un ingeniero de telecomunicaciones y he desarrollado un software para la detección de todo tipo de tráfico P2P en redes locales bajo cualquier circunstancia (P2PTCP, P2PUDP, tráficoP2P encriptado, ofuscado...). El desarrollo de esta aplicación se debido a que las aplicaciones P2P modernas utilizan protocolos propietarios, números de puerto dinámicos, y cifrado del tráfico, que hacen que los métodos de identificación tradicionales, como los basados en puerto o los basados en firma, sean menos efectivos. La herramienta desempeña su función con gran precisión y eficacia, bloqueando o limitando el tráfico P2P sin influir en el resto de protocolos de la red.

    Si estáis interesados en esta funcionalidad, podéis contactar conmigo en este email: tecnomurciapc@hotmail.com

    Un saludo

    ResponderEliminar
    Respuestas
    1. Anonimo. Si por casualidad ves esto, me gustaria ponerme en contacto contigo. Tu direccion de hotmail ya no funciona.

      Eliminar
    2. A mi tambíen me interesa tu aplicación

      Eliminar