Sie sind auf Seite 1von 13

ACTIVIDAD 1 - Importancia de la seguridad en Software

A1:2017 Inyección. Las fallas de inyección, como SQL, NoSQL, OS o LDAP ocurren cuando se
envían datos no confiables a un intérprete, como parte de un comando o consulta. Los datos dañinos del
atacante pueden engañar al intérprete para que ejecute comandos involuntarios o acceda a los datos sin
la debida autorización.

A2:2017 Pérdida de Autenticación. Las funciones de la aplicación relacionadas a autenticación y


gestión de sesiones son implementadas incorrectamente, permitiendo a los atacantes comprometer
usuarios y contraseñas, token de sesiones, o explotar otras fallas de implementación para asumir la
identidad de otros usuarios (temporal o permanentemente).

A3:201 Exposición de datos sensibles. Muchas aplicaciones web y APIs no protegen adecuadamente
datos sensibles, tales como información financiera, de salud o Información Personalmente Identificable
(PII). Los atacantes pueden robar o modificar estos datos protegidos inadecuadamente para llevar a
cabo fraudes con tarjetas de crédito, robos de identidad u otros delitos. Los datos sensibles requieren
métodos de protección adicionales, como el cifrado en almacenamiento y tránsito.

A4:2017 Entidades Externas XML (XXE). Muchos procesadores XML antiguos o mal configurados
evalúan referencias a entidades externas en documentos XML. Las entidades externas pueden utilizarse
para revelar archivos internos mediante la URI o archivos internos en servidores no actualizados,
escanear puertos de la LAN, ejecutar código de forma remota y realizar ataques de denegación de
servicio (DoS).

A5:2017 Pérdida de Control de Acceso. Las restricciones sobre lo que los usuarios autenticados
pueden hacer no se aplican correctamente. Los atacantes pueden explotar estos defectos para acceder,
de forma no autorizada, a funcionalidades y/o datos, cuentas de otros usuarios, ver archivos sensibles,
modificar datos, cambiar derechos de acceso y permisos, etc.

A6:2017 Configuración de Seguridad Incorrecta. La configuración de seguridad incorrecta es un


problema muy común y se debe en parte a establecer la configuración de forma manual, ad hoc o por
omisión (o directamente por la falta de configuración). Son ejemplos: S3 buckets abiertos, cabeceras
HTTP mal configuradas, mensajes de error con contenido sensible, falta de parches y actualizaciones,
frameworks, dependencias y componentes desactualizados, etc.

A7:2017 Secuencia de Comandos en Sitios Cruzados (XSS). Los XSS ocurren cuando una
aplicación toma datos no confiables y los envía al navegador web sin una validación y codificación
apropiada; o actualiza una página web existente con datos suministrados por el usuario utilizando una
API que ejecuta JavaScript en el navegador. Permiten ejecutar comandos en el navegador de la víctima
y el atacante puede secuestrar una sesión, modificar (defacement) los sitios web, o redireccionar al
usuario hacia un sitio malicioso.

A8:2017 Deserialización Insegura. Estos defectos ocurren cuando una aplicación recibe objetos
serializados dañinos y estos objetos pueden ser manipulados o borrados por el atacante para realizar
ataques de repetición, inyecciones o elevar sus privilegios de ejecución. En el peor de los casos, la
deserialización insegura puede conducir a la ejecución remota de código en el servidor.
A9:2017 Componentes con vulnerabilidades conocidas. Los componentes como bibliotecas,
frameworks y otros módulos se ejecutan con los mismos privilegios que la aplicación. Si se explota un
componente vulnerable, el ataque puede provocar una pérdida de datos o tomar el control del servidor.
Las aplicaciones y API que utilizan componentes con vulnerabilidades conocidas pueden debilitar las
defensas de las aplicaciones y permitir diversos ataques e impactos.

A10:2017 Registro y Monitoreo Insuficientes. El registro y monitoreo insuficiente, junto a la falta de


respuesta ante incidentes permiten a los atacantes mantener el ataque en el tiempo, pivotear a otros
sistemas y manipular, extraer o destruir datos. Los estudios muestran que el tiempo de detección de una
brecha de seguridad es mayor a 200 días, siendo típicamente detectado por terceros en lugar de por
procesos internos
ACTIVIDAD 2 - Diagramas de Flujos de Datos

Se utiliza para el analisis y diseño de software estructurado. Sirve para representar modelos logicos y
expresa la transformacion de datos en un sistema.

Niveles

• 0. Diagrama de contexto
• 1. Subsistemas
• 2. Funciones de cada subsistema
• 3. Subfunciones asociadas
• 4. Procesos necesarios para el tratamiento de cada subfunción
ACTIVIDAD 3 - Modelado de amenazas
ACTIVIDAD 4 - Seguridad guiada por principios
ACTIVIDAD 6 - Programación defensiva

