You are on page 1of 15

1

Tabla de contenido
PROBLEMAS DE SEGURIDAD EN SOFTWARE ................................... 2
Los siete reinos perniciosos ................................................................. 9
Capacidades y limitaciones del anlisis esttico ................................ 11
Resolucin de problemas de anlisis esttico .................................... 12
CONCLUSIONES .................................................................................. 15
VULNERABILIDADES DE SOFTWARE ... Error! Marcador no definido.
Ciclo de vida de una vulnerabilidad. ...... Error! Marcador no definido.
CONCLUSIONES ..................................... Error! Marcador no definido.
TRABAJOS CITADOS .............................. Error! Marcador no definido.




2
PROBLEMAS DE SEGURIDAD EN SOFTWARE

El software en los das presentes, es un elemento clave en los actuales
sistemas de control incluidos, los de seguridad crtica, en los que una falla puede
causar daos irreparables tanto a las personas como al entorno.
Puesto que el software ni envejece ni se estropea, la calidad de ste
depender principalmente de los defectos que se introduzcan en la fase de
codificacin.
Es por esto que cualquier tcnica que elimin estos defectos en la fase de
creacin, permiten aumentar las calidad del producto reduciendo ampliamente los
costos de implementacin. Para este evitar este tipo de percances existen las
herramientas de anlisis esttico, las cuales pueden y permiten localizar cdigo
defectuoso o errores de programacin sin siquiera ejecutar el cdigo.
El ciclo de desarrollo incluye habitualmente varias etapas como son: la
especificacin, diseo, codificacin del software, integracin de mdulos,
integracin con el hardware y validacin del software y sistema, esto es conocido
como el ciclo de vida del software.
Dentro de este proceso un punto clave es el proceso de verificacin que se
debe realizar siempre al final de una de las fases y mucho antes de comenzar
otra, es para esto que nos ayudan las herramientas de anlisis esttico.
Ya en la etapa de verificacin, debemos de tener muy en cuenta y
claramente la diferencia entre validacin y verificacin, para esto Barry W. Boehm,
lo describe con unas sencillas palabras:
Validacin: Estamos construyendo el producto correcto? Se ocupa
de controlar si el producto satisface los requerimientos del usuario.
Barry W. Boehm.


3
En la Validacin el resultado final del desarrollo software se debe
ajustar a lo que el usuario requera (sus necesidades). En la
mayora de las ocasiones el producto desarrollado no se alinea con
la ideas del cliente, normalmente porque a ste suele faltarle
capacidad tcnica de expresin.
Verificacin: Estamos construyendo correctamente el producto?
implica controlar que el producto conforma su especificacin inicial.
Barry W. Boehm.
En la Verificacin el cdigo que estamos construyendo debe estar
en armona con la especificacin que hemos tomado del usuario. El
resultado final del desarrollo software debe concordar con la
especificacin (requisitos) del sistema, por lo que debemos
asegurarnos que el desarrollo final coincida con dicha
especificacin.
Como se coment, el anlisis esttico es una evaluacin del cdigo sin
ejecutar el cdigo, existen normas que proponen lenguajes de programacin
adecuados, como ejemplo la EN 50128, la cual presenta una lista de lenguajes
recomendados, estos en general deben de ser estructurados y restringidos, como
por ejemplo Ada o Pascal, pero como el C/C++ es uno de los lenguajes mas
adaptados a los sistemas, es incluido dentro de esta lista.
Para la tcnica de programacin ue pueden aplicarse para realizar este
anlisis la norma EN 50218 define un conjunto de stas y entre las que marca
como Altamente Recomendables para el nivel SIL4 (Safety Integrity Level) 4 se
refiere a un nivel de criticidad mximo.
Dentro de esta norma se proponen diferentes seguimientos como son,
anlisis de valores extremos, el anlisis del flujo de control y de datos, las
revisiones de diseo y la ejecucin simblica del cdigo, de acuerdo a la siguiente
categorizacin SIL siendo 1 el nivel mnimo de criticidad y 4 el mximo, todas los
procesos anteriores tienen que ser aplicados a un nivel 4 de criticidad.


