Sie sind auf Seite 1von 13

TÉCNICAS DE PROGRAMACIÓN

Tópicos para codificación segura de


aplicaciones de escritorio
TECNICAS DE PROGRAMACIÓN
Tópicos para codificación segura de aplicaciones de escritorio

ÍNDICE
INTRODUCCIÓN...................................................................................................................... 3
DESARROLLO.......................................................................................................................... 4
LA SEGURIDAD INFORMÁTICA...........................................................................................4
FALLOS DE SEGURIDAD:....................................................................................................6
CONDICIONES DE CARRERA.............................................................................................6
SEGURIDAD EN LAS APLICACIONES QUE GENERAN CÓDIGO DINÁMICO:..................7
MEDIDAS PARA EVITAR PERMISOS PELIGROSOS EN BASE A DIRECTIVAS DE
SEGURIDAD:........................................................................................................................ 8
EJECUCIÓN DE CÓDIGO EN UN ENTORNO DE SEGURIDAD RESTRINGIDO..............10
CONCLUSIONES....................................................................................................................12
BIBLIOGRAFÍA....................................................................................................................... 13

2
TECNICAS DE PROGRAMACIÓN
Tópicos para codificación segura de aplicaciones de escritorio

INTRODUCCIÓN

El presente trabajo busca hacer referencia a la seguridad informática desde el punto


de vista de la programación de aplicaciones de escritorio, es decir de todos aquello puntos a
tener en cuenta tanto en las etapas de diseño del software como también ya en los momentos
de implementación del código.

Es por ello que buscaremos alcanzar algunos conocimientos teóricos que


mínimamente debemos conocer a la hora de iniciar con la planificación o ya en la codificación
segura. Una vez alcanzados esos conocimientos será importante observar y describir algunos
errores de programación habituales, que tienen implicaciones desde el punto de vista de
nuestras aplicaciones, para posteriormente poder dar ejemplos de casos en que diferentes
aplicaciones hayan sido atacas, detectando y corrigiendo errores.

Finalmente entraremos en una serie de medidas o consejos para evitar errores de


seguridad importantes en la codificación de aplicaciones comúnmente desarrolladas, que nos
permitirán dimensionar la importancia de una codificación segura.

3
TECNICAS DE PROGRAMACIÓN
Tópicos para codificación segura de aplicaciones de escritorio

DESARROLLO

LA SEGURIDAD INFORMÁTICA

La seguridad y la programación segura como parte de ella, son actividades del tipo
multidisciplinarias dentro del desarrollo del software. En ambas tendrán injerencia tanto la
programación propiamente dicha, las redes, los servicios de redes y hasta la seguridad física
de un data center, entre un sinfín de aspectos relacionados con esta. Es tan amplio el marco
de la seguridad informática como desconocido por la mayoría.

La seguridad en nuestras aplicaciones es tan importante como la funcionalidad de las


mismas, por mucho que cueste darnos cuenta de esto. Además, hay que tener en cuenta que
la única forma de adquirir conocimientos necesarios para comprender la importancia de dicha
seguridad es conocer en profundidad que es un fallo de seguridad, por qué se comenten y
cómo se explotan. Es por ello que iniciaremos con aspectos generales relacionados a la
importancia de la 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
por guardias armados y muy bien pagados. Y aun así, no apostaría mi vida a que es seguro"1

Si nos basamos de definiciones puntuales de seguridad, tendríamos que hacer


referencia a hablar de un ambiente libre y exento de todo tipo de peligro, daño o riesgo. Pero
la realidad nos dice que esa definición sería algo imposible de lograr dentro de la actualidad
tecnológica e informática. Es por ello que simplemente diremos que la seguridad informática
es aquella rama de la informática que busca “asegurar y garantizar que los recursos
informáticos estén exentos de peligro, daño o riesgo alguno por cualquier tipo de
circunstancia tanto externa como interna”2

En base a esta última definición podemos ver que la seguridad informática va tomando
forma de un conjunto tanto de reglas como de técnicas que buscan conseguir el objetivo
anteriormente detallado a fin de asegurar los recursos informáticos y físicos de cualquier tipo
de peligro originado en el ámbito informático.