La programación defensiva contribuye a escribir buen código


Es un conjunto de guías que pueden aplicarse universalmente
Es una forma de prevenir problemas

Se debe asumir lo peor, como:

• Asumir que no pasará nada es mala práctica


• Asumir que solo enviarán parámetros válidos
• Asumir que el código siempre funcionará
• Asumir que nadie va a tratar de entrar ilegalmente a mi sistema
• Asumir que el usuario no tiene conocimiento técnico que pueda perjudicarme
• Entre más código escribas, mayor será la probabilidad de que haya un error
• Es importante tener tiempo para verificar las posibles supuestos

Error checking, Testing y Debugging, no es programación deensiva

Puntos a favor y en contra de la programación defensiva

A FAVOR EN CONTRA
– Puedes ahorrar horas de depuración – Tiene impacto en la eficiencia del programa
– Tener código que funcione apropiadamente, es – Requiere trabajo extra
mejor que tener código que funciona la mayor – Requiere tiempo extra
parte del tiempo – Implica un costo extra
– Evita problemas de seguridad en sistemas
modernos

Técnicas

• Utiliza siempre un buen estilo de programación y un buen diseño


• No escribas código con prisa
• No confíes ni en tu sombra
– Usuarios genuinos
– Usuarios maliciosos
– Código cliente
– El entorno de ejecución
– Bibliotecas externas
• Mantén tu código lo más simple posible
• No “saques tus trapos sucios”
• Escribe buen código
• Haz caso a los mensajes del compilador
• Utiliza herramientas de apoyo
• Utiliza estructuras seguras
• Verifica los valores de retorno
• Cuida los recursos de cómputo
• Inicializa las variables en donde son declaradas
• Declara variables lo más cerca posible de su uso
• Considerar “restricciones” cuando se programa:
– Precondiciones: si fallan es problema del código cliente
– Postcondiciones: si fallan es problema del proveedor de código
– Invariantes: si fallan es problema de lógica del programa

¿Qué es necesario verificar?


– Verificar que los accesos a arreglos estén dentro de los límites
– Asegúrate que los parámetros de los métodos sean válidos
– “Limpia” resultados antes de regresarlos
– Verifica que un objeto esté en un estado consistente antes de operarlo
– Verifica los valores de datos de fuentes externas
ACTIVIDAD 7 - Mitigación de amenaza "SQL Injection"

1. Riesgos identificados a partir de un ataque de tipo Injection.

Cuando se llega a tener un problema de inyección esta vulnerabilidad puede generar:

• Divulgación: La divulgación de información permite a un atacante ganar valiosa información


sobre un sistema.
• Pérdida o corrupción de información: Cuando un atacante usa la inyección de código puede
alterar la información del sistema que vulnera.
• Pérdida de auditabilidad: Mediante la inyección no se permite la reconstrucción, revisión y
análisis de la secuencia de eventos.
• Denegación de acceso: El atacante puede cambiar las credenciales de los usuarios del sistema o
borrarlos, impidiendo ası́ el acceso.

2. Características.

Una aplicación es vulnerable a un ataque cuando:

• Los datos suministrados por el usuario no son validados, filtrados o saneados por la aplicación.
• Las consultas dinámicas o las llamadas no parametrizadas sin escape de contexto y contexto se
utilizan directamente en el intérprete.
• Los datos hostiles se utilizan dentro de los parámetros de búsqueda de mapeo objeto-relacional
(ORM) para extraer registros adicionales y confidenciales.
• Los datos hostiles se usan o concatenan directamente, de modo que el comando o SQL contiene
datos de estructura y datos hostiles en consultas dinámicas, comandos o procedimientos
almacenados.

3. Tipos de ataques ”Injection”.

Entre las inyecciones más comunes encontramos:

• Inyecciones de SQL
• NoSQL
• Comando de SO
• Mapeo Relacional de Objetos (ORM)
• LDAP
• Lenguaje de Expresión (EL)

4. Posibles objetivos del ataque e impacto de ataque en los objetivos.

Los posibles objetivos de la inyeccion puede ser cualquier fuente de datos como un vector de
inyección, variables de entorno, parámetros, servicios web externos e internos y todo tipo de usuarios.

El impacto en el negocio depende de las necesidades de la aplicación y los datos.


5. Sı́ntomas y/o patrones de ataque.

Debido a que es común que los fabricantes de los programas que se comunican con las bases de datos
no ofrezcan un nivel de seguridad suficiente, principalmente, toda página y aplicación web que utilice
SQL como lenguaje de base de datos es vulnerable a ataques de inyección SQL, ya que son muy
frecuentes ya que las vulnerabilidades de este tipo son muy conocidad por las comunidades de
atacantes en internet.

