SEGURIDAD EN APLICACIONES WEB Autor: Carlos Alberto

Anuncio
SEGURIDAD EN APLICACIONES WEB
Autor: Carlos Alberto Amaya Tarazona
Ingeniero de Sistemas
Magister en Software Libre y Administración de Redes y sistemas Operativos
1
CONTENIDO
Pág
INTRODUCCIÓN:
UNIDAD I: INTRODUCCIÓN A LA SEGURIDAD EN APLICACIONES WEB
CAPITULO 1: CONCEPTOS BÁSICOS DE SEGURIDAD EN
APLICACIONES WEB
5
10
10
Lección 1: INTRODUCCIÓN AL PROTOCOLO HTTP
10
1.1 Características y Funcionamiento
1.2 Análisis de una cabecera HTTP
1.3 Métodos HTTP
1.4 Codificación de la Información
10
14
15
17
Lección 2: VULNERABILIDADES EN APLICACIONES WEB
18
2.1 Como trabajan las aplicaciones web
2.2 Arquitecturas más complejas
2.3 Proyecto OWASP y las Vulnerabilidades en Aplicaciones Webs
2.4 Sniffeo y codificación de cabeceras
2.5 Inyectando código
2.6 CR/LF Injections
2.7 XSS y SQL Injections
2.8 PHP Injections
2.9 Banner Grabbing
2.10 HTTP Fingerprinting
18
19
21
23
24
24
25
26
27
28
Lección 3: HERRAMIENTAS PARA LA DETECCIÓN DE VULNERABILIDADES 31
3.1 Fiabilidad de los Analizadores Automáticos de Vulnerabilidades
31
3.2 Ventajas y Beneficios
32
3.3 Inconvenientes y Desventajas
33
3.4 Criterios de valoración para herramientas de seguridad web
34
3.4.1 Herramientas Comerciales
35
3.4.2 Herramientas de Código abierto
35
3.4.3 Herramientas de auditoría aplicadas a SQL Injection
35
3.4.4 Herramientas de auditoría aplicadas a XSS (Ataques de Cross-Site Scripting)
Lección 4: MITOS EN LA SEGURIDAD WEB
39
4.1 Auditoría y control de vulnerabilidades
4.2 Puntos débiles
4.3 Tipos de Escaners
41
41
42
Lección 5: SISTEMA DE LOGS
42
5.1 Formato del fichero de LOG
5.2 Análisis del fichero de LOG
43
43
2
5.3 Programas de análisis de LOGS
44
CAPITULO 2: PROTOCOLOS DE SEGURIDAD PARA APLICACIONES WEB 44
Lección 6: TIPOS DE ANÁLISIS
44
6.1 Metodologías de análisis de seguridad web
45
Lección 7: ESCALACION DE PRIVILEGIOS EN APLICACIONES WEB
45
Lección 8: AUTENTICACIÓN Y AUTORIZACIÓN
49
8.1 La Autenticación
8.2 La Autorización
49
51
Lección 9: EJECUCIÓN DE INSTRUCCIONES DE ACCESO
51
9.1 Codificación y las validaciones de Entrada / Salida
9.2 Gestión de sesiones y usuarios
9.3 Gestión de errores y excepciones
52
52
53
Lección 10: CONFIGURACIÓN SEGURA DE SERVIDORES
54
10.1 Organización del servidor Web
10.2 Organización de las aplicaciones Web
54
55
CAPITULO3: DESARROLLO SEGURO DE APLICACIONES
56
Lección 11: CONCEPTOS GENERALES PARA EL DESARROLLO SEGURO
DE APLICACIONES
56
11.1 Normas básicas de seguridad
58
Lección 12: CONTROLES DE AUTORIZACION DE OBJETOS
60
12.1 Listas de control de acceso (ACL)
12.1.1 Configuración de las ACL
12.1.2 Funciones de la ACL
62
63
63
Lección 13: CONSIDERACIONES DE SEGURIDAD EN WEB SERVICES
63
13.1 Exposición de datos
13.2 Páginas privadas y los sistemas de autenticación
13.3 Ataques de fuerza bruta
13.4 Espionaje de contraseñas (Password sniffing)
13.5 Registros persistentes
64
64
64
65
66
Lección 14: VALIDACIÓN DE ENTRADAS
66
3
Lección 15: SQL INJECTION
15.1 Variantes de sintaxis
15.2 Otras clases de Inyección
68
68
69
LISTADO DE FIGURAS
Pág
Figura 1: Niveles superiores de OSI. Origen de vulnerabilidades en sitios
web
Figura 2: Tecnologías y protocolos de red modelo OSI
Figura 3: Operaciones de solicitud – respuesta con HTTP
Figura 4: Análisis de cabeceras HTTP
Figura 5: Niveles de comunicación en aplicaciones web
Figura 6: Arquitectura de cuatro capas en aplicaciones web
Figura 7: OWSP Top 10 – 2013
Figura 8: Banner detección FTP
Figura 9: Banner grabbing por método HEAD
Figura 10: Uso de un “Escucha de Red” para hallar huellas identificativas
de un host en la red Ethernet
Figura 11: Uso de un “Escucha de Red” para hallar huellas identificativas
de un host remoto
Figura 12: Funciones de auditoría en escáneres de aplicaciones web.
Herramientas comerciales
Figura 13: de auditoría en escáneres de aplicaciones web.
Herramientas de código
Figura 14: Funciones de auditoría en escáneres de aplicaciones
web para SQL Injection
Figura 15: Funciones de auditoría en escáneres de aplicaciones
web para XSS
Figura 16: Categoría de Vulnerabilidades
Figura 17: Formato de fichero de Logs
Figura 18: Metodología de desarrollo seguro
Figura 19: Filtrado de paquetes con ACL
Figura 20: Formulario de validación de datos
4
9
11
13
15
19
21
23
29
29
30
31
36
37
38
40
41
44
59
64
72
INTRODUCCIÓN
Tanto el auge de internet , las Telecomunicaciones, el mundo digital y todo lo que
engloba el manejo de datos, han tenido un crecimiento significativo , exponencial y
paralelos a las temáticas que tienen que ver con la privacidad formación tanto
personal como profesional. En la web encontramos funcionando a tiendas en línea,
redes sociales, negocios que mueven grandes cantidades de dinero, redes de los
servicios que habilitan el comercio a nivel internacional que contienen información
muy delicada de la vida privada de sus miembros.
Para dar inicio a este universo de la privacidad y seguridad de la información que
en la web viaja, el presente contenido académico hace relevancia a la necesidad de
implementar procedimientos seguros cuando se desarrollan aplicaciones web para
compartir y publicar información pueden haber muchos puntos de vista pero uno de
los más más críticos de la seguridad del Internet, lo tienen las piezas que intervienen
de forma directa con las masas de usuarios, los servidores web.
Para poder abordar el siguiente contenido académico, es necesario tener como
base muchos de los conceptos de seguridad abordados en redes de
telecomunicaciones, sistemas operativos e informática forense. Es por ello que el
tema de seguridad se debe asimilar como un engranaje en el que intervienen
muchas áreas y técnicas cuando se trata de proteger la integridad de la información
y la privacidad de los datos de los usuarios.-
El contenido que a continuación se presenta aborda los conceptos y mecanismos
fundamentales para la detección de vulnerabilidades en aplicaciones web, en las
que primero se incluyen temáticas básicas introductorias pero específicas al diseño
de aplicaciones web seguras, para luego tratar con los protocolos de seguridad más
usados en aplicaciones web.
Las áreas críticas del diseño de aplicaciones web demostrarán que van desde la
misma infraestructura en telecomunicaciones, el entorno de implementación, hasta
el código c y los lenguajes de programación usados para la puesta en marcha de
las aplicaciones web. Todo es parte de un ciclo de vida de desarrollo web pero
teniendo en cuanta aspectos de seguridad que protegen la forma y el fondo de las
aplicaciones.- No se trata de diseñar y de implementar aplicaciones que solo den
una buena imagen y gusto al cliente, sino también aspectos de seguridad que
minimicen el riesgo de pérdida de información o de manipulación de la misma.
5
En cuanto a la utilidad práctica de estos contenidos, alcanza a llevar a que el
estudiante sea competente en la identificación de diseños inseguros en aplicaciones
web y que lo lleve a proponer mejoras o planes de contingencia que reduzcan el
riesgo. El módulo, no pretende conceptualizar ni ejercitar al estudiante en el proceso
de implementación de servidores web o soluciones tipo LAMP1, ó WAMP2, ni
ahondarnos en el desarrollo web, que deben ser competencias previas como
presaberes a estos contenidos. Tampoco es posible llegar a la práctica o
demostración de cada herramienta que detecte vulnerabilidades o demostrar cada
riesgo. Estos son aspectos Técnicos que se aplican de forma operativa y el curso
entiéndase tiene un carácter académico investigativo que lleva al estudiante a
formular diseños propios, soluciones y análisis de todas las herramientas y que lo
lleven a detectar vulnerabilidades y controlarlas. Durante el desarrollo del aula, se
ejercitarán prácticas que en lo posible toquen cada tema expuesto en los contenidos
de este módulo.
Finalmente el contenido de este módulo, se encuentra referenciado y apoyado al
proyecto OWASP (The Open Web Application Security Project),3 como un grupo
de expertos en temas de desarrollo y seguridad con las intenciones de plantear
proyectos que a su vez trabajaran en temas de seguridad de aplicaciones, buenas
prácticas para desarrollo seguro, pruebas de seguridad para software entre otros.
Muchas referencias, actividades y experiencias en la temática de aplicaciones web,
están apoyadas en este proyecto.
1
Disponible en internet desde <http://www.lamphowto.com/>
Disponible en internet desde <http://www.wampserver.com/en/>
3
Disponible en internet desde <https://www.owasp.org/index.php/Main_Page>
2
6
PRIMERA UNIDAD
INTRODUCCIÓN A LA SEGURIDAD EN APLICACIONES WEB
CAPITULO I:
1. CONCEPTOS BÁSICOS DE SEGURIDAD EN APLICACIONES WEB
El enfoque dado a los contenidos, pretende confrontar “Mitos” que se tienen cuando
se tratan vulnerabilidades de aplicaciones web. Uno de ellos es el de no contemplar
entornos y escenarios externos, topologías, otras capas del modelo OSI, protocolos
y servicios. La seguridad tiene que verse como un todo, en donde cualquier variable
puede afectar lo menos pensado. Es por ello que no solo se trata de identificar
riesgos en aplicaciones web sino también en los equipos (computadores,
servidores) que las soportan, las redes por donde viajan los datos y los servicios
que los sistemas operativos y las aplicaciones ofrecen.
Para dar inicio a este curso que trata los temas de la privacidad y seguridad de la
información que en la web viaja, el presente contenido académico hace relevancia
a la necesidad de implementar procedimientos seguros cuando se desarrollan
aplicaciones web para compartir y publicar información pueden haber muchos
puntos de vista pero uno de los más críticos de la seguridad del Internet, lo tienen
las piezas que intervienen de forma directa con las masas de usuarios, los
servidores web
No se deja a un lado la seguridad perimetral ni de la infraestructura de
telecomunicaciones, que desde las capas inferiores del modelo OSI deben
contemplar los diseñadores, programadores y administradores de sistemas, hasta
las capas superiores, pero si se enfoca este material a que el lector pueda
determinar los aspectos funcionales en diseño, arquitectura, conceptualización e
implementación de aplicaciones web que medianamente puedan ser seguras o que
estén enmarcadas en su implementación dentro de un protocolo y estándar de
funcionamiento medianamente seguro.
Respecto a los servidores web, es común escuchar sobre fallas en los sistemas de
protección de los servidores más frecuentemente utilizados:
7
Apache: Este es el más común y más utilizado en todo el mundo. Además, es
gratuito y de código abierto, así que se podría decir que corre sobre cualquier
plataforma 4
Microsoft IIS: Su proveedor es Microsoft, y como servidor de aplicaciones web ha
tenido randes avances en seguridad y en servicios. 5
Tomcat: Servidor web también llamado Jakarta Tomcat. Funciona como un
contenedor de servelets desarrollado bajo el proyecto Jakarta en la Apache
Software Foundation. Tomcat. implementa las especificaciones de los servelets y
de JavaServer Pages (JSP) de Sun Microsystems.6
Sun Java System Web Server: Este producto pertenece a la casa Sun, y suele
empalarse sobre entorno de este sistema. Sin embargo, como Apache, es
multiplataforma, y recientemente Sun ha decidido distribuirlo con licencias de código
abierto (BSD concretamente).7
Ngnix: Este es un servidor Web muy ligero y corre sobre sistemas Unix y Windows.
Se ha convertido en el 4º servidor HTTP más popular de la red y también se
distribuye bajo licencia BSD.8
Lighttp: Este servidor Web es otro de los más ligeros que hay en el mercado. Está
especialmente pensado para hacer cargas pesadas sin perder balance, utilizando
poca RAM y poca de CPU. Algunas páginas populares que lo usan son Youtube,
Wikipedia y otras que soportan gran tráfico diariamente. También es gratuito y se
distribuye bajo licencia BSD.9
O en los lenguajes de programación en los que son escritas las aplicaciones que
son ejecutadas por estos servidores. Es de reconocer, que la mayoría de los
problemas de vulnerabilidad detectados en servicios web no son provocados por
fallas intrínsecas de ninguna de estas partes, ya que una gran cantidad de los
problemas se generan por malos usos por parte de los programadores.
El material aquí abordado referencia la mayoría de los problemas de seguridad en
los sitios web que tienen su origen en los niveles superiores del modelo OSI a nivel
de aplicación (Ver figura 1) y que son el resultado de escritura defectuosa de
código, que por lo general viene motivada por aspectos de forma en los que el
diseñador le importa cómo se vea un sitio web o una aplicación y que tan llamativo
y cautivador para el cliente puedan ser, pero no se detallan aspectos de forma en
cuanto a seguridad; debemos entender que programar aplicaciones web seguras
4
Disponible en internet dese <http://httpd.apache.org/>
Disponible en internet desde <http://www.iis.net/>
6
Disponible en internet desde <http://tomcat.apache.org/>
7
Disponible en internet desde <http://docs.oracle.com/cd/E19146-01/index.html>
8
Disponible en internet desde <http://nginx.org/en/>
9
Disponible en internet desde <http://www.lighttpd.net/>
5
8
no es una tarea fácil, ya que requiere por parte del programador, no únicamente
mostrar atención en cumplir con el objetivo funcional básico de la aplicación, sino
una concepción general de los riesgos que puede correr la información contenida,
solicitada y recibida por el sistema.
No quiere decir esto que en los demás niveles no se presenten amenazas y
vulnerabilidades que afecten a los sitios web. E la Lección 25, trataremos aspectos
de seguridad en otros niveles y protocolos de la capa OSI que afectan aplicaciones
web.
Figura 1: Niveles superiores de OSI, orígenes de vulnerabilidades en sitios web
Fuente: El autor
En la figura1, se puede identificar los niveles superiores del modelo OSI donde son
típicas las vulnerabilidades en aplicaciones web.
En la actualidad, aunque existen muchos documentos, publicaciones, estudios
basados en prueba y error, comunidades de desarrollo sobre todo en código abierto
(comunidades libres), que permiten formar un criterio sobre el tema, no existen
acuerdos básicos sobre lo que se debe o no se debe hacer, y lo que en algunas
publicaciones se recomienda, en otras es atacado. Sin embargo, en lo sustancial sí
existen algunas recomendaciones que son generales y serán las que describo en
este documento junto con los ataques más comunes a aplicaciones web y las
técnicas de defensa a las inicialmente el profesional puede aplicar en primera
instancia. Es tarea del profesional que aborde estas temáticas, que defina su
9
estrategia de diseño e implementación segura de sus aplicaciones web basado
en experiencias como las que presenta este módulo y comparto.
En el contenido de este escrito, se tratan temas esenciales de seguridad que se
suelen encontrar en las aplicaciones PHP, además se remiten ejemplos y
estrategias para evitar cometer los mismos errores, si bien, la mayoría de los
problemas (sino es que todos) revisados serán para código PHP, los mismos
consejos suelen aplicar para otros lenguajes de tecnologías similares que por lo
mismo enfrentan problemas parecidos y cuya solución es la misma, sólo con las
variantes propias del lenguaje.
LECCION 1: INTRODUCCION AL PROTOCOLO HTTP:
El modelo TCP/IP cuenta con diversos protocolos en su capa de aplicación: HTTP,
SMTP y FTP son tres de los más importantes. En principio, cualquiera de ellos
puede ser utilizado para la transferencia de mensajes SOAP pero HTML es el
protocolo estándar para la web y el más usado en los servicios web XML.
En la figura 2 se observa los protocolos que actúan en las respectivas capas del
modelo OSI. Todos los protocolos presentan deficiencias en su diseño y por tanto
ofrecen de alguna forma vulnerabilidades que afectan las características de
seguridad de una aplicación web (integridad, disponibilidad, confidencialidad).
Figura 2: Tecnologías y protocolos de red modelo OSI
Fuente: El autor
10
El Protocolo de Transferencia de HiperTexto (Hypertext Transfer Protocol) es un
sencillo protocolo cliente-servidor que articula los intercambios de información entre
los clientes web y los servidores HTTP.
Es un protocolo del nivel de aplicación usado para la transferencia de información
entre sistemas, de forma clara y rápida. Este protocolo ha sido usado por el WorldWide Web desde 1990. La especificación completa del protocolo HTTP/1.0 está
recogida en el RFC 1945.10 Fue propuesto por Tim Berners-Lee, atendiendo a las
necesidades de un sistema global de distribución de información como el World
Wide Web.
El protocolo HTTP se basa en un paradigma de peticiones y respuestas. Un cliente
envía una petición en forma de método, una URI, y una versión de protocolo seguida
de los modificadores de la petición de forma parecida a un mensaje MIME,
información sobre el cliente y al final un posible contenido. El servidor contesta con
una línea de estado que incluye la versión del protocolo y un código que indica éxito
o error, seguido de la información del servidor en forma de mensaje MIME y un
posible contenido
1.1 CARACTERÍSTICAS Y FUNCIONAMIENTO
Desde el punto de vista de las comunicaciones, HTTP se establece sobre la capa
de conexión TCP/IP, y funciona de la misma forma que el resto de los servicios
comunes de entornos UNIX: un proceso servidor escucha en un puerto de
comunicaciones TCP (por defecto, el 80), y espera las solicitudes de conexión de
los clientes web. Una vez que se establece la conexión, el protocolo TCP se encarga
de mantener la comunicación y garantizar un intercambio de datos libre de errores.
HTTP se basa en sencillas operaciones de solicitud/respuesta. Un cliente establece
una conexión con un servidor y envía un mensaje con los datos de la solicitud. El
servidor responde con un mensaje similar, que contiene el estado de la operación y
su posible resultado. Todas las operaciones pueden adjuntar un objeto o recurso
sobre el que actúan; cada objeto web es identificado por su URL.
La figura 3 muestra estas sencillas operaciones de diálogo que genera HTTP
cuando se lanza una solicitud de servicio a una aplicación web.
10
Disponible en internet desde <http://www.freesoft.org/CIE/RFC/1945/index.htm>
11
Figura 3: Operaciones de solicitud - respuesta con HTTP
Fuente: El autor
Se detalla a continuación las principales características del protocolo HTTP:

Toda la comunicación entre los clientes y servidores se realiza a partir de
caracteres US-ASCII de 7 bits.

Permite la transferencia de objetos multimedia, codificando los archivos
binarios en cadenas de caracteres. El contenido de cada objeto
intercambiado está identificado por su clasificación MIME.

Existen ocho verbos que permiten que un cliente pueda dialogar con el
servidor. Los tres más utilizados son: GET, para recoger un objeto, POST,
para enviar información al servidor y HEAD, para solicitar las características
de un objeto (por ejemplo, la fecha de modificación de un documento HTML).
12

Cada operación HTTP implica una conexión con el servidor, que es liberada
al término de la misma. Es decir, en una operación se puede recoger un único
objeto. Con la versión HTTP 1.1 se ha mejorado este procedimiento,
permitiendo que una misma conexión se mantenga activa durante un cierto
periodo de tiempo de forma que sea utilizada en sucesivas transacciones.
Este mecanismo, denominado HTTP Keep Alive, es empleado por la mayoría
de los clientes y servidores modernos.

No mantiene estado. Cada petición de un cliente a un servidor no es influida
por las transacciones anteriores. El servidor trata cada petición como una
operación totalmente independiente del resto.

Cada objeto al que se aplican los verbos del protocolo está identificado a
través de un localizador uniforme de recurso (URL) único.
Cada vez que un cliente realiza una petición a un servidor, se ejecutan los siguientes
pasos:
1. Un usuario accede a una URL, seleccionando un enlace de un documento
HTML o introduciéndola directamente en el navegador.
2. El cliente web descodifica la URL, separando sus diferentes partes. Así
identifica el protocolo de acceso, la dirección DNS o IP del servidor, el puerto
(de carácter opcional; el valor por defecto es 80) y el objeto requerido del
servidor.
3. Se abre una conexión TCP/IP con el servidor, llamando al puerto TCP
correspondiente.
4. Se realiza la petición. Para ello, se envía el comando necesario (GET, POST,
HEAD,…), la dirección del objeto requerido (el contenido de la URL que sigue
a la dirección del servidor), la versión del protocolo HTTP empleada y un
conjunto variable de información, que incluye datos sobre las capacidades
del navegador, datos opcionales para el servidor, etc.
5. El servidor devuelve la respuesta al cliente. Consiste en un código de estado
y el tipo de dato MIME de la información de retorno, seguido de la propia
información.
13
6. Se cierra la conexión TCP. Si no se utiliza el modo HTTP Keep Alive, este
proceso se repite para cada acceso al servidor HTTP.
El diálogo con los servidores HTTP se establece a través de mensajes formados
por líneas de texto, cada una de las cuales contiene los diferentes comandos y
opciones del protocolo. Solo existen dos tipos de mensajes, uno para realizar
peticiones y otro para devolver la correspondiente respuesta.
1.2 ANÁLISIS DE UNA CABECERA HTTP:
Realizando una petición HEAD al sitio web www.unad.edu.co como se muestra en
la figura 4, identificaremos las cabeceras HTTP. El ejercicio se realiza desde una
sesión de consola en un sistema operativo BackTrack 5 con permisos de root y
accediendo a la web mediante una conexión ADSL sin restricciones o puertas
traseras “firewalls” configurados y sin restricción de puertos.
Figura 4: Análisis de cabeceras HTTP
Fuente: El autor
Al realizar la petición al sitio web, el servidor nos manda el código de respuesta [2]
200. Los códigos de rango 2xx indican que la operación se ha realizado con éxito,
Cache-Control: Genera las directivas que deben ser usadas por cualquier
mecanismo a lo largo de la petición/respuesta.
Connection: Indica que la conexión se cierra, no se mantiene como en keep-alive
Date: Fecha y hora actual.
Server: Indica el tipo de S.O que corre en el servidor (Vease /.0x07)
14
Content-Length: Campo que indica el tamaño del cuerpo del documento o, en
decimal, enviado al destinatario que hubiera enviado la petición.
ContenrtType: Tipo de contenido y codificación del archivo al que realizamos la
petición
Expires: Muestra la fecha en la que va caducar la cache de nuestra petición.
Set-Cookie: Es la coockie que nos envía la pagina a la que hemos realizado la
petición, en ella aparece su ID. Su fecha de expiración, sobre que directorio actúa y
el dumio desde donde se ha obtenido.
1.3 MÉTODOS HTTP:
Los métodos HTTP más comunes y los más usados son los que a continuación se
mencionan. Es importante identificarlos ya que son los más manipulados en la
aplicación en ataques y técnicas de PenTesting y de snifeo de cabeceras HTTP.
GET: Sirve para recoger cualquier tipo de información del servidor. Se utiliza
siempre que se pulsa sobre un enlace o se teclea directamente a una URL. Como
resultado, el servidor HTTP envía el documento ubicado en la dirección especificada
por dicha URL.
HEAD: Es un comando similar a GET pero que pide solamente la cabecera del
objeto. Lo utilizan principalmente los gestores de cachés de páginas o los servidores
proxy para conocer cuándo es necesario actualizar la copia que se mantiene de un
fichero.
POST: Este comando envía datos de información al servidor, normalmente
procedentes de un formulario web, para que el servidor los administre o los añada
a una base de datos.
PUT: Almacena un objeto en la URL especificada. Si la dirección de destino ya
contenía un objeto, se considera que se está enviando una versión actualizada del
mismo.
DELETE: Elimina el objeto especificado. Este comando es muy poco utilizado.
TRACE: Realiza un eco de la solicitud recibida para que el cliente pueda conocer
qué servidores intermedios están añadiendo información o modificando la petición.
OPTIONS: Devuelve los métodos HTTP que soporta el cliente. Se suele utilizar para
comprobar la funcionalidad de un servidor web.
CONNECT: Se utiliza en los servidores proxy que puedan establecer un túnel
dinámicamente (por ejemplo, un túnel SSL).
Ante cada transacción con un servidor HTTP, éste devuelve un código numérico en
la primera línea del mensaje de respuesta que informa sobre el resultado de la
operación. Estos códigos aparecen en algunos casos en la pantalla del cliente,
cuando se produce un error. Los códigos de estado están clasificados en cinco
categorías:


1xx: Mensajes informativos.
2xx: Mensajes asociados con operaciones realizadas correctamente.
15



3xx: Mensajes de redirección, que informan de operaciones complementarias
que se deben realizar para finalizar la operación.
4xx: Errores del cliente; el requerimiento contiene algún error, o no puede ser
realizado.
5xx: Errores del servidor, que no ha podido llevar a cabo una solicitud. En la
siguiente tabla podemos ver una lista con los códigos que se utilizan con
mayor frecuencia:
La tabla 1 muestra los códigos de estado más comunes en una conversación
establecida con el protocolo HTTP. Estos códigos son los que generalmente se
modifican en interceptaciones o ataques a servicios HTTP y serán parte del análisis
en los ejercicios propuestos del curso.
CODIGO
200
201
ACCION
OK
Created
202
Accepted
204
No Content
301
Moved
Pemanently
302
Found
304
Not Modified
400
401
Bad Request
Unauthorized
403
Forbidden
404
500
Not Found
Internal Server
Error
Not
Implemented
Bad Gateway
501
502
503
Service
Unavailable
DESCRIPCION
Operación realizada satisfactoriamente
La operación ha sido realizada correctamente, y como resultado se ha creado
un nuevo objeto, cuya URL de acceso se proporciona en el cuerpo de la
respuesta. Este nuevo objeto ya está disponible.
La operación ha sido realizada correctamente, y como resultado se ha creado
un nuevo objeto, cuya URL de acceso se proporciona en el cuerpo de la
respuesta. El nuevo objeto no está disponible por el momento. En el cuerpo
de la respuesta se debe informar sobre la disponibilidad de la información.
La operación ha sido aceptada, pero no ha producido ningún resultado de
interés. El cliente no deberá modificar el documento que está mostrando en
este momento.
El objeto al que se accede ha sido movido a otro lugar de forma permanente.
El servidor proporciona, además, la nueva URL en el campo Location de la
respuesta.
El objeto al que se accede ha sido movido a otro lugar de forma temporal. El
servidor proporciona, además, la nueva URL en el campo Location de la
respuesta. El cliente no debe modificar ninguna de las referencias a la URL
errónea.
Se devuelve cuando se hace un GET condicional y el documento no ha sido
modificado
La petición tiene un error de sintaxis y no es entendida por el servidor.
La petición requiere una autorización especial, que normalmente consiste en
un nombre y clave que el servidor verificará. El campo WWW-Autenticate
informa de los protocolos de autentificación aceptados para este recurso.
Está prohibido el acceso a este recurso. No es posible utilizar una clave para
modificar la protección.
La URL solicitada no existe, no está disponible o no se encuentra.
El servidor ha tenido un error interno, y no puede continuar con el
procesamiento.
El servidor no tiene capacidad, por su diseño interno, para llevar a cabo el
requerimiento del cliente.
El servidor, que está actuando como proxy o pasarela, ha encontrado un error
al acceder al recurso que había solicitado el cliente.
El servidor está actualmente deshabilitado y no es capaz de atender el
requerimiento.
Tabla 1: Códigos de estado en HTTP
Fuente: <http://www.rfc-editor.org/rfc/rfc1866.txt>
16
1.4 CODIFICACIÓN DE LA INFORMACIÓN:
Una de las características de HTTP reside en que la comunicación entre cliente y
servidor se realiza a partir de caracteres US-ASCII de 7 bits. El problema aparece
cuando deseamos realizar la transmisión de un archivo binario, cuyo contenido no
puede ser representado por este grupo tan reducido de caracteres.
Para solventar esta limitación se utiliza el estándar de Internet MIME (Extensiones
de correo de Internet multipropósito). Son una serie de convenciones o
especificaciones dirigidas a que se puedan intercambiar a través de Internet todo
tipo de archivos (texto, audio, vídeo, etc.) de forma transparente para el usuario.
Una parte importante de MIME está dedicada a mejorar las posibilidades de
transferencia de texto en distintos idiomas y alfabetos. La especificación de este
estándar se encuentra recogidas en las RFC 2045, 2046, 2047, 2048 y 2049.11
Los recursos u objetos que actúan como entrada o salida de un comando HTTP
están clasificados por su descripción MIME, que se especifica en el campo de
cabecera “Content-Type”. De esta forma, el protocolo puede intercambiar cualquier
tipo de dato sin preocuparse de su contenido. La identificación MIME permitirá que
el receptor trate adecuadamente los datos. Existen nueve tipos definidos por la
IANA:12 application, audio, example, image, message, model, multipart, text y video.
Dentro de cada tipo existen multitud de subtipos: (text/html, image/gif, image/jpeg,
audio/x-mpeg, video/quicktime…).
Existen tres métodos básicos de codificación:



11
12
7 bit: Utilizado por defecto, supone que los archivos son de texto.
Quoted-printable: Se usa para codificar texto con caracteres que excedan
de los 7 bits utilizados en US-ASCII. Con esto podremos representar
caracteres de otros alfabetos como los idiomas procedentes del latín. Se
codifica en 3 caracteres de 7 bits. Por ejemplo, la letra “ñ” se corresponderá
con los caracteres “=F1”.
Base64: Se utiliza para codificar contenido no legible por humanos, como
por ejemplo archivos multimedia. Cada 3 octetos se codifican en 4 caracteres
que pertenecen a un subconjunto de 64 caracteres imprimibles del US-ASCII.
Disponible en internet desde <http://www.ietf.org/rfc/rfc2045.txt>
Disponible en internet desde <http://www.iana.org/>
17
LECCION 2: VULNERABILIDADES EN APLICACIONES WEB:
2.1 COMO TRABAJAN LAS APLICACIONES WEB
Iniciemos con una breve descripción de cómo trabajan e interactúan las aplicaciones
y servicios web con diferentes componentes y escenarios tecnológicos.
El uso de aplicaciones web es tan común como tan masificado hoy en día por todo
tipo de usuarios, empresas e instituciones. Su uso va desde la simple acción de
leer un correo electrónico hasta realizar una compra en línea o una transacción
bancaria sin importar el cubrimiento de estas aplicaciones, el tamaño, diseño,
código en que estén realizadas, plataformas y arquitecturas en las que estén
montadas.
Algo en común de estas aplicaciones es que la mayoría son interactivas, agradables
para el usuario, con datos en línea que se comparten y que ponen a disposición del
usuario. Muchas de ellas soportadas por grandes bases de datos y que usan como
canal de distribución Internet.
La forma como una aplicación web trabaja, a simple vista es sencilla y práctica. Tal
vez por ello y sin ser una afirmación, es que son vulnerables. Po lo general consisten
en una base de datos que por decirlo así, está ubicada detrás del sitio web alojado
en un servidor y que está escrita en un lenguaje de programación que es capaz de
extraer información específica de esa base de datos por solicitudes y peticiones de
los usuarios remotos o locales mediante interacciones dinámicas con esos usuarios
o clientes.
Cuando se usan bases de datos para la gestión de los mismos en aplicaciones web,
es común que estas aplicaciones estén compuestas por tres niveles:
Un nivel de presentación (un navegador web o motor de búsqueda).
Un nivel lógico (un lenguaje de programación, como C #, ASP, NET, PHP, JSP,
etc.).
Y un nivel de almacenamiento (base de datos como Microsoft SQL Server,
MySQL, Oracle, etc.)
18
Figura 5: Niveles de comunicación en aplicaciones web.
Fuente: El autor
En la (figura 5) se identifica la secuencia de peticiones y operación de los tres niveles
en donde si el navegador Web (el nivel de presentación, por ejemplo, Internet
Explorer, Safari, Firefox, etc) envía peticiones a la capa media (la capa de lógica),
que define los servicios, las solicitudes, consultas y actualizaciones de la base de
datos (el nivel de almacenamiento).
2.2 UNA ARQUITECTURA MÁS COMPLEJA:
En los últimos años, el modelo de tres niveles fue reevaluado y un nuevo concepto
basado en la escalabilidad y mantenimiento fue creado. Surge una solución de
cuatro niveles que implica el uso de una pieza de middleware, típicamente llamado
un servidor de aplicaciones, entre el servidor Web y el servidor de aplicaciones de
base de datos.
Esta nueva capa de abstracción, consta de un servidor que aloja una interfaz de
programación de aplicaciones (API) para exponer la lógica de negocio y procesos
de negocio para uso de los servidores Web. Además, el servidor de aplicaciones
19
pueden hablar con varias fuentes de datos, incluyendo bases de datos, mainframes
u otros sistemas de legado.
Figura 6: Arquitectura de cuatro capas en aplicaciones web.
Fuente: El autor
En la Figura 6, el navegador Web (presentación) envía peticiones a la capa
intermedia (lógica), que a su vez llama a la API expuesta del servidor de
aplicaciones que residen en la capa de aplicación y es el que realiza las consultas
y actualizaciones de la base de datos (almacenamiento).
El usuario ejecuta en el navegador de Internet una consulta y se conecta a
http://www.victima. com. El servidor web que reside en la capa de lógica carga una
secuencia de comandos del sistema de archivos y se lo pasa a través de su motor
de scripting en el que se analiza y se ejecuta El script llama a una API expuesta
desde el servidor de aplicación que reside en la capa de aplicación. El servidor de
aplicación abre una conexión con el nivel de almacenamiento usando un conector
de base de datos y ejecuta una instrucción SQL en la base de datos.
Se devuelven los datos al conector de la base de datos y al servidor de aplicaciones
que implementa las reglas de la lógica de aplicación o negocio antes de devolver
los datos al servidor Web que aplica un retoque de (lógica final) antes de la
presentación de los datos en formato HTML en el navegador Web del usuario. La
presentación de la web se hace mediante HTML que le muestra al usuario una
representación gráfica de la código Esto sucede de manera instantánea y es
transparente para el usuario.
Pero por que se dividen las tareas en capas o niveles?: El concepto básico de una
arquitectura estratificada implica dividir una aplicación en trozos lógicos, o niveles,
cada uno de los cuales se le asignan roles. Las capas se pueden localizar
20
(implementar) en diferentes máquinas o en la misma máquina de forma virtualizada
o separados el uno del otro.
Ventajas: Cuando se dividen las responsabilidades de una aplicación en múltiples
capas hace que sea más fácil de escalar la aplicación, permite una mejor
distribución de las tareas de desarrollo entre los desarrolladores, y hace una
aplicación más fácil de leer dándole incluso enfoque de rehúso y de adaptabilidad a
otras aplicaciones existentes o nuevas.
Le da características de robustez a las aplicaciones permitiendo eliminar puntos de
fallos críticos y únicos que se puedan presentar si la aplicación sufre una caída total
o irreparable.
Por ejemplo, la decisión de cambiar de proveedor de bases de datos debe requerir
nada más que algunos cambios en las porciones aplicables de la capa de aplicación,
la presentación y los niveles lógicos.
2.3 EL PROYECTO OWASP Y LAS VULNERABILIDADES EN APLICACIONES
WEB
Antes de dar inicio y entrar en la temática fuerte de la seguridad en aplicaciones
web, se trae a la lectura como referencia el proyecto OWASP: El proyecto abierto
de seguridad en aplicaciones Web (OWASP por sus siglas en inglés) es una
comunidad abierta dedicada a habilitar a las organizaciones para desarrollar,
comprar y mantener aplicaciones confiables.
Se citan textualmente apartes del mismo proyecto que dejan claro que la temática
es amplia y de trabajo continuo. Este módulo académico que se presenta acá, no
pretende abarcar la totalidad de las vulnerabilidades, estrategias, escenarios,
herramientas y metodología usados tanto para detectar, diseñar, proveer,
monitorear y corregir fallos de seguridad en aplicaciones web. Es un referente para
que el profesional tome como partida y apoyo para el análisis de las temáticas que
acá se presentan.
Existen otros proyectos que tratan este tema y de los cuales también se han
referenciado lecciones en este módulo, pero con OWASP se pretende que el
estudiante lo identifique y derive sus conclusiones, aportes y posiciones con
referencia a la temática.
Que mejor que apoyarse en esa experiencia de una comunidad de desarrolladores,
empresas, corporaciones, casas fabricantes de software, profesionales de la TICs,
para citar este inicio que nos ubica en el contexto de la seguridad en la web y que
se aborda de manera académica, objetiva, investigativa y como un ejercicio
profesional en el área de la seguridad, así: No sin antes referenciar el “OWASP top
21
10 de 2013” que lo encuentran acá:
continuar.
13
y que es de necesaria lectura antes de
Figura 7: OWASP – Top 10 - 2013
Fuente: http://owasptop10.googlecode.com/files/OWASP%20Top%2010%20-%202013%20%20RC1.pdf Con licencia Creative Commons
La guía completa del Top 10, es parte del anexo de este módulo:
No se detenga en el Top 10. Existen cientos de problemas que pueden afectar la seguridad
general de una aplicación web tal como se ha discutido en la Guia de Desarrollo OWASP.14 Este
documento es de lectura esencial para cualquiera desarrollando aplicaciones web hoy en día. Una
efectiva orientación en como encontrar vulnerabilidades en aplicaciones web es suministrada en la
13
Disponible en internet con acceso y formato pdf
<https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project>
14
Disponible en internet desde <https://www.owasp.org/index.php/Guide>
22
Guia de Testeo OWASP15 y la Guia de Revision de Codigo OWASP,16 las cuales han sido
significativamente actualizadas desde la última edición del Top 10.
Cambio constante. Este Top 10 continuara cambiando. Incluso sin cambiar una línea de código
en su aplicación, la misma puede ser vulnerable a algo que nadie haya pensado anteriormente. Por
favor revise los consejos detallados al final del Top 10 “Próximos pasos para Desarrolladores,
Verificadores y Organizaciones” para mayor información.
Piense positivamente. Cuando se encuentre preparado para dejar de buscar vulnerabilidades
y focalizarse en establecer controles seguros de aplicaciones, OWASP ha producido el Application
Security Verification Standard (ASVS)17 como una guía para organizaciones y revisores de
aplicaciones que detalla los controles de seguridad a verificar en una aplicación.
Utilice herramientas inteligentemente. Las vulnerabilidades de seguridad pueden ser
bastante complejas y encontrarse ocultas en montañas de código. En virtualmente todos los casos,
el enfoque mas eficiente y económico para encontrar y eliminar estas vulnerabilidades es asignar
expertos armados de buenas herramientas para realizar esta tarea.
SDLC Seguro. Aplicaciones Web seguras son solo posibles cuando se utiliza un SDLC Seguro.
Para orientación sobre como implementar un SDLC Seguro, leer el Open Software Assurance
Maturity Model (SAMM),18 el cual es una actualización significativa al OWASP CLASP Project.19
2.4 SNIFFEO Y CODIFICACIÓN DE CABECERAS:
La temática que hasta aquí se ha tratado, ha descrito de forma general el protocolo
HTTP y las negociaciones entre cliente-servidor que se establecen a través de
cabeceras, “los HTTP Headers.”
Para poder trabajar con las cabeceras necesitaremos de una serie de utilidades
cuya finalidad es la de interceptar las cabeceras que manda nuestro navegador,
para permitir su análisis o su modificación. Estas utilidades se denominan sniffers,
y funcionan interceptando el tráfico que pasa por el puerto 80 (HTTP).
Estas herramientas pueden venir en forma de Addons o Plugins para diferentes
navegadores, que entre los cuales destacan para FireFox, Tamper Data y Live
HTTP Headers, o también pueden ser programas independientes propietarios o de
15
Disponible en internet desde <https://www.owasp.org/index.php/Category:OWASP_Testing_Project>
Disponible en internet desde
<https://www.owasp.org/index.php/Category:OWASP_Code_Review_Project>
17
Disponible en internet desde <https://www.owasp.org/index.php/ASVS>
18
Disponible en internet desde
<https://www.owasp.org/index.php/Category:Software_Assurance_Maturity_Model>
19
Disponible en internet desde <https://www.owasp.org/index.php/Category:OWASP_CLASP_Project>
16
23
código abierto. Estas herramientas son fundamentales para el trabajo con las
cabeceras http.
Existen otras formas de trabajar con las cabeceras sin tener que sniffearlas para
modificarlas, como por ejemplo aprovechar algún programa que haga
negociaciones TCP, como por ejemplo pueden ser Telnet, Putty, o los populares
Netcat y CryptCat.
2.5 INYECTANDO CÓDIGO
Cuando se hace un proceso de sniffing a las cabeceras HTTP, se puede hacer con
dos objetivos: Observar los datos que se envían y de ahí buscar un posible CSRF
(Cross Site Request Forguery) o bien para modificar la cabecera y añadirle
código malicioso, el cual provoque en una aplicación vulnerable una respuesta
que no era la que debía.
Se inyecta código a las cabeceras y si se manejan datos procedentes de la cabecera
sin realizarles un correcto filtrado, es ahí cuando una aplicación web se vuele más
vulnerable y más cuando sin restricciones o controles de acceso, se le permite al
“front-End” (usuarios hackers) la modificación de la cabecera para que la aplicación
web maneje códigos maliciosos, y ejecute éstos, de esta forma podemos convertir
a las cabeceras como medio para inyectar sentencias SQL maliciosas, JavaScript,
etc. para realizar diversos ataques a una web.
En las siguientes lecciones, se detallarán los procedimientos para detectar
inyecciones de código como el “SQL Injection”
2.6 CR/LF INJECTIONS:
Esta vulnerabilidad hace referencia a un término común: (HTTP Splitting). Hace
referencia al manejo de cabeceras con caracteres especiales que trabajan en
conjunto llamados CR (Carriage Retun) y LF (Line Feed) que básicamente traducen
un “Salto de línea” en el momento de una conversación o salto de cabecera. En
programación las señales de salto de línea se plasman con los caracteres de escape
\r\n.
Una aplicación es vulnerable a CR/LF injection cuando no filtra de forma correcta
las variables, permitiendo escanear (indagar) en ellas valores prohibidos como lo
son éstos. Esta vulnerabilidad implica el que un usuario malintencionado pueda
24
manipular a su antojo las cabeceras de un servidor y más si es bien conocido que
la finalización de una cabecera se señala con un doble salto de línea
Es aquí cuando un atacante identificando ese salto de línea final, provocará la
“partición” de la cabecera, permitiendo colocar junto al doble salto de línea el código
que él considere oportuno, normalmente será una segunda cabecera.
A la técnica de “truncar” o “cortar” una cabecera para controlar una respuesta del
servidor se la denomina “HTTP Splitting”. Una técnica derivada del HTTP Splitting
puede ser lo que se denomina “File Download Injection” y consiste en infectar con
el código que nosotros deseemos una descarga.
2.7 XSS Y SQL INJECTIONS
Las fallas de inyección, ya sea de SQL, LDAP o comandos del sistema operativo,
son comunes en aplicaciones Web. La inyección ocurre cuando los datos
proporcionados por el usuario son enviados e interpretados como parte de una
orden o consulta. Los atacantes interrumpen el intérprete para que ejecute
comandos no intencionados proporcionando datos especialmente modificados.
Esta técnica es usada para explotar aplicaciones web que no validan la información
suministrada por el cliente, para generar consultas SQL maliciosas. El proceso de
inyección requiere de verificar cada parámetro que se envía y se recibe, lo que suele
no ser sencillo y muchas veces se puede creer que no es vulnerable una aplicación
que lo es. Se debe chequear cada parámetro de cada script de cada aplicación.
Para el siguiente ejemplo en la que se inyecta el comando (se solicita una
información):
SELECT id FROM usuarios WHERE user=‘$f_user’
AND password=‘$f_pass’;
Si no se identifica un usuario (campo en blanco en la validación) o si se typean los
parámetros predeterminados de los usuarios: admin, administrator, guest, invitado
entre otros, al modificar la injección de SQL por:
$f_user= “‘ or 1=1 --”
en las que se usa:
; para ejecutar múltiples queries
-- para comentar el final del query
construcciones del tipo ´ or ´´=´
construcciones del tipo numero or 1=1
Se podría explotar esta vulnerabilidad de validación de usuario e ingresar al sistema
25
Ataques de Cross−Site Scripting: Las fallas de XSS ocurren cuando una
aplicación toma información originada por un usuario y la envía a un navegador Web
sin primero validar o codificar el contenido. XSS permite a los atacantes ejecutar
secuencias de comandos en el navegador Web de la víctima que pueden secuestrar
sesiones de usuario, modificar sitios Web, insertar contenido hostil, etc.
Este tipo de ataques han sido explotados para crear poderosos ataques de
phishing y de abusos en el navegador donde los atacantes típicamente se valen
de código HTML y de scripts ejecutados en el cliente.
“Desde la liberación del lenguaje JavaScript, se previeron los riesgos de permitir a
un servidor Web enviar código ejecutable al navegador. Un problema se presenta
cuando los usuarios tienen abiertos varias ventanas de navegador, en algunos
casos un script de una página podría acceder datos en otra página u objeto,
observando el peligro de que un sitio malicioso intentara acceder datos sensibles
de esta forma. “20
Política same−origin: Esencialmente esta política permite la interacción entre
objetos y páginas, mientras estos objetos provengan del mismo dominio y en el
mismo protocolo. Evitando así que un sitio malicioso tenga acceso a datos sensibles
en otra ventana del navegador vía JavaScript. A partir de entonces se han
introducido otros mecanismos y políticas de control en los navegadores y en los
lenguajes en el lado del cliente, para proteger a los usuarios de sitios maliciosos.
Las vulnerabilidades XSS pueden ser vistas como técnicas de evasión de las
políticas de protección.
La mayoría de casos la variable vulnerable (en el caso de los XSS) suele ser alguna
que se utiliza para mostrar alguna información tipo IP, User-Agent y demás. Por eso
la mayoría de webs que ofrecen servicios adicionales como el de mostrar el nombre
de usuario logueado, mostrar la IP, mostrar zonas horarias, mostrar datos de fecha
de inicio de sesión entre otros, datos que suelen ser vulnerables cuando se
modifican las cabeceras.
2.8 PHP INJECTIONS
Existen algunos ataques que aprovechan la posibilidad de la aplicación de subir
archivos al servidor. Estos ataques funcionan de la siguiente manera:
Generalmente PHP almacena los archivos subidos en una carpeta temporal, sin
embargo es común en las aplicaciones cambiar la localización del archivo subido a
una carpeta permanente y leerlo en la memoria. Al hacer este tipo de
20
Tomado de: UNAM CERT; “Aspectos Básicos de la Seguridad en Aplicaciones Web”
26
procedimientos debemos revisar el parámetro que hará referencia al nombre del
archivo, ya que puede ser truqueado a modo de apuntar a archivos de configuración
del sistema (como /etc/passwd en sistemas Unix).
Las aplicaciones invocan comandos externos a través de un intérprete de
comandos. Según la forma de invocarlos, es posible que un usuario malicioso logre
ejecutar un comando externo distinto al esperado. Ej.: uso del caracter “;” en Unix
o “&” en Windows.
2.9 BANNER GRABBING
Se le suceder que el sitio web despliegue banners que emiten información del sitio.
De estos banners no hay que fiarse si no se tienen definidos los scripts filtrados para
los usuarios que accedan al sitio. Se define básicamente banner a la información
(aplicación, versión, plataforma sobre la que corre) que trasmite un servicio cuando
se trabaja sobre en el.
Un ejemplo de detección de esta información (se revela el servicio que está
disponible, el tipo de servidor montado y el puerto 21 al que responde) es el acceso
a servicios ftp. La figura 8 muestra un rastreo al servicio de alojamiento de archivos
(descargas) muy típico del sitio www.hp.com.
Figura 8: Banner detección por ftp
Fuente: El autor
En la figura 9 se aplica un banner grabbing hacia la web www.unad.edu.co:
Información del tipo de servidor, versión sistema operativo sobre el cual se ejecuta,
versión de PHP entre otros.
27
Figura 9: Banner grabbing por método HEAD
Fuente: El autor
El ataque consistiría en obtener los encabezados por HEAD desde un navegador y
editaros para reenviar peticiones y modificar comportamientos del sitio.
2.10 HTTP FINGERPRINTING
Se trata entonces de obtener información de un sistema concreto y de alguna
vulnerabilidad específica. Esto se hace obteniendo su huella identificativa respecto
de la pila TCP/IP de los equipos atacados. Esta técnica es la que se conoce como
Fingerprinting y la información que puede brindar esta técnica dentro de las muchas
opciones que tiene de descubrir datos de la víctima es la de permitir descubrir de
forma muy fiable el sistema operativo que se ejecuta en la maquina analizada. La
aplicación de esta técnica consiste en la ejecución de 4 tests (orden de campos al
hacer un HEAD, respuesta ante un DELETE, respuesta ante una versión del
protocolo HTTP incorrecta, y por último, la respuesta que da el servidor ante un
protocolo erróneo).
Con los resultados de los mencionados cuatro tests, podremos diferenciar
perfectamente entre servidores Apache y los IIS, ya que de cada uno se extrae un
resultado diferente ante cada uno de los tests. Además de las versiones de sistema
operativo, puertos abiertos y capas de seguridad implementadas al protocolo HTTP.
La información que puede brindar esta técnica dentro de las muchas opciones que
tiene de descubrir datos de la víctima son:
28