Pero por el contrario será importante reconocer el otro extremo de la seguridad


informática, que será lo que nos llevará a estar en un constante crecimiento en calidad de
seguridad. La inseguridad informática “son el conjunto de riesgos a los cuales están
expuestos los recursos informáticos. Estos riesgos son muchos y muy variados: virus y
gusanos, spyware, malware, ataques de denegación de servicio, accesos no autorizados,
modificación de los sistemas o robos de información.”3

1
Eugene Howard Spafford (nacido en 1956), es un profesor estadounidense e informática en la
Universidad de Purdue y un destacado experto en seguridad informática.
2
KernelpanikLabs, Desarrollo Seguro de Aplicaciones. 2005. Pág. 4
3
KernelpanikLabs, Desarrollo Seguro de Aplicaciones. 2005. Pág. 5

4
TECNICAS DE PROGRAMACIÓN
Tópicos para codificación segura de aplicaciones de escritorio

Junto con estos conceptos nace el concepto de políticas de seguridad, las cuales
serán todas aquellas medidas destinadas a la protección de los recursos informáticos, sean
de tipo físicas, procedimentales o de tipo lógicas a la hora de desarrollar el software.

En general podemos decir que los tres objetivos fundamentales que buscan las
políticas de seguridad serán:

 Confidencialidad: este concepto dentro de la seguridad informática busca que el


acceso a la información del sistema este limitado solo a personal de usuarios
autorizados.
 Integridad: que la edición, modificación o eliminación a los códigos fuente solo puedan
ser realizadas por personal autorizado a dichas actividades.
 Disponibilidad: busca que el acceso a la codificación del software este garantizados
para el personal autorizado por un tiempo razonable.

Pero entonces, ¿qué se entiende por programación segura o desarrollo de un software


seguro? Bueno ésto será todo el conjunto de técnicas normas y conocimientos que permitan
crear aplicaciones cuyo uso no pueda ser alterado y que tampoco desarrolle fallos de
seguridad procedimentales. Como podemos analizar éstos son conceptos cuantitativos, es
decir que podrán evaluarse, pero dependerán mucho en cuántos recursos se esté dispuesto a
invertir en ello.

Estos recursos no solamente girarán entorno a recursos económicos, sino que


apuntan más sobre recursos de tiempo y esfuerzos o compromisos que busquen disminuir la
vulnerabilidad a fallas de seguridad. Compromisos de seguridad bajos, incrementaran las
posibilidades de diseñar y codificar aplicaciones que puedan ser alterados, comprometiendo
de esta manera la seguridad del sistema que las ejecute.

Es importante destacar el por qué los programadores, pese a todas estas


observaciones, siguen escribiendo códigos que son inseguros. Entre los motivos más
comunes podemos destacar:

 No es un tema que normalmente sea incluido en los planes de carreras de las


universidades o centros de formación. En muchas oportunidades se ven temas o
materias de seguridad, criptografía, etc. pero no se enseña puntualmente a
programar en forma segura.
 Algo similar sucede en los libros de programación. La mayoría de los libros que
enseñan a programar muchas veces no se detienen a explicar cómo se debería
hacer esto en forma más segura
 Algunos lenguajes son más propensos a cometer errores por diferentes motivos.
Muchas veces trabajan de una forma en particular, poseen funciones que son
potencialmente peligrosas bajo ciertas circunstancias, no hacen suficientes
comprobaciones, etc.
 Muchas veces los desarrolladores de aplicaciones solo se centran en la
funcionalidad del software, es decir que solo satisfaga los requerimientos
funcionales y nada más. Muchas veces el afán de lograr esto en forma más
rápida y reduciendo los costos llevan a caer en el desarrollo de aplicaciones con
gran cantidad de fallas de seguridad.
 El tiempo es un factor fundamental a la hora de desarrollar una aplicación.
Muchas veces este factor lleva a que los desarrolladores creen códigos
potencialmente inseguros para poder cumplimentar los plazos.

