Está en la página 1de 19

SEGURIDAD EN INGENIERA DE

SOFTWARE

La seguridad de software aplica los principios


de la seguridad de informacin al desarrollo d
e software. Information security (La seguridad de
informacin) se refiere a la seguridad de
informacin comnmente
como la proteccin de sistemas de informaci
n contra el acceso desautorizado o la modific
acin de informacin, si est en una fase de
almacenamiento, procesamiento o trnsito.

Tambin la protege contra la


negacin de servicios a usuarios desautorizado
s y la provisin de servicio a usuarios desautori
zados, incluyendo las medidas necesarias para
detectar, documentar, y contrarear tales
amenazas.

Muchas preguntas con respecto a la seguridad,


son relacionadas al ciclo vital de software. En
particular, la seguridad del cdigo y el proceso
de software; deben de ser considerados
durante la fase del diseo y desarrollo.
Adems, la seguridad debe de ser preservada
durante la operacin y el
mantenimiento para asegurar la integridad de
una parte (pedazo) de software.

Una gran cantidad de seguridad usada en los


Sistemas de Redes de hoy, nos pueden enga
ar en la
creencia que nuestros trabajos como diseado
res de sistema de seguridad ya han sido realiz
ados. Sin embargo, las cadenas y computadoras
son increblemente inseguras. La falta de
seguridad se origina en
dos problemas fundamentales: Los sistemas qu
e son tericamente seguros pueden ser insegu
ros en la
prctica, Adems los sistemas son cada vez
ms complejos. La complejidad proporciona m
s oportunidades para los ataques. Es mucho ms
fcil probar que un sistema es inseguro que
demostrar que
uno es seguro probar la inseguridad, simpleme
nte una toma ventaja de ciertas vulnerabilida
des del sistema.

4.1 SEGURIDAD DE SOFTWARE


El concepto de la seguridad en los sistemas de
software es un rea de investigacin que ha
pasado a ser vital dentro de la Ingeniera de
Software. Con el crecimiento de Internet, y otras
aplicaciones sobre redes, como el comercio
electrnico, correo electrnico, etc., la
posibilidad de ataques se ha incrementado
notablemente, como tambin lo han hecho las
consecuencias negativas de estos ataques.

En la actualidad prcticamente todo sistema


debe incorporar cuestiones de seguridad para
defenderse de ataques maliciosos. El
desarrollador ya no slo debe concentrarse
nicamente en los usuarios y sus requerimientos,
sino tambin en los posibles atacantes.

Esto ha motivado cambios importantes en el


proceso de diseo y desarrollo de software para
incorporar a la seguridad dentro de los
requerimientos crticos del sistema.

Estos cambios son los primeros pasos en la


concientizacin de los ingenieros de software
acerca de la importancia de obtener un software
seguro. Como todo gran cambio, no se logra de
un da para otro, sino que es un proceso gradual
que requiere tiempo y maduracin. Todava la
Ingeniera de Software no ha dado una respuesta
eficaz, coherente y aplicable que satisfaga
plenamente a la comunidad informtica, sino
que las aproximaciones actuales estn plagadas
de fallas y debilidades fruto de que todava es un
proceso que se encuentra en su infancia.

Siempre que utilicemos un sistema informtico, sin


importar cul sea la razn, es importante que
tengamos como prioridad la instalacin de un
software de seguridad, teniendo en cuenta la
cantidad de riesgos que corremos con un sistema
informtico sin proteccin.

Justamente por la importancia acerca de lo que


es un software de seguridad para cualquier
usuario, la mayora de los sistemas operativos con
los que podemos trabajar suelen traer
incorporado en ellos un software de seguridad
bsico, pero es importante que sepamos ante
todo qu es un software de seguridad y la
diferencia entre ste software y uno que es
especialmente desarrollado para prevenir
problemas en el funcionamiento del sistema, es
que el mismo, simplemente nos advierte cuando
estamos frente a algn riesgo.

Tipos de software de seguridad

Sin duda, el tipo de software de seguridad ms