Los defectos de inyección son muy frecuentes, particularmente en el código heredado. Las
vulnerabilidades de inyección a menudo se encuentran en consultas SQL, LDAP, XPath o NoSQL,
comandos del sistema operativo, analizadores XML, encabezados SMTP, lenguajes de expresión y
consultas ORM. Las fallas de inyección son fáciles de descubrir al examinar el código. Los escáneres y
los fuzzers pueden ayudar a los atacantes a encontrar fallas de inyección.

7. Formas de prevención.

La prevención de la inyección requiere mantener los datos separados de los comandos y consultas.

• Usar una API segura, que evite el uso del intérprete por completo o proporcione una interfaz
parametrizada, o migre para usar las herramientas de mapeo relacional de objetos (ORM).
• Utilice la validación de entrada del lado del servidor positiva o ”lista blanca”. Esta no es una
defensa completa ya que muchas aplicaciones requieren caracteres especiales, como áreas de texto
o API para aplicaciones móviles.
• Para cualquier consulta dinámica residual, escape caracteres especiales utilizando la sintaxis de
escape especı́fica para ese intérprete.
• Utilice LIMIT y otros controles SQL dentro de las consultas para evitar la divulgación masiva de
registros en caso de inyección SQL.
• Revisar el código fuente ayudará a detectar si las aplicaciones son vulnerables a inyecciones.
ACTIVIDAD 8 - SOAP vs REST (Web Services)

En el año de 1997, fue cuando el desarrollo de la web se extendió, dando pie al surgimiento de nuevas
tecnologías las cuales ayudaron a que la web sea lo que es hoy en día.

A nivel conceptual, un servicio es un componente de software proporcionado a través de un punto final


accesible a la red, donde el consumidor de los servicios y el proveedor utilizan mensajes para
intercambiar información de solicitud y respuesta.

En los inicios del año 2000, nació la tecnología llamada SOAP que significa Simple Object Access
Protocol el cual por mucho tiempo el estándar SOA (Arquitectura Orientada a Servicios) predominó en
la arquitectura web. Aunque cuando se habla de servicios web existe una pila de estándares como
SOAP, WSDL, WS-Addressing, WS-ReliableMessaging, los cuales brindaban interoperabilidad para
las llamadas de procedimientos remotos(RPC) y la integración de estilos de mensajes. Actualmente
existe una alternativa la cual a traído una implementación de RPC a través de la WEB, estos son
llamados RESTful Web services, los cuales han estado ganando atención no solo porque ellos usan sus
Interfaces de Programación de Aplicaciones(API), si no que también debido a su presunta simplicidad
de publicar y consumir un servicio RESTful.

La tecnología SOAP es un lenguaje XML que define una arquitectura de mensaje y formatos de
mensaje, por lo que proporciona un protocolo de procesamiento pobre. Donde un documento SOAP
esta formado por un elemento XML llamado sobre (envelope) el cual contiene un encabezado y un
cuerpo, los cuales pueden ser usados con fines de enrutamiento y Calidad de Servicio(QoS) (por
ejemplo, transacciones, seguridad, confiabilidad).

Las fortalezas de SOAP son variadas una de ellas es que un mensaje puede ser adoptado por diferentes
tecnologías ya que ofrece interoperabilidad entre distintos sistemas middleware, ya que puede utilizar
HTTP o usar cualquier protocolo de transporte. La seguridad es un punto a destacar en los servicios
SOAP, ya que WS-RM el cual es un protocolo que le permite a SOAP incrementar la seguridad en la
ejecución y procesamiento asíncrono de mensajes.

REST que significa “REpresentational State Transfer” fue introducido originalmente como un estilo de
arquitectura para la construcción de sistemas de hipermedia. Este estilo de arquitecturas son entidades
abstractas, cuyos principios han sido utilizados para explicar la excelente escalabilidad del protocolo
HTTP 1.0 y también han restringido el diseño de su siguiente versión, HTTP 1.1. Así, el término
REST muy a menudo se utiliza junto con HTTP.

Entre las fortalezas que tienen los servicios REST tenemos que estos aprovechan los estándares
W3C/IETF conocidos (HTTP, XML, URI, MIME), ya que la infraestructura de estos ya ha sido
generalizada. Los clientes y servidores HTTP están disponibles para todos los principales lenguajes de
programación y plataformas de sistema operativo, de plataformas de hardware y el puerto HTTP
predeterminado 80 generalmente se deja abierto de manera predeterminada en la mayoría de las
configuraciones de firewall.

Otra fortaleza es la facilidad para desarrollar ya que las pruebas las pueden realizar mediante un
navegador, otra ventaja es que el desarrollar un servicio REST es muy parecido la construcción de un
sitio web dinámico.
ACTIVIDAD 9 - Validación de entradas
ACTIVIDAD 10 - Rutinas de alta calidad y programación defensiva

Das könnte Ihnen auch gefallen