Documentos de Académico
Documentos de Profesional
Documentos de Cultura
BOGOTÁ
2020
Tabla de contenido
Resumen.........................................................................................................................3
Abstract..........................................................................................................................4
Introducción...................................................................................................................5
Objetivo General.............................................................................................................6
Objetivos Específicos......................................................................................................6
1. TIPOS DE VULNERABILIDADS...........................................................................7
1.1. Vulnerabilidades de Cross Site Scripting (XSS)....................................................7
1.2. Vulnerabilidad SQL (Inyección)...........................................................................8
1.3. Vulnerabilidades de denegación del servicio DoS - DDoS...................................11
1.4. Vulnerabilidades de desbordamiento de búfer.....................................................14
1.5. Vulnerabilidades de condición de carrera...........................................................16
2. Metodología de intrusión PTES.............................................................................18
3. Herramienta de análisis de vulnerabilidades NESSUS...........................................18
Conclusiones................................................................................................................19
4. BIBLIOGRAFÍA...................................................................................................20
Resumen
A la par con el nacimiento de la computación, también surgieron los desarrollos de software que le
permitía a las maquinas, en ese entonces bastante primitivas, funcionar. Si bien es cierto que las
maquinas procesaban la información de forma correcta y precisa, lo cierto es que el software que las
controlaba era de desarrollo proveniente del hombre, tanto en su diseño como en su lógica y por
consiguiente bastante factible era que tuviera toda clase de errores.
Con el paso de los tiempos, los errores de código han disminuido, y gran parte de esta mejora se le
debe a los nuevos lenguajes de programación que son mas flexibles en su lógica y arquitectura y
también se debe a la facilidad de conseguir información en la red de cómo administrar dichos
lenguajes.
No obstante, aún, en pleno siglo XXI todavía se encuentran infinidad de errores de programación
cuando se ejecuta un software, lo cual da cabida a baches que son aprovechados por los
malintencionados.
Palabras clave:
Desarrollo de software: “cuando se hace referencia al desarrollo de software, se está hablando del
desarrollo de programas, los cuales deben cumplir una serie de etapas o fases, para poder funcionar
con otros métodos ya establecidos en otras disciplinas de ingeniería.”
Vulnerabilidad: "En materia de la Seguridad Informática, se define como una debilidad presente en
un sistema informático el cual afecta y/o compromete la Seguridad de este componente, lo que le
permitiría a un atacante explotar y violar la confidencialidad, integridad, disponibilidad y el control
de acceso, así como la consistencia del sistema y de la información contenida y resguardada en el
mismo."
Along with the birth of computing, there were also software developments that allowed the
machines, at that time quite primitive, to function. While it is true that the machines processed the
information correctly and accurately, the truth is that the software that controlled them was of
development from man, both in its design and in its logic and therefore quite feasible was that it had
all kinds of errors.
With the passage of time, code errors have decreased, and much of this improvement is due to the
new programming languages that are more flexible in their logic and architecture and also due to
the ease of obtaining information in the network of how to manage these languages.
However, even in the 21st century there are still plenty of programming errors when running a
software, which accommodates potholes that are exploited by the malicious.
Keywords:
Software development: "when referring to software development, we are talking about the
development of programs, which must meet a series of stages or phases, in order to work with other
methods already established in other engineering disciplines."
Dichas vulnerabilidades son el resultado de fallos en la construcción del software, no obstante, una
vulnerabilidad, también puede ser producto de limitaciones que tiene el mismo sistema, se puede
decir que tecnológicamente no fue diseñado para ciertas tareas que se le obligan a realizar bajo
ciertos criterios.
Se pueden catalogar las vulnerabilidades en dos grupos grandes, el primero de ellos se denomina
vulnerabilidad teórica, y el segundo (el que nos interesa ahora mismo) se conoce como
vulnerabilidad real o popularmente en el mundo de la ingeniería el Exploit.
Los exploits son todas las conocidas vulnerabilidades en aplicaciones y SO que se corrigen
mediante el famoso parcheo, a grandes rasgos, las vulnerabilidades de software y sistemas
informáticos son causales de problemas constantes para las compañías y usuarios, como bien se
menciona anteriormente, nos internaremos en un espacio donde se describen algunos casos de
vulnerabilidades para entender mejor la problemática.
Objetivo General
Objetivos Específicos
Desarrollar habilidades para mitigar los riesgos que generan las vulnerabilidades en los
sistemas.
1. TIPOS DE VULNERABILIDADS
Generalidades:
También conocida como ejecución de comandos en sitios cruzados es una de las mas populares, a
continuación, se describirá como funciona, como afecta a las victimas y como prevenirlo.
Lo primero que hay que tener en cuenta es que con esta vulnerabilidad el atacante explota la
confianza que un usuario tiene en un sitio en particular, esta vulnerabilidad puede ser explotada de
de dos formas: la primera de ellas es la forma reflejada y la segunda se denomina almacenada, a
continuación, se explica cada una.
Reflejada: Consiste en alterar valores que una aplicación web utiliza para pasar variables entre dos
paginas, en ejemplo usual es hacer que a través de una navegador se ejecute un mensaje de alerta en
JS, usando XSS el atacante logra robar las cookies para posteriormente robar la identidad, sin
embargo para esto, el atacante debe conseguir que la victima ejecute un determinado comando
dentro de su dirección web, teniendo en cuenta esto los criminales informáticos suelen enviar mails
engañosos con el fin de que sus victimas hagan clic en un enlace disfrazado y que de esta manera se
produzca el robo.
Almacenada: Consiste en insertar código HTML peligroso en sitios que lo permitan, de esa manera
la modificación quedará visible
Cuando un sitio web tiene dicha vulnerabilidad el atacante puede realizar varios tipos de ataques
basándose en la confianza que el sitio produce en el usuario y posterior victima, desde redirigir a
otro sitio para robar información mediante la técnica de phishing, hasta lograr que la victima
descargue alguna amenaza y posteriormente se ejecute en el sistema, a fin de cuentas, la técnica
XSS puede ser peligrosa para el usuario incluso en un sitio legítimo.
¿Cómo se produce?
Usualmente se debe a la nula o baja frecuencia en controles necesarios en los sitios web, el
administrador debe pensar como se puede vulnerar su sitio y buscar la forma de bloquear la
ejecución de comandos o modificaciones en su código, pero al no hacerlo los ciberdelincuentes
pueden lograr ejecutar scripts en lenguajes populares como JS, HTML u otros lenguajes, estos
scripts son una cadena de ordenes a ejecutar y de esta manera realizar modificaciones en una web
que se cree visualmente confiable.
A modo de ejemplo se planteará a continuación una situación que perfectamente puede ser replicada
en un entorno real:
Generalidades:
Se puede hablar de que se produjo una “inyección SQL” cuando, de alguna forma se logró insertar o
inyectar un código SQL malicioso dentro de un código SQL programado, eso con el fin de
modificar el programa y hacerlo funcionar de manera incorrecta para lograr que en efecto se ejecute
un porcentaje del código invasor que se inyectó en la BD, como se menciona anteriormente esta
intrusión es de carácter malicioso, tienda a dañar o espiar y por lo tanto es un problema en cuando a
la seguridad informática se refiere y por supuesto debe ser tenido en consideración por quién
programa la aplicación con el objetivo de prevenirlo.
Cuando un software se elabora con descuido o desconocimiento de este riesgo, podrá ser vulnerable
y por ende la seguridad del sistema (BD) podrá quedar altamente comprometida. Esta intrusión se
puede presentar durante la ejecución del software que fue vulnerado, bien sea desde un PC de
escritorio o desde un sitio web, para este caso, obviamente se debe ejecutar en el servidor que aloja
la aplicación.
Inyección por error: Es el más común y por ende el más fácil de encontrar pues la misma
aplicación va mostrando los errores de la BD cuando se están usando ataques de SQL Injection, con
este error es muy sencillo conseguir cualquier información de la base, pues se puede tener acceso a
estructuras, nombres de campos y en algunos casos datos.
Inyección por unión: Este ataque básicamente consiste en que una pagina web devuelve un
resultado, por ejemplo, todos los restaurantes gourmet en Bogotá, ahí es donde el atacante añade al
resultado original el resultado de otra query, ejemplo, todos los usuarios y contraseñas de la pagina
web y hace que las dos querys salgan en esa página de resultados.
Inyección ciega: Es el ataque mas complejo y avanzado, cuando el ataque por error y por unión no
resultan favorables para el atacante se usa esta alternativa. Hay dos tipos de ataque ciego:
Datos Exfiltración: La exfiltración de datos a través de inyección de SQL consiste en encontrar una
vulnerabilidad que le permite al atacante la lista de todas las tablas y volcar las cuentas de usuario,
mails y passwords, este tipo de ataque ha contribuido a algunas de las violaciones de seguridad más
grandes de la historia hasta la fecha.
¿Cómo se produce?
Se asume que el siguiente código se encuentra en una aplicación web y que hay un parámetro
“N_User” que tiene el nombre de un usuario que se quiere consultar, una inyección de SQL se
puede producir de la siguiente forma:
Si el ingeniero escribe un nombre, por ejemplo “CAMILO”, no sucederá nada fuera de lo normal,
simplemente la aplicación generará una sentencia SQL similar a la que será descrita a continuación,
que es perfectamente correcta en donde se listaran todos los registros con coincidan con el nombre
“CAMILO” en la BD:
CAMILO'; DROP TABLE USUARIOS; SELECT * FROM DATOS WHERE NOMBRE LIKE '%
3. Siempre verificar los datos que ingresa el usuario: Si en una consulta se espera recibir un
dato tipo int, no hay que esperar que efectivamente así sea, es aconsejable tomar medidas
preventivas de seguridad y realizar una comprobación para identificar que efectivamente se
trata de un dato tipo int, para esto, la mayoría de los lenguajes de programación ofrecen
funciones que realizan dicha comprobación. También se aconseja validar la cantidad de
caracteres que se reciben, por ejemplo, si se quiere capturar el número de celular (contiene
13 dígitos) y se percibe una entrada con muchos mas caracteres se puede suponer que se
trata de un ataque de SQL Injection.
4. Mínimos privilegios: El usuario que se use para conectarse a la BD desde el código propio
con el fin de realizar cualquier acción de administración debe contar con los privilegios
justos para dichas acciones, es recomendable no usar usuario tipo ROOT con acceso a todas
las BD, pues ingresar con tantos privilegios le da oportunidad al atacante de poder acceder a
la información por medio de un ataque.
Generalidades:
Un ataque de denegación de servicios (DoS – Denial Of Service) tiene como propósito impedir el
ingreso a los servicios y recursos de una organización por un espacio indefinido de tiempo,
usualmente este tipo de ataques se dirige a los servidores de una empresa con el fin de que no
puedan usarse ni consultarse.
La DoS es una compilación que puede afectar a cualquier servidor en una compañía o a usuarios
conectados en la red, su propósito no es recuperar ni alterar información, sino en damnificar la
reputación de las empresas que tienen presencia en internet y de esta manera afectar el desarrollo
normar de sus actividades.
Entrando en la materia técnica, estos ataques no son muy complejos, sin embargo, no por esto dejan
de ser efectivos de cara a atacar sistemas operativos Windows, Linux o cualquier otro OS, en su
mayoría, los ataques DoS aprovechan las vulnerabilidades relacionadas con la implementación de
protocolos TCP/IP.
¿Cómo se genera? Mediante la saturación de puertos por los cuales fluye información, consiguiendo
que el servidor se sobrecargue y no consiga seguir prestando su servicio normal, es por esto que se
le denomina “denegación”, pues logra que el servidor no dé abasto a todas las solicitudes que
recibe.
DoS por saturación: Saturan el equipo (servidor) con solicitudes para que no puedan responder a las
solicitudes reales que se le realizan.
DoS por explotación de vulnerabilidades: Aprovechan una vulnerabilidad para hacer que el sistema
sea inestable.
Los DoS envían paquetes IP o datos con tamaños anormales o formatos atípicos para el sistema que
saturan los equipos de destino y los hacen inestables, por lo tanto, imposibilitan el funcionamiento
normal de los servicios de red que se brindan, cuando varios equipos activan una DoS, el proceso se
conoce como sistema distribuido de denegación de servicios (DDoS), entre los más populares están
Tribal Flood, Network TFN y Trinoo.
¿Cómo se produce?
Hay varios métodos de ataque relacionados con el DoS, a continuación, se referencia cada uno:
Inundación SYN: Una inundación SYN es un ataque DoS que buscar dejar sin disponibilidad un
servidor con el objetivo de legitimar el trafico al consumir todos los recursos disponibles del server.
Esto ataques funcionan bajo la explotación de procesos de protocolo en una conexión TCP. Se
envían paquetes TDC/SYN, en la mayoría de veces con la dirección de origen falsa, cada uno de
estos paquetes que se reciben son tratados por el destino como una solicitud de conexión, esto causa
que el servidor intentes establecer conexiones respondiendo con paquetes TCP/SYN-ACK y
esperando un paquete de respuesta TCP/ACK, no obstante, teniendo en cuenta que la dirección de
origen no es real o la IP real no ha solicitado conexiones, nunca llega una respuesta y como
conclusión, como se mencionó anteriormente, dichos intentos de conexión consumen recursos del
servidor y saturan la cantidad de conexiones que se pueden establecer, reduciendo así la
disponibilidad del servidor para responder a solicitudes reales de conexión.
Inundación ICMP: Es una técnica DoS que pretende saturar y agotar el ancho de banda del
afectado, consiste básicamente en enviar de manera constante una gran cantidad de paquetes ICMP
request (ping) de un tamaño considerable, de tal manera que va a responder con paquetes ICMP
reply (pong) lo que se traducirá en una sobrecarga de la red y del sistema de la víctima. Si en la
relación en capacidad de procesamiento del atacante y la victima es mayor la capacidad del atacante
será más rápido que la red y sistema de la víctima se degrade.
Inundación UDP: Este ataque se basa en generar cantidades abundantes de paquetes UDP contra la
víctima, teniendo en cuenta las características de conexión del protocolo UDP, este tipo de ataques
usualmente vienen de la mano con una IP spoofing, normalmente este ataque va dirigido a
maquinas que ejecutan servicios Echo (Reques y Reply), de tal manera que se generan mensajes
Echo de un gran tamaño hasta saturar el protocolo.
Si se trata de proteger una red interna, las recomendaciones de seguridad para evitar ser victima de
DoS son las siguientes:
1. Ubicar el servidor en una DMZ, evitando así que un delincuente informático logre ingresar
a la red interna y vulnerar el server.
2. Implementar un sistema de detección y prevención de intrusiones (IDS/IPS) que monitoree
las conexiones y alerte en caso de detección de intentos de acceso no autorizados o una
mala utilización de los protocolos.
3. Usar software con funcionalidad mixta (antivirus, cortafuegos), como un UMT que permita
gestionar de forma unificada las amenazas que puedan afectar a la compañía.
Si se trata de proteger un hosting las medidas básicas de seguridad son las siguientes:
1. El ancho de banda: se debe contar con el mayor ancho de banda posible, de esta manera, es
posible gestionar de manera mas eficaz los picos de trafico que causan las denegaciones de
servicio.
2. Redundancia y balance de carga: la redundancia consiste en tener un servidor igual y un
balanceador de cargas que se mueva de un servidor a otro en función de la carga de trabajo
que se esté soportando, con esto se logra reducir el riesgo de ataques DoS, pues la
probabilidad de detener el server por sobrecarga es mas remota, teniendo en cuenta que
tiene otro servidor que hace la redundancia.
Generalidades:
Los ataques por desbordamiento de búfer están diseñados para iniciar una ejecución de un código x
en un software para que llegue una cantidad desmedida de datos mayor al que tiene capacidad de
recibir, un software que permite datos de entrada con parámetros, los almacenan de forma temporal
en el espacio de memoria denominado búfer, cuando se logra saturar ese búfer es cuando se puede
ejecutar un código malicioso en la aplicación y permitir acceso al sistema.
¿Cómo se produce?
A continuación, se describe un ejemplo practico para entender de manera más simple el ataque por
desbordamiento de búfer:
En un software se definieron dos elementos de datos en memoria: un búfer de 8 bytes tipo string
que denominaremos X y otro elemento de 2 bytes tipo int que llamaremos Z
A continuación, el software intenta almacenar una cadena de caracteres en el búfer X, seguido de
bytes nulos con el fin de marcar el final de la cadena string, al no validarse la longitud de la cadena
se sobre escribe en el valor de Z a pesar de que el desarrollador no quería cambiar el tamaño del
búfer Z, el valor de este ha sido reemplazado por un número equivalente a parte de la cadena de
caracteres.
#include <stdio.h>
main()
char userinput[50];
return 0;
Generalidades:
La también conocida como race condition es una vulnerabilidad bastante común, estos errores se
generan en situaciones de concurrencia de muchos hilos en los que se compite por los recursos que
entrega un SO.
Hay ocasiones donde se presenta la eventualidad en la cual dos o mas procesos tiene que hacer
tareas de write y read en un área común que comparten, lo ideal es que las acciones llevadas a cabo
por cada recurso se pudiera dar de manera simultanea sin afectar al sistema, sin embargo hay
ocasiones donde esto no sucede y generan datos inconsistentes y adicional a esto, dejan la puerta
abierta en intervalos de tiempo en el cual un atacante podría tener privilegios, leer, editar, escribir y
otras acciones sobre ficheros que usualmente están protegidos.
¿Cómo se produce?
A continuación, un ejemplo practico para entender de manera más sencilla como actúa la
vulnerabilidad de condición de carrera:
Var x=10
Sub decrementar {
If (x>0) {
X–
X es una variable local compartida, si un único proceso es el que se ejecuta, esta variable no tomará
nunca un valor negativo, no obstante, en un entorno donde hay diferentes procesos corriendo la
misma rutina compitiendo por el tiempo de CPU, si un proceso no iniciara la ejecución de la rutina
hasta que otro no finalice la ejecución de la misma no habría problemas. No obstante, podría darse
un evento en donde un proceso que denominaré N1 inicie la ejecución de la rutina para un valor de
X=1, N1 realiza la comprobación x>0 también se cumple y se ejecuta el código contenido en la
comprobación, con lo que x toma el valor 0.
Hay que tener en cuenta que la vulnerabilidad de condición de carrera puede generar daños
irreparables para los ficheros en una máquina que se vulnerable.
2. Metodología de intrusión PTES
Todo lo anterior conteniendo primeramente las razones por las cuales se hicieron las pruebas,
seguido de los posibles riesgos y su valoración, luego el análisis de las vulnerabilidades encontradas
y la confirmación de que las mismas han sido podido ser explotadas junto con las contramedidas
propuestas y probadas. Así también las métricas utilizadas y las contramedidas propuestas para los
riesgos analizados, esto es, el grado de exposición que tienen los activos de la empresa y
organización.
Nessus es un producto de la empresa Tenable Network Security, es conocido como uno de los
analizadores más completos de la actualidad, utiliza una tecnología denominada Nessus
Professional-Feed, que, al mismo tiempo es atendida y se somete a constante actualización por parte
de equipos expertos en investigación y búsqueda de vulnerabilidades.
La compañía Tenable se encuentra en búsqueda constante de vulnerabilidades, cuando descubre una
nueva, genera un plug-in para Nessus, cuando se aprueba, lo pone disponible para su descarga con
el fin de que su producto siempre pueda realizar testeos de red y host más actualizados.
Permite realizar escaneo de vulnerabilidades en servidores web, servicios web, además de las
vulnerabilidades de OWASP. También ayuda a verificar la configuración errónea del sistema y
parches faltantes. Muestra informes personalizados en formato XML, CVS, PDF nativo y HTML, la
herramienta es de tipo scanner y aplica para sistemas operativos como Windows, Linux, BSD,
Solaris y otros Unix.
Conclusiones
Se obtuvieron conocimientos por medio de portales web, revistas científicas y libros relacionados
con la temática que aportaron a la construcción de este documento y a mi desarrollo profesional.
Ataques de inyección SQL: qué son y cómo protegerse | Hostalia – Pressroom. (2013, 26
diciembre). recuperado 7 marzo, 2020, de https://pressroom.hostalia.com/white-papers/ataques-
inyeccion-sql/
EcuRed. (s.f.). Ataque de denegación de servicio - EcuRed. Recuperado 8 marzo, 2020,
de https://www.ecured.cu/Ataque_de_denegaci%C3%B3n_de_servicio
Alonso, C. G. I. L. M., Gabriel, D. O., Ignacio, A. A., & Elio, S. R. (2014). PROCESOS
Y HERRAMIENTAS PARA LA SEGURIDAD DE REDES (15ª ed.). N/A: UNED.