5
TECNICAS DE PROGRAMACIÓN
Tópicos para codificación segura de aplicaciones de escritorio

 No existe una concientización real acerca de la importancia en relación a la


seguridad del software, por lo cual para el consumidor mientras el mismo cumpla
con la funcionalidad demandada va a estar bien.
 Muchas veces resulta complejo programar en forma segura, por lo cual no se
suelen usar métodos de verificación formal.

FALLOS DE SEGURIDAD:

Un fallo de seguridad, será aquel error de cuya explotación un atacante obtenga una
elevación de privilegios en el sistema atacado. El fallo de seguridad, como veremos más
adelante no sólo es un error en la codificación del software, bien puede ser un error lógico en
la implementación, en el diseño, o incluso en el propio concepto a desarrollar.4

La historia de los fallos de seguridad es tan antigua como la informática misma. En un


principio los ataques eran bastante elementales: búsqueda de cuentas sin contraseñas, uso
de contraseñas por defecto, búsqueda de errores triviales en el código, ataques por fuerza
bruta y otra serie de ataques que sin una gran complejidad obtenían grandes resultados sobre
sus objetivos. Pero muchas veces los fallos de seguridad no son provocados por atacantes
con objetivos puntuales. En algunos casos, los propios desarrolladores son los que dejan
vulnerable al código a un ataque, mientras que, en otros casos, estos fallos se ocasionan
automáticamente por errores lógicos de programación.

Analizaremos a continuación una serie de fallos de seguridad muy comunes dentro del
proceso de desarrollo de software y que resultan importantísimos de tener en cuenta al
momento de desarrollar aplicaciones, puntualmente de escritorio.

CONDICIONES DE CARRERA.

Uno de los fallos de seguridad muy frecuentes en los diferentes sistemas el conocido
como condición de carrera. “Una condición de carrera se puede definir como aquel
comportamiento anómalo producido por la interacción concurrente de varios procesos dentro
de un flujo lógico de ejecución.” 5. dicho de una forma más reducida y puntual, es el acceso
simultaneo a un recurso y su posible modificación.

Estas condiciones no se fundamentan en la entrada o salida de datos adulterados por


parte de los usuarios, sino de una presunción por parte del desarrollador, en la que su
software se ejecutará en un entorno de una única tarea y siguiendo un orden lógico idéntico al
del código original. En realidad, esta presunción no termina de ser del todo correcta ya que en
los actuales sistemas multitarea nada impiden que, mientras un código se está ejecutando,
otros también se ejecuten y puedan modificar variables comunes entre ellos.

Veamos un ejemplo que muestra en forma práctica lo que sucede en la falla de


condiciones de carrera:

Imaginemos que una carrera de caballos, todos los jinetes intentan cabalgar por el
carril más interno. El carril más interno de la pista de carreras es un recurso compartido,
puesto que puede ser ocupado por cualquiera de los jinetes en un momento dado. Pero el
uso de este carril, implica que al ser uno solo, los jinetes compitan por ocuparlo y esa
competencia tiene que tener determinada sincronización. Una vez ocupado este carril,
puedes correr a toda velocidad si no tienes ningún caballo delante, o correr teniendo en
cuenta la velocidad del o los caballos que tengas delante en el mismo carril.
4
KernelpanikLabs, Desarrollo Seguro de Aplicaciones. 2005. Pág. 11
5
KernelpanikLabs, Desarrollo Seguro de Aplicaciones. 2005. Pág. 31

6
TECNICAS DE PROGRAMACIÓN
Tópicos para codificación segura de aplicaciones de escritorio

Otro problema es que dos caballos no pueden ocupar el mismo carril a la vez en la
misma posición porque se produciría una colisión que podría traer como consecuencia la
caída de caballos y jinetes. La única solución que tiene un jinete en una carrera de caballos
para utilizar este carril es la sincronización:

 Si está vacío, puedes ocuparlo a toda velocidad y correr mientras no tengas nadie
delante
 Si está ocupado, tienes que ir a una velocidad inferior a la de los caballos que tengas