Permitir descubrir de forma muy fiable el sistema operativo que se ejecuta en
la maquina analizada.
Identificar el tipo de servidor y la versión en la que se soporta el servicio
El tipo de servicio que se ejecuta y la versión.
Una de las muchas técnicas que existen para levantar este tipo de información con
respecto al levantamiento de una huella identificativa, es el uso de “Escuchas de
Red” o escaners de puertos como la herramienta nmap, con miras a establecer un
posible ataque. En la Figura 10 se muestra un escaneo a un host de una red local
en busca de su huella identificativa. Se ha identificado información con el número
de puertos cerrados que tiene la víctima, en este caso con la dirección IP 10.1.1.16,
los puertos en servicio abiertos, la identificación del sistema Operativo y la dirección
física de la interfaz de red. Se ha ejecutado en una consola haciendo uso de nmap
como herramienta de exploración.
Figura 10: Uso de un “Escucha de Red” para hallar huellas identificativas de un host en la red
Ethernet
Fuente: El autor
En la Figura 11 se ha realizado la inspección de la huella identificativa de un sistema
remoto en la web. Es el caso de www.unab.edu.co haciendo uso de un Sniffer como
Ettercap. Se identifica el Sistema Operativo del Servidor, en este caso FreeBSD 4.3
29
que da el servicio, el puerto que está activo con el servicio http en el puerto TCP 80
y el administrador Web que da el servicio: Oracle Aplication Server.
Figura 11: Uso de un “Escucha de Red” para hallar huellas identificativas de un host remoto
Fuente: El autor
Una de las herramientas para realizar estas detecciones y ataques es usar “hping2,
se puede: evaluar el desempeño de la red utilizando diferentes protocolos, tamaños
de paquetes, TOS (type of service, o sea, tipo de servicio), y fragmentación; realizar
descubrimiento de camino utilizando el campo MTU (onda traceroute); transferir
archivos (incluso ante reglas de firewall muy fascistas); realizar funciones al estilo
`traceroute' pero bajo diferentes protocolos; detección remota de OS (`remote OS
fingerprinting'); auditar una implementación de TCP/IP (`TCP/IP stack') en particular;
etc. hping2 es una buena herramienta para aprender acerca de TCP/IP.”21
21
<RODES, Michael. Pruebas de seguridad con hping. “El Baile”. Magazine N 38>
30
LECCION 3: HERRAMIENTAS PARA LA DETECCION DE
VULNERABILIDDES
3.1
FIABILIDAD
DE
LOS
VULNERABILIDADES WEB
ANALIZADORES
AUTOMÁTICOS
DE
Se llega al punto de definir qué tan fiables los analizadores automáticos de
vulnerabilidades Web. En primera instancia al gran número de herramientas
existentes, los diferentes escenarios en que se aplican y en sí mismo la casi por
decirlo así infinitas vulnerabilidades que se presentan y la no certeza de detección
y protección total.
Los profesionales informáticos, empresas, administradores de TICS, diseñadores,
desarrolladores e incluso usuarios, concentran sus actividades en aspectos de
seguridad en emplear, cada vez más, herramientas para facilitar la ardua tarea de
verificar el nivel de seguridad real de una aplicación web. Nombres como Appscan,
Webinspect, Acunetix y otros tantos son cada vez más conocidos y utilizados por
los profesionales en cualquier proyecto de auditoría o de pentest. Las ventajas son
innumerables pero también los riesgos, y es necesario conocerlos y valorarlos a la
hora de decidir el presupuesto de que se dispone para analizar si una página Web
puede ser comprometida, desde el punto de vista de la seguridad, o si, por el
contrario, cumplirá con su cometido a la perfección.
Por Escáner Web se entiende cualquier programa con la capacidad de analizar la
seguridad de una aplicación o página Web, es decir, debe incluir los siguientes
complementos:
a) Un navegador Web para poder interpretar el código HTML, javascript y demás de
la propia página.
b) Un "spider" o "crawler" para poder detectar toda la estructura de navegación de
la Web (archivos, directorios, ficheros de imágenes, etc.)
c) Un escáner propiamente dicho para hallar fallos de configuración y
vulnerabilidades a nivel Web.
d) Un interface de usuario amigable y fácil de utilizar, que permita configurar de
forma sencilla la aplicación y todos los parámetros de análisis.
e) Un generador de reportes que incluya las vulnerabilidades y errores encontrados,
su posible impacto para la aplicación Web y la forma de corregir los mismos de
forma genérica.
31
Existen multitud de herramientas así, comerciales de pago y con licencia GNU, para
Windows y para Linux, más sencillas y más completas, de desarrolladores
conocidos como RedHat, Oracle, Cisco.
3.2 VENTAJAS Y BENEFICIOS
1. Reducción de costes: el precio y el esfuerzo en horas de revisar una
aplicación Web se reducen considerablemente utilizando herramientas
comerciales del tipo de las anteriormente nombradas, Acunetix, Appscan,
Webinspect, etc. A pesar de que el precio por licencia de uso es importante,
basta realizar unos pocos análisis y revisiones para amortizar la herramienta.
Además, existen incluso aplicaciones que no son comerciales sino Open
Source que también son importantes, es el caso de Wapiti22, Skipfish, Nikto,
etc.
2. Disponibilidad y automatización: al poder programar y automatizar
cualquier análisis de seguridad, se puede repetir tantas veces como sea
necesario para verificar que se han corregido los errores y vulnerabilidades
ya detectados. También se puede definir una frecuencia determinada para
que se revise una página Web concreta una vez al mes, por ejemplo, y
comprobar así si ha habido cambios en la misma y detectar incluso
anomalías que pudieran indicar un ataque a la página en forma de intrusión
o Denegación de Servicio (DoS). Si en un escaneo programado la página no
está operativa puede ser debido a un ataque de DoS o un problema de
disponibilidad no controlado.
3. Constante revisión y mantenimiento de la aplicación: La mayoría de
herramientas lo hacen todo, revisan, analizan detectan las vulnerabilidades
y errores de configuración, sugieren soluciones, generan los informes y
reportes. Es trabajo del profesional analizar que herramienta aplicar y si le
ofrece estos servicios.
22
Disponible en internet dese <http://hacktimes.com/vulnerabilidades_en_aplicaciones_web_-_wapiti>
32
3.3 INCONVENIENTES Y DESVENTAJAS
1. Gran cantidad de falsos positivos y falsos negativos: dos peticiones
iguales en momentos diferentes a la aplicación Web por parte del escáner,
pueden generar respuestas distintas que la herramienta puede interpretar de
forma errónea y reportar como una vulnerabilidad inexistente. Anuncios,
dependencias con otras páginas y aplicaciones, usuarios conectados
interactuando con la Web analizada, etc. En multitud de ocasiones la revisión
de seguridad se limita a pasar la herramienta automática y no se verifica la
existencia de las vulnerabilidades reportadas, pudiendo ser falsos positivos
o indicios de otras vulnerabilidades sí presentes pero no detectadas por la
herramienta. También, otras veces, la página Web analizada presenta
diverso código y contenido inútil para revisar la seguridad de la misma que
una persona puede identificar de forma rápida y sencilla, pero que no lo es
tanto para un ordenador y la correspondiente aplicación automática. Un
ordenador no es capaz de entender la lógica de la aplicación Web, y el
escaneo de seguridad se basa en comprobar la respuesta de la página Web
ante los controles y tests que tiene predefinidos la herramienta de análisis
como vulnerabilidades ya conocidas.
2. Imposibilidad de encontrar 0days y errores de diseño: al basarse el
análisis en comprobar la respuesta de la página Web ante los controles y
tests que la herramienta tiene predefinidos como vulnerabilidades ya
conocidas, es muy difícil detectar la presencia de errores no conocidos
(0days) y que no están incluidos en la base de datos del escáner Web con el
que se realiza la revisión de seguridad. Además, es complicado que un
ordenador pueda entender la lógica de la aplicación, cosa que para un
técnico con conocimientos no supone ningún reto.
3. Problemas con vulnerabilidades de aplicación conocidas como Cross
Site Scripting (XSS) y SQL Injection (SQLi): estas vulnerabilidades en
todas sus modalidades (Blind SQLi, Stored XSS, reflected, etc.) presentan
multitud de patrones de ataque, y si además se encuentran por en medio
mecanismos de seguridad como WAF, IPS, firewalls y otros, las herramientas
automáticas no son capaces de modificar sus peticiones para evadir
dichos filtros que plantean estos dispositivos de seguridad. En diversas
ocasiones, se ha reportado una vulnerabilidad de SQLi estándar como Blind
SQL y la solución para corregirla es ligeramente distinta. Otro problema es
33
que numerosas herramientas automáticas no detectan como ataque de SQLi
una vulnerabilidad en "ORDER BY", además es diferente la forma de tratar
esta vulnerabilidad en función del motor de base de datos existente, ya sea
MS SQL, MySQL, PostgreSQL, etc.
4. Riesgos directos para la aplicación Web: ya no solo por el límite de
peticiones que una herramienta automática puede lanzar en paralelo contra
la aplicación Web que puede saturar a la misma y dejarla inaccesible para
sus usuarios legítimos, sino también por el tipo de patrones y pruebas que
tiene definidas para encontrar vulnerabilidades. Una de esas pruebas
consiste en utilizar la conocida sentencia para detectar vulnerabilidades de
SQLi, "or 1=1--". En una petición de "SELECT" no hay problema pero si eso
mismo acompaña a una petición de "DELETE" quedaría una cosa parecida
a "DELETE FROM users where id=1 or 1=1 --" con lo que esto supondría
para la aplicación Web. Un técnico no usaría nunca este método de ataque
pero aún existen muchas herramientas que se sirven de ella como patrón de
ataque
Resumiendo, para entornos productivos, lo más recomendable para disponer de un
nivel aceptable de seguridad en las aplicaciones Web es combinar escaneos con
herramientas automáticas y detectar aquellas vulnerabilidades de bajo nivel ya
conocidas, y disponer también de técnicos de seguridad con amplios conocimientos
que puedan realizar pruebas manuales específicas para cada aplicación. No es lo
mismo revisar un CMS conocido tipo Wordpress, Joomla, etc. que una página Web
sin contenido dinámico ni base de datos detrás. Un técnico puede ajustar las
pruebas y los análisis a realizar en función de las necesidades de cada caso, se
trata de soluciones no industrializadas
3.4 CRITERIOS DE VALORACIÓN PARA HERRAMIENTAS DE SEGURIDAD
WEB
Continuación se presenta un análisis de las principales herramientas usadas para
detección y gestión de riesgos en seguridad de aplicaciones web. Tanto
herramientas de código privado como de código libre. Dentro de los parámetros que
se han tenido en cuenta para esta evaluación, se han tenido en cuenta que las
vulnerabilidades y las herramientas se han aplicado en sistemas con seguridad
perimetral, interna y de entorno básicas, con conexiones de internet libres sin
restricciones, como las que tienen la mayoría de usuarios.
El criterio de valoración fue la primera serie de características de auditoría de cada
herramienta soporta. Una herramienta automatizada no puede detectar una
exposición que no puede reconocer (al menos no directamente, y no sin un análisis
34
manual), y por lo tanto, el número de características de auditoría afectará la cantidad
de exposiciones que la herramienta será capaz para detectar (suponiendo que la
función de auditoría se aplican adecuadamente, que los puntos vulnerables de
entrada será detectado y que la herramienta se encargará de escanear los vectores
de entrada vulnerables).
Las herramientas evaluadas fueron a nivel de aplicación, en cuanto a la detección
de los riesgos que se podrían presentar para atacar a la aplicación web, y el ataque
a los clientes legítimos.
3.4.1 Herramientas Comerciales: El número de funciones de auditoría en
escáneres de aplicaciones Web - Herramientas Comerciales.
Figura 12: Funciones de auditoría en escáneres de aplicaciones web. Herramientas comerciales
Fuente: <Proyecto OWASP>
3.4.2 Herramientas de código Abierto: El número de funciones de auditoría en
escáneres de aplicaciones Web - Herramientas de código abierto.
35
Figura 13: Funciones de auditoría en escáneres de aplicaciones web. Herramientas de código
abierto
Fuente: <Proyecto OWASP>
3.4.3 Herramientas de auditoría aplicadas a SQL INJECTION
El análisis aplica a las herramientas que pueden detectar de SQL Injection, una de
las exposiciones más famosas en ataques comúnmente aplicado en los escáneres
de aplicaciones web. El análisis siguiente es producto de la evaluación de que tan
buenas son las herramientas en la detección de riesgos de inyección SQL, partiendo
de un punto sin ningún tipo de restricciones que pueden impedir que la herramienta
funcione correctamente.
36
La evaluación se realizó en una aplicación que utiliza MySQL 5.5.x como su
repositorio de datos, y por lo tanto, reflejará la exactitud de la detección de la
herramienta cuando se escanean los repositorios de datos similares.
La barra azul representa el caso vulnerable prueba de precisión de detección,
mientras que la barra roja representa falsas categorías positivas detectadas por la
herramienta.
Herramientas de código privado
Herramientas de código abierto
Figura 14: Funciones de auditoría en escáneres de aplicaciones web para SQL Injection
Fuente: <Proyecto OWASP>
37
3.4.4 Herramientas de auditoría aplicadas a XSS (Ataques de Cross−Site
Scripting)
Para el segundo ataque más común implementado en los escáneres de
aplicaciones web se aplicó le mismo procedimiento que en los atajes de SQL
Injection.
Herramientas de código privado
Herramientas de código abierto
Figura 15: Funciones de auditoría en escáneres de aplicaciones web para XSS
Fuente: <Proyecto OWASP>
38
Continuando con la evaluación de herramientas y aplicando ciertos criterios de
efectividad y de aplicabilidad, se adjunta como ANEXOS de este módulo, los
análisis de ciertas variables que son de importancia analizarlas.
Todas estas herramientas son tan solo un puñado entre la cantidad de estrategias,
métodos y utilidades que se pueden seguir para realizar la explotación de las
vulnerabilidades en una aplicación web. El objetivo es obtener información de la
aplicación, tratar de realizar una evaluación de la vulnerabilidad con el fin de obtener
información sobre los exploits que se pueden utilizar. Una vez hecho esto, explotar
las vulnerabilidades y si es necesario, cargar un backdoor o un script que determine
la vulnerabilidad encontrada.
Referencio el WAVSEP (The Web Application Vulnerability Scanner
Evaluation Project) como una aplicación web vulnerable diseñado para ayudar
a evaluar las características, la calidad y la precisión de los escáneres de
vulnerabilidades de las aplicaciones web.23
LECCIÓN 4: MITOS EN LA SEGURIDAD WEB
Siempre se cree que las vulnerabilidades más comunes como SQL Injection, DDoS
y XSS, son las que afectan a las aplicaciones web. También que los errores son por
deficiencias en la programación e implementación de estas aplicaciones. Se
referencian ciertos mitos que desmienten estas apreciaciones y que muestran que
tan lejos estamos de la realidad del entorno en que las aplicaciones web se aplican
y las vulnerabilidades que las rodean:


23
El cliente hace las peticiones básicas del sitio y accede a los links que solo
le referencia la página o sitio (se asume que el cliente no “escarba” dentro
del sitio).
HTML admite el uso de tags (etiquetas) que manipulan la entradas a la
aplicación, por ejemplo si la aplicación utiliza campos ocultos para enviar
información sensible estos pueden ser fácilmente manipulados desde el
cliente.
Disponible en internet desde <http://code.google.com/p/wavsep/>
39



La validación solo se puede realizarse únicamente del lado del cliente con
JavaScript (esto es falso) si no se efectúa ninguna validación del lado del
servidor, cualquier atacante que evite esta validación (para nada difícil de
lograr) tendrá acceso total a toda la aplicación.
Cuando se tiene un sistema y entorno seguro no hay riesgo de
vulnerabilidades. El uso de firewalls es suficiente - como explicamos
anteriormente, si el firewall tiene que habilitar los puertos 80 y/o 443 para que
la aplicación sea accesible al exterior, no podrá hacer nada para detectar
entradas maliciosas del cliente, y por supuesto no es protección contra
ataques internos.
El uso de SSL es una solución suficiente - SSL simplemente cubre el
request/response HTTP dificultando la intercepción del tráfico entre cliente y
servidor, pero no agrega seguridad al servidor ni evita el envío de código
malicioso desde el cliente.
Otro Mito es el que los desarrolladores y técnicos encargados de la seguridad
enmarcan dentro de solo las “supuestas” cinco vulnerabilidades más comunes,
dejando a un lado las estrategias de prevenir, analizar, detectar y sobre todo diseñar
aplicaciones expuestas a otro tipo de vulnerabilidades.
Figura 16: Categoría de Vulnerabilidades
Fuente: El Autor
40
4.1 AUDITORÍA Y CONTROL DE VULNERABILIDADES:
Muchas empresas sólo realizan el escaneo de vulnerabilidades para los periodos
de las famosas auditoria seguridad informáticas – y quizás rara vez, generalmente
como una vez al año. Este es un gran error; no sólo se deben realizar las
actualizaciones a las redes de forma frecuente, sino que hay que saber que nuevas
vulnerabilidades se descubren semanalmente por no decir de forma diaria. Para
organizaciones muy grandes, es importante realizar el escaneo de vulnerabilidades
como parte del análisis de seguridad regular con una mayor cantidad de escaneos,
mucho más frecuente (un ejemplo podría ser realizar el escaneo de
vulnerabilidades, de forma exhaustiva, cada 4 meses, o sea unas 3 veces al año).
4.2 PUNTOS DÉBILES:
Los hackers siempre quieren encontrar el acceso más fácil a las redes de las
organizaciones valiéndose de una variedad de técnicas diferentes. Pero una
característica que todos los atacantes “hackers” tienen en común es su deseo de
buscar los puntos débiles de una red, cuál de ellos puedan usar para lanzar ataques
con el mínimo esfuerzo.
Un ladrón normal busca una puerta abierta en una casa, un ladrón de autos busca
el vehículo en donde el conductor se haya dejado la llave olvidada, un hacker puede
examinar múltiples redes para encontrar la que le proporcione un acceso rápido y
simple. Esta situación plantea un desafío para los administradores de redes que,
para combatir a los hackers, deben comenzar a pensar como ellos.
Con referencia a lo anterior, un aspecto que siempre se debe cuidar es evitar que
en nuestro sistema se Exploren puertos:
Exploración de puertos: El escaneo o exploración de puertos permite determinar
las características de una red o sistemas remotos, con el objetivo de identificar los
equipos disponibles y alcanzables desde Internet, así como los servicios que ofrece
cada uno. Se puede llegar a conocer los sistemas existentes, los servicios ofrecidos
por ellos, cómo están organizados los equipos, que sistemas operativos ejecutan y
cuál es el propósito de cada uno. Una herramienta de código abierto que sirve para
efectuar rastreo de puertos es nmap.
Con la herramienta hping2 en el modo SCAN (-8 --scan): Permite realizar análisis
de puertos, se pueden especificar distintas opciones para los puertos, rangos,
excluir determinados puertos, los puertos incluidos en /etc/services, etc.
41
4.3 TIPOS DE ESCANERS:
Parte de los mitos que rodean la seguridad en aplicaciones web, está el que aplican
los técnicos, administradores de red, desarrolladores y profesionales, que les llevan
a pensar que solo se deben implementar escáneres que detecten riesgos en las
capas superiores del modelo OSI, La seguridad de la información es un conjunto
engranado que enmarca todos los aspectos en comunicación, transferencia, trato
de información. Es por ello que se deben aplicar escáner de este tipo para que
medianamente se puedan minimizar riesgos y maximizar la seguridad:
Escáner de Red: escáner de uso general usado para encontrar vulnerabilidades
potenciales en la red de la empresa. (También se podría incluir a los escaners de
redes VoIP)
Escáner de Puerto: software diseñado para buscar en una red los puertos abiertos
que podrían ser usados por los atacantes como puntos de entrada.
Escáner para la Seguridad de aplicaciones web: Permite a los negocios realizar
evaluaciones de riesgo para identificar las vulnerabilidades en aplicaciones web y
así evitar ataques. Este tipo de escaners deben ser utilizados también por el
departamento de desarrollo (programación) de una aplicación web, ayudando así a
encontrar todos los bugs que puedan generarse durante la creación de la aplicación,
antes de poner la aplicación a un entorno de producción.
Escáner de Base de datos: permite encontrar puntos débiles en bases de datos,
protegiendo así el activo más importante de una empresa.
LECCIÓN 5: SISTEMA DE LOGS
La auditoría y el registro de los eventos que suceden al ejecutar nuestras
aplicaciones nos permite monitorizarlas y detectar posibles intentos de ataques o
intrusiones.
Un log es un registro oficial de eventos durante un rango de tiempo en particular.
Para los profesionales en seguridad informática se utiliza para registrar datos o
información sobre quién, qué, cuándo, dónde y por qué un evento ocurre en un
dispositivo en particular o aplicación.
42
La mayoría de los logs son almacenados o desplegados en el formato estándar, el
cual es un conjunto de caracteres para dispositivos comunes y aplicaciones. De esta
forma cada log generado por un dispositivo en particular puede ser leído y
desplegado en otro diferente.
También se le considera como aquel mensaje que genera el programador de un
sistema operativo, alguna aplicación o algún proceso, en virtud del cual se muestra
un evento del sistema. 24
Los sistemas de los deben garantizar la monitorización de los eventos que se
producen en la aplicación y asegurar la información de los ficheros de registro.
5.1 FORMATO DEL FICHERO DE LOG:
Por norma general, los servidores web guardan los registros en un formato llamado
Common Log Format. Los servidores que no usan dicho formato por defecto suelen
incluir una opción para usarlo. El formato Common Log Format es el siguiente:
Figura 17: Formato de fichero de Logs
Fuente: <MATEU, Carles; Desarrollo de aplicaciones web; UOC>
Existen variantes extendidas que se aplican a estos formatos. Variantes que
dependen del sistema usado y que generalmente en herramientas de tipo IDS con
24
Disponible en internet dese
<http://www.juntadeandalucia.es/servicios/madeja/contenido/subsistemas/desarrollo/auditoria-yregistro>
43
código abierto, el administrador de la red puede modificar y parametrizar para
obtener la información deseada.
5.2 ANÁLISIS DEL FICHERO DE LOG:
Mucha información que suministran estos ficheros de registro, no son claros y
requieren que se asocien a otros para poderlos interpretar. Lo más común es
encontrar los siguientes datos:









Número de peticiones recibidas (hits).
Volumen total en bytes de datos y ficheros servidos.
Número de peticiones por tipo de fichero (por ejemplo, HTML).
Direcciones de clientes diferentes atendidas y peticiones para cada una de
ellas.
Número de peticiones por dominio (a partir de dirección IP).
Número de peticiones por directorio o fichero.
Número de peticiones por código de retorno HTTP.
Direcciones de procedencia (referrer).
Navegadores y versiones de éstos usados.
A pesar de que las informaciones que podemos obtener del análisis de los ficheros
de log son numerosas, hay unas cuantas que no podemos obtener. De ellas,
algunas resultarían de especial interés:





Identidad de los usuarios, excepto en aquellos casos en los que el usuario
se identifique por petición del servidor.
Número de usuarios. A pesar de tener el número de direcciones IP distintas,
no podemos saber de forma absoluta el número de usuarios, y más si
tenemos en cuenta la existencia de servidores proxy-cache.
Datos cualitativos: motivaciones de los usuarios, reacciones al contenido,
uso de los datos obtenidos, etc.
Ficheros no vistos
Qué visitó el usuario al salir de nuestro servidor. Este dato quedará recogido
en los log del servidor donde el usuario fue después del nuestro.
El análisis de estos ficheros, es específico para cada aplicación de captura que se
tenga.
44
5.3 PROGRAMAS DE ANÁLISIS DE LOGS
Al igual que las herramientas de detección de vulnerabilidades, y escuchas de red;
son innumerables las que hay disponibles tanto en código propietario como de
código abierto. Los programas de análisis de ficheros de log de código libre y que
se pueden usar para obtener información sobre los registros de visitas de nuestro
sitio web permiten mayor manipulación de la información y tratamiento de la misma.
La mayoría de ellos generan los correspondientes informes en forma de páginas
web que podemos publicar incluso en nuestro sitio web.
Es de mencionar los más comunes que poseen interfaces gráficas y con
características completas en cuanto a registros capturados: Webalizer, Awstats,
Analog,
CAPITULO 2: PROTOCOLOS DE SEGURIDAD PARA APLICACIONES WEB
El análisis de estos protocolos nos ubica especialmente en los procesos que
incluyen transacciones e información que se intercambie en sitios web y que por
supuesto es manejada por aplicaciones web. A continuación se detalla los
principales protocolos de seguridad que se manejan actualmente:
1. Secure Socket Layer (SSL)
Secure Sockets Layer (SSL) es el estándar mundial de la seguridad en la Web. La
tecnología SSL se enfrenta a potenciales problemas derivados de la visualización
no autorizada de información confidencial, la manipulación de datos, la apropiación
de datos, el phishing y los demás tipos de amenazas en los sitios Web. Para ello,
se cifra la información confidencial a fin de que sólo los destinatarios autorizados
puedan leerla. Además de evitar la manipulación de la información confidencial, SSL
contribuye a que los usuarios tengan la seguridad de acceder a un sitio Web válido.
Los principales sistemas operativos, aplicaciones Web y hardware del servidor son
compatibles con SSL, lo que significa que esta poderosa tecnología de cifrado de
SSL ayuda a implementar en cada empresa una manta de seguridad que limita la
responsabilidad para todo el sistema con el fin de afianzar la seguridad de los
clientes, incrementar el porcentaje de transacciones finalizadas y optimizar los
resultados finales. Gracias a los avances recientes obtenidos en la tecnología SSL,
existe una amplia variedad de tipos de SSL.
45
2. Transport Layer Security (TLS)
Para intentar corregir las deficiencias observadas en SSL v3 se buscó un nuevo
protocolo que permitiera transacciones seguras por Internet, sobre todo teniendo en
cuenta que SSL es propiedad de la empresa Nestcape. El resultado de esta
búsqueda fue el protocolo TLS, que permite una compatibilidad total con SSL siendo
un protocolo público, estandarizado por el IETF.
TLS busca integrar en un esquema tipo SSL al sistema operativo, a nivel de la capa
TCP/IP, para que el efecto "túnel" que se implementó con SSL sea realmente
transparente a las aplicaciones que se están ejecutando.
3. Protocolo S-HTTP
El protocolo Secure HTTP fue desarrollado por Enterprise Integration Technologies,
EIT, y al igual que SSL permite tanto el cifrado de documentos como la autenticación
mediante firma y certificados digitales, pero se diferencia de SSL en que se
implementa a nivel de aplicación. Se puede identificar rápidamente a una página
web servida con este protocolo porque la extensión de la misma pasa a ser .shtml
en vez de .html como las páginas normales.
4. Protocolo SET
SET se basa en el uso de certificados digitales para asegurar la perfecta
identificación de todas aquellas partes que intervienen en una transacción on-line
basada en el uso de tarjetas de pago, y en el uso de sistemas criptográficos de clave
pública para proteger el envío de los datos sensibles en su viaje entre los diferentes
servidores que participan en el proceso. Con ello se persigue mantener el carácter
estrictamente confidencial de los datos, garantizar la integridad de los mismos y
autenticar la legitimidad de las entidades o personas que participan en la
transacción, creando así un protocolo estándar abierto para la industria que sirva de
base a la expansión del comercio electrónico por Internet.
46
LECCIÓN 6: TIPOS DE ANÁLISIS:
6.1 METODOLOGÍAS DE ANÁLISIS DE SEGURIDAD WEB:
Las aplicaciones web pueden ser analizadas utilizando distintos enfoques, entre
ellos, es posible distinguir los siguientes:
Análisis estático de código: El analista de seguridad posee acceso al código
fuente de la aplicación, y posiblemente a manuales del usuario pero NO POSEE
acceso a la aplicación en sí misma. Tiene como desventajas: Suele suceder, sobre
todo con sistemas grandes, que la cantidad de información es tanta que puede
resultar muy complejo manejarla. No es posible analizar todas las líneas del
programa en búsqueda de vulnerabilidades, lo cual hace que sea complejo definir
exactamente que secciones analizar.
Cuando no es posible acceder a la aplicación, es común que el analista se "pierda"
entre tanto código.
White box: En este enfoque, el analista de seguridad posee acceso al código fuente
de la aplicación, manuales del usuario, credenciales válidas del sistema,
configuración del servidor Web, y acceso a la aplicación en sí misma. Tiene como
ventajas: Más información disponible, más vulnerabilidades que se pueden
descubrir. Es posible descubrir TODAS las vulnerabilidades (si se tiene el tiempo
suficiente) y no es necesario suponer nada, todo está en el código.
Black box: En este enfoque, el analista de seguridad posee únicamente acceso a
la aplicación. Tiene como ventajas la simplicidad, menor tiempo de testing y provee
un enfoque real, ya que se posee el mismo nivel de conocimiento sobre la aplicación
que un potencial intruso.
Como desventajas están: Vulnerabilidades trivialmente detectables con white box
testing, no pueden ser detectadas con este enfoque.
(if user == ‘tester002’ and password == ‘backdoor__’)
No se aprovecha el código fuente de la aplicación a favor de la seguridad de la
misma.
Dependiendo del tipo de enfoque, se aplican herramientas de análisis como las
vistas en la Lección 2 de este módulo.
47
LECCIÓN 7: ESCALACION DE PRIVILEGIOS EN APLICACIONES WEB:
Su definición es la obtención de los privilegios del administrador. Por ello, debe
existir una política o normativa específica que establezca el uso de mecanismos
para impedir intentos de escalado de privilegios en nuestras aplicaciones web. Se
considera que un sistema aplica políticas para evitar el escalado de privilegios
cuando: No es posible acceder a información del sistema que pueda ser utilizada
para la escalada de privilegios, no es posible ejecutar acciones haciéndose pasar
por otro usuario, etc.
Las pruebas de escalada en aplicaciones web involucran por lo menos dos tipos de
autenticación y validación. Un escenario típico para analizar la jerarquía de
privilegios es si dada una aplicación web que debe tener al menos dos tipos de
credenciales: para un usuario con privilegios elevados y bajos de privilegio. Al iniciar
sesión como usuario con privilegios elevados (por ejemplo, admin), obviamente
tenemos acceso a mucha más información (más elementos de menú, más
funcionalidad, etc.)
El punto de análisis crítico es determinar si esos temas (accesos a servicios) se
puede acceder directamente por el usuario con pocos privilegios. El desarrollador
debe estar seguro que la navegación por toda la aplicación de un usuario con
privilegios bajos es confiable y que abarco cada entrada y salida de la aplicación.
El manejo de estos privilegios suele ser administrado mediante credenciales de
acceso haciendo uso de bases de datos. La exposición de estas credenciales son
“huecos” vulnerables para la aplicación.
Los datos de usuario y password son sensibles, por lo que deben tener garantizada
una atención especial. Su presencia en el código fuente es un riesgo inevitable. Un
caso típico de diseño de software es que sean administradas por un lenguaje de
programación de uso general de código del lado del servidor originalmente diseñado
para el desarrollo web como es PHP. Por conveniencia, estos datos son
almacenados en un archivo como db.inc y suelen tener esta forma:
<?php
$db_user = 'myuser'; $db_pass = 'mypass'; $db_host = '127.0.0.1';
$db = mysql_connect($db_host, $db_user, $db_pass);
?>
48
Al analizar el archivo por default http.confg de Apache, encontramos que el tipo
default es text/plain. Esto significa un riesgo si el archivo db.inc se localiza en la raíz
del directorio. Todo recurso localizado en la raíz tiene una dirección URL y como
Apache no tiene un tipo de contenido asociado a los archivos .inc la respuesta del
servidor será devolver el contenido en texto plano del archivo, en donde se podrían
observar las credenciales del servidor.
La mejor solución a este problema es almacenar los archivos a incluir en otro lugar
fuera del directorio raíz. No es necesario tenerlos en algún lugar en particular en el
sistema de archivos para ser capaces de incluirlos o requerirlos, solo es necesario
garantizar que el servidor tenga privilegios de lectura.
De hecho únicamente se debe localizar en la raíz los recursos que se deseen sean
accesibles, o configurar un directorio público con las respectivas directivas de
seguridad.
LECCIÓN 8: AUTENTICACIÓN Y AUTORIZACIÓN:
Normalmente, casi todas las aplicaciones o sistemas necesitan de los procesos de
autentificación y autorización.
8.1 LA AUTENTIFICACIÓN:
Es el proceso por el cual un usuario o servicio tiene que autentificarse para poder
acceder a ciertos servicios que ofrece nuestro sistema. Existen distintas categorías
de autentificación:
¿Qué sabes?: Información que el usuario conoce, ejemplos: contraseñas,
respuestas a preguntas de indicio a contraseñas.
¿Qué tienes?: Elementos físicos que el usuario posee, como por ejemplo una
determinada tarjeta.
¿Quién eres?: Técnicas biométricas como lectura de retina o huellas dactilares.
El control de acceso es el proceso de decidir si el usuario tiene permiso para ejecutar
algo o no.
HTTP por defecto tiene características de autentificación: autenticación del
protocolo que se utiliza para intercambiar mensajes. Para la mayoría de los servicios
49
Web XML, esto significa aprovechar las características de autenticación disponibles
en HTTP.
Los tipos de autenticación típica son:
Básica: utilizada para identificación no segura o poco segura de clientes, ya que el
nombre de usuario y la contraseña se envían como texto codificado en base 64, que
puede ser fácilmente descodificado. En el caso de IIS, autorizará el acceso a los
servicios Web XML si las credenciales coinciden con las de una cuenta de usuario
válida.
Básica sobre SSL: igual que la autenticación básica, excepto que el canal de
comunicación está cifrado y protege de ese modo el nombre de usuario y la
contraseña. Una buena opción para entornos en Internet; sin embargo, el uso de
SSL influye negativamente en el rendimiento.
Implícita: utiliza algoritmos hash para transmitir las credenciales del cliente de
forma segura. Sin embargo, es posible que no sea compatible con todas las
herramientas de desarrollo para generar clientes de servicios Web XML. IIS
autorizará el acceso a los servicios Web XML si las credenciales coinciden con las
de una cuenta de usuario válida.
Autenticación de Windows integrada: resulta útil sobre todo en entornos en
Intranet. Utiliza NTLM o Kerberos. El cliente debe pertenecer al mismo dominio que
el servidor o a un dominio en el que el dominio del servidor confía. IIS autorizará el
acceso a los servicios Web XML si las credenciales coinciden con las de una cuenta
de usuario válida.
Certificados de cliente a través de SSL: requiere que cada cliente obtenga un
certificado. Los certificados se asignan a las cuentas de usuario, que son utilizadas
por IIS para autorizar el acceso a los servicios Web XML. Se trata de una solución
viable para entornos en Internet, aunque el uso de certificados digitales no está muy
extendido actualmente. Es posible que no sea compatible con todas las
herramientas de desarrollo para generar clientes de servicios Web XML. Sólo está
disponible en conexiones SSL, de modo que el rendimiento puede verse afectado
50
8.2 LA AUTORIZACIÓN:25
Se refiere a la gestión del acceso a los recursos protegidos y al proceso de
determinar si un usuario está autorizado a acceder a un recurso particular. Por
ejemplo, muchas aplicaciones web cuentan con recursos que sólo están disponibles
para los usuarios autenticados, recursos que sólo están disponibles para los
administradores, y los recursos que están disponibles para todos. Así, al establecer
privilegios de acceso a los usuarios podemos asegurar la confidencialidad y
disponibilidad de la información; pero, además, podemos:




Que sólo las personas autorizadas podrán acceder a ciertos recursos
(sistemas, equipos, programas, aplicaciones, bases de datos, redes, etc.) por
sus funciones laborales.
Nos permiten identificar y auditar los accesos realizados, estableciendo
controles de seguridad internos.
Documentar los procedimientos de acceso a las diferentes aplicaciones que
tratan datos personales.
En definitiva, controlar los accesos desde diferentes vertientes: red, sistemas
y aplicaciones.
Se presentan dos categorías de Autorización:
Autorización declarativa: En este tipo de autorización los privilegios son
gestionados un administrador independientemente de manera externa al código de
la aplicación
Autorización programática: En este tipo de autorización las decisiones de
autorización se realizan desde el código fuente de la aplicación.
LECCIÓN 9: EJECUCIÓN DE INSTRUCCIONES DE ACCESO:
9.1 CODIFICACIÓN Y LAS VALIDACIONES DE ENTRADA / SALIDA:
Indican que la debilidad de seguridad más común en aplicaciones web es la falta de
validación apropiada de las entradas del cliente o del entorno. Teniendo en cuenta
una serie de indicaciones y consejos a la hora de codificar nuestras aplicaciones
podremos evitar problemas como la inyección de código SQL, de comandos, LDAP,
XPath, XML o por XSS.
25
Disponible en internet dese <http://www.yiiframework.com/doc/guide/1.1/es/topics.auth>
51
Esta debilidad lleva a casi todas las principales vulnerabilidades en las aplicaciones,
tales como intérprete de inyección, ataques locale/Unicode, ataques al sistema de
archivos y desbordamientos de memoria.
Nunca se debe confiar en los datos introducidos por el cliente, ya que podría
manipularlos. Hay que garantizar que la aplicación sea robusta contra todas las
formas de ingreso de datos, ya sea obtenida del usuario, de la infraestructura, de
entidades externas o de sistemas de base de datos.
Existen vulnerabilidades asociadas a la validación de los datos,
Vulnerabilidad de la integridad de los datos: El atacante manipula los datos
introduciendo intencionadamente datos erróneos que manipulan la función de
negocio.
Violación del formato de los datos: Un atacante consigue introducir datos sin la
sintaxis correcta, fuera de los límites de longitud, que contenga caracteres no
permitidos, con signo incorrecto o fuera de los límites del rango. Esto provoca un
mal funcionamiento de la aplicación.
Incumplimiento de las reglas de negocio: Se introducen datos que no cumplen
con las reglas de negocio. Lo que provoca un comportamiento no esperado de la
aplicación.
9.2 GESTIÓN DE SESIONES Y USUARIOS:
El manejo de la sesión es uno de los aspectos críticos de la seguridad WEB.
Veremos cómo es posible mejorar la seguridad en el control de acceso y la
autenticación a través del manejo de las sesiones y de la información de los usuarios
de nuestras aplicaciones.
Se detectan las siguientes vulnerabilidades significativas.
Fijación de sesión que intenta explotar la vulnerabilidad de un sistema que permite
a una persona fijar el identificador de sesión de otra persona. La mayoría de ataques
de fijación del período de sesiones están basados en la web, y la mayoría depende
de los identificadores de sesión que han sido aceptados de URL o datos POST
Identificador de la sesión vulnerable, si no se reserva un tamaño adecuado el
atacante, mediante técnicas de fuerza bruta atacante puede conocer el identificador
de una sesión autenticada y por lo tanto hacerse con el control de la sesión.
52
Manejo de la información de sesión errónea, ya sea por estar en un espacio
compartido o mal encriptada, el atacante puede obtener datos de la sesión de otro
usuario.
Ataques de proxys o cachés, las aplicaciones web deben especificar mecanismos
para impedir estos ataques de tal manera que no sea posible suplantar sesiones de
otros usuarios.
9.3 GESTIÓN DE ERRORES Y EXCEPCIONES:
Uno de los focos que originan vulnerabilidades en nuestras aplicaciones se basa en
la falta de control sobre los errores que se producen en su ejecución y el tratamiento
correcto de las excepciones. Veremos cómo disminuir los riesgos de ser atacados
a partir de la generación de un error o excepción en la aplicación.
El manejo de errores y excepciones son dos aspectos para realizar un seguimiento
de fallos dentro de una aplicación. En términos generales, hay tres situaciones que
hacen que las excepciones sean lanzadas:
Excepciones que se producen en el código del cliente: El código cliente intenta
hacer algo que no está permitido por la API, de esta forma viola el contrato. El cliente
puede tomar algún camino alternativo, si hay información útil proporcionada en la
excepción. Por ejemplo: una excepción es lanzada cuando se está analizando un
documento XML que no está bien formado. La excepción contiene información útil
acerca de la localización en el documento XML donde se produce el problema. El
cliente puede utilizar esta información para recuperarse del problema.
Excepciones por fallos en los recursos mantenidos: Las excepciones se
producen si existe un fallo derivado de un recurso. Por ejemplo, el agotamiento de
memoria o el fallo de conexión cuando se cae una red. La respuesta del cliente a
los recursos que fallan depende del contexto. El cliente puede reintentar la
operación después de algún tiempo o simplemente registrar el fallo del recurso y
detener la aplicación.
Excepciones por errores derivados del código programado: En esta categoría,
las excepciones se producen en la ejecución del código. El código cliente
usualmente no puede hacer nada con estos errores.
53
LECCIÓN 10: CONFIGURACIÓN SEGURA DE SERVIDORES:
La mayoría de los servidores web modernos nos permiten controlar desde el
programa servidor aquellos aspectos relacionados con la seguridad y la
autenticación de los usuarios.
El modo más simple de control es el proporcionado por el uso de ficheros .htaccess.
Éste es un sistema de seguridad que proviene de uno de los primeros servidores
web (del NCSA httpd), que consiste en poner un fichero de nombre .htaccess en
cualquier directorio del contenido web que se vaya a servir, indicando en este fichero
qué usuarios, máquinas, etc., tienen acceso a los ficheros y subdirectorios del
directorio donde está el fichero. Como el servidor de NCSA fue el servidor más
usado durante mucho tiempo, la mayoría de servidores modernos permiten utilizar
el fichero .htaccess respetando la sintaxis del servidor de NCSA.
Otros servidores permiten especificar reglas de servicio de directorios y ficheros en
la configuración del servidor web, indicando allí qué usuarios, máquinas, etc.,
pueden acceder al recurso indicado.
Por lo que respecta a la autenticación (validación del nombre de usuario y
contraseña proporcionados por el cliente), las prestaciones ofrecidas por los
diversos servidores web son de lo más variado. La mayoría permiten, como mínimo,
proporcionar al servidor web un fichero con nombres de usuario y contraseñas
contra el que se pueda validar lo enviado por el cliente. De todos modos, es
frecuente que los servidores proporcionen pasarelas que permitan delegar las
tareas de autenticación y validación a otro software (por ejemplo RADIUS, LDAP,
etc.). Si usamos un sistema operativo como Linux, que dispone de una
infraestructura de autenticación como PAM (pluggable authentication modules),
podemos usar esta funcionalidad como modo de autenticación del servidor web,
permitiéndonos así usar los múltiples métodos disponibles en PAM para autenticar
contra diversos sistemas de seguridad.26
10.1 ORGANIZACIÓN DEL SERVIDOR WEB:
Una forma de implementar aspecto de seguridad en servidores web es la de
administrar procesos y atender peticiones de una manera eficiente y económica, es
necesario definir algunos términos.
26
<MATEU, Carles; Desarrollo de aplicaciones web, p 24, 25 >
54
Proceso: la unidad más “pesada” de la planificación de tareas que ofrece el sistema
operativo. No comparte espacios de direcciones ni recursos relacionados con
ficheros, excepto de manera explícita (heredando referencias a ficheros o
segmentos de memoria compartida), y el cambio de tarea lo fuerza el núcleo del
sistema operativo (preemptivo).
Flujo o thread: la unidad más “ligera” de planificación de tareas que ofrece el
sistema operativo. Como mínimo, hay un flujo por proceso. Si distintos flujos
coexisten en un proceso, todos comparten la misma memoria y recursos de
archivos. El cambio de tarea en los flujos lo fuerza el núcleo del sistema operativo
(preemptivo).
Fibra: flujos gestionados por el usuario de manera cooperativa (no preemptivo), con
cambios de contexto en operaciones de entrada/salida u otros puntos explícitos: al
llamar a ciertas funciones. La acostumbran a implementar librerías fuera del núcleo,
y la ofrecen distintos sistemas operativos.
En general, los modelos con muchos procesos son costosos de memoria (cada
proceso ocupa su parte) y de carga (creación de procesos). En servidores de alto
rendimiento, los modelos con flujos parecen mejores, aunque tienen el problema de
la portabilidad difícil y la posible necesidad de mecanismos que anticipan el coste
de creación de procesos o flujos y, por lo tanto, son muy rápidos atendiendo
peticiones.
En máquinas uniprocesador, los modelos con un solo flujo funcionan bien. En
máquinas multiprocesador, es necesario usar múltiples flujos o procesos para
aprovechar el paralelismo del hardware.
10.2 ORGANIZACIÓN DE LAS APLICACIONES WEB:
Los servidores web se encargan de atender y servir peticiones HTTP de recursos,
que en su forma más simple acostumbran a ser documentos guardados en el
sistema de ficheros. Sin embargo, la otra función importante de un servidor web es
la de actuar de mediador entre un cliente y un programa que procesa datos. Recibe
una petición con algún argumento, la procesa y devuelve un resultado que el
servidor web entrega al cliente. La interacción entre el servidor web y los procesos
que tiene asociados es otro aspecto que hay que considerar.
Existen distintas maneras de organizar una aplicación web. A continuación, por
orden cronológico de complejidad y rendimiento creciente, se presentan distintos
modelos de organización.
55
CGI: es el modelo más antiguo y simple. Para cada petición HTTP se invoca un
programa que recibe datos por las variables del entorno y/o de entrada estándar, y
devuelve un resultado por la salida estándar. Consumir un proceso por cada petición
genera problemas importantes de rendimiento, que el modelo FastCGI intenta
mejorar.
Servlets: es un modelo diseñado para Java, más eficiente y estructurado, que
permite elegir distintos modelos de gestión de flujos o threads, duración de procesos
del servidor, etc. Partiendo de este modelo, se han construido servidores de
aplicaciones con múltiples funciones adicionales que facilitan el desarrollo de
aplicaciones web complejas.
CAPITULO 3 DESARROLLO SEGURO DE APLICACIONES:
LECCIÓN 11: CONCEPTOS GENERALES PARA EL DESARROLLO SEGURO
DE APLICACIONES:
La importancia de una metodología de desarrollo seguro en aplicaciones Web inicia
cuando el principal problema reside en la falta de controles durante el ciclo de vida
del desarrollo de un aplicativo, ya que impera más el hecho que funcione que el
hecho de ser seguro, lo cual es un problema para aplicaciones WEB.
¿Qué amenazas tiene una persona que navegue por Internet? Suplantación de
identidad, robo de credenciales, alteración de los contenidos de la web, ejecución
de acciones sin su conocimiento. Cada uno de ellos está derivado tanto de una
mala metodología de desarrollo como de una falta de concienciación de los
usuarios, los cuales acceden a cualquier enlace sin identificar su procedencia.
Las amenazas, debido a una mala programación, pueden permitir al atacante desde
la obtención de las credenciales de un usuario, hasta la modificación del contenido
de la página web vulnerable pasando por la realización de acciones sin
conocimiento del usuario como compras o transacciones bancarias. Para cada una
de estas acciones hay soluciones más o menos sencillas pero hace falta más
concienciación por parte del equipo de desarrollo para identificarlas en las diferentes
fases del desarrollo.
Por ello, hay que hacer hincapié en identificar en las fases de diseño además de los
casos de uso, los casos de abuso. Un caso de abuso, es la identificación de las
diferentes amenazas que pueden asociarse a un caso de uso. Por ejemplo, en una
56
ventana de login (página donde se introduce el usuario y la contraseña) ¿Cuáles
son las amenazas principales? autenticarse sin conocer la contraseña, obtención
de credenciales, enumeración de usuarios,… Una vez identificados los diferentes
casos de abuso, el siguiente paso sería implantar y diseñar los controles para evitar
estas amenazas. La mayoría de las amenazas se mitigan a través de una validación
robusta de los datos de entrada.
Cada vez es más importante el posicionamiento en internet para la venta de
diferentes productos o servicios. Si una determinada empresa A tiene una
vulnerabilidad en su web y está, a su vez, es explotada ¿Cuál es el impacto para la
organización? Pérdida de confianza de sus clientes con la consiguiente pérdida
económica y de imagen, impacto económico en base a las normativas vigentes de
protección de datos si se publican datos de carácter personal.
Además hay que añadir el gasto que supone la corrección de las vulnerabilidades,
este gasto es superior al gasto económico que hubiera supuesto la realización de
pruebas de identificación de vulnerabilidades en el proceso de desarrollo software.
.No existen páginas webs 100% seguras a pesar de que se les haya implementado
un ciclo de desarrollo seguro de aplicaciones.
Figura 18: Metodología de desarrollo seguro
Fuente: <http://www.consultec.es/>
57
Entendemos por aplicaciones web a todo aquél software que interacciona con el
usuario utilizando el protocolo HTTP. Por su parte, los servicios web son un conjunto
de funciones empaquetadas dentro de una entidad única y publicadas dentro de la
red para que puedan ser utilizadas por las aplicaciones web.
11.1 NORMAS BÁSICAS DE SEGURIDAD:
El proyecto OWASP (Open Web Application Security Project) tiene como objetivo
ofrecer una metodología, de libre acceso y utilización, que pueda ser utilizada como
material de referencia por parte de los arquitectos de software, desarrolladores,
fabricantes y profesionales de la seguridad involucrados en el diseño, desarrollo,
despliegue y verificación de la seguridad de las aplicaciones y servicios web.
La guía empieza estableciendo el principio básico de seguridad que cualquier
aplicación o servicio web debe cumplir:





Validación de la entrada y salida de información La entrada y salida de
información es el principal mecanismo que dispone un atacante para enviar
o recibir código malicioso contra el sistema. Por tanto, siempre debe
verificarse que cualquier dato entrante o saliente es apropiado y en el formato
que se espera. Las características de estos datos deben estar predefinidas y
debe verificarse en todas las ocasiones.
Diseños simples Los mecanismos de seguridad deben diseñarse para que
sean los más sencillos posibles, huyendo de sofisticaciones que compliquen
excesivamente la vida a los usuarios. Si los pasos necesarios para proteger
de forma adecuada una función o modulo son muy complejos, la probabilidad
de que estos pasos no se ejecuten de forma adecuada es muy elevada.
Utilización y reutilización de componentes de confianza Debe evitarse
reinventar la rueda constantemente. Por tanto, cuando exista un componente
que resuelva un problema de forma correcta, lo más inteligente es utilizarlo.
Defensa en profundidad Nunca confiar en que un componente realizará su
función de forma permanente y ante cualquier situación. Hemos de disponer
de los mecanismos de seguridad suficientes para que cuando un
componente del sistema fallen ante un determinado evento, otros sean
capaces de detectarlo.
Tan seguros como en eslabón más débil La frase "garantizamos la seguridad,
ya que se utiliza SSL" es realmente muy popular, pero también es muy
inexacta. La utilización de SSL garantiza que el tráfico en tránsito entre el
58
servidor y el cliente se encuentra cifrado, pero no garantiza nada acerca de
los mecanismos de seguridad existentes.
Por tanto, no debemos fiarnos únicamente de los mecanismos de seguridad
"exteriores", sino que es preciso identificar cuáles son los puntos precisos en los
que deben establecerse las medidas de seguridad. Si nosotros no hacemos este
trabajo, seguro que los atacantes si lo harán.



La "seguridad gracias al desconocimiento" no funciona El simple hecho de
ocultar algo no impide que, a medio o largo plazo, llegue a ser descubierto.
Tampoco es ninguna garantía de que tampoco será descubierto a corto
plazo.
Verificación de privilegios. Los sistemas deben diseñarse para que funcionen
con los menos privilegios posibles. Igualmente, es importante que los
procesos únicamente dispongan de los privilegios necesarios para
desarrollar su función, de forma que queden compartimentados.
Ofrecer la mínima información Ante una situación de error o una validación
negativa, los mecanismos de seguridad deben diseñarse para que faciliten la
mínima información posible. De la misma forma, estos mecanismos deben
estar diseñados para que una vez denegada una operación, cualquier
operación posterior sea igualmente denegada.
Otros aspectos tratados en la guía son: consideraciones de arquitectura,
mecanismos de autenticación, gestión de sesiones de usuario, control de acceso,
registro de actividad, prevención de problemas comunes, consideraciones de
privacidad y criptografía
El proyecto OWASP, “The Open Web Application Security Project” presenta a
disposición de todos los usuarios en la web “A Guide to Building Secure Web
Applications”27 y ha sido reconocida como una metodología de desarrollo seguro
que ha dado resultados. Estos documento se presentan como anexos a este
módulo.
Se referencian estos documentos: Secure Programming for Linux and Unix
HOWTO28 que documentan estrategias seguras en el desarrollo de aplicaciones
web.
27
Disponible en internet desde <http://www.owasp.org/guide/>
28
Disponible en internet desde <http://www.dwheeler.com/secure-programs/>
59
SPSMM - Estándar de programación segura (Secure Programming Standards
Methodology Manual)29
LECCIÓN 12: CONTROLES DE AUTORIZACIÓN DE OBJETOS:
Un control simple de objeto en una aplicación web puede ser el solo simple hecho
de comprobar el tipo de dato. La validación de datos garantiza la corrección y
precisión de todos los valores de datos de la aplicación. Estas acciones se pueden
diseñar utilizando distintos enfoques: código de interfaz de usuario, código de
aplicación o restricciones de bases de datos.
Un ejemplo de validación de control de objetos es el código de servicio con tipo de
datos "character" sólo puede admitir caracteres alfabéticos de la A a la Z; el resto
de caracteres no sería válido. Otro tipo de control típico es el que se aplica al validar
un control TextBox y mostrar un mensaje personalizado cuando se produce un error
en la validación.
De manera predeterminada, la validación se realiza al hacer clic en un control de
botón, como Button, ImageButton o LinkButton. Hay varios tipos de validación de
datos:




Validación del tipo de datos.
Comprobación del intervalo.
Comprobación del código.
Validación compleja
La tabla 2 muestra las propiedades básicas de un control de validación
29
Disponible en internet dese <http://isecom.securenetltd.com/spsmm.0.5.1.en.pdf>
60
PROPIEDAD
DESCRIPCION
ControlToValidate
Id. de programación del control de salida que evaluará el control de validación. Si no
es un Id legítimo, se iniciará una excepción.
Display
Modo en que se muestra el control de validación especificado. Esta propiedad puede
ser uno de los siguientes valores:
Ninguno: El control de validación jamás se muestra en línea. Utilice esta opción
cuando desee mostrar el mensaje de error sólo en un control ValidationSummary
Estático: El control de validación muestra un mensaje de error si se produce un
error en la validación. Se asigna un espacio en la página Web para el mensaje de
error incluso si el control de entrada supera la validación. No cambia el diseño de la
página cuando el control de validación muestra su mensaje de error. Como el diseño
de página es estático, si hay varios controles de validación para el mismo control de
entrada, éstos deberán ocupar distintas ubicaciones en la página.
Dinámico: El control de validación muestra un mensaje de error si se produce un
error en la validación. El espacio para el mensaje de error se asigna dinámicamente
en la página cuando se produce un error en la validación. De este modo, varios
controles de validación pueden compartir la misma ubicación física en la página.
EnableClientScript
Indica si está habilitada la validación en el cliente. Para deshabilitar la validación en
el cliente en los exploradores que admitan esta función, establezca la propiedad
EnableClientScript en false.
Enabled
Indica si está habilitado el control de validación. Para impedir que el control de
validación valide un control de entrada, establezca esta propiedad en false.
ErrorMessage
Mensaje de error que se va a mostrar en el control ValidationSummary si se produce
un error en la validación. Si no está establecida la propiedad Text del control de
validación, también se muestra este texto en el control de validación cuando se
produce un error en la validación. Se utiliza normalmente la propiedad
ErrorMessage para proporcionar diferentes mensajes para el control de validación
y el control ValidationSummary.
ForeColor
Especifica el color en el que se va a mostrar el mensaje en línea cuando se produce
un error en la validación.
IsValid
Indica si el control de entrada especificado por la propiedad ControlToValidate se
determina como válido.
Text
Si esta establecida esta propiedad, se muestra este mensaje en el control de
validación cuando se produce un error en la validación. Si no está establecida esta
propiedad, el texto especificado en la propiedad ErrorMessage se muestra en el
control.
Tabla 2: Propiedades de los controles de validación
Fuente: <http://www.microsoft.com/asp.net >
61
12.1 LISTAS DE CONTROL DE ACCESO (ACL)
Los controles de acceso también están incluidos en aspectos de denegación de
servicio que no solo afectan a los accesos y validaciones propios del sitio, sino
también al entorno del mismo.
Un ACL es una lista secuencial de sentencias de permiso o denegación que se
aplican a direcciones IP o protocolos de capa superior. La ACL puede extraer la
siguiente información del encabezado del paquete, probarla respecto de las reglas
y decidir si “permitir” o “denegar” el ingreso según los siguientes criterios:



Dirección IP de Origen
Dirección IP de Destino
Tipo de mensaje ICMP
La ACL también puede extraer información de las capas superiores y probarla
respecto de las reglas. La información de las capas superiores incluye:


Puerto TCP / UDP de Origen
Puerto TCP / UDP de Destino
Figura 19: Filtrado de paquetes con ACL
Fuente: El Autor
62
El funciónenlo de ACL se basa en una búsqueda de arriba abajo (de la lista de texto
plano), una línea a la vez y se busca un patrón que coincida con el paquete entrante.
La figura 19 muestra cómo se realiza el filtrado de paquetes con ACL
12.1.1. Configuración de las ACL: Pueden configurarse por Protocolo, Por
dirección y Por interfaz.
ALC por Protocolo: Para controlar el flujo de tráfico de una interfaz, se debe definir
una ACL para cada protocolo habilitado en la interfaz.
ALC por Dirección: Las ACL controlan el tráfico en una dirección a la vez de una
interfaz. Deben crearse dos ACL por separado para controlar el tráfico entrante y
saliente.
ALC por Interfaz: Las ACL controlan el tráfico para una interfaz, ejemplo eth0 (si
se está en un sistema UNIX).
12.1.2. Funciones de la ACL: Las ACL realizan las siguientes tareas:







Limitar el tráfico de red para mejorar el rendimiento de esta.
Brindar control de flujo de tráfico
Proporciona un nivel básico de seguridad para el acceso a la red
Se debe decidir qué tipos de tráfico enviar o bloquear en las interfaces del
router
Controlar las áreas de red a las que puedan acceder un cliente.
Analizar los hosts para permitir o denegar su acceso a los servicios de red
Puede darle prioridad al tráfico de la red.
LECCIÓN 13: CONSIDERACIONES DE SEGURIDAD EN WEB SERVICES:
La mayoría de las aplicaciones web son usadas como un conducto entre muchas
fuentes de datos y el usuario, esto es, las aplicaciones web son usadas
frecuentemente para interactuar con una base de datos.
Aunque el tema de la seguridad en las bases de datos merece un tratamiento
diferente al de las aplicaciones web, se encuentran íntimamente relacionados. Toda
entrada al sistema debe ser filtrada, y toda salida escapada. Lo mismo aplica
cuando las entradas o salidas son de o hacia una base de datos.
63
Muchos programadores no dan importancia al filtrado de datos provenientes de una
consulta a la base de datos, debido a que consideran a esta fuente como confiable.
Aunque el riesgo a primera vista parecería menor, es una práctica recomendable no
confiar en la seguridad de la base de datos e implementar la seguridad a fondo y
con redundancia. Si algún dato malicioso pudiera haber sido inyectado a la base de
datos, nuestra lógica de filtrado puede percatarse de ello, pero sólo si se ha
implementado este mecanismo.
13.1 EXPOSICIÓN DE DATOS
Una de las preocupaciones más comunes relacionadas con las bases de datos es
la exposición de datos sensibles. Al almacenar números de tarjetas de crédito, o
algo tan delicado, es preferible asegurarse que los datos almacenados en la base
de datos se encuentran seguros e inaccesibles incluso para los administradores de
la base. Una buena recomendación es encriptar los datos más sensibles, de esta
manera si la base de datos llega a ser comprometida el desastre será menor. Un
ejemplo de esta técnica es almacenar las contraseñas de usuario convertidas con
md5. De esta manera, las cadenas de las claves almacenadas en la base de datos
como md5 no son útiles al atacante para conocer contraseñas que le permitirían el
acceso al sistema ya que no es posible conocer la cadena de texto original.
13.2 PÁGINAS PRIVADAS Y LOS SISTEMAS DE AUTENTICACIÓN
La autenticación es el proceso por el cual la identidad de un usuario en el sistema
es validada. Comúnmente el procedimiento involucra un nombre de usuario y una
contraseña a revisar. Una vez autenticado el usuario es registrado (logueado) como
un usuario que se ha autenticado. Muchas aplicaciones tienen recursos que son
accesibles sólo para los usuarios autenticados, recursos que son accesibles
únicamente para los administradores y recursos totalmente públicos.
El control de acceso debe encontrarse totalmente integrado al diseño original. No
debe ser algo improvisado sobre una aplicación ya existente.
13.3 ATAQUES DE FUERZA BRUTA
Un ataque de este tipo agota todas las posibilidades sin preocuparse por cuales
opciones son las que tienen mayor probabilidad de funcionar. En los términos del
control de acceso, generalmente encontramos al atacante intentando registrarse
64
mediante un gran número de pruebas. En algunos casos el atacante puede conocer
nombres de usuario válidos y la contraseña es la única parte que se trata de
adivinar.
Limitar el número de intentos que se le permite al usuario tratar de adivinar es una
medida efectiva en contra de estos ataques, pero tiene por desventaja de poder
afectar el uso del sistema a usuarios legítimos. Una propuesta un poco más
considerada con el usuario seria intentar encontrar patrones en las peticiones
enviadas por el atacante y únicamente bloquear el uso de la cuenta para peticiones
que cumplan con dicho patrón, de esta forma se interfiere menos el uso al usuario
legítimo.
Otra opción sería imponer un intervalo de tiempo pequeño (ejemplo 15 segundos)
que se debe esperar para poder intentar registrarse en el sistema de nuevo después
de una falta en la autenticación. De esta manera, se niega el acceso sin importar si
se presentaron las credenciales fue correcta, por supuesto que no se le dice al
atacante la razón por la que se le negó el acceso para evitar lo intente de nuevo
cuando haya terminado el plazo de espera. Trabajando de esta forma, se busca
reducir el tiempo útil que tiene el atacante para intentar adivinar las credenciales de
acceso.
13.4 ESPIONAJE DE CONTRASEÑAS (PASSWORD SNIFFING)
Cuando un atacante tiene los medios para analizar el tráfico entre los usuarios y el
servidor de la aplicación, debemos preocuparnos por la exposición que pueden
tener los datos en el trayecto, sobre todo cuando se trata de credenciales de acceso.
Una manera efectiva de prevenir este tipo de problemas es usar SSL para proteger
los contenidos enviados en las peticiones y respuestas en HTTP. Debemos
considerar utilizar esta tecnología tanto para cuando se envíen las credenciales de
acceso como los identificadores de una sesión ya establecida, de esta forma
evitamos un secuestro de la sesión.
Usar SSL para proteger el envío de HTML es además una medida útil para brindar
confianza a los usuarios de enviar sus datos cuando ven en su navegador el uso de
https. Pero como se vio en la lección “Mitos de seguridad en aplicaciones web”, ésta
sola medida no es suficiente.
65
13.5 REGISTROS PERSISTENTES
Cuando un usuario permanece en el estado de registrado después de un tiempo no
razonable (cuando la sesión expiró por ejemplo), tenemos un problema de registros
persistentes. Este tipo de problemas disminuyen la seguridad de nuestro
mecanismo de autenticación. Generalmente estos problemas son causados por una
cookie persistente, o un ticket enviado al usuario para hacer referencia a la sesión
de registro establecida que no se considera como expirado jamás o que no cambia
en cada nuevo registro establecido por el usuario.
Si el ticket de acceso permanece constante para cualquier sesión establecida
tenemos un problema serio, la manera más sencilla de evitarlo es haciéndolo
dependiente de una variable aleatoria.
Otra medida recomendable es requerir la contraseña del usuario cuando vaya a
realizar alguna tarea administrativa importante en el sistema. Con este esquema se
permite el acceso únicamente a los recursos que no son tan sensibles.
LECCIÓN 14: VALIDACIÓN DE ENTRADAS:
La debilidad de seguridad más común en aplicaciones web es la falta de validación
apropiada de las entradas del cliente o del entorno. Teniendo en cuenta una serie
de indicaciones y consejos a la hora de codificar nuestras aplicaciones podremos
evitar problemas como la inyección de código SQL, de comandos, LDAP, XPath,
XML o por XSS.
Esta debilidad lleva a casi todas las principales vulnerabilidades en las aplicaciones,
tales como intérprete de inyección, ataques locale/Unicode, ataques al sistema de
archivos y desbordamientos de memoria. Nunca se debe confiar en los datos
introducidos por el cliente, ya que podría manipularlos. Hay que garantizar que la
aplicación sea robusta contra todas las formas de ingreso de datos, ya sea obtenida
del usuario, de la infraestructura, de entidades externas o de sistemas de base de
datos.
Existen vulnerabilidades asociadas a la validación de los datos:
66
Vulnerabilidad de la integridad de los datos: El atacante manipula los datos
introduciendo intencionadamente datos erróneos que manipulan la función de
negocio.
Violación del formato de los datos: Un atacante consigue introducir datos sin la
sintaxis correcta, fuera de los límites de longitud, que contenga caracteres no
permitidos, con signo incorrecto o fuera de los límites del rango. Esto provoca un
mal funcionamiento de la aplicación.
Incumplimiento de las reglas de negocio: Se introducen datos que no cumplen
con las reglas de negocio. Lo que provoca un comportamiento no esperado de la
aplicación.
HTML resulta adecuado para aplicaciones simples, pero es poco adecuado para
aplicaciones complejas:




Conjuntos de datos complejos.
Datos que deben ser manipulados de formas diversas.
Datos para controlar programas.
Sin capacidad de validación formal.
Ante todo esto, el W3C desarrolló un nuevo lenguaje (XML), que proporciona:
Extensibilidad: se pueden definir nuevas marcas y atributos según sea necesario.
Estructura: se puede modelar cualquier tipo de datos que esté organizado
jerárquicamente.
Validez: podemos validar automáticamente los datos (de forma estructural).
Independencia del medio: podemos publicar el mismo contenido en multitud de
medios.
XML no es un lenguaje, sino un meta-lenguaje que permite definir multitud de
lenguajes para propósitos específicos. Estas definiciones, e incluso las definiciones
de programas de traducción y transformación de ficheros XML, se definen en XML,
lo que da una muestra de la potencia de XML. En XML se ha definido gran número
de lenguajes. De hecho, el fichero de configuración de algunos de los programas
más usados en la web (Tomcat, Roxen, etc.) está definidos con XML. Hay muchos
ficheros de datos, de documentos, etc., que también lo usan para su definición.
Algunos de los lenguajes definidos con XML más conocidos son:


SVG (scalable vector graphics).
DocBook XML (Docbook-XML).
67




XMI (XML metadata interface format).
WML (WAP markup language).
MathML (mathematical markup language).
XHTML (XML hypertext markup language).
XML posibilita la comprobación automática de la correcta forma de un documento,
pero sin información adicional es imposible comprobar la validez de éste a partir del
propio documento. Para ello, el W3C ha desarrollado algunos estándares de XML
que permiten validar un documento a partir de una especificación formal de cómo
debe ser éste. Dichos estándares son DTD y XSchema.
DTD es un estándar antiguo, derivado de SGML y que adolece de algunas
deficiencias graves, siendo la más grave de ellas el hecho de no estar escrito en
XML. XSchema, por otro lado, es un estándar relativamente moderno, muy potente
y extensible, que además está escrito en XML íntegramente. Muchas de las
entradas de validación de datos se apoyan en este estándar.
LECCIÓN 15: SQL IJECTION:
La inyección SQL (Structured Query Language) Injection es un ataque en el que
se inserta código SQL o como anexo en los parámetros de entrada de la solicitud
de usuario que posteriormente se pasan a un servidor back-end de SQL Server
para su análisis y ejecución. Cualquier procedimiento que construye declaraciones
SQL podría ser vulnerable, ya que la naturaleza diversa de SQL y los métodos
disponibles para la construcción que proporcionan una gran cantidad de
codificación.
Un ataque menos directo inyecta código malicioso en las cadenas que están
destinados para el almacenamiento en una tabla o como metadato. Cuando estas
cadenas son almacenadas posteriormente se concatenan en una tabla dinámica
que ejecuta comandos inesperados y sentencias de SQL y es allí donde el código
malicioso es ejecutado en la aplicación web.
Cuando se utiliza un servidor SQL para ejecutar comandos que interactúan con el
sistema operativo, el proceso se ejecutará con los mismos permisos que el
componente que ejecutó el comando (por ejemplo, servidor de base de datos,
servidor de aplicaciones o servidor web), que a menudo suelen ser sentencias,
sesione se instrucciones con información muy privilegiada.
68
Mediante un ejemplo sencillo se puede interpretar esta vulnerabilidad: Si un usuario
hace una consulta a un sitio web (tienda online) para ver todos los productos que
cuesten menos de $ 100, a través de la siguiente URL:
http://www.victim.com/products.php?val=100
El ejemplo de la URL anterior utiliza los parámetros GET en lugar de POST de parámetros
para facilitar la ilustración. Parámetros POST son tan fáciles de manipular, sin embargo,
esto generalmente implica el uso de otro componente, como una herramienta de
manipulación de tráfico, navegador Web plug-in o aplicación proxy en línea
El atacante intenta inyectar sus propios comandos SQL modificando el parámetro
de entrada “val” añadiendo la cadena 'OR '1' = '1 a la URL:
http://www.victim.com/products.php?val=100’ OR ‘1’=’1
Esta vez, la sentencia de SQL que el script de PHP genera y ejecuta, devolverá
todos los productos en la base de datos, independientemente de su precio. Esto se
debe a que se ha modificado la lógica de la pregunta. Esto sucede porque los
resultados de la instrucción del operando de consulta siempre devuelve “true”, es
decir, 1 siempre será igual a 1. Esta es la consulta que fue construida y ejecutada:
SELECT * FROM ProductsTbl WHERE Price < '100.00' OR '1'='1' ORDER BY ProductDescription;
Hay muchas maneras para aprovechar las vulnerabilidades de inyección SQL para
lograr una gran variedad de objetivos, el éxito del ataque es generalmente altamente
dependiente de la base de datos subyacente y de los sistemas interconectados que
están bajo ataque. A veces puede tomar una gran cantidad de habilidad y
perseverancia para explotar una vulnerabilidad en todo su potencial.
En el ejemplo anterior demuestra cómo un atacante puede manipular una sentencia
SQL creada dinámicamente que se forma a partir de la entrada que no se ha
validado o codificada para llevar a cabo acciones que el desarrollador de una
aplicación no previó.
69
El ejemplo, sin embargo, tal vez no ilustra la eficacia de esa vulnerabilidad; después
de todo, sólo se utiliza el vector (vec) para ver todos los productos en la base de
datos, y que un usuario legítimo podría haberlo hecho mediante la consulta a la
misma aplicación. Si esa misma aplicación fuera administrada de forma remota
mediante utilizando un sistema de gestión de contenidos (CMS) (Un CMS es una
aplicación Web que se utiliza para crear, editar, gestionar y publicar contenido en un sitio Web, sin
necesidad de tener un conocimiento en profundidad de la capacidad de codificar o en HTML ).
Se
podría acceder a la aplicación CMS mediante la siguiente URL:
http://www.victim.com/cms/login.php?username=foo&password=bar
La aplicación CMS requiere que usted proporcione un nombre de usuario y
contraseña para poder acceder a su funcionalidad de administrar y modificar el sitio.
Si un atacante digita un nombre de usuario y contraseña errados, la aplicación
devuelve un error "nombre de usuario o contraseña incorrecta, por favor, inténtelo
de nuevo". Aquí está el código para el script login.php que devuelve el error:
// connect to the database
$conn = mysql_connect("localhost","username","password");
// dynamically build the sql statement with the input$query = "SELECT userid FROM CMSUsers
WHERE user = '$_GET["user"]' " .
"AND password = '$_GET["password"]'";
// execute the query against the database
$result = mysql_query($query);
// check to see how many rows were returned from the database $rowcount =
mysql_num_rows($result);
// if a row is returned then the credentials must be valid, so
// forward the user to the admin pages if ($rowcount != 0){ header("Location: admin.php");}
// if a row is not returned then the credentials must be invalid else { die('Incorrect username or
password, please try again.')}
El script login.php crea dinámicamente una sentencia SQL que devuelve un
conjunto de registros si un nombre de usuario y contraseña correspondiente es
digitado. La sentencia SQL que el script de PHP genera y ejecuta, se ilustra más
claramente en la consulta siguiente:
70
SELECT userid
FROM CMSUsers
WHERE user = 'foo' AND password = 'bar';
Devolverá el ID de usuario que corresponde al usuario y los valores de la
contraseña si los datos introducidos coinciden con un valor correspondiente
almacenado en la tabla de CMSUsers
El problema con el código es que el desarrollador de aplicaciones asuma que el
número de registros devueltos cuando la secuencia de comandos se ejecuta
siempre será cero o uno. En el ejemplo anterior la inyección, se utilizó el vector
explotable para cambiar el significado de la consulta SQL para devolver siempre el
valor “true”. Si utilizamos la misma técnica con la aplicación de la CMS, podemos
hacer que la lógica de la aplicación falle. Añadiendo la cadena 'OR '1' = '1 a la
siguiente dirección URL, la sentencia SQL que el script PHP construye y ejecuta en
ese momento, devolverá todos los identificadores de usuario para todos los usuarios
de la URL que estén en la tabla CMSUsers:
http://www.victim.com/cms/login.php?username=foo&password=bar’ OR ‘1’=’1
Todos los identificadores de usuario se devuelven debido a que se altera la lógica
de las consultas o peticiones de acceso. Esto sucede porque los resultados de la
instrucción del operando de la consulta siempre se devuelven como verdaderas, es
decir, 1 siempre será igual a 1. Esta es la consulta que se ejecuta:
SELECT userid
FROM CMSUsers
WHERE user = 'foo' AND password = 'password' OR '1'='1';
La lógica de la aplicación significa que si la base de datos devuelve más de cero
registros, debemos haber entrado en las credenciales de autenticación correctas y
deben ser redirigido y con acceso al script admin.php. Con esto se ha modificado la
lógica de la aplicación y la inyección de código ha surtido efecto.
Ahora especifiquemos ¿Cómo un intruso inyectará una sentencia SQL en
lugar de colocar el nombre de usuario, Password y cuenta?:
71
En la figura 20 se muestra una web con formularios de ingreso que podrían ser
vulnerables:
Figura 20: Formulario de validación de datos
Fuente: El Autor
Si los campos de datos, la aplicación y el gestor de datos no están validados y
filtrados (no escapa a los caracteres especiales) y asegurados, se podrá incluir una
comilla simple ‘y seguido a ella, el resto de lo que será interpreta do por el gestor de
base de datos como código SQL.
SELECT id
FROM login
WHERE usuario = ‘admin’´
AND clave = ‘’’OR
AND cuenta = 46789675
Un parámetro no esperado, como esta comilla, cambia el comportamiento de la
aplicación. De este modo , si el usuario es el admin y tiene un Password / con la
72
condición, si 1 es igual a 1(que de hecho lo es), éste será válido y tendrá acceso a
la aplicación web o a la intranet en la mayoría de casos.
¿Cómo saber que determinado campo de datos o URL, es vulnerable a la
inyección de código SQL?
Esto se logra intentando escribir y enviar una comilla simple en el campo del
formulario para obtener determinado error del sistema que es generado por la base
de datos del sistema. Hay otros métodos que son propios de cada navegador o
aplicación de ataque o de monitoreo.
¿Cómo buscar en Internet sitios web
con formularios de acceso a
aplicaciones web tentativamente vulnerables?
En un buscador se pueden dar estas opciones de búsqueda que darán como
resultados muchos formularios de acceso, links o campos de consulta de datos para
ver dichos errores.
inurl:login.asp ó inurl:buscar.asp ó site:.ar ó password.asp ó intranet ó
contraseña.asp ó clave.asp ó intitle:”acceso restringido” ó site.asp
Incluso en muchos casos, son tan vulnerables que la aplicación leva al usuario al
salto de la famosa “pregunta secreta” para restaurar la contraseña.
15.1 VARIANTES DE SINTAXIS:
Las variantes de sintaxis (en inyección) varían según el gestor de base de datos
(MS-SQL, Mysql, Oracle, PostgreSQL).
15.2 OTRAS CLASES DE INYECCIÓN:
Las hay del tipo ORM, LDAP, XML (hacking SOAP), SSI, XPATH, e IMAP/SMTP.
El proyecto OWASP documenta cada tipo de vulnerabilidad en el sitio web oficial.
73
GLOSARIO DE TÉRMINOS:
Abuso de funcionalidad: Una técnica de ataque que usa las características
y la funcionalidad de un sitio web para consumir, estafar o evadir el
acceso al sitio. También puede tener referencia con el término (DoS).
Autenticación: El proceso de verificación de la identidad o localización de un
usuario, servicio o aplicación. La autenticación se realiza utilizando al menos
uno de tres mecanismos: "algo que tienes", "algo que sé "o" algo que es”. La
aplicación puede autenticar y proporcionar diferentes servicios basados en la
ubicación, método de acceso, el tiempo de permanencia y los hábitos de uso de la
aplicación web.
Autenticación Básica: Una forma simple de autenticación del cliente
apoyado en HTTP. El cliente HTTP envía un encabezado con la solicitud al servidor
web que contiene un nombre de usuario y la contraseña codificada en Base64.Si
la combinación de nombre de usuario / contraseña es válida, entonces se da el
acceso al recurso solicitado.
Autorización: La determinación de los recursos que un usuario, un servicio
o aplicación tienen como permisos de acceso. Recursos accesibles que pueden
ser URL, archivos, directorios, bases de datos, servelets, caminos de ejecución.
ADDRESS RESOLUTION PROTOCOL (ARP): protocolo de la familia TCP/IP que
asocia direcciones IP a direcciones MAC.
AGENTE: Programa que permite a un dispositivo responder a solicitudes SNMP.
APACHE: Es un software libre servidor HTTP de código abierto para plataforma
Unix (BSD, GNU/Linux, etc.), Windows, Macintosh y otras, que implementa el
protocolo HTTP/1.1, y la noción del sitio virtual.
ASN (Abstract Syntax Notation): Lenguaje utilizado para definir tipos de datos.
Backup File Disclosure: Divulgación del archivo de copia de seguridad:
(Obsoleto). Actualmente se usa el término: "Ubicación de archivo predecible".
Brute Force: Un proceso automatizado de prueba y error utilizado para adivinar
el "secreto" de la protección de un sistema. Ejemplos de estos secretos son
74
nombres de usuario, contraseñas o claves criptográficas. También puede asociarse
a términos como: "Autenticación", "Autenticación insuficiente", "Password
Recovery Sistema "," La débil validación de recuperación de contraseña ".
BROADCAST: Transmisión de un paquete que será recibido por todos los
dispositivos en una red.
Buffer Overflow: Desbordamiento de Buffer: Una técnica de explotación que altera
el flujo de una aplicación sobrescribiendo partes de la memoria. Desbordamientos
de búfer es una causa frecuente de un mal funcionamiento del software. Si los
datos escritos en un búfer superan su tamaño, el espacio de memoria adyacente
se corromperá y normalmente producen un fallo. Un atacante puede ser capaz de
utilizar esta situación de desbordamiento y alterar el proceso del flujo de una
aplicación. Si sobrecarga el buffer y se sobrescriben por ejemplo los punteros en
la pila de memoria, esta acción podría ser utilizada para ejecutar órdenes erradas
al sistema operativo. ".
CGI Scanner: Programa de seguridad automatizada que busca vulnerabilidades
en servidores web y en aplicaciones web. Su uso muchas veces no va más allá de
probar una serie de peticiones HTTP contra conocidas cadenas de CGI
Client-Side Scripting: Función de navegador Web que extiende la funcionalidad
e interactividad del lenguaje de marcado de hipertexto (HTML) est´tico en las
páginas web. Ejemplos de lenguajes de script del lado del cliente son JavaScript,
JScript y VBScript. Véase también "controles ActiveX", "Java Applets ".
CGI:
Acrónimo:
(Common
Gateway
Interface):
Programación
estándar para el software para conectar y ejecutar aplicaciones que residen
en los servidores web. Véase también "Aplicación Web", "Servidor de
aplicaciones",
"Servidor Web
Controles ActiveX: Controles ActiveX son programas informáticos basados en la
Component Object Model (COM) y anteriormente conocido como OLE
controles. Los controles ActiveX son portables y reutilizables, y pueden ser
utilizados por muchos lenguajes de programación. Ellos son ampliamente utilizados
por las aplicaciones web para extender su funcionalidad (por ejemplo: el sitio
Windows Update) Véase también "Java", "applets Java", "JavaScript", "Web
Browser ".
75
Content Spoofing: “La suplantación de contenido”: Una técnica de ataque utilizada
para engañar a un usuario para que acceda a contenidos falsos creyendo que son
datos legítimos.
Cookie: Pequeña cantidad de datos enviados por el servidor web, a una web de
un cliente, que puede ser almacenada y recuperada en un momento posterior.
Típicamente se utilizan cookies para realizar un seguimiento de un estado de los
usuarios a medida que usan, navegan o interactúan con un sitio web.
Cookie Poisoning: (Obsoleto). Vea “Manipulación Cookie”.
Cross-Site Scripting: (acrónimo - XSS) Una técnica de ataque que obliga a un
sitio web para hacerse eco de los datos suministrados por el cliente, que se
ejecutan en un navegador web por parte del usuario. Cuando un usuario interactúa
entre varios sitios y aplicaciones que están haciendo eco de datos entre sí, el
atacante tendrá acceso a todo el contenido navegador web (cookies, historial,
versión de la aplicación, etc). Véase también "Client-Side Scripting".
CSMA/CD (Carrier Sentido acceso múltiple / Detección de Colisión) es el protocolo
usado en Ethernet en red para garantizar que sólo un nodo de red se transmite en
el cable de red en cualquier momento.
CONFIDENCIALIDAD: Que la información solo sea vista por los lentes involucrados
en la comunicación y que un tercer no pueda ingresar.
CONTROL DE ACCESO Y AUTORIZACIÓN: el proceso de determinar los
recursos y servicios que puede usar una entidad.
CORTAFUEGOS: Elemento de prevención que realizara un control de acceso para
proteger una red de los equipos del exterior (potencialmente hostiles).
DENEGACIÓN DE SERVICIO (DoS): ataque que hace una apropiación exclusiva
de un recurso o servicio con la intención de evitar cualquier acceso a terceras
partes. En inglés, deny of service.
Debug Commands: Los comandos de depuración: Son características de
depuración de aplicaciones o comandos que ayudan a identificar los errores de
programación durante el proceso de desarrollo de software.
Directory Traversal:
Una técnica utilizada para explotar sitios web al
acceder a los archivos y los comandos más allá del directorio raíz de los
documentos que forman la estructura del sitio. La mayoría de los sitios web deben
restringir el acceso de usuarios a una parte específica del sistema de archivos que
normalmente se denomina “el directorio raíz” de documentos o de raíz CGI
76
directorio.
Estos
directorios
contienen
los
archivos
ejecutables
destinados al uso público. En la mayoría de los casos, un usuario no debería poder
acceder a los archivos más allá de este punto.
DESBORDAMIENTO DE BUFFER: posibilidad de corromper la pila de ejecución
para modificar el valor de retorno de una llamada a función y provocar la ejecución
de código arbitrario.
DISPONIBILIDAD: Los servicios y la información deben, en todo momento, estar
disponibles.
DNS: Servicio de Nombres de Dominio.
DoS: (de las siglas en inglés Denial of Service), Ataque de Denegación de servicio
DDoS: (de las siglas en inglés Distribuited Denial of Service), Ataque de Denegación
de servicio Distribuido
Encoding Attacks: Los ataques de codificación: una técnica que ayuda a la
explotación de un ataque de cambiar el formato de los datos proporcionados por el
usuario para omitir la comprobación de aplicación de filtros. Véase también " Null
Injection".
Examen de directorios: (Obsoleto) Véase "Indexación de Directorio".
Enumeración de Directorio: (Obsoleto) Consulte "Ubicación de archivo
predecible"
Expiración de sesión insuficiente: Cuando un sitio web permite a un
atacante reutilizar credenciales de sesiones viejas o anteriores para
autorización y poder tener ingreso.
Form Field Manipulation: Manipulación de campos en formularios: La alteración
o modificación de formularios HTML. Los valores del campo de entrada que se
ingresan mediante HTTP, sirven para explotar los problemas de seguridad en una
aplicación web. Véase también "Cookie”
ESCÁNER DE VULNERABILIDADES: aplicación que permite comprobar si un
sistema es vulnerable a un conjunto de deficiencias de seguridad.
EXPLOIT: aplicación, generalmente escrita en C o ensamblador, que fuerza las
condiciones necesarias para aprovecharse de un error de programación que
permite vulnerar su seguridad.
77
EXPLORACION DE PUERTOS: técnica utilizada para identificar los servicios que
ofrece un sistema.
EXPLOTACIÓN DE UN SERVICIO: actividad realizada por un atacante para
conseguir una escalada de privilegios, abusando de alguna deficiencia del servicio
o del sistema.
FINGERPRINTING: Huella identificativa.
FIREWALL: Un equipo que impone un conjunto de directivas de seguridad que
restringen de forma severa el acceso al sistema y a los recursos.
Formato de ataque String: Una técnica de explotación que altera el flujo de una
aplicación mediante operaciones de biblioteca de formato de cadenas para acceder
a otra instancia o momento de la aplicación.
FRAGMENTACIÓN IP: proceso de división de un datagrama IP en fragmentos de
menor longitud.
HERRAMIENTA DE MONITOREO JFFNMS: Es un sistema de gestión y
monitorización de red designando para monitorizar una red IP, puede ser utilizado
para monitorizar cualquier dispositivo SNMP, router, switch, servidor, puerto TCP o
cualquier elemento siempre que se programe una extensión adecuada a dicho
elemento JFFNSM.
HIDS: Sistemas de detección de intrusos de Ordenador
HUELLA IDENTIFICATIVA: información muy precisa que permite identificar un
sistema o una red en concreto. En inglés, fingerprinting.
ICMP: Internet Control Message Protocol.
IANA: Internet Assigned Numbers Authority
Indexación de Directorio: Una característica común a los servidores web más
populares, que expone el contenido de un directorio cuando no está presente la
página de índice. Véase también "Ubicación del archivo predecible".
Insuficiente Autenticación: cuando un sitio web permite a un atacante
acceder a contenido sensible o a sus funcionalidades sin verificar su
identidad. Véase también "Autenticación".
Insuficiente Autorización: Cuando un sitio web permite a un atacante
acceder a contenido sensible o a sus funcionalidades que deberían requerir
mayores restricciones de acceso y control. Véase también "Autorización".
78
IDS (Intrusion Detection System): Sistema de detección de Intrusos. Es una
herramienta que permite monitorear el comportamiento y el uso que se le da a los
recursos en una máquina y detectar si alguien está haciendo algo indebido.
IEEE: Tecnología desarrollada por Apple Computer en 1986 que permite transmitir
información a alta velocidad. Fue adoptado como estándar en 1995 y es similar al
puerto USB.
IEEE 802.3 proporciona una LAN estándar desarrollada originalmente por Xerox y
ampliada. Define dos categorías: banda base (específica una señal digital) y banda
ancha (especifica una señal analógica). IEEE define únicamente una especificación
para la categoría de banda ancha. Sin embargo, la restricción de la máxima longitud
del cable puede cambiar usando dispositivos de red tales como repetidores o
puentes.
INTEGRIDAD: los datos reflejen la realidad y que correspondan con lo que debe
ser y no ha sido modificadas indebidamente.
INTERNET CONTROL MESSAGE PROTOCOL (ICMP): protocolo encargado de
realizar el control de flujo de los datagramas IP que circulan por la red.
INTERNET PROTOCOL (IP): protocolo para la interconexión de redes.
INTEGRIDAD: Los datos reflejan la realidad y que correspondan con lo que debe
ser y no ha sido modificadas indebidamente.
Java:
Lenguaje
de
programación
popular
desarrollado
por
Sun
Microsystems (tm). Véase también "ActiveX controls", "Navegador Web",
"JavaScript", "Client-Side Scripting".
Java Applets: Un applet es un programa escrito en un lenguaje de programación
como Java que puede ser incluido en una página web. Cuando un
navegador web tiene habilitado java, y la página contiene applets , el
código es ejecutado por la máquina virtual de Java (JVM). Véase también "Web
Browser "," Java "," ActiveX "," JavaScript "," Client-Side Scripting ".
JavaScript: Lenguaje de scripting del lado cliente utilizado por el navegador web,
para crear contenido dinámico página web. Véase también "ActiveX", "Java
Applets "," Client-Side Scripting ".
LDAP Inyección: Una técnica para la explotación de un sitio web mediante la
alteración de backend sentencias LDAP a través de la manipulación de entrada de
79
la aplicación. Al igual que en la metodología de inyección SQL. Véase también
"Parámetro Manipulación "," Manipulación de campos de formulario”.
MAC: Media Access Control
Manipulación Cookie: La alteración o modificación de los valores de las cookies
del navegador web del cliente, para explotar aspectos de seguridad dentro de una
aplicación web. Los atacantes normalmente manipulan los valores de los cookies
para autenticarse y realizar fraudes a la aplicación web. Este es un típico ejemplo
de establecer por defecto la configuración predeterminada de los navegadores .
Véase también "Cookie".
Manipulación de Nombre de Archivo: Una técnica de ataque usada para explotar
sitios web mediante la manipulación de los nombres de archivo de URL para
provocar errores de aplicación, descubrir el contenido oculto, o visualizar el código
fuente de una aplicación. Véase también "Ubicación del archivo predecible".
MODEM ADSL: Modula las señales enviadas desde la red local para que puedan
transmitirse por la línea ADSL y demodula las señales recibidas por ésta para que
los equipos de la LAN puedan interpretarlos. De hecho, existen configuraciones
formadas por un módem ADSL y un router que hacen la misma función que un router
ADSL.
MTU: Maximum Transfer Unit
MySQL: Es un sistema de gestión de base de datos relacional y multiusuario ubica
las tablas en ficheros diferenciados, es recomendable para desarrollos que
necesiten manejar numerosos registros y sesiones simultaneas.
NIDS: Sistema de detección de intrusos de Red.
NMAP: Programa de código abierto que abierto que sirve para efectuar rastreo de
puertos TCP y UDP. Se usa para evaluar la seguridad de sistemas informáticos así
como para descubrir servicios o servidores en una red informática.
NMS (Network Management Station): estación de red encargada de gestionar
varios dispositivos de red.
OID (Object ID): identifica de manera única cada objeto representado en la MIB y
es una secuencia de números enteros no negativos separados por un punto.
OSI: El Modelo OSI es un lineamiento funcional para tareas de comunicaciones y,
por consiguiente, no especifica un estándar de comunicación para dichas tareas.
80
OWASP:(The Open Web Application Security Project).
PDU (Protocol Data Unit): define la estructura de la información que va a ser
enviada por la red.
PHP: Es Un lenguaje de programación interpretado, diseñado originalmente para la
creación de páginas web dinámicas. Es usado principalmente en interpretación del
lado del servidor (server–side scripting) pero actualmente puede ser utilizado desde
una interfaz de línea de comandos o en la creación de otros tipos de programas
incluyendo aplicaciones con interfaz grafica.
PUERTA DE ENLACE: Es La que proporciona salida hacia el exterior a una red
local.
ROUTER: Es un dispositivo que permite conectar uno o varios equipos o incluso
una red de área local (LAN) a Internet a través de una línea telefónica con un servicio
ADSL.
Revelación de Información: Cuando un sitio web revela datos sensibles, tales
como comentarios de los desarrolladores o mensajes de error, lo que ayuda a un
atacante a explotar el sistema.
Servidor de aplicaciones: Un servidor de software, normalmente a través de
HTTP, que tiene la capacidad de ejecutar aplicaciones web dinámicas. También se
conoce como middleware.
RRDTOOL: Herramienta que trabaja con una base de datos que maneja
planificación según Round-Robin. Esta técnica trabaja con una cantidad de datos
fija, definida en el momento de crear la base de datos, y un puntero al elemento
actual. Su finalidad principal es el tratamiento de datos temporales y datos seriales
como temperaturas, transferencias en redes, cargas del procesador, entre otros.
SNMP: (Simple Network Managment Protocol): usado para administrar la
configuración de dispositivos de red desde una estación de trabajo.
SMI (Structure of Management Information): define agrupaciones, nombres, tipos
de datos permitidos y la sintaxis para escribir MIB’s.
SYN: Bit de control dentro del segmentoTCP.
SYN FLOODING: Ataque de denegación de servicio que se basa en no
complementar intencionadamente el protocolo de intercambio de TCP.
TCP: Transmission Control Protocol.
81
TCP/IP: Es la base de Internet, y sirve para enlazar computadoras que utilizan
diferentes sistemas operativos, incluyendo PC, minicomputadoras y computadoras
centrales sobre redes de área local (LAN) y área extensa (WAN)
TIA:
Telecommunications Industry Association.
TRANSMISSION CONTROL PROTOCOL (TCP): Protocolo de transporte de la
arquitectura de protocolos TCP/IP.
TTL: Time To Live
UDP: User Datagram Protocol.
USER DATAGRAM PROTOCOL (UDP): protocolo de transporte de la arquitectura.
USM (User-based Security Model): modelo de seguridad utilizado por SNMPv3
para administrar el envío de mensajes SNMPv3.
Ubicación de Archivo Predecible: Una técnica que se utiliza para acceder a los
datos ocultos de un sitio web o a su contenido o funcionalidad, haciendo conjeturas,
de forma manual o automáticamente a los los nombres y ubicaciones de los
archivos. Los lugares pueden incluir directorios, archivos de configuración de copia
de seguridad archivos, archivos temporales, etc
Validación de proceso insuficiente: cuando un sitio web permite a un
atacante para eludir o evadir el control de flujo previsto de un
aplicación.
VACM (View-based Access Control Model): modelo de control de acceso que
permite administrar quien tiene acceso a qué información en la MIB.
WINPCAP: Es el mejor motor de captura de paquetes y filtrado de muchas de las
herramientas de las herramientas de red comerciales y de código abierto,
incluyendo analizadores de protocolos, monitores de red, sistemas de detección de
intrusos de red.
82
ANEXOS
ANEXO 1:
OWASP Top 10. Traducido al español: Documento pdf de 22p.
Copyright © 2003 – 2010 Fundación
OWASP
Este documento es publicado bajo la licencia Creative Commons Attribution ShareAlike 3.0. Para
cualquier reutilización o distribución, usted debe dejar en claro a otros los términos de la licencia
sobre este trabajo.
ANEXO 2: Informe que compara las licencias de desarrollo, la tecnología y las
fuentes de los diferentes escáneres.
ANEXO 3: Informes comparativo de la detección de vulnerabilidades de los distintos
escáneres probados:
ANEXO 4: Informe que compara las características complementarias de detección
de vulnerabilidad en los buscadores probados:
ANEXO 5: Informe donde se comparan las características de usabilidad, cobertura
y estabilidad de los buscadores probados:
83
FUENTES DOCUMENTALES

