Diapositiva de Topografía Nivelación simple y compuesta
Seguridad en el ciclo de desarrollo del software
1. INGENIERIA EN SISTEMAS COMPUTACIONALES
INGENIERIA DE SOFTWARE
Unidad IV:
SEGURIDAD EN EL CICLO DE DESARROLLO
DEL SOFTWARE
ISC GI SANTANA ESPARZA
S501
08-12-2016
HERNANDEZ MEDINA JOSUE
SOSA MEJIA ANEL VERONICA
VIZCAINO NUÑEZ JOSÉ ALFONSO
Fecha de entrega:19/09/201
2. SEGURIDAD EN EL CICLO DE DESARROLLO DEL SOFTWARE
INTRODUCCION
El ciclo de desarrollo de software consta de cinco fases que son análisis diseño,
codificación, pruebas e implementación, en esta investigación a continuación se
hablará sobre la importancia de la seguridad en cada una de las fases y que
controles se pueden implementar.
En el análisis se identifican los requerimientos, por eso se pueden identificar
diversidad característica que derivaran en los requerimientos de seguridad en el
software. Después sigue la etapa de diseño, en esta etapa se dice que es más
propensa a tener vulnerabilidades en cuanto a seguridad, se mencionaran prácticas
para un diseño seguro de la aplicación.
Algunos desarrolladores implementan un el análisis de riesgos para obviamente
tener un mejor resultado final en cuanto a calidad del software en este tema se
mencionarán las etapas de esta.
En la etapa de decodificación se va a mencionar unas buenas prácticas para
decodificar seguramente, por último se verá la etapa de implementación es muy
importante revisar que las configuraciones que se requieran sean realizadas, en
este punto se deben contemplar tareas tales como: (cambio de usuario y
contraseñas iniciales o por defecto, borrado de datos de pruebas, cambios de
permisos de acceso entre otros).
3. Fase de análisis
En esta fase se identifican los requisitos funcionales que tendrán impacto en los
aspectos de seguridad algunos de ellos son:
Requisitos de conformidad Normativas locales e internacionales.
Tipo de información que se manejara.
Arquitectura en donde se montara la aplicacion(es).
modo de autenticación (pass, biométrico, etc.).
acceso a los datos (permisos por perfiles).
Fase del diseño
Antes de comenzar a escribir líneas de código, hay varios aspectos que se deben
tener en cuenta durante esta fase, algunos de ellos son:
Diseño de autorización (roles, permisos, privilegios en la aplicación)
Diseño de mensajes de advertencia y errores para evitar suministrar mucha
información e impedir futuros ataques.
Mecanismo de protección de datos (acá se define el modo como se protegerá la
información).
Buenas prácticas para el desarrollo de una aplicación segura:
Reducción de superficie de ataque
Diseño seguro de mensajes de error
Diseño seguro de autentificación
Análisis de riesgo
Método stride
4. Este método ayuda a identificar amenazas en los componentes de un sistema su
nombre es un acrónimo de
Spoofing identity: Suplantarla identidad de otro usuario o servicio
Tampering with data: Modificar maliciosamente datos almacenados.
Repudiation: imposibilidad de identificar el autor de una acción
Information disclosure: Divulgar información a usuarios no autorizados.
Denial of Service: Provocar que un servicio deje de funcionar
Elevation of privilege: conseguir privilegios mayores a los asignados
Fase Decodificación En esta fase se codifican los diferentes componentes de la
aplicación, y es donde suelen incluirse por error u omisión varias vulnerabilidades.
estas vulnerabilidades las podemos clasificar en dos grupos:
clásicas y funcionales.
Clásicas: Son errores típicos como manejo de sesiones, desbordamiento de buffer,
denegación de servicios, etc.
Funcionales: Son aquellas que están ligadas a las funcionalidades de la aplicación,
por ejemplo el mal cálculo del IVA en una factura de compra, una aplicación de
banca electrónica que permita realizar transferencias de valores negativos.
En esta etapa es fundamental revisar los valores de entradas y salidas, esto con el
fin de evitar futuras fallos o inconsistencias en la información.
Buenas prácticas para una codificación segura
Validar siempre los datos de entrada antes de procesarlos.
Nunca confiar en que los datos recibidos sean correctos
Realizar validación de datos en todas las validaciones
5. Usar siempre criterio “White list” en la
Controlar tamaño y tipo de datos
“sanitizar” los valores de entrada y salida
Eliminar o “escapear” caracteres especiales
Transformar los datos de entrada a un “encoding” establecido
Reemplazar sentencias SQL dinámicas por Stores Procedures
Evitar generar código con valores ingresados por el usuario
No mezclar datos con código
Capturar errores de capas inferiores y no mostrarlos al usuario
Técnicas de testing de seguridad:
testing de seguridad funcional
Testing (clásico) aplicada seguridad de una aplicación ej.,
Requerimiento de autenticación
Requerimiento de complejidad de contraseñas
Bloqueo automático de cuentas
Funcionalidad de captchas
Testing de seguridad basado en riesgo
Técnica que se desprende del treah modeling
Se identifican todas las interfaces de la aplicación
Se generan casos de test sobre cada interfaz basado en strid
Revisión de código
Permite encontrar vulnerabilidades que son muy difíciles de detectar con otros
métodos de testing de seguridad
Enfoque tradicional: grupo de revisión
6. Enfoque rápido: revisión por pares
Fase De Pruebas
En esta etapa es fundamental revisar los valores de entradas y salidas, esto con el
fin de evitar futuras fallos o inconsistencias en la información. Fase de Codificación
En esta fase como su nombre lo Indica es donde se hace las pruebas de las
funcionales que se espera que realice la aplicación, según los requerimientos del
cliente.
Normalmente en esta etapa hay un desfasaje entre el diseño original (lo que se
espera que haga) y la implementación real (lo que realmente hace). aquí surgen 3
áreas bien definidas:
Lo que fue definido y la aplicación hace.
Lo que fue definido y la aplicación no hace(errores funcionales).
Lo que no fue definido pero la aplicación hace.
Es acá donde los testing de seguridad se basa principalmente en probar la
aplicación con escenarios no planificados como son: (valores mutados, fuera del
rango, tipos incorrectos, acciones fuera del orden, etc.).
Existen herramientas que permiten la detección de errores pero se debe tener
presente que para obtener los mejores resultados se deben combinar las
técnicas tanto manuales como las automáticas
Fase de Implementación
En esta fase es la puesta en producción por ello es muy importante revisar que las
configuraciones que se requieran sean realizadas, en este punto se deben
contemplar tareas tales como: (cambio de usuario y contraseñas iniciales o por
defecto, borrado de datos de pruebas, cambios de permisos de acceso entre otros.).
También es muy importante mantener separados los ambientes de desarrollo,
7. pruebas y producción y garantizar que el traspaso de un ambiente a otro no
ocasione ningún tipo de problema
Conclusión
La seguridad, debe implementarse en todas las fases del ciclo de vida de desarrollo.
Es importante que las organizaciones tengan en cuenta los analistas de seguridad
para que participen activamente y sean auditores en todos las fases del ciclo de
vida de desarrollo.
Realizar estas actividades en todas las fases ayudara a reducir el número de
vulnerabilidades en la aplicación, así como ahorra tiempo y dinero
La gestión de seguridad no termina al entregar el sistema, Después de la entrega,
el sistema debe instalarse de acuerdo a lo planificado, de tal forma que el análisis
de contingencias siga valido. Después se lleva a cabo la validación de seguridad
antes de que el sistema comience a usarse.
Muchos de los problemas relacionados a la seguridad tienen lugar debido a un
proceso de poco mantenimiento. Finalmente, también deberían tenerse en cuenta
consideraciones de seguridad que podrían aplicarse durante el desmantelamiento
del sistema. Este punto es muy importante especialmente si trata de un sistema
bancario, de vuelos por mencionar algunos ya qué se guardan credenciales
personales y se trabaja con dinero, hacer un sistema defectuoso en cuanto a la
seguridad podría resultar en un fatal accidente para las personas que utilicen este,
así como los ingenieros que desarrollen el sistema