delante

 Si vas a entrar o a salir del carril, tienes que cuidar que no haya colisión con otros
caballos6

Si bien el anterior ejemplo deja muy en claro lo que sucede en este fallo de seguridad,
las cuestiones donde impacta dicho fallo no termina de ser algo de vital importancia. Pero si
trasladamos este fallo a procesos en los que se maneje dinero como finalidad del sistema, la
importancia será otra. Veamos el siguiente ejemplo.

Supongamos que dos clientes de un banco realizan cada uno una operación en
cajeros diferentes al mismo tiempo. El usuario A quiere hacer un depósito. El B un retiro. El
usuario A comienza la transacción y lee su saldo que es 1000. En ese momento pierde su
turno de ejecución (y su saldo queda como 1000) y el usuario B inicia el retiro: lee el saldo
que es 1000, retira 200 y almacena el nuevo saldo que es 800 y termina. El turno de
ejecución regresa al usuario A el cual hace su depósito de 100, quedando saldo = saldo + 100
= 1000 + 100 = 1100. Como se ve, el retiro se perdió y eso le encanta al usuario A y B, pero al
banquero no le convino esta transacción. El error pudo ser al revés, quedando el saldo final
en 800.7

Para evitar estas condiciones de carrera estos tipos de procesos deben tener dos
facilidades implementadas, a saber:

 Almacenamiento temporal: (también conocido como buffering). Busca que el proceso


transfiera datos a este buffer bloqueándolo durante un corto espacio de tiempo y luego
liberándolo nuevamente para que el proceso lo pueda leer.
 Mecanismos de sincronización: para sincronizar cuando el buffer tenga datos
disponibles o cuando se hallan terminado los datos o cuando simplemente no se
actualice el buffer durante un cierto periodo de tiempo.

En relación a estas dos implementaciones podemos destacar que, si no hay buffering,


el proceso puede intentar leer un fichero, variable o recurso que puede estar bloqueado por
otro proceso. Esto implicaría que la aplicación tendría que esperar a terminar la lectura para
reproducir su contenido. Además, si no hay sincronismo entre procesos, el que muestra las
variables, reproduce, etc., fallará porque el buffer podría estar en uso.

SEGURIDAD EN LAS APLICACIONES QUE GENERAN CÓDIGO DINÁMICO:

Este tipo de aplicaciones son diferentes softwares o componentes de éstos, que se


van “escribiendo” a medida que se van ejecutando. Para poder realizar este proceso, las
aplicaciones acceden a un código que fue armado con anterioridad, el cual guarda fragmentos
del código que posteriormente usará. De esta forma estas aplicaciones necesitarán
6
José Manuel Ayala Wilson, Multitarea – Condición de carrera.
http://jmaw.blogspot.com/2012/07/multitarea-condiciones-de-carrera.html
7
Héctor Jairo Ortiz Pabón. Sistemas operativos modernos. 2005. Pág. 64

7
TECNICAS DE PROGRAMACIÓN
Tópicos para codificación segura de aplicaciones de escritorio

generalmente permisos para leer y escribir el código fuente y el código temporal que fue
creando.

¿Cómo se logra esto? El ejemplo más común es una página web, en donde esta tiene
publicidad u otros componentes que dependen de la información del consumidor. Por
ejemplo, cuando entramos a YouTube este nos muestra videos que pueden llegar a
interesarnos, para saber que videos sugerirnos YouTube usa nuestras búsquedas recientes, o
más frecuentes que hayamos hecho antes. Con esta información cambia los videos
sugeridos. Un atacante puede sacar provecho de estas páginas web de muchas maneras,
nosotros analizaremos algunas, la mayoría de ellas tienen como objetivo acceder al código
cache para modificarlo y así insertar algún virus, spyware, etc.8

Dentro de los diferentes lenguajes de programación encontraremos a algunas


bibliotecas que generan código que luego ejecutarán para realizar algunas operaciones para
el compilador. El problema que se presenta en estos casos es la generación de código en
nombre de un código de nivel de confianza inferior y ejecutarlo en un nivel de confianza
mucho más alto. Este problema puede empeorar en los momentos en que el compilador
puede influir en dicha generación de código, por lo que debe asegurarse que sólo se generará
el código dinámico que se considere seguro.

