Recientemente me encontré en el trabajo con el problema citado en el encabezado de este post. Nos dimos cuenta que un usuario se las había arreglado para saltarse las restricciones impuestas por el proxy, o sea, podía acceder a sitios bloqueados por la política de la compañía como Facebook, Hi5, Webmessenger, en fin, paginas de baraje. Al conectarme al equipo del usuario (usando VNC) pude comprobar que realmente el usuario se estaba saltando las restricciones porque estaba en sitios que él no tenia permitido acceder. Inmediatamente trate de averiguar cómo se las había arreglado para hacerlo y hacerlo en mis narices (eso fue lo que más me molesto). Genere entonces un reporte de acceso para ver si el proxy (usamos Squid 2.6) me mostraba las conexiones de ese usuario y así hacerme una idea de cómo lo había hecho, pero no me presento los sitios que él estaba accediendo en el momento, por lo que pensé que entonces él estaba pasando por encima del Proxy, pero como?? El Firewall (IPtables) tiene reglas que no permite el acceso directo hacia Internet, o sea, la única forma de salir hacia Internet es haciéndolo a través del Proxy, el cual él se estaba saltando.
Me sentí un poco frustrado, se está conectando a Internet en mis narices y no veo como!!?? Prácticamente lo veía riéndose de mi: "Ja, El Tipo de Informática cree que puede evitar que revise mi feisbuk" lo imaginaba pensando. Bueno, mientras sigo indagando entre IPTables y Squid continuo con su escritorio abierto en una ventana de VNC, entonces me fijo que cuando el cerro el navegador cerro también una aplicación la cual no pude ver bien en el momento. Convenientemente él iba saliendo a almorzar así que tendría su computadora disponible para buscar el programa sin que él se diera cuenta (no quería que el supiera que lo estaba investigando, quería que se diera cuenta cuando su método ya no le funcionara). Cuando busco en los programas instalados no veo nada sospechoso, así que pensé: bueno, si el pudo conseguir ese programa y ponerlo a correr sin que nos enterásemos, seguro que no lo va a tener tan obvio". Mire bien la barra de inicio para ver los últimos programas abiertos y encontré un shortcut a una carpeta llamada "New Folder" que me pareció sospechoso, pensé que quizás dentro de este se encontraría el programa, hice clic encima de él y abrió el "UltraSurf", el muy sabio había cambiado el icono del shortcut para que pareciera una inofensiva carpeta.
El muy oidiado UltraSurf en plena accion
Una vez el programa carga inmediatamente abre el navegador y ya se puede entrar a cualquier sitio sin las restricciones del proxy. Ok, ya habia encontrado el programa pero todavía no sabía cómo hacia para conectarse al Internet. Lo primero que hice fue tumbar por un momento el Proxy (la mayoría de usuarios estaban almorzando así que nadie lo noto) para ver si todavía así se conectaba lo cual efectivamente hizo que el programa se desconectara. Esto me indico que el programa si utilizaba el proxy para conectarse a Internet. Luego de Googlear un poco sobre cómo funciona este programita me entere de que este utiliza túneles SSL para conectarse con servidores proxy en Internet y entonces entendí el porque mi proxy lo dejaba pasar. Otra cosa que hace UltraSurf es que abre en el equipo del usuario el puerto TCP 9666 y configura el Internet Explorer para que utilice como proxy la dirección 127.0.0.1:9666, o sea, se usaba así mismo como proxy y el a su vez utilizaba el proxy de la red para gestionar la conexión.
Los Web Proxys trabajan capturando las solicitudes de sitios Web de los usuarios y conectándose ellos al Web server requerido en lugar del usuario, luego entrega al usuario la pagina solicitada. El usuario nunca hace una conexión directa con el sitio, quien hace la conexión al sitio web es el proxy. Es decir, el proxy es un intermediario entre el usuario interno de la red y un servidor web externo. Al estar en medio de la conexión entre el usuario y el servidor web, el proxy puede ver el contenido de los paquetes, como origen, dominio de destino, usuario que hace la solicitud, contenido del sitio web, etc., y en base a esto aplicar las restricciones especificadas. Esto aplica para el protocolo HTTP y otras aplicaciones, pero no para el protocolo HTTPS que no es más que HTTP sobre SSL. Al utilizar SSL el proxy no puede modificar el paquete, o sea, no puede ponerse en medio de la conexión, y debe dejar que el usuario negocie una conexión segura con el servidor de destino (utilizando el método http "CONNECT"). Así que al establecerse la conexión (o túnel) entre el usuario y el servidor el proxy no puede intervenir ni ver el contenido de los paquetes ya que estos son encriptados. Por esta razón el UltraSurf podía conectarse a Internet porque hace conexiones SSL con servidores en Internet.
Bloqueando UltraSurf con Squid
Para evitar estas conexiones lo que hice fue limitar los sitios en los que se pueden establecer conexiones SSL, podría también buscar el listado de servidores que utiliza UltraSurf y bloquearlos pero este no sería un método muy efectivo, ya que en tal caso bloquearía solo al UltraSurf y otro programa similar podría funcionar utilizando el mismo método. Generalmente HTTPS solo se utiliza para Internet Banking y algunas otras aplicaciones Web, afortunadamente ya tenía una lista con estos sitios creada, una especie de "Whitelist", así que lo que hice fue permitir conexiones HTTPS solo a los sitios de este listado. Para hacer esto en Squid, se hace lo siguiente:
#Creacion del ACL para el metodo CONNECT
acl CONNECT method CONNECT
# ACL que contiene los sitios Web permitidos para HTTPS
acl sitios-https url_regex "/ruta-al-listado-de-sitios.txt"
# Regla que permitira conexiones HTTPS solo a los sitios del listado creado arriba
http_access allow CONNECT sitios-https
http_access deny CONNECT all
Luego de insertar estas líneas y refrescar la configuración del squid (/etc/init.d/squid reload) UltraSurf ya no podía conectarse a sus servidores en Internet, y por ende el usuario ya no podría saltarse las restricciones (adiós feisbuk!). Pero todavía tenía pendiente el asunto de que este programa modificaba la configuración de Proxy que por GPO habíamos configurado en las computadoras. Tenemos una política de grupo (GPO) que configura el Internet Explorer para utilizar nuestro Proxy y no permite que los usuarios cambien esta opción, pero aparentemente esta política solo esconde la opción de "Connection" en las opciones del Internet explorer, pero estas podrían ser modificadas por el usuario utilizando algún script, como lo hace el UltraSurf. Así que pensé en modificar los permisos de la clave del registro de Windows que maneja la configuración de proxy del Internet Explorer, esta se encuentra en:
HKEY_USERS\SID-DEL-USUARIO\Software\Microsoft\CurrentVersion\Internet Settings
Para modificar los permisos de esta clave solo tenemos que abrir el Editor del Registro (start-->run-->regedit.exe), movernos hasta la clave especificada, hacer clic derecho encima y seleccionar "Permissions". Por defecto el usuario tendrá "Full Control" sobre esta clave, si le cambiamos este y solo le dejamos el permiso "Read" el UltraSurf no podrá modificar la configuración de proxy de Internet explorer, por lo que tendrá obligatoriamente que utilizar el proxy Interno. Así que aunque el programa llegue a conectarse a sus proxies en Internet, el usuario no podrá utilizarlo porque el Internet Explorer continuara siempre viendo solo a nuestro Proxy interno. Bueno, hasta aqui el post de hoy. Espero que este les haya servido de ayuda, mas a administradores de sistemas que a usuarios queriendo violar las politicas de su compañia o universidad (nada bueno sale de eso, creanme). Como siempre espero no haberles hecho perder su tiempo leyendome, habiendo tantos buenos blogs en la red para leer, pero nada, gracias por pasar por aquí.