4
El anlisis de valores extremos busca defectos en el uso de las variables en
los extremos de su rango de validez o en valores que son ms propensos a error
como la divisin sobre cero, el uso de punteros y los accesos a los arreglos
(arrays).
El anlisis del flujo de control busca problemas en la estructura lgica del
programa, como son fragmentos de cdigo que pueden contener validaciones
defectuosas que eviten entrar a partes de la secuencia, o validaciones de
complejidad innecesaria que eviten localizar problemas.
El anlisis de flujo de datos busca errores en la estructura de datos y en el
acceso a los mismos, lo cual verifica la lectura de las variables, si han sido
declaradas anteriormente a su uso o no, la lectura y escritura de una misma
variable de forma continua.
Las revisiones de diseo, es un proceso en que un grupo asignado de
revisores que verifican el cdigo usando un conjunto de casos de uso que son
probados de forma manual.
La ejecucin simblica consiste en sustituir a lo largo del software las
expresiones del lado derecho e izquierdo de todas las asignaciones manteniendo
nombre de variables en lugar de valores de forma que se obtenga al final una
expresin para cada una de las variables. Esa expresin resultante se compara
con la especificacin para ver si coincide.
Las herramientas de anlisis esttico las cuales an no son parte de los kits
de herramientas comnmente entre los programadores, estas aportan ayuda en el
testeo de stas y permiten encontrar errores tanto de ejecucin como de
seguridad en el cdigo fuente.
Los esfuerzos que se realizan comnmente en la programacin, para
validar la seguridad son despus de terminar de escribir el cdigo, de esta manera
se realizan testeos casi siempre controlados por el creador del cdigo siendo esto
parte fundamental de la inseguridad de las aplicaciones ya que al ser controladas


5
se ingresan datos que se sabe, tendrn el resultado que a su parecer son las
ejecuciones correctas de programa.
Existen categorizaciones dentro de la seguridad de aplicaciones que deben
ser descritas ya que son frecuentemente la base que pone en peligro la correcta
ejecucin y proteccin de datos.
Al considerar ahora el estudio de la inseguridad informtica, como una
disciplina dual donde los acadmicos y practicantes de la industria desarrolladora
buscan los mtodos ms detalladas para que ocurran eventos inesperados,
establecen las condiciones extremas de funcionamiento de los dispositivos o
estrategias, todo con el fin de hacer caminar en condiciones lmite la operacin de
la organizacin y sus negocios. La estrategia dual sugiere contextualizar en un
escenario real la incertidumbre inherente de la seguridad informtica para revisar
entre otros aspectos:
Cmo funciona el sistema?
Cmo no funciona el sistema?
Cmo reacciona ante una falla?
Cmo hacerlo fallar?
La inseguridad informtica como disciplina dual en el estudio de la
seguridad informtica, establece un paradigma complementario (es decir dual a la
seguridad informtica) que comprende las propiedades emergentes de los
sistemas (analizados) bajo condiciones y realidades extremas, las cuales no son
viables en una estrategia de proteccin causal (dualismo) sugerida por la
seguridad informtica actual.
Es por este motivo, que se quiere plantear la necesidad de revisar nuestra
manera de abordar el tema de la proteccin de los activos de una organizacin, no
solamente establecer las causas y los efectos, sino comprender las relaciones
entre los objetos revisados y considerar las reacciones mismas de entre estas que
pueden sugerir efectos no predecibles en los modelos causales.