Es necesario conocer exactamente el tipo de código que se genera en todo momento.


Esto significa tener controles estrictos en todos los valores recibidos por un usuario, ya sean
variables, estructuras o cualquier otro tipo de valor.

Para evitar estos fallos de seguridad siempre es conveniente que cuando se compile el
código, se compruebe si hay alguna posibilidad de que lo pueda modificar algún programa
malintencionado. De ser así, se debe proteger el directorio que contiene estos archivos
mediante la seguridad de acceso al código o con una lista de control de acceso en el sistema
de archivos.

Cabe destacar que, si algún llamador de una función puede influir en el código
generado en forma de que pueda provocar un error en el compilador, es posible que allí exista
una vulnerabilidad importante en la seguridad.

MEDIDAS PARA EVITAR PERMISOS PELIGROSOS EN BASE A DIRECTIVAS DE


SEGURIDAD:

Hay que tener en cuenta que cualquier permiso que posea una aplicación mal
administrado puede resultar en una aplicación peligrosa en la cual se han alterado archivos
privados o importantes para el administrador. Es por ello que siempre hay que estar atento al
desarrollo y administración de permisos para las aplicaciones. Justamente por estas
cuestiones es que nacen las directivas de seguridad. Las directivas de configuración de
seguridad son reglas que puede configurar en un equipo o varios equipos, con el fin de
proteger los recursos de un equipo o red.9

Estas directivas pueden controlar las siguientes funcionalidades:

 Autenticación de usuarios en una red o equipo.


 Los recursos a los que pueden obtener acceso los usuarios
 El registro de las acciones de un usuario o grupo
8
Agustín Migliardi, Técnicas de Programación. Seguridad Informática. 2016. Pág. 7
9
Microsoft Developer Network. Administrar la configuración de directivas de seguridad.
https://msdn.microsoft.com/es-es/library/jj966254(v=ws.11).aspx

8
TECNICAS DE PROGRAMACIÓN
Tópicos para codificación segura de aplicaciones de escritorio

 La pertenencia a un grupo.

Varias son las operaciones en las que se proporcionan permisos que puedan burlar el
sistema de seguridad. Estos peligrosos permisos se los se deben conceder a códigos de
confianza plena y únicamente en los momentos en que sea necesario.

Con el tiempo se han ido incorporando nuevas maneras de administrar las diferentes
directivas de seguridad, incluyendo así nuevas características y la adición de unas
configuraciones. Veamos algunas herramientas o características que nos permitirán una
administración más eficiente de dicha configuración de las directivas de seguridad.

 Directiva de seguridad local: este complemento restringe la vista de objetos de la


directiva local a otras directivas, como ser:
o Directivas de cuenta
o Directivas locales
o Firewall de Windows con seguridad avanzada
o Directivas de clave publica
o Directivas de restricción de software
 Administrador de cumplimiento de seguridad (Security Compliance Manager) es una
herramienta que ayuda a planear, implementar, operar y administrar la seguridad
básica para sistemas operativos. Este administrador contiene una base de datos
completa de la configuración de seguridad recomendadas.

Junto con estas medidas existen un sin número de forma de poder administrar estas
directivas de seguridad.

Veamos ahora una serie de peligros a los que puede exponerse nuestro código con el
riesgo potencial que acarrea. 10

PERMISO RIESGO POTENCIAL


UNMANAGEDCODE Permite que el código administrado llame a código no
administrado, lo que a menudo es peligroso.
SKIPVERIFICATION Sin esta comprobación, el código puede hacer cualquier
cosa.
CONTROLEVIDENCE La evidencia no validada puede burlar la directiva de
seguridad.
CONTROLPOLICY La capacidad de modificar la directiva de seguridad puede
deshabilitar la seguridad.
SERIALIZATIONFORMATTER El uso de serialización puede eludir los mecanismos de
accesibilidad.
CONTROLPRINCIPAL La capacidad de establecer la entidad de seguridad actual
puede engañar a la seguridad basada en roles.
CONTROLTHREAD La manipulación de subprocesos es peligrosa debido al
estado de seguridad asociado a ellos.
MEMBERACCESSEXCEPTION Puede utilizar miembros privados para anular los
mecanismos de accesibilidad.

