miércoles, 15 de septiembre de 1999

Sobre puertas y ratoneras

Ya es un viejo tópico afirmar que el comercio electrónico no termina
de despegar. ¿Razones? Variadas y de distinto peso, pero siempre se
esgrime aquella de la seguridad y el temor al fraude. Conscientes de
ello, los administradores web y diseñadores de aplicaciones dedican
sus esfuerzos y sus noches desveladas a fortificar los servidores,
crear sistemas de comercio a prueba de balas y rodear en definitiva a
los portales de venta de una sólida atmósfera de confianza, que
induzca al cliente potencial a realizar sus compras y gastar su
dinero.
Por supuesto, el problema de fondo no es sólo el prestar una imagen de
seguridad, ya que también está en juego la información privada de los
usuarios y de la propia compañía. Se trata de asegurar todas las
posibles vías de ataque para prevenir la filtración de información,
evitar ataques de denegación de servicio o la modificación de ficheros
en servidores de la compañía, incluyendo su página principal que
constituye su escaparate de cara al mundo y cuya alteración atentaría
seriamente contra su imagen tan arduamente buscada.

Con el fin de lograr estos objetivos de seguridad se contratan
expertos en redes, se instalan cortafuegos que sólo permiten el
tráfico HTTP, se crean políticas de seguridad para toda la empresa, a
menudo se contrata una auditoría externa, para finalmente sentirse
satisfecho con la seguridad global de la aplicación de comercio
electrónico desarrollada. No hay servicios de comunicaciones inútiles
a la escucha, se han utilizado las últimas versiones de los programas
de bases de datos con todos los parches de última hora correctamente
aplicados, todos los permisos están cuidadosamente controlados, las
listas de control de acceso están protegidas, los logs registran cada
movimiento sospechoso, los antivirus están actualizados al minuto, en
definitiva, todas las puertas traseras y ratoneras están cerradas.
Pero, ¿y la puerta principal? ¿No se habrá quedado abierta una
rendija?

Aunque parezca mentira, muchos ataques se producen por la puerta
grande, explotando errores tan obvios que ni los expertos de seguridad
pensaban que existieran o no miraron allí. Se trata de olvidos o
descuidos en la programación en HTML, JavaScript, CGI o ASP.

Muchos autores de programas CGI no son conscientes de que el programa
que escriben se ejecutará en un servidor web, al que accederá
cualquier persona, introduciendo cualquier entrada, incluso las
insospechadas, para las que el programa no está preparado. El no tener
la seguridad en mente a la hora de escribir un programa CGI puede
tener consecuencias desastrosas, pero ¿cuántos programadores están
preparados para el reto? Un descuido puede permitir a un atacante
desde husmear el contenido de archivos del servidor, hasta ganar
acceso de root al sistema. Dentro del capítulo de CGI, se puede
incluir a los server side includes (SSI), que permiten toda clase de
trucos para llegar a ejecutar comandos arbitrarios o listar el
contenido de ficheros seleccionados. Se puede encontrar información
completa sobre este tipo de ataques en
www.iec.csic.es/criptonomicon/cgi, tema que ya ha sido tratado en
profundidad.

Por otro lado, los formularios en páginas web, tal vez debido a su
sencillez de programación en HTML, resultan muy descuidados. Es común
que no se comprueben las longitudes de las entradas de los usuarios,
que a veces, deliberadamente o no, serán inusualmente largas,
provocando un fallo del programa que debe procesarlas. En el caso
peor, se podría producir una caída del servicio, mientras que en otros
casos se puede revelar indeseadamente el nombre de algún programa o
fichero de datos, información sobre la estructura de directorio del
servidor, software utilizado, y otros datos parecidos, valiosos en
manos de un atacante.

Otros errores comunes consisten en la utilización de campos ocultos en
formularios para asignar el valor a ciertas variables, como por
ejemplo el precio de un producto. La manipulación del formulario y de
dicha etiqueta resulta trivial usando cualquier editor de texto,
permitiendo que cualquier atacante pueda modificar a voluntad el valor
de estos campos. Se puede encontrar un ejemplo tal en
www.iec.csic.es/criptonomicon/cookies/tienda.html. Si no existe una
programación en el servidor que contraste los datos enviados desde el
formulario, la tienda virtual puede experimentar grandes pérdidas.

Los URL también pueden explotarse para obtener información acerca de
otros usuarios. A menudo, los programadores creen que una página sólo
será accedida desde otra página anterior o un formulario. Pero un
atacante podría crear un URL, escribiéndolo directamente en la ventana
de dirección, e intentar acceder a algún recurso protegido, como los
datos de clientes o bases de datos confidenciales, saltándose los
filtros del programador, que se encontraban en la página anterior.

Nuevos ataques están proviniendo de la utilización de etiquetas en
JavaScript, que se incluyen en ventanas que se presentan al cliente en
un formulario para que introduzca un texto, como su opinión acerca de
un producto o la descripción de las características de un cierto
artículo. El usuario medio introducirá texto sencillo, mientras que el
avezado intentará introducir incluso programas en JavaScript, que a
veces pueden llegar a ejecutarse en la página web del comercio cuando
la visite el siguiente cliente. Un truco común en este caso es la
petición al siguiente usuario de su login y password, que confiado los
introduce sin reservas, pasando así a ser conocidos por el atacante.

En resumen, existe toda una serie de ataques ingeniosos basados
exclusivamente en la web, que no hacen uso de sofisticadas
herramientas de hacking, ni requieren grandes recursos
computacionales, ni explotan características de protocolos de difícil
conocimiento. Utilizan la puerta grande. Se llevan a cabo rellenando
formularios y escribiendo los URL de manera ingeniosa. La única
herramienta que precisan es un navegador. Por lo tanto, pasan a través
de todos los controles estándar de filtrado de paquetes y de control
de contenido, al ser ataques disfrazados tras el tráfico web
convencional.

Cuando se diseña una aplicación web sofisticada también deben tenerse
en cuenta estos agujeros, aunque se hayan cerrado todas las otras
pequeñas puertas traseras. Recuerde, de nada le sirve tapar las
ratoneras si se deja abierta la puerta principal.




Gonzalo Álvarez Marañón
criptonomicon@iec.csic.es
Boletín Criptonomicón #55
http://www.iec.csic.es/criptonomicon