6
La programacin defensiva nunca es suficiente: esto se refiere a
introducir cdigo que permita localizar ms fcilmente los errores de ejecucin en
la programacin, sin embargo este tema por ms a menudo que aparece en las
retculas de las universidades siempre dan ms importancia a la codificacin con
la mentalidad de que los errores siempre van a estar ah.
Cuando se habla de seguridad, casi siempre se piensa que algo o alguien
est ah en todo momento para tratar de romper estas barreras an cuando los
errores pueden ser ocasionados tanto por el programador como por el usuario. El
software de seguridad se trata de crear programas que se comportan
correctamente, incluso en presencia de un comportamiento malicioso.
Un buen ejemplo de este punto es un cdigo que permite escribir un archivo
dentro del sistema a partir de una cadena introducida por el usuario, si las
validaciones no son correctas alguien puede ingresar un cdigo malicioso al
equipo servidor, hablando de las validaciones pueden ser tan sencillas como
verificar que las cadenas ingresadas no vengan con valor nullo y para mayor
seguridad, forzar a que la cadena ingresada sea convertida a un formato fijo.
Caractersticas de seguridad no es igual a caractersticas seguras: casi
siempre los programadores no tienen el cuidado en cuestin de trminos de
caractersticas de seguridad como son cdigos cifrados, contraseas,
contraseas y mecanismos de control de acceso, siendo estos puntos bsicos
para la seguridad. A menudo se le da ms nfasis a la codificacin del
funcionamiento del programa dejando de lado la programacin de la seguridad.
En lugar de discutir maneras de implementar caractersticas de seguridad o
hacer uso de los mdulos de seguridad en envases previos o marcos, se
concentran en identificar y evitar los errores ms comunes en el cdigo que no
necesariamente estn relacionados con alguna de las funciones de seguridad. De
vez en cuando discutimos las caractersticas de seguridad, pero slo en el
contexto de los errores de implementacin comunes.


7
La Falacia de Calidad: para todo aquel que ha escrito algn programa,
sabe que los errores de ejecucin y codificacin son inevitables, ya que se
necesita un enfoque sistemtico para la localizacin de errores comunes,
generalmente las pruebas realizadas son pruebas dinmicas el cual consiste en
ejecutar el software y comparar los resultados obtenidos contra los resultados
deseados estos es conocido como casos de usos. En la prctica, la mayora de los
esfuerzos de calidad de software estn orientados a la funcionalidad del programa
de pruebas.
Mayormente se nombran encargados de las reas de programacin que
sugieren u obligan a ejecutar una gran cantidad de pruebas unitarias ejecutadas
por el programador, incluso aun antes de escribir el cdigo. Existen
organizaciones que poseen reas especficas dedicadas al escribir e inventar de
estos programas nicamente las pruebas, su realizacin as como la evaluacin
de stas, aunque la mayora de pruebas de software tiene como objetivo
comparar la aplicacin de los requisitos, y este enfoque no es suficiente para
encontrar problemas de seguridad.
El software siempre se crea a partir de requisitos funcionales, que son
simplemente los requerimientos del cliente final, cuando se realizan las pruebas
asegurndose del cumplimiento de stos y no se llegan a cumplir se dice que se
ha localizado un bug, esto tal vez sea bueno para la funcionalidad del software de
pruebas e incluso para la funcionalidad de seguridad, pero generalmente no
funciona para la seguridad del sistema, esto es porque a menudo no son
violaciones de los requisitos, sin embargo los problemas de seguridad son con
mucha frecuencia funcionalidades ni deseadas y es por eso que el programa se
hace inseguro.
Como lo menciona Ivn Arce: Software fiable hace lo que se supone que
debe hacer. Software seguro hace lo que se supone que debe hacer, y nada ms.
Anlisis esttico en el Big Picture: Para el desarrollo de software el
procedimiento es similar, se utilizan 4 pasos principalmente.