LUIS GÓMEZ FERNÁNDEZ Y ANA ANDRÉS ÁLVAREZ . Guía de aplicación de la Norma UNEISO/IEC 27001 sobre seguridad en sistemas de información para pymes. 2.ª edición Autores:
© AENOR (Asociación Española de Normalización y Certificación), 2012 Todos los derechos
reservados. AENOR. ISBN: 978-84-8143-7 áÜ - ß Impreso en España Edita: AENOR Maqueta
y diseño de cubierta: AENOR
Disponible en internet http://site.ebrary.com/lib/unadsp/Doc?id=10637105&ppg=2 Con
acceso Noviembre de 2012

Miguel Colobran Huguet, Josep Maria Arqués Soldevila y Eduard Marco Galindo. Editorial
UOC Primera edición en lengua castellana: noviembre 2008. España: Editorial UOC, 2008.
p 4.
Disponible en Internet < http://site.ebrary.com/lib/unadsp/Doc?id=10638510&ppg=5>
con acceso Octubre de 2012

HOWARD, MICHAEL LEBLANC, DAVID. 19 puntos críticos sobre seguridad de software:
fallas de programación y cómo corregirlas. Pág: 305. Editorial: McGraw-Hill Professional
Publishing Ubicación: México. Fecha de publicación: 12/2010. Idioma: es pISBN:
9789701058985

DÍAZ, GABRIEL MUR, FRANCISCO SANCRISTÓBAL, ELIO. Seguridad en las comunicaciones y
en la información. Páginas: 473. Editorial: UNED - Universidad Nacional de Educación a
Distancia. Ubicación: España. Fecha de publicación: 2004. Idioma: es
Número de clasificación de la Biblioteca del Congreso: eISBN: 9788436247893

JUSTIN, CLARKE. SQL Injection Attacks and Defense. Syngress Publishing, Inc. Elsevier,
Inc. 30 Corporate Drive ISBN 13: 978-1-59749-424-3.

CUI-MEI, B. Intrusion Detection Based on One-class SVM and SNMP MIB data.
Shandong University of Technology Zibo. China 2009. Fifth International
Conference on information Assurance and Security, p. 346-351.

SCHUBA, C; KRSUL, I; KUHN, M; SPAFFORD, E; SUNDARAM, A y
ZAMBONI,D. Analysis of Denial of Service Attack on TCP. COAST Laboratory.
Departament of Computer Sciences Purdue University, p. 66-82.

TSUNODA, H ; OHTA, K[b]; YAMAMOTO , A; ANSARI, N [d]; WAIZUMI, Y , y
NEMOTO, Y . Detecting DRDoS attacks by a simple response packet confirmation
mechanism. Computer Comunications Journal. 2008, p. 3299-3307
84

CARVAJAL, A. Introducción a las técnicas de ataque e investigación Forense,
Un enfoque pragmático. Colombia, Agosto de 2007, seg Ed, p. 245

CRUZ, A y TORRES, P. Sistema para Generar Gráficas a Partir de Logs
Tcpdump usando Hadoop. Escuela Superior Politécnica del Litoral. Guayaquil,
Ecuador, p. 59

HIA, H y MIDKIFF, S. Securing SNMP Across Backbone Networks. Bradley
Departament of Electrical and Computer Engineering. Virginia Polytechnic
Insttitute and State University. Virgini USA, p . 190-198.

ZENG, W y WANG, Y. Design and implementation of Server Monitoring System
Based on SNMP. College of Information & Technology, Hebei University of
Economics & Business. Information and Network Management Center, North
China Electric Power University, p. 680-682

HATEFI, F y GOLSHANI, F. A new framework for secure network
management. Departament of Computer Science and Engineering, Arizona State
University, Tempe, USA. 1999, p. 629-636.

BERNSTEIN. J. Daniel. Bernstein's own explanation of SYN Cookies Disponible
en Internet. http://cr.yp.to/syncookies.html
85
Descargar