conocido son los programas antivirus, que se
encargan de detectar y eliminar virus
informticos. Un buen programa antivirus dispone
de un archivo de firmas de virus que se actualiza
automticamente y detecta virus nuevos. Este
tipo de actualizacin se realiza peridicamente,
varias veces al da.

El software de seguridad suele venderse en las


denominadas suites. Son paquetes compuestos
de:

Programa antivirus
Cortafuegos
Filtro antispam
Software para filtrar contenidos
Software contra publicidad no deseada
Control de sitios web

Actualmente, la seguridad es un concepto que


todo sistema debe incorporar. La Ingeniera del
Software todava no es capaz de brindar un
mecanismo para implementar adecuadamente
la seguridad: los lenguajes tienen primitivas
inseguras, el cdigo relativo a la seguridad es
siempre un cdigo confuso y complejo debido a
tcnicas de abstraccin insuficientes, etc.

4.2 SEGURIDAD EN EL CICLO DE


DESARROLLO DEL SOFTWARE

La mayor parte de las organizaciones desarrolla o


contrata el desarrollo de aplicaciones propias
para su gestin de negocio. Como todo software,
estas aplicaciones pueden contener fallas de
seguridad y a diferencia del software comercial,
no se dispone de actualizaciones o parches
liberados en forma peridica por el fabricante. El
tratamiento de las vulnerabilidades en
aplicaciones propias corre por parte de la
organizacin que las desarrolla.

Lamentablemente es una prctica habitual en


muchas organizaciones la puesta en
produccin de sistemas sin la participacin del
sector de Seguridad de la Informacin.

Muchas otras veces, el sector de Seguridad se


entera demasiado tarde, y no tiene suficiente
margen de accin para el anlisis de seguridad
de la aplicacin desarrollada.
Por lo general, en el mejor de los casos, se
coordina un testeo de seguridad una vez que la
aplicacin ya est desarrollada. Aqu muchas
veces se encuentran errores que requieren el
rediseo de parte de la aplicacin, lo cual
implica un costo adicional en tiempo y esfuerzo.

Seguridad en el anlisis de requerimientos

En esta etapa, se deben identificar aquellos


requerimientos funcionales que tendrn impacto
en los aspectos de seguridad de la aplicacin.
Algunos de ellos son: requerimientos de
compliance con normativas locales o
internacionales (ej: PCI, SOX, A 4609, etc.), tipo
de informacin que se transmitir o procesar (ej:
Informacin pblica o confidencial, datos
personales, datos financieros, contraseas, datos
de pago electrnico, etc.) y requerimientos de
registros de auditora (ej: Qu debe registrar la
aplicacin en sus Logs).

Seguridad en el diseo

Antes de comenzar a escribir lneas de cdigo,


hay numerosos aspectos de seguridad que
deben ser tenidos en cuenta durante el diseo de
la aplicacin.

Algunos de ellos son: diseo de autorizacin