10
Microsoft Developer Network. Permisos peligrosos y administración de directivas.
https://msdn.microsoft.com/es-es/library/wybyf7a0(v=vs.100).aspx

9
TECNICAS DE PROGRAMACIÓN
Tópicos para codificación segura de aplicaciones de escritorio

EJECUCIÓN DE CÓDIGO EN UN ENTORNO DE SEGURIDAD RESTRINGIDO

El uso de un espacio aislado va consistir en ejecutar el código dentro de un entorno de


seguridad restringido, el cual limita los permisos de acceso concedidos por el código. Muchas
veces también se utiliza este recurso para probar códigos que se van a distribuir y que se van
a ejecutar en entornos de confianza parciales. Veamos un ejemplo de aplicación:

Si se tiene una biblioteca administrada desde un origen que no es de plena confianza,


la misma no debería ser ejecutada sin ningún tipo de seguridad. Es en estos casos en que se
debe colocar el código en un espacio de seguridad restringido donde se van a limitar los
permisos a los que realmente éste necesite crear.

Muchas veces al realizar una reutilización del software utilizar librerías o componentes
que nosotros no codificamos nos exponemos a que éstas puedan contener malware. Con la
finalidad de probar la seguridad de estos componentes es que uno puede utilizar estos
entornos seguros. En estos casos es en los que se crea un recito ejecutable don el código es
testeado limitando sus permisos.

Los principales beneficios de utilizar un entorno restringido serán:

 Las soluciones pueden agregarse a un entorno de producción sin correr el riesgo de


afectar a los procesos que estén por fuera del espacio aislado.
 Se puede realizar en forma individual sin comprometer el trabajo de otros sectores de
producción del software.
 Aumentan la escalabilidad y la flexibilidad.

Un AppDomain (representa un dominio de aplicación) es una manera eficaz de poder


proporcionar un entorno restringido. Estos dominios de aplicación que se usan para ejecutar
códigos de confianza tienen permisos que definen los recursos protegidos que estarán
disponibles cuando se ejecute el código en este AppDomain. Este código estará limitado por
los permisos asociados al AppDomain y solo podrá tener acceso a recursos específicos.

El AppDomain también incluye un array que se utiliza para identificar los componentes
que se van a cargar como plena confianza. Esto permite al creador iniciar un nuevo dominio
en espacio aislado que permite que determinados componentes auxiliares sean también de
plena confianza,

Se puede utilizar este dominio para especificar el conjunto de permisos para las
aplicaciones que se ejecutan dentro del entorno seguro. Este proceso permite especificar el
nivel exacto de seguridad de acceso del código que se desea.

Es interesante analizar en esta materia a un lenguaje que es muy utilizado hoy en día
como es el de Java. Desde su creación, este entorno ha tenido muy presentes los problemas
de seguridad y ha definido modelos para poder controlar y limitar el acceso a todos los
recursos por parte de las aplicaciones. Este modelo ha ido mejorando constantemente en las
diferentes versiones de su JDK, llegando a un entorno muy complejo y flexible como es el
JDK 1.2.

Java fue diseñado para ofrecer medidas de seguridad básicas, integrando un sistema
de control de permisos para los programas, definiendo un mecanismo (denominado
mecanismo del cajón de arena) que permite controlar que se le permite hacer a un programa
y la manera en que este accede a los recursos del mismo. Además, Java incorpora la

10
TECNICAS DE PROGRAMACIÓN
Tópicos para codificación segura de aplicaciones de escritorio

encriptación y el uso de certificados, definiendo mecanismos para que los programadores


puedan firmar su código, a fin de que los usuarios del mismo puedan observar si este ha sido
modificado o no.

En el JDK 1.2 se han introducido nuevas características que mejoran el soporte y el


