Desarrollo seguro de aplicaciones

Desarrollo Seguro de Aplicaciones
Contenidos
1.- Introducción al desarrollo seguro de aplicaciones
1.1.- ¿Qué es la seguridad informática?
1.2.- ¿Qué es la programación segura?
1.3.- ¿Por qué los programadores escriben código inseguro?
1.4.- Funcionalidad vs. Correción vs. Seguridad
1.5.- El mito del ambiente hostil
2.- Fallos de seguridad
2.1.- Fallos de seguridad clásicos
2.1.1.-Aplicaciones inseguras
2.1.2.- Debordamientos de pila
2.1.3.- Desbordamientos de memoria dinámica
2.1.4.- Errores de formato
2.2.- Evolución del fallo de seguridad
2.2.1.- Aplicaciones inseguras
2.2.2.- Inyección de SQL
2.2.3.- Inyección de código en el servidor
2.2.4.- Inyección de código HTML en el cliente
2.3.- Otros fallos de seguridad comunes
2.3.1.- Escalada de directorios
2.2.2.-Condiciones de carrera
2.2.3.- Errores en el mecanismo de autenticación
2.2.4.- Errores en el mecanismo de cifrado

1
3.- Desarrollo seguro de aplicaciones
3.1.- Técnicas para una codificación segura
3.1.1.- Puntos críticos en la seguridad de una aplicación
3.1.1.1- Entrada de datos
3.1.1.2- Salida de datos
3.1.1.3- Modificación de datos
3.1.2.- Medidas para una programación segura3.1.2.1.- Programación conservativa
3.1.2.2.- Control del flujo de ejecución de la aplicación
3.1.2.3.- Verificación exahustiva: celdas de seguridad.
3.1.3.- Ingeniería del software seguro
4.- Herramientas para la seguridad de las aplicaciones
4.1.- Herramientas de búsqueda y chequeo
4.1.1.- RATS
4.1.2.- LClint
4.2.- Herramientas antiexplotación
4.1.1.- Libsafe
4.1.2.- StackGuard yFormatGuard
4.3.- Mecanismos de prevención y detección de intrusiones
4.3.1.- IDS y NIDS
4.3.2.- Firewalls a nivel de aplicación: Firewalls webs
A.- Apéndice A: Bibliografía
B.- Apéndice B: Licencia del documento

2

Introducción al Desarrollo Seguro de Aplicaciones

Sería complicado, en unas pocas líneas, exponer de forma clara y concisa el tema sobre el que
versa este documento. La seguridad,y la programación segura, como parte de ella, son
multidisciplinares. En ellas tienen cabidas programación, ingeniería del software, redes, servicios
de red, inteligencia artificial, y un sin fin de áreas de conocimiento asociadas. Es tanto y tan
extenso, a la vez que desconocido para la inmensa mayoría, el mundo de la (in)seguridad
informática que no puede ser condensado en las pocas decenasde hojas que nos vamos a
extender.
No obstante, y pecando de simplicidad, diremos que este texto versa entorno a tres ideas. La
primera es que nuestro software debe hacer únicamente lo que nosotros queramos que haga,
absolutamente nada más. La segunda es que la seguridad es tan importante como la
funcionalidad, por mucho que nos cueste darnos cuenta. Y la tercera es que la única forma deadquirir los conocimientos necesarios para comprender plenamente las anteriores es conociendo en
profundidad qué es un fallo de seguridad, porqué se cometen y cómo se explotan.
1.1.- ¿Qué es la (in)seguridad informática?
“El único sistema seguro es aquel que está apagado, desconectado, dentro de una caja fuerte de
titanio, enterrado en un bunker de concreto, rodeado de gas tóxico y vigilado porguardias
armados y muy bien pagados. Y aún así, no apostaría mi vida a que es seguro”. Gene Spafford
Antes de continuar avanzando en el periplo que nos lleve a profundizar en el ámbito de la
programación segura, es conveniente dedicar unas cuantas líneas a la idea general de “seguridad
informática”, a su significado y a lo que comprende.
“Libre y exento de todo peligro, daño o riesgo”, es ladefinición que la Real Academia de la Lengua
Española da al término seguridad. Por tanto, hablar de seguridad informática sería hacerlo de una
informática libre y exenta de todo peligro, daño o riesgo. Convendremos en la ambiguedad de esta
definición, y por ello, y de forma más concreta, diremos que: asegurar y garantizar que los
recursos informáticos estén exentos de peligro, daño o riesgo…