8
1. Planear: Reunir los requisitos, crear un diseo, y las pruebas de plan.
2. Construir: Escribir el cdigo y las pruebas.
3. Ejecutar pruebas de los ensayos, registrar los resultados, y determinar la
calidad del cdigo.
4. Campo: Implementar el software, dar seguimiento de su desempeo, y
mantenerlo como sea necesario.
Las diferentes metodologas existentes como el modelo de cascada, el
modelo en espiral, la programacin extrema, y el Proceso Racional Unificado, se
puede describir con el seguimiento de estos cuatro pasos.
General o casi siempre, los problemas de seguridad se han resulto con los
cortafuegos, cortafuegos de aplicacin, sistemas de deteccin de intrusos, y
pruebas de penetracin, sin embargo este tipo de procedimientos no funciona,
esto es porque se generan errores constantemente y sealamientos a
programadores y personal de la organizacin, la respuesta correcta es
simplemente en construir el software con los mecanismos de seguridad necesarios
a medida que este se disea y se contruye.
Gary McGraw estima que aproximadamente la mitad de los errores que
conducen a problemas de seguridad son descuidos de implementacin, omisiones
o malentendidos, es aqu donde las herramientas de anlisis esttico realmente
brillan. Una herramienta de anlisis esttico puede hacer que el proceso de
revisin de cdigo ms rpido y ms fructfera por la hiptesis de un conjunto de
problemas potenciales para su consideracin durante una revisin de cdigo.
Nadie afirma que la revisin de cdigo fuente es capaz de identificar todos
los problemas, pero el consejo es que la revisin de cdigo fuente tiene un papel
importante que desempear en cualquier proceso de seguridad del software.
La clasificacin de vulnerabilidades: Cuando se analizan una gran
cantidad de cdigo que no es seguro, se van reconociendo patrones y los
diferentes tipos de errores que los programadores realizan a medida que se
estudian las vulnerabilidades, estos se dividen en dos grupos:


9
Genricos: son problemas que puede ocurrir en casi cualquier
programa escrito en el lenguaje dado, como por ejemplo un
desbordamiento de bfer.
contexto especfico: para encontrar stos se requiere un
conocimiento especfico acerca de la semntica del programa de
primera mano.
Los siete reinos perniciosos
El trmino reino se utiliza como los bilogos utilizan en su taxonoma de los
organismos vivos para indicar una agrupacin de alto nivel de los miembros
similares. En trminos de seguridad estos se dividen en:
Validacin de entrada y representacin: estos son causados por
metacaracteres, codificaciones alternativas y representaciones numricas, esto es
debido a que se tiene demasiada confianza, este tipo de problemas son los que
generalmente se presentan y prevalecen por parte de los programadores y por lo
tanto la categora mas peligrosa de los defectos de la seguridad en el software.
Abuso API: Al hacer uso indiscriminado de este tipo de comunicaciones sin
especificar la seguridad adecuada, se corre el riesgo de permitir el libre flujo de
datos a las aplicaciones y de esta manera dar acceso a direcciones ms
complejas.
Funciones de seguridad: Este se enfoca mayormente las caractersticas
de seguridad tales como la autenticacin, control de acceso, la confidencialidad, la
criptografa y gestin de privilegios.
Tiempo y Estado: Se basa en el el momento en que se encuentra un
elemento del flujo del software, a todos los programadores piensan que los
programas continuaran linealmente sin interrupciones, esto genera que den por
alto los estados dentro del tiempo de ejecucin y as no delimiten correctamente
las caractersticas de seguridad de cdigo.


10
Control de errores: existen dos formas de introducir una vulnerabilidad de
seguridad de error relacionado. La primera siendo esta las ms comn, es para
controlar los errores poco o nada en absoluto. La segunda es producir errores que
ya sea revelar demasiado o que son difciles de manejar en forma segura.
Cdigo de calidad: Al generar cdigo de mala calidad, se esta dando
facilidad a algn intruso de poder ingresar y realizar una denegacin de servicio,
generando algn flujo infinito. Aunado a esto, es una entrega psima al servicio
que se le est otorgando al cliente.
Encapsulacin: La encapsulacin es un mecanismo que consiste en
organizar datos y mtodos de una estructura, conciliando el modo en que el objeto
se implementa, es decir, evitando el acceso a datos por cualquier otro medio
distinto a los especificados. Por lo tanto, la encapsulacin garantiza la integridad
de los datos que contiene un objeto.
Medio ambiente: Esto incluye a lo que esta fuera del cdigo fuente, pero
an as influye en la seguridad del producto.


1 Validacin de entrada y representacin
2 Abuso API
3 Funciones de seguridad
4 Tiempo y Estado
5 Control de errores
6 Cdigo de calidad
7 Encapsulacin
1 Entrada sin validar
*Medio ambiente
4 Fallas Cross-site scripting (XSS)
5 Desbordamientos de bfer
6 Fallas de inyeccin
2 Rptura de Control de acceso
3 Rptura de Autenticacin y Gestin de
Sesiones
8 Almacenamiento Inseguro
7 Manejo de errores incorrecto
9 Denegacin de servicio
10 Gestin Insegura de Configuraciones
Siete Reinos perniciosa OWASP TOP 10