control sobre la seguridad. El concepto de código firmado es ahora aplicable a todo el código,
independientemente de su procedencia. Además, mejora la facilidad de configuración de las
políticas de seguridad, ya que la nueva arquitectura de seguridad permite el este sencillo de
los permisos de acceso usando un fichero de políticas de seguridad, en el que se definen los
permisos para acceder a los recursos del sistema para todo el código. Esto nos lleva a poder
utilizar el concepto de entorno restringido con un nivel de detalle mucho mayor en relación a
permisos otorgados.

11
TECNICAS DE PROGRAMACIÓN
Tópicos para codificación segura de aplicaciones de escritorio

CONCLUSIONES

El universo de la seguridad informática cada vez adquiere mayor importancia, lo cual


lo hace en forma paralela al tamaño que va tomando. Además, es un tema un tanto complejo
de observar, ya que muchas veces, uno no logra detectar vulnerabilidades en un software
hasta el momento en que éste es atacado o se produce un fallo de seguridad que lo deje en
evidencia. Muchas veces esos fallos de seguridad implicarán perdidas monetarias para
nuestros clientes que seguramente recaerán en nosotros o en nuestro prestigio.

El concientizarse en materia de seguridad no es una tarea para nada sencilla, ya que


demanda una alta capacidad y conocimientos, los cuales deberán ser traducidos en códigos o
planificaciones de software seguras. Día a día las normas de seguridad informática van
mutando con el fin de evitar ataques, en un entorno que nunca se detiene.

Junto con esto, el desarrollo tecnológico y de la industria del software va ampliando


sus horizontes. Ya no basta con el conocimiento de programación sobre un lenguaje
específico para lograr desarrollar un sistema, sino de poder explotar al máximo al mismo para
alcanzar la mejor calidad en funcionalidad y en seguridad. Hoy en día, cualquier sistema, por
más pequeño que sea, está en contacto con miles de agresiones que se dan en un ambiente
hostil como es el de la informática. Hasta un sistema interno de un kiosco puede recibir
embates ajenos que lleven a reducir la capacidad de nuestro software o a producir cualquier
otra consecuencia.

Pero muchas veces estos fallos no se dan por ataques externos que busquen
ocasionar daños a nuestro código. En ciertas ocasiones, las vulnerabilidades de nuestro
software vendrán de la mano del mismo programador. Las condiciones de carrera son un
claro ejemplo de un error de programación, pero por sobre todo de un error en la planificación
del software.

En otras ocasiones, los problemas recaen en la búsqueda de facilidad a la hora de


programar, buscando reducción de tiempo y costos que solo llevarán a producir un software
de baja calidad entorno a la seguridad.

Analizando en forma parcial y mínimamente los desarrollos en materia de seguridad


informática, podemos observar que, a la hora de buscar esta característica para nuestros
softwares, encontraremos un sinnúmero de herramientas, métodos o procedimientos que nos
permitirán mejorar la calidad del producto. Lo más importante para poder lograr esto es estar
en capacidad de poder implementarlo en forma correcta.

Finalmente, podemos destacar que lo más importante en materia de seguridad


informática es estar capacitado para reducir los riesgos, lo cual se logra mediante una
constante actualización en cuestiones teóricas, acompañado por la experiencia en la
implementación de todos esos conocimientos teóricos.

12
TECNICAS DE PROGRAMACIÓN
Tópicos para codificación segura de aplicaciones de escritorio

BIBLIOGRAFÍA

o Microsoft Developer Network. Administrar la configuración de directivas de seguridad.


o Microsoft Developer Network. Permisos peligrosos y administración de directivas.
o KernelpanikLabs, Desarrollo Seguro de Aplicaciones. 2005.
o José Manuel Ayala Wilson (Blog personal), Multitarea – Condición de carrera.
o Héctor Jairo Ortiz Pabón. Sistemas operativos modernos. 2005. Sello Editorial.
Universidad de Medellín
o Agustín Migliardi, Técnicas de Programación. Seguridad Informática. 2016.

13

Das könnte Ihnen auch gefallen