21
Programación Defensiva Barrios, José Blondell, Reinaldo Colmenares, Franyelvis Rivero, Joselin

Programación Defensiva

  • Upload
    jgbd127

  • View
    879

  • Download
    2

Embed Size (px)

Citation preview

Programación DefensivaBarrios, José – Blondell, Reinaldo – Colmenares, Franyelvis – Rivero, Joselin

Ley de Murphy

"Si hay varias maneras de hacer una tarea, y uno

de estos caminos conduce al desastre, entonces

alguien utilizará ese camino.”

«Si algo puede salir mal, saldrá mal»

Se tiende a recordar más vívidamente las vecesen que cayó con el lado de la mantequilla haciael suelo puesto que tiene mas consecuencias

Por lo tanto, se tiene la impresión de que el pansiempre cae con la mantequilla hacia abajo, sinimportar la verdadera probabilidad de cadaocurrencia.

Joselin Rivero

Origen

• La auténtica ley de Murphy, originó unatécnica de diseño llamada DiseñoDefensivo

• Busca prever soluciones para evitarfallos en la utilización de un dispositivoque puedan llevar a un resultadoinesperado.

• En la actualidad, vemos ejemplos dediseños realizados teniéndola en cuenta:Un cable USB, HDMI, SCART...

• Están diseñados para que sólo puedaconectarse de forma correcta Programación Defensiva

Informática

Diseño Defensivo

Ley de Murphy

Joselin Rivero

Programación Defensiva

Proyecto que solicitaba la ubicación del usuariopara su localización en un mapa.

Se decidió utilizar los campos "país" y"población", pero al poco tiempo se detectoque algunos usuarios confundían población connúmero de habitantes si se situaba junto a país.Para ese momento, ya habían varios usuariosregistrados de los cuáles no se sabía supoblación.

El problema se soluciono cambiando la palabra"población" por "localidad" en el formulario.

Pero era evitable si se hubiese tenido más encuenta la programación defensiva validandomejor los campos del formulario.

Joselin Rivero

¿Qué es?

• Prevé y Busca soluciones quepuedan evitar fallos en eldiseño de un software

• Garantiza el funcionamientoesperado de algún elemento dela aplicación ante cualquiersituación que puedaaparecer, por muy extraño quesea.

Joselin Rivero

Utilidad

Hacer que el software se comporte de una manera predecibleEl software se comporte de una manera predecible pese a entradas o acciones de usuario inesperadas

Hacer el código fuente comprensible

El código fuente debe ser lo mas legible y entendible, a prueba de una auditoría de código.

Ofrecer Calidad General

Reducir el número de fallos de software y problemas.

Es un enfoque que busca mejorar el software y el código fuente

Hacerlo mas estable, menos robusto y lo menos complejo posible

Se utiliza especialmente en componentes críticos con muy mal funcionamiento

Elimina los graves daños de consecuencias catastróficas que podría acarrear un descuido propio ó un ataque malicioso

Objetivos – Problemas que Resuelve

Joselin Rivero

Desarrollo del Software

Análisis

Diseño

ConstrucciónPruebas

Instalación

Utilidad

Apunta a resolver problemas asociados con la calidad

del software en todas sus fases

Reinaldo Blondell

SANS

• El Instituto SANS (SysAdmin Audit, Networking and SecurityInstitute)

• Agrupa a más de 165.000 profesionales de la seguridadinformática (consultores, administradores de sistemas, entesgubernamentales, etc.)

• Reunir información sobre todo lo referente a seguridadinformática (sistemas operativos, redes, aplicaciones, etc.)

• Ofrecer capacitación y certificación en el ámbito de la seguridadinformática

• Referencia habitual en la prensa sobre temas de auditoríainformática

Reinaldo Blondell

¿Por qué?

• Según SANS, la primera de las 10 peores vulnerabilidades que hay es:

• ISO 27001

NO VERIFICACION de los parámetros de ENTRADA y SALIDA de las funciones de nuestros programas

12.2.1: El insumo de data en las aplicaciones debe ser validado para

asegurar que esta data sea correcta y apropiada.

12.2.2, 12.2.3 y 12.2.4: Que no hayan errores, integridad y validar

output.

Reinaldo Blondell

¿Qué es una Vulnerabilidad?

Es cualquier defecto en el mismo que permita explotarlo con el finde que un atacante pueda hacerse con el control del sistema

Pueden deberse a:

– Una mala configuración del software por parte del administrador/usuario.

– Una incorrecta programación durante el proceso de desarrollo o actualización delsoftware.

La gran mayoría hoy en día se deben al segundo caso ya que:

– Existe bastante documentación de usuario para configurar el software.

– Desconocimiento de seguridad informática en la mayoría de programadores.

– Empresarios que interrumpen los ciclos de desarrollo del software para terminarantes los productos.

– Las auditorías de seguridad de código fuente apenas se practican.

Reinaldo Blondell

Vulnerabilidades y Puntos Críticos más comunes al crear aplicaciones

Interacción insegura entre componentes

•Relacionadas con el envío y recepción de datos entresistemas, componentes, módulos, programas, procesos ohilos separados.

Manejo de recursos

•Relacionadas con el manejos inapropiados durante lacreación, uso, transferencia o destrucción de recursos delsistema.

Defensas porosas

•Relacionadas con técnicas defensivas mal o abusivamenteutilizadas, o simplemente ignoradas.

Grupo de Vulnerabilidades mas importantes en la actualidad según SANS:

Reinaldo Blondell

Vulnerabilidades y Puntos Críticos

Entre las 25 mas importantes existentes en la actualidad tenemos comoreferencia las siguientes:

• Defectos o fallas en la preservación de la estructura de las consultasSQL (SQL-injection).

• Fallas en la preservación de la estructura de las páginas web ( Cross-site Scripting)

• Control externo del estado de la aplicación (por ejemplo al utilizarcookies para mantener el estado).

• Inicialización defectuosa.

• Uso de un algoritmo criptográfico quebrado (obsoleto).

• Contraseñas establecidas en el código (hard-coded).

Franyelvis Colmenares

Ejemplo

Ejemplo

Vulnerabilidad Inyección SQL (SQL Injection)

Efectos • Sucede cuando se inserta o "inyecta" un código SQL "invasor"dentro de otro código SQL para alterar su funcionamientonormal, y hacer que se ejecute maliciosamente el código"invasor" en la base de datos.

• Puede suceder tanto en programas ejecutándoseen computadoras de escritorio, como en páginas web, ya queéstas pueden funcionar mediante programas ejecutándose enel servidor que las aloja

Lenguajes que aplica

SQL (sentencias de SQL)

Franyelvis Colmenares

Ejemplo

Asumir que el siguiente código está enuna aplicación web y que existe unparámetro "nombreUsuario"

Si el usuario escribe su "Alicia”, la aplicacióngenerara una sentencia SQL correcta similara la siguiente, donde se seleccionaría alusuario "Alicia“:

Pero si un usuario malintencionado escribecomo nombre de usuario

Se generaría la siguiente consulta SQL

La base de datos ejecutaría la consulta enorden, seleccionaría el usuario'Alicia', borraría la tabla 'usuarios' yseleccionaría datos que quizá no estándisponibles para los usuarios web comunes

Franyelvis Colmenares

Cómo evitar el Sql Injection

¿CÓMO EVITAR EL SQL INJECTION?

Asignación de

mínimos privilegios

La cuenta debe tener sólo privilegios que ésta necesita, ni más ni menos.

Validar

todas las entradas

Si en un campo de texto sólo se puede ingresar un tipo de dato, pues valide la

entrada para tal efecto y especifique la longitud de caracteres a ingresar

Empleo de

procedimientos almacenados

Utilizar procedimientos almacenados y aceptar los datos del usuario comoparámetros en lugar de instrucciones SQL.

Utilizar comillas

dobles en vez de las simples

En el archivo que procesa los datos de entrada del usuario remplazamos lascomillas simples por comillas dobles, impidiendo inyecciones SQL

Franyelvis Colmenares

Políticas de Programación

• La primera cosa que se debe hacer es redactar una política de programación, que contenga:– Las cosas que NO se deben hacer– La existencia de patrones– El know-how de la empresa o grupo de desarrolladores– Explícitamente indicar la suma importancia del

seguimiento de las reglas– Complejidad ciclomática

• Técnicamente, se puede cumplir con estas reglas– Logging (log4net, log4j)– Peer review (revisión de pares)– Try / catch

Franyelvis Colmenares

Logging

• Aproximadamente un 4% del código debe estar destinado aoperaciones de logging (McConnell)

• Muy difícil enseñar a hacer buen logging, tiempo deaprendizaje aprox. 1 año.

• Mejor herramienta de logging: log4j / log4net:http://logging.apache.org

• Cada vez que ocurre una falla en el programa, podemos estarenterados por correo!!

José Barrios

Ejemplo Logging (log4net)

protected void Logon_Click(object sender, EventArgs e)

{

log.Info("Trata de autenticarse: " + UserEmail.Text +

"/********");

if (verificar(UserEmail.Text, UserPass.Text))

{

log.Info("Usuario autenticado");

… // redirección o a Inicio

}

else

{

log.Error("Usuario " + UserEmail.Text + "/" + UserPass.Text + "

incorrectos");

Msg.Text = "Nombre o Clave de Usuario son inválidos, o el

usuario ha sido dado de baja";

}

}

José Barrios

Mejores Prácticas

Mejores Prácticas

Reducir complejidad del código fuente

Nunca hacer el código más complejo que lo necesario

Revisiones del código fuente

Que alguien diferente al autor original realice una auditoría decódigo

Pruebas de software

Las pruebas de software deberán ser para tanto que el softwaretrabaje como debe, como cuando se supone que pase si serealice deliberadamente malas entradas

Reutilización inteligente del código fuente

Capturar beneficios de un bien escrito y bien probado códigofuente, en vez de crear bugs innecesarios. Aunque no siempre esla mejor manera de progresar, particularmente cuando la lógicadel negocio esta involucrada.

José Barrios

Recomendaciones

Evitar los Errores clásicos de la Programación

Error Área Descripción

Personas Motivación Débil Tiene mayor efecto sobre la productividad y la calidadque ningún otro factor

Procesos Procesos Inadecuados

Proyectos acelerados generan un diseñoindeterminado, insuficiente tiempo y alta presión

Recursos Desarrolladores Meticulosos

El esfuerzo requerido para diseñar, implementar,probar y documentar nuevas tecnologías innecesariasalargan el plan significativamente

Tecnologías Cambiar de Herramientas a Mitad del Proyecto

Raramente funciona y ante ese escenario, cuandoestamos a la mitad de un proyecto, los inevitableserrores cometidos, normalmente anulan cualquierbeneficio.

José Barrios

Preguntas

Gracias por su atención…

El Equipo