Está en la página 1de 17

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 desautorizados
y la provisin de servicio a usuarios desautoriz
ados, 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 diseador
es de sistema de seguridad ya han sido realiza
dos. Sin embargo, las cadenas y computadoras
son increblemente inseguras. La falta de
seguridad se origina en
dos problemas fundamentales: Los sistemas que
son tericamente seguros pueden ser insegur
os 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 vulnerabilidad
es 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 funcionand
o en la
presencia de errores. Los errores pueden ser rel
acionados 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 d
e computacin es como programar la comput
adora 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