Clase 3 - Lineamientos para Desarrollo de Software
Clase 3 - Lineamientos para Desarrollo de Software
Clase 3 - Lineamientos para Desarrollo de Software
Índice de Contenidos
2
Repaso Sesión Anterior
3
Repaso Sesión Anterior
5
La Seguridad como Proceso General
6
La Seguridad como Proceso General
Un proyecto informático está compuesto por muchas partes de las que son
responsables distintas personas, y cuanto más grande es el proyecto, mayor es
el número de actores que participan en el mismo y más delegada y repartida
está la responsabilidad, lo cual viene asociado normalmente a un mayor nivel de
especialización concreta en cada una de las áreas por parte de los profesionales
que se dedican a estas.
7
La Seguridad como Proceso General
8
La Seguridad como Proceso General
9
La Seguridad como Proceso General
11
Lineamientos para Seguridad
en el Desarrollo
12
Lineamientos para Seguridad en el Desarrollo
13
Lineamientos para Seguridad en el Desarrollo
14
Lineamientos para Seguridad en el Desarrollo
15
Lineamientos para Seguridad en el Desarrollo
17
Lineamientos para Seguridad en el Desarrollo
18
Lineamientos para Seguridad en el Desarrollo
19
Lineamientos para Seguridad en el Desarrollo
20
Lineamientos para Seguridad en el Desarrollo
4. Validación de Datos
Esta es una técnica para asegurar que sólo los datos con el formato correcto
podrán ingresar al sistema a desarrollar. Esta validación debe ser correcta,
tanto sintáctica como semánticamente. Por ejemplo, si esperamos que en un
campo se ingresen sólo dígitos, no debemos aceptar otro tipo de caracteres
(validación sintáctica). La validación semántica es un poco más compleja y
consiste en validar que los datos tengan sentido en el contexto de la aplicación,
por ejemplo: una fecha de inicio no podría estar después de una fecha de fin.
21
Lineamientos para Seguridad en el Desarrollo
4. Validación de Datos
La validación de datos, al igual que la codificación y escape, deben ser siempre
realizados en el servidor y nunca del lado del cliente (por ejemplo: no se debe
realizar en el navegador del usuario). No se debe confundir un aviso al usuario
(por ejemplo: para alertar de un campo mal ingresado) con la validación de
datos.
22
Lineamientos para Seguridad en el Desarrollo
Nivel 1: Contraseñas
Las aplicaciones deben exigir al usuario el uso
de contraseñas de características y calidad
adecuadas, y que no sean contraseñas
previamente filtradas. Asimismo, se deben
implementar mecanismos seguros de
recuperación de contraseñas, ya sea
utilizando un segundo factor de autenticación
o a través de canales diferentes (como
teléfono móvil o correo electrónico).
23
Lineamientos para Seguridad en el Desarrollo
25
Lineamientos para Seguridad en el Desarrollo
26
Lineamientos para Seguridad en el Desarrollo
27
Lineamientos para Seguridad en el Desarrollo
9. Identificación de Datos
Los datos sensibles o críticos deben estar identificados, de forma de poder
implementar las protecciones que requieran de forma correcta. Por ejemplo, si
se manejan datos sensibles de ciudadanos, se requieren algunas protecciones
específicas que deben estar presentes.
31
Lineamientos para Seguridad en el Desarrollo
32
Lineamientos para Seguridad en el Desarrollo
Por lo tanto, en el protocolo TLS, se lleva a cabo un canal seguro y cifrado entre
cliente y servidor en donde se negocia la criptografía del mensaje, se
autentifican las claves del cifrado y se realiza una transmisión segura.
33
Lineamientos para Seguridad en el Desarrollo
34
Lineamientos para Seguridad en el Desarrollo
35
Lineamientos para Seguridad en el Desarrollo
36
Lineamientos para Seguridad en el Desarrollo
37
Lineamientos para Seguridad en el Desarrollo
39
Lineamientos para Seguridad en el Desarrollo
41
Directrices de Programación Segura
42
Directrices de Programación Segura
Validaciones de Entrada
Los datos de entrada de una aplicación se pueden definir como el conjunto de
parámetros que van a ser digitados y posteriormente capturados para ser
manipulados en el código. En términos de implementación se debe validar cada
carácter de entrada y en caso no de considerarse como valido se debe generar
un error o ser manejado por medio de excepciones.
44
Directrices de Programación Segura
Código Comentado
Todo código comentado dentro de la aplicación debe ser eliminado antes de ser
lanzado en producción debido a que el código comentado puede generar el uso
accidental en producción que puede alterar el correcto funcionamiento de la
aplicación, como también puede llegar a contar con “código quemado” (hard-
code).
Mensajes de Error
Todos los mensajes de error que lleguen al usuario final no deben contener
información confidencial, tal como: SO, red, lenguaje de programación, línea del
error, motor de BD. Estos errores deben tratarse y ser estandarizados de forma
genérica y comprensible para el desarrollador pero que sea entendible para el
usuario. Por ejemplo: “Se presentó el error 1281 no se pudo registrar el
usuario, póngase en contacto con el proveedor de servicio”.
Contenido URL
En el contenido URL nunca se debe mostrar
información como passwords, nombre de
servidores, direcciones IP, lenguaje de
programación o las rutas del sistema de
archivos que revelan la estructura de los
directorios del Servidor Web.
46
Directrices de Programación Segura
Sentencias SQL
Cuando las consultas se construyen directamente con los datos del usuario
entre líneas o concatenan directamente con el texto de la consulta, en lugar de
utilizar los parámetros de vinculación de tipo seguro, esto puede permitir al
atacante realizar un ataque de inyección SQL y consiste en una debilidad de
programación en que la aplicación construye dinámicamente consultas SQL
utilizando la concatenación de cadenas de datos.
47
Desarrollo Seguro en JAVA
48
Desarrollo Seguro en JAVA
49
Desarrollo Seguro en JAVA
• Los niveles de acceso a los miembros de las clases, que permite controlar la
visibilidad de atributos y métodos.
52
Desarrollo Seguro en JAVA
53
Desarrollo Seguro en JAVA
Encapsulación
En JAVA si se declara una clase, método o campo sin un modificador de acceso
(privado, público y protegido) luego estos paquetes por defecto tienen acceso a
ninguna clase dentro del mismo paquete, se debe tener en cuenta que si bien
esto proporciona encapsulación para el paquete, esto sólo sucede si cada trozo
de código que se carga en el paquete es controlado por personas autorizadas.
Manejo de Excepciones
El manejo de excepciones es fundamental para lograr un correcto desarrollo
seguro de código ya que cuando un código JAVA viola restricciones semánticas
del lenguaje se produce un error que es lanzado por la máquina virtual. Existen
muchas clases de errores que generan excepciones y nos dan a entender fallos
como desbordamiento de búfer, desbordamiento de memoria, intentar acceder
a un vector fuera de sus límites, entre otras.
Si no se capturan adecuadamente le
puede dar indicios a un atacante sobre
fallos en el código, nombre de la clase o
método que genera el problema y le
puede dar las bases para un futuro
ataque.
55
Recuerde utilizar los foros de cada módulo
56
CLASE 3