Content uploaded by Carlos Soriano
Author content
All content in this area was uploaded by Carlos Soriano
Content may be subject to copyright.
Seguridad en Sitios Web
No confíes en el Usuario
Carlos R. Soriano López
Escuela de Computación, Facultad de Ingeniería
Universidad Don Bosco
Soyapango, San Salvador, El Salvador
csoriano@sorianocarlos.com
Abstract—Este artículo presenta cómo las vulnerabilidades
pueden ser detectadas y explotadas del lado del usuario sin tener
acceso físico al servidor que aloja el Sitio o Sistema Web.
Keywords—Seguridad;Web;Usuario
I. INTRODUCCIÓN
En la era de la información y de las “comodidades en línea”
la personas con acceso a internet tienden a buscar información,
entretenerse, comunicarse y hasta realizar transacciones
financieras en “La Red de redes”. Por esta razón las empresas
y cualquier persona que desee ganar dinero por internet debe
tener presencia en esta a través de sitios web para
promocionarse u ofrecer servicios en línea a sus clientes a
través de portales para acceder a esta audiencia masiva. Pero
hay que tomar precauciones y medidas de seguridad en nuestro
“fron-end” en internet ya que el visitante no siempre tiene
propósitos benignos.
II. EL PUNTO DE VISTA DE NUESTRO ATACANTE
A. ¿Qué obtiene al vulnerar el sitio/sistema?
Los atacantes pueden tener distintos propósitos como: (1)
Obtener información sensible de la empresa o usuario, (2)
dañar la imagen del sitio/empresa (3) e inclusive por diversión
o reconocimiento.
B. ¿Cómo vulnera mi seguridad?
La forma en que los atacantes vulneran nuestra seguridad
pueden ser tan simples como (1) enviar información sin
encriptar, (2) no tomar en cuenta los valores por defecto en las
entradas del usuario ó (3) no validar que la entrada del usuario
sea un valor permitido.
III. MÉTODOS DE ATAQUE COMUNES
La mayoría de ataques pueden ser realizados por personas
con conocimientos medios de informática, aunque actualmente
existen herramientas automatizadas que permiten a cualquier
usuario con conocimientos básicos realizarlo.
Es importante tener conocimiento de estos métodos de
ataques para poder prevenirlos:
A. SQL Injection(SLQi)
Consiste en la inyección de código SQL en la información
que envía el usuario hacia el servidor logrando obtener, insertar
ó modificar la información directamente a la base de datos que
usa el sistema/sitio.
B. Exploits
Exploit (del inglés to exploit, „explotar‟ o „aprovechar‟) es
una pieza de software, fragmento de datos o secuencia de
comandos y/o acciones, utilizada con el fin de aprovechar una
vulnerabilidad de seguridad de un sistema de información para
conseguir un comportamiento no deseado del mismo[1].
Este ataque es mucho más fácil cuando se usa un CMS o
sistemas Open Source o en los que se tiene acceso al código
fuente, ya que es posible usar ingeniería inversa ver las fallas
que pueda tener; agregando que existe una amplia base de
datos donde explican las vulnerabilidades específicas de estos.
Igualmente la “prueba y error” al inducir mal funcionamientos
en el sistema y detectar las vulnerabilidades similar al método
XSS a ciegas.
C. Robo de Cookies
Una forma de suplantar la identidad o tener acceso de otra
persona en un sitio o plataforma web es usando las cookies de
ese usuario y usarlas como nuestras; así el servidor nos
identificará como el usuario al que se le obtuvo la cookie (el
impacto puede ser muy grande si se suplanta al administrador
del sitio).
Para lograr robar las cookies se pueden usar varios métodos
entre los cuales están: (1) acceso a la PC del usuario, (2) usar
técnicas de “spoofing” para interceptar el tráfico de la red y
obtener las cookies, (3) usar técnicas de XSS para obtener las
cookies remotamente; entre otras.
D. Cross-Site Scripting (XSS)
XSS, del inglés Cross-site scripting es un tipo de
inseguridad informática o agujero de seguridad típico de las
aplicaciones Web, que permite a una tercera parte inyectar en
páginas web vistas por el usuario código JavaScript o en otro
lenguaje script similar (ej: VBScript), evitando medidas de
control. [2].
Existen 3 métodos de XSS:
1) Indirecto: se logra al cambiar parámetros en cualquier
dato que pueda ser manipulable por el usuario como y
sea usado por la aplicación web: (1) campos ocultos
en formularios, (2) campos de entrada en formularios,
(3) parámetros visibles en la URL (método GET), (4)
valores de las cookies ó cualquier valor que se
transfiera para realizar una acción .
2) Directo: consiste en inyectar código malicioso en la
página que se muestra y lograr manipular la
aplicación y obtener los datos que el atacante crea
relevantes como cookies, IP, etcétera.
3) A ciegas: el atacante lo único que puede observar es el
comportamiento de la aplicación a partir del ensayo
“prueba y error” variando parámetros y consultas.
E. Ingeniería Social
La Ingeniería social es una de las herramientas más eficaces
para lograr romper la seguridad; siendo esta usada por el
Maestro de la Ingeniería Social Kevin Mitnick para irrumpir
en sistemas “altamente seguros” los cuales dieron suficiente
material para libros y producciones cinematográficas de
ficción.
Esta técnica mas allá de las técnicas que puedan ser
aplicables a Hardware y Software para vulnerar la seguridad
considera el punto humano como fallo y la posibilidad que
interprete de manera errónea o incumpla las políticas de
Seguridad. Manipular a la persona que nos atiende por el
teléfono quien también tiene ciertos “privilegios” de
información para poder “ayudarnos” e igualmente con la
recepcionista en el edificio donde están los servidores puede
brindarles una gran cantidad de información y accesos sin
necesidad de tener “grandes conocimientos técnicos”.
IV. ESTÁNDARES INTERNACIONALES QUE DAN SOPORTE A
LA SEGURIDAD
Existen varios estándares y marcos de trabajo que ayudan a
una correcta implementación de buenas prácticas y controles
que permiten asegurar la información, la cual es el principal
activo en Internet.
En este artículo mencionaremos solamente uno:
A. ISO/IEC 27002
Anteriormente se denominaba ISO/IEC 17799 publicada en
1995 pero luego de varias revisiones se lanzó en el 2000 como
ISO/IEC 27002 .
ISO/IEC 17799 proporciona recomendaciones de las
mejores prácticas en la gestión de la seguridad de la
información a todos los interesados y responsables en iniciar,
implantar o mantener sistemas de gestión de la seguridad de la
información. La seguridad de la información se define en el
estándar como "la preservación de la confidencialidad
(asegurando que sólo quienes estén autorizados pueden acceder
a la información), integridad (asegurando que la información y
sus métodos de proceso son exactos y completos) y
disponibilidad (asegurando que los usuarios autorizados tienen
acceso a la información y a sus activos asociados cuando lo
requieran)" [3].
V. BUENAS PRÁCTICAS PARA EVITAR Y DETECTAR
VULNERABILIDADES
A. Encriptar Información Sensible
Se debe encriptar la transmisión y almacenamiento de
cualquier información que comprometa la seguridad de una
persona o de una empresa minimizando el impacto de cualquier
intrusión al obtener datos “indescifrables”. Estos datos no
deben ser recuperables, sino mas bien comparar el hash
almacenado con el hash del dato que se desea verificar .
B. Mantener el Software y Hardware actualizados
Una vez detectadas vulnerabilidades se deben de crear
parches o versiones corregidas las cuales deben de ser
implementadas tan pronto hayan sido aprobadas como
estables. Estas vulnerabilidades generalmente son detectadas
por “personas ajenas” los cuales son los que ayudan a
acrecentar las bases de datos públicas de Exploits.
C. Mantener fuera del área de acceso público que
comprometan la seguridad y privacidad
Varios directorios y archivos deben mantenerse fuera del
alcance de los visitantes, como puede ser el directorio de
almacenamiento de archivos subidos ya que pueden subir una
Shell (script que permite ejecutar comandos y sentencias) que
permita manipular en cierta forma el servidor (si es necesario
tener una zona de subidas de archivos, el usuario podrá tener
acceso a este descargándolo evitando la ejecución del archivo),
el archivo de configuración que contiene las credenciales de
acceso a la base de datos u otra API necesaria para el
funcionamiento del sitio.
D. Validar los datos ingresados por el usuario
”No confíes en el usuario”; es una buena práctica validar
las entradas del usuario, los valores por defecto que toma una
variable al dejarla en blanco, verificar que no esté ingresando
código malicioso (XSS); no necesariamente porque pueda ser
un posible atacante sino para evitar inconsistencia de datos o
los famosos “missing values” que no aportan nada a la
información y carecen de sentido para el fin que fueron
creados. Una buena forma de validar estas entradas es usando
expresiones regulares y agregando un “slash” ( / ) cuando sea
detectado código ejecutable dejando este inoperable.
E. Registrar los accesos y acciones del usuario
Es necesario tener datos relevantes para lograr detectar
vulnerabilidades en una etapa temprana, detectar anomalías en
el comportamiento de un usuario y/o aplicación y para un
análisis forense en el caso que haya sido explotada
comprometiendo el Sistema.
F. Mostrar únicamente información relevante de las
tecnologías usadas
Hay cierta información irrelevante para el usuario como:
(1) CMS usado, (2) Tipo de Servidor, (3) Versión del Servidor
Web, etc. ; pero también hay información que necesitaría saber
para darle tranquilidad el certificados SSL y la empresa que lo
valida. El atacante al tener esta información es capaz de buscar
en las bases de datos de Exploits para la versión
correspondiente y vulnerar la seguridad; por eso no es
recomendable mostrar información que el usuario no necesite
para usar el sitio/sistema, pero sí hay que tener en cuenta por
tema de licenciamientos y reconocimientos de autor por ello
hay que buscar la solución más óptima a esta problemática.
G. Realizar Test de Penetración
Es una buena práctica realizar regularmente ataques “con
permiso” para determinar las vulnerabilidades que presenta
nuestro sitio/sistema.
Existen suites de software especializadas para este fin que
son utilizadas por expertos en seguridad informática e inclusive
por los mismos atacantes.
VI. CONCLUSIONES
El usuario/visitante es la razón por la cual se tienen
servicios en la web y se debe ofrecerle una experiencia óptima
y darle tranquilidad haciéndole saber que su información está
segura y no será malversada; y como organización se tiene el
compromiso de cumplirlo eliminando las vulnerabilidades del
sistema.
REFERENCIAS
[1] Exploit. (2013, 23 de septiembre). Wikipedia, La enciclopedia libre.
Fecha de consulta: 18:12, octubre 01, 2013 desde
http://es.wikipedia.org/w/index.php?title=Exploit&oldid=70119389.
[2] Cross-site scripting. (2013, 7 de marzo). Wikipedia, La enciclopedia
libre. Fecha de consulta: 19:37, octubre 01, 2013 desde
http://es.wikipedia.org/w/index.php?title=Cross-
site_scripting&oldid=64415763.
[3] ISO/IEC 27002. (2013, 10 de septiembre). Wikipedia, La enciclopedia
libre. Fecha de consulta: 20:01, octubre 10, 2013 desde
http://es.wikipedia.org/w/index.php?title=ISO/IEC_27002&oldid=69536
706.