(ej: Defnir los roles, permisos y privilegios de la
aplicacin), diseo de autenticacin (aqu se
debe disear el modo en el que los usuarios se
van a autenticar, contemplando aspectos tales
como los mecanismos o factores de
autenticacin con contraseas, tokens,
certifcados, etc. posibilidades de integrar la
autenticacin con servicios externos como LDAP,
Radius o Active Directory y los mecanismos que
tendr la aplicacin para evitar ataques de
diccionario o de fuerza bruta (ej: bloqueo de
cuentas, implementacin de captchas, etc.),
diseo de los mensajes de error y advertencia,
para evitar que los mismos brinden demasiada
informacin y que sta sea utilizada por
atacantes y diseo de los mecanismos de
proteccin de datos (aqu se debe contemplar el
modo en el que se proteger la informacin
sensible en trnsito o almacenada; segn el caso,
se puede definir la implementacin de
encriptacin, hashes o truncamiento de la
informacin).

Una vez que se cuenta con el diseo detallado


de la aplicacin, una prctica interesante es la
de realizar sobre el mismo un anlisis de riesgo
orientado a software. Existen tcnicas
documentadas al respecto, tales como Threat
Modeling. Estas tcnicas permiten definir un
marco para identificar debilidades de seguridad
en el software, antes de la etapa de codificacin.
Como valor agregado, del anlisis de riesgo
orientado a software se pueden obtener casos de
prueba para ser utilizados en la etapa de
Testing/QA.

Seguridad en la codificacin

Una vez concluido el diseo, le toca a los


desarrolladores el turno de codificar los distintos
componentes de la aplicacin. Es en este punto
en donde suelen incorporarse, por error u omisin,
distintos tipos de vulnerabilidades. Estas
vulnerabilidades podramos dividirlas en dos
grandes grupos a saber: vulnerabilidades clsicas
y vulnerabilidades funcionales. Las primeras son
bien conocidas y categorizadas.

Ejemplo de estas vulnerabilidades son las


presentes en el OWASP
Top 10 (Vulnerabilidades de inyeccin, Cross Site
Scripting, errores en manejo de sesiones, etc.)
como as tambin otras vulnerabilidades no
ligadas directamente con las aplicaciones WEB,
como desbordamiento de buffer, denegacin
de servicio, etc. Los Frameworks de desarrollo de
aplicaciones son una buena ayuda en este
punto, ya que ofician de intermediario entre el
programador y el cdigo, y permiten prevenir la
mayora de las vulnerabilidades conocidas.
Ejemplos de estos frameworks son Struts, Ruby on
Rails y Zope.

Vulnerabilidades funcionales son aquellas ligadas


especficamente a la funcionalidad de negocio
que posee la aplicacin, por lo que no estn
previamente categorizadas.

Algunos ejemplos ilustrativos de este tipo de


vulnerabilidad son los siguientes: una aplicacin
de banca electrnica que permite realizar
transferencias con valores negativos, un sistema
de subastas que permite ver los valores de otros
oferentes, un sistema de venta de entradas para
espectculos que no impone lmites adecuados a
la cantidad de reservas que un usuario puede
hacer.

En la etapa de codificacin, una de las reglas de


oro es verificar todos los valores de entrada y de
salida. Esto es, asumir siempre que el valor pudo
haber sido manipulado o ingresado
maliciosamente antes de ser procesado.

4.3 CONFIABILIDAD DEL SOFTWARE

La confiabilidad de software significa que un


programa particular debe de seguir funcionan
do en la
presencia de errores. Los errores pueden ser re
lacionados al diseo, a la implementacin, a l
a programacin, o el uso de errores.

As como los sistemas llegan a ser cada vez ms


complejos, aumenta la probabilidad de errores.

Como mencionamos, es
increblemente difcil demonstrar que un sistem
a sea
seguro. Ross Anderson dice que la seguridad
de computacin es como programar la comp
utadora del
Satn. Software seguro debe de funcionar ab
ajo de un ataque.

Aunque casi todos los software tengan


errores, la mayora de los errores nunca
sern revelados debajo de circunstancias
normales. Un atacante busca esta debilidad para
atacar un sistema.

Las organizaciones que desarrollan productos


basados en software requieren de prcticas
efectivas que permitan mejorar la calidad del
producto. La Ingeniera de la Confiabilidad de
Software es una prctica cuantitativa que puede
ser implementada en organizaciones de cualquier
tamao bajo distintos modelos de desarrollo.

Las organizaciones desarrolladoras de productos


basados en software destinan grandes
cantidades de recursos para mejorar la calidad
de sus productos. Una parte de dichos recursos se
utiliza para la adopcin de mejores prcticas. Sin
embargo, la dificultad de la adopcin de dichas
prcticas no slo reside en el costo y el tiempo
requerido para institucionalizarlas, sino en cmo
medir su impacto en la calidad del software, as
como demostrar el retorno de dicha inversin.

La calidad, las fallas y la confiabilidad de


Software
La calidad es un atributo percibido por los
usuarios o clientes de cualquier producto o
servicio. En el caso de productos basados en
software, la percepcin de la calidad est en
funcin de las fallas que el cliente percibe del
mismo durante su operacin.

La confiabilidad es un atributo que mide el grado


en que un producto opera sin fallas bajo
condiciones establecidas por un periodo de
tiempo determinado. La confiabilidad es un
atributo cuantitativo que ha sido ampliamente
analizado, estudiado y usado en otras industrias
para caracterizar la calidad de los productos o
servicios.

En su concepcin ms general, la confiabilidad es


un atributo que mide el grado en que un
producto opera sin fallas bajo condiciones
establecidas por un periodo de tiempo
determinado.

Una falla es la manifestacin percibida por el


cliente de que algo no funciona correctamente e
impacta su percepcin de la calidad. Un defecto
es el problema en el producto de software que
genera una falla.

Se dice que un Software es confiable si realiza


lo que el usuario desea, cuando as lo requiera

No es confiable si as no lo hiciera. A nuestros


fines un Software no es Confiable cuando falla.

Las fallas se deben a errores en el Software. Si


corregimos estos errores sin introducir nuevos,
mejoramos la Confiabilidad del Software.

Histricamente, una forma de aumentar la


Confiabilidad de un Software era correrlo y
probarlo extensivamente antes de liberarlo. No es
efectivo probar la Confiabilidad en el producto
sino hacerla, es decir fabricarla en el mismo. La
Confiabilidad deber ser diseada en el
producto.

4.4 INGENIERA DE SEGURIDAD

La Ingeniera de la seguridad es una rama de la


ingeniera, que usa todo tipo de ciencias para
desarrollar los procesos y diseos en cuanto a las
caractersticas de seguridad, controles y sistemas
de seguridad. La principal motivacin de esta
ingeniera ha de ser el dar soporte de tal manera
que impidan comportamientos malintencionados.

El campo de esta ingeniera puede ser muy


amplio, podra desarrollarse en muchas tcnicas:

Equipos: Como el diseo de cerraduras,


cmaras, sensores,...

Procesos: polticas de control, procedimientos


de acceso,...
Informtico: control de passwords,
criptografa,...
Tradicionalmente el tema de la seguridad en
sistemas computarizados se ha asociado a la
criptografa y sus tcnicas. La inmensa
complejidad que caracteriza a los sistemas
modernos hace que esta aproximacin sea
insuficiente.

Hoy en da la seguridad est asociada a la


interaccin de una multiplicidad de sistemas. La
seguridad de un sistema en particular est
directamente relacionada a la seguridad de la
ms dbil de sus partes.

Un sistema puede tener mecanismos


criptogrficos que sean considerados
completamente seguros pero puede adolecer de
debilidades que hagan que sea innecesario
atacar al sistema criptogrfico.

Ejemplos de esto son:

Sistemas que fallan debido a problemas en el


cdigo, como en la mayora de los ataques
conocidos como de buffer overflow, en los
cuales el no considerar aspectos de excepcin
asociados a los sistemas pueden representar que
un atacante suficientemente hbil pueda asumir
funciones del administrador. Si en un determinado
sistema alguien asume las funciones del
administrador puede tener muy fcil acceso a
claves y sistemas criptogrficos haciendo intil la
fortaleza del sistema criptogrfico que lo protege.

Algunos ataques aprovechan fallas de diseo en


los sistema. Si una determinada aplicacin
ejecuta sin evaluar un determinado comando, los
atacantes del sistema pueden conseguir
informacin vital sin necesidad de romper las
claves criptogrficas que lo protegen.

La existencia de sistemas de comunicacin mvil,


basados en transmisin inalmbrica facilita
actividades de fisgoneo en la seal.

Algunas veces lo que se conoce como ataques


de ingeniera social pueden resultar muy efectivos
a la hora de atacar sistema supuestamente
seguros.

La poca comprensin que algunos


implementadores de sistemas tienen sobre los
mecanismos de seguridad implcitos tambin
ocasiona que ciertos sistemas sean ms
vulnerables. Un ejemplo clsico es la forma en
que se implementan algunos sistemas de
contabilidad.
El sistema de doble registro, ancestralmente
usado para proteger sistemas de seguridad se ve
violentado por sistemas que obligan al cuadre
entre cuentas lo cual facilita el ataque a sistemas
de esta naturaleza.

También podría gustarte