11
Cualquier herramienta que analiza el cdigo sin ejecutarlo se est
realizando el anlisis esttico. A los efectos de la deteccin de problemas de
seguridad, la variedad de herramientas de anlisis esttico que son los ms
interesados son los que comportan un poco como un corrector ortogrfico.
Capacidades y limitaciones del anlisis esttico
Los problemas de seguridad pueden ser similares a la ortografa de una
persona esta puedes errar por un momento de confusin o un error de dedo,
pero en la programacin los problemas de seguridad ocurren en su mayora , por
el desconocimiento y la falta de comprensin sobre la programacin segura.
Las herramientas de anlisis esttico aplican controles a fondo y
sistemticamente, sin tener en cuenta la opinin del programador y realizando
pruebas imparciales que denoten las debilidades que se han realizado en la
programacin.
Examinan el cdigo mostrando a menudo la causa raz de un problema de
seguridad y no solo sus sntomas ayudando a la fcil comprensin y solucin de
estos.
Al realizarse un anlisis durante las faces de implementacin del cdigo, se
tiene la oportunidad de encontrar errores an incluso entes de ejecutar el cdigo
por primera vez, impactando positivamente en un ahorro en posteriores
correcciones ya que proporcionan al programador de corregirlos antes de que se
presenten.
Durante la ejecucin de una herramienta de anlisis esttico se pueden
generar infinidad de falsos positivos, que no son mas que falsas alarmas, es por
esto que a estas herramientas se les dice que hacen demasiado ruido, esto a la
larga es un impedimento para que el trabajo se realice de manera correcta, esto
es, por que al haber tantas falsas alarmas, el programador puede pasar por alto
una alerta crtica no atenderla correctamente. Existen otro tipo de alarmas
llamadas falsos negativos, los cuales no informan de errores reales que existen en


12
el programa, perdiendo demasiado tiempo en descubrirse y revisar el resultado, de
este tipo de falsos negativos se mantiene una falsa creencia de seguridad ya que
al parecer todo funciona correctamente.
Para una herramienta de anlisis esttico para coger un defecto, el defecto
debe ser visible en el cdigo. Esto puede parecer un punto obvio, pero es
importante entender que el anlisis de riesgos de arquitectura es un complemento
necesario para el anlisis esttico.
Resolucin de problemas de anlisis esttico
La verificacin de tipos
La forma ms utilizada de anlisis esttico y en el que la mayora de los
programadores estn familiarizados, es la verificacin de tipos. La verificacin de
tipos elimina todas las categoras de errores de programacin. La verificacin de
tipos se limita en su capacidad para detectar errores, sin embargo, y sufre de
falsos positivos y falsos negativos al igual que todas las otras tcnicas de anlisis
esttico.
Verificacin de estilos
Corrector de estilo son tambin herramientas de anlisis esttico. Por lo
general, hacer cumplir un conjunto ms selectivos y ms superficial de las reglas
de un tipo de corrector.
Los correctores de estilo puro hacen cumplir las normas relacionadas con el
espacio en blanco, de nombres, funciones obsoletas, comentarios, la estructura
del programa y similares. Debido a que muchos programadores estn fuertemente
apegados a su propia versin de un buen estilo, la mayora de los correctores de
estilo son bastante flexibles sobre el conjunto de reglas que se hacen cumplir. Los
errores producidos por el corrector de estilo a menudo afectan a la legibilidad y la
capacidad de mantenimiento del cdigo, pero no indican que un error en particular
se producir cuando el programa se ejecute.


13
Comprensin del Programa
Existen herramientas que permiten a los programadores una mayor
comprensin del cdigo fuente de los programas, como es encontrar donde se
realiza un llamado a cierta funcin o mtodo o el cambio de nombre de variables
en todo el cdigo. Algunas herramientas de alto nivel, realizan ingeniera inversa y
dan un panorama del cdigo que ha sido escrito por alguien ms, hacindolo
comprensible para el nuevo programador.
Verificacin del Programa y Comprobacin de la propiedad
Una herramienta de verificacin de programa acepta una especificacin y
un cuerpo de cdigo e intenta probar que el cdigo es un fiel cumplimiento de la
especificacin. Si la especificacin es una descripcin completa de todo lo que el
programa debe hacer, la herramienta de verificacin puede realizar la validacin
de equivalencia para asegurarse de que el cdigo y las especificaciones son
exactamente iguales.
Cuando una herramienta de comprobacin de la propiedad descubre que el
cdigo podra no coincidir con la especificacin, se explica tradicionalmente su
conclusin para el usuario al reportar un contraejemplo, un caso hipottico o
secuencia de eventos que tiene lugar dentro del programa que conducir a la
propiedad que est siendo violado.
Una herramienta de comprobacin de la propiedad se dice que es el sonido
con respecto a la especificacin de si siempre va a reportar un problema si es que
existe. En otras palabras, la herramienta no va a sufrir un falso negativo. La
mayora de las herramientas que dicen ser de sonido requieren que el programa
que est siendo evaluado cumpla con ciertas condiciones.
Localizacin de errores
El propsito de una herramienta de descubrimiento de errores no es para
quejarse de problemas de formato, como un corrector de estilo, ni es para realizar
una comparacin completa y exhaustiva del programa contra el pliego de


14
condiciones, como una herramienta de verificacin del programa hara. En cambio,
un buscador de error simplemente seala los lugares donde el programa se
comportar de una manera que el programador no tena la intencin.
Revisin de Seguridad
Las herramientas de anlisis esttico enfocadas a seguridad utilizan
muchas de las mismas tcnicas que se encuentran en otras herramientas, pero su
objetivo es identificar los problemas de seguridad, esto significa que se aplican
estas tcnicas de manera diferente, en su mayor parte, estos escanean el cdigo
en busca de las llamadas a funciones como strcpy( ) que generalmente se
implementan de manera incorrecta y deben ser inspeccionados como parte de una
revisin manual del cdigo fuente.
Desde el hallazgo de errores, herramientas de seguridad adoptan la nocin
de que los desarrolladores a menudo siguen reinventar el mismo mtodo inseguro
de resolver un problema, lo que puede ser descrito como un lenguaje de
programacin insegura.
La mejor herramienta de seguridad es el mejor trabajo que va a minimizar
los falsos positivos sin permitir falsa negativos a in fluencia



15
CONCLUSIONES

Dentro de las aplicaciones web como de escritorio se han enfocado a
cumplir con los requerimientos solicitados por el cliente tanto en tiempos como en
funcionalidades, esto principalmente sin poner el cuidado necesario a la
seguridad.
Existen herramientas en la que se pueden apoyar en el proceso de la
construccin del programa, estas son llamadas herramientas de anlisis
esttico, las cuales pueden verificar la estructura del cdigo en cuestin de tipos
de variables, llamadas a mtodos, flujos, etc.
El uso de este tipo de herramientas permite realizar correcciones a medida
que se est creando el cdigo ya que realizan pruebas sin ejecutar el programa,
poniendo mayor atencin a las caractersticas de seguridad este tipo de anlisis
generalmente son realizados por una herramienta automatizada.
Dentro de las tcnicas de verificacin de cdigo el anlisis esttico es una
tcnica relativamente sencilla y fcilmente automatizable, incluida como altamente
recomendable en todas las normas de sistemas de seguridad crtica y que permite
mejorar la calidad del software desde el momento mismo de su creacin. Es
conocido que el costo de reparacin de un defecto crece conforme avanzamos en
el ciclo de desarrollo, por lo que encontrar los defectos en la misma proceso de la
creacin del cdigo es el momento menos costoso. Aunque una nica tcnica no
garantiza el descubrir todos los problemas, la tcnica tratada es una de las de ms
fcil adopcin y que ms ventajas aporta.

You might also like