Logo Studenta

Entregable Previo 1 - Javier Mendoza

¡Estudia con miles de materiales!

Vista previa del material en texto

Introducción.
En el presente documento se abordará el tema de la seguridad en aplicaciones basado en el documento recomendado por el docente de la asignatura, este documento se titula “Secure Programming With Static Analysis” escrito por Brian Chess y Jacob West, esta actividad tiene como objetivo identificar la importancia de la seguridad en las aplicaciones mediante el uso de conceptos importantes como la programación segura, el análisis estático, además de las principales características de seguridad y la clasificación de vulnerabilidades. 
En el libro se menciona que la mejor forma de incrementar la seguridad de las aplicaciones es haciendo un análisis de eventos pasados, a partir de los cuales poder identificar los errores cometidos en la programación que tuvieron como consecuencia la afectación del sistema, permitiendo modificar parámetros de configuración y mecanismos de seguridad para evitar que vuelvan a ocurrir esos problemas. También se comparte la siguiente frase que es muy importante para entender como diseñar un sistema de forma segura; “Para construir un sistema sólido, debe comprender cómo es probable que falle el sistema” (Petroski, 1985). 
Tomando en cuenta la frase anterior se entiende que los errores son inevitables, sin embargo, hasta cierto punto podemos controlar nuestros errores modificando algunas prácticas. Aunque no se pueda tener conocimiento con exactitud de futuros errores, es posible monitorear los potenciales escenarios, así como controlar dónde, cuándo e incluso quiénes puedan encontrar dicho error. Otra idea interesante que sale del libro es que comprender la seguridad de las aplicaciones es una cosa y aplicar los conocimientos de forma completa es otra muy distinta, puesto que en la mayoría de las organizaciones se deben cumplir con estrictos objetivos de seguridad, siendo recomendable realizar un análisis estático para encontrar errores de seguridad en el código fuente. 
El análisis estático es cualquier proceso que tiene como objetivo evaluar el código fuente sin que este sea ejecutado, este análisis es una herramienta muy útil debido a permite realizar una evaluación rápida de muchas posibilidades y explorar una gran cantidad de escenarios hipotéticos sin tener que pasar por todos los cálculos necesarios para ejecutar el código en cada escenario, es idóneo para la seguridad porque muchos problemas ocurren en puntos difíciles de alcanzar al ejecutar el código, estas herramientas de análisis brindan una forma rápida de obtener una evaluación consistente y detallada de un cuerpo de código. 
El análisis estático no forma parte de las herramientas que la mayoría de los programadores usan con regularidad, es importante mencionar que ninguna herramienta o técnica por sí sola proporcionará una solución completa al problema de la seguridad. A continuación, en la sección correspondiente al desarrollo de la actividad se ampliará la información correspondiente a la programación defensiva, el análisis estático, la seguridad, entre otros conceptos.
Desarrollo.
Programación Defensiva.
La programación defensiva hace referencia a la creación de programa diseñado para eludir situaciones problemáticas antes de que sucedan y con ello lograr que el producto posea mayor estabilidad. El propósito fundamental de esta técnica es crear software que pueda funcionar bien incluso a través de operaciones inesperadas o cuando el usuario realiza entradas inesperadas. La programación defensiva se basa en la combinación de eliminar código innecesario y garantizar que con el código resultante se puedan ejecutar todas las acciones requeridas, otra parte importante son el uso de pruebas exhaustivas en el proceso, al igual que la creación de software que se pueda probar y validar fácilmente.
La programación defensiva históricamente se ha referido a la práctica de codificar con la mentalidad de que los errores son inevitables y que, tarde o temprano, algo saldrá mal y conducir a condiciones inesperadas dentro del programa, una buena programación defensiva requiere agregar código a comprobar las suposiciones de uno, además estos mecanismos de defensa sirven para revelar errores lógicos cometidos por el programador. 
Con la programación defensiva es posible encontrar y diagnosticar los errores con mayor facilidad, aunque la programación defensiva no garantiza un software seguro. Al tratar el concepto de seguridad especialmente en el área de informática es muy común que se tenga la idea que existe un atacante que en primera instancia busca vulnerar el sistema, pero muchas veces se llega a estas instancias por culpa del propio programador, ya que al momento de codificar omite reglas o buenas prácticas para una programación segura creando un sistema vulnerable.
Los conceptos básicos de programación defensiva también se conocen como depuración activa, la idea es crear métodos propios para evitar cualquier uso inapropiado que se les pueda dar. La programación defensiva se trata de proteger nuestro código de errores de entrada inesperados que a menudo pasamos por alto. La programación defensiva es el conjunto de las mejores prácticas basadas en la idea de que es imposible saber cómo usar nuestro software. Con esto en mente, el objetivo es tomar medidas para garantizar el correcto funcionamiento incluso con información o datos no válidos.
Características de Seguridad.
Aunque algunas de las funciones de seguridad principales son implementaciones de cifrado, contraseñas seguras y mecanismos de control de acceso, para que un programa sea seguro, todas las partes del programa deben ser seguras, no solo por seguridad, ya que puede haber vulnerabilidades en otras partes del programa. En muchos casos, las vulnerabilidades no están relacionadas con las funciones de seguridad, una función de seguridad puede fallar y comprometer el sistema de seguridad de muchas maneras, pero a menudo hay otras formas en que las funciones defectuosas pueden fallar en lugar de la seguridad y causar problemas de seguridad.
Las funciones de seguridad se implementan con la idea de que deben funcionar correctamente para mantener la seguridad del sistema, pero las funciones que no son de seguridad a menudo no reciben la misma consideración, aunque a menudo también son vulnerables, un factor importante en la seguridad del sistema. Mientras codifican, los programadores pueden cometer errores, por lo que es importante considerar estos escenarios al implementar mecanismos de seguridad para proteger la aplicación, ya que el administrador del sistema puede hacer la mayor parte de la seguridad de las aplicaciones web, los desarrolladores de aplicaciones no necesitan preocuparse por los detalles de seguridad de su aplicación a menos que se deban hacer consideraciones especiales en el código. Para una programación segura en una aplicación, los desarrolladores pueden hacer uso de las API.
Es importante no focalizar los esfuerzos únicamente en las formas de implementar características o marcos de seguridad, debido a que nos concentramos en identificar y evitar errores comunes en el código que no están necesariamente relacionados con las características de seguridad, porque muchas situaciones de riesgo pueden generarse en un contexto en donde no se toma en cuenta la seguridad, por lo que es importante proveer seguridad a la totalidad del sistema.
Análisis Estáticos.
El análisis estático es un método de análisis de programas maliciosos en una computadora infectada, todo con el propósito de explicar la verdad y así poder determinar si el malware está relacionado o no con un evento conocido. En el análisis estático, se utilizan herramientas de software para recopilar información sobre el archivo malicioso, pero no se ejecuta. Esto nos permitirá analizar el código del programa para determinar información como: tipo de archivo, idioma en que fue escrito, cuándo fue compilado, zona horaria de origen, bibliotecas que utiliza, funciones, etc. Y se trata de averiguar qué hace nuestro volumen particular.
El análisis estático solo puede identificarcasos en los que se violan las reglas programadas; No puede encontrar todos los errores simplemente leyendo el código fuente. También existe el riesgo de falsos positivos, por lo que los resultados deben interpretarse. En este sentido, el análisis de código estático es una valiosa adición a la revisión de código, ya que resalta los problemas conocidos y ahorra tiempo para tareas más interesantes, como el diseño y el enfoque del programa código en general.
La principal ventaja del análisis estático es el hecho de que puede revelar errores invisibles, porque en muchos casos no son visibles hasta que ocurre un desastre, lo que puede demorar mucho tiempo después de que se realiza la actualización. (Elena, A. 2019) 
Sin embargo, el análisis estático es solo el primer paso en un sistema completo de control de calidad del software. A esto le sigue un análisis dinámico, para detectar debilidades o vulnerabilidades específicas, problemas de rendimiento e integración.
La mayoría de las metodologías de desarrollo de software están conformadas principalmente de cuatro pasos:
- Planificación.
- Construir.
- Prueba.
- Campo.
Independientemente de la metodología utilizada, la única forma de lograr una seguridad adecuada es desarrollar consideraciones de seguridad en cada paso. Históricamente, los síntomas de la debilidad de la seguridad del software se han visto como un problema práctico que debe abordarse con firewalls, firewalls de aplicaciones, sistemas de detección de intrusos y pruebas de penetración. Centrar los esfuerzos en la causa de la mayoría de los problemas de seguridad del software es la mejor manera de crear software, ya que la seguridad debe ser una parte integral de cómo se planifica y construye el software. El análisis estático es una parte esencial del grupo de métodos automatizados de pruebas que se pueden usar para mantener la calidad del código y debe usarse junto con otras formas de análisis dinámico y automatización de pruebas.
Clasificación de Vulnerabilidades.
Al analizar las vulnerabilidades, se identifican patrones y relaciones entre los diferentes tipos de errores que cometen los programadores y las consecuencias que provocan en un ataque informático. Hay dos tipos básicos de errores, hay un tipo genérico y un error específico que se refiere a un contexto específico, y un error genérico es un problema que puede ocurrir en casi cualquier programa, como el desbordamiento de búfer de los programas en C. Esta situación es un problema de seguridad en casi cualquier contexto, y muchas de las funciones e instrucciones de código que pueden causar un desbordamiento de búfer son las mismas independientemente del propósito del programa.
Encontrar errores específicos requiere conocimiento de la semántica del programa en cuestión, así como una comprensión del significado de las funciones y estructuras de datos que define el programa. A menudo surgen problemas de alto nivel en el diseño del programa, mientras que las fallas de implementación, como las omisiones de validación de entrada, a menudo se pueden encontrar simplemente examinando el código fuente del programa. Los lenguajes orientados a objetos como Java tienen una gran cantidad de bibliotecas, lo que facilita la comprensión del diseño al examinar el código fuente.
Conclusiones.
Para finalizar con esta actividad puedo concluir que es importante contemplar a una aplicación en su totalidad y no solo enfocar las medidas de seguridad a determinadas áreas de cada programa, por que como puede entender del documento en el que se basa este trabajo, los problemas pueden surgir de distintas áreas incluso en las que menos nos imaginamos, esto puede ser porque los programadores no contemplen el uso de marcos y estándares de seguridad para la codificación de sus programas.
Otro factor importante es la implementación de múltiples mecanismos de seguridad, puesto que muy seguramente uno solo no sea suficiente para proteger al sistema de ataques, además de realizar periódicamente análisis de vulnerabilidades, pruebas de penetración, entre otras técnicas que nos puedan ayudar a evaluar el estado del sistemas y con ello poder realizar las modificaciones pertinentes para que se pueda resguardar la información, tal es el caso de los análisis estáticos que es otra herramienta muy útil para el análisis de los programas con la ventaja de que no es necesario ejecutarlos para poder realizar estas pruebas.
Además de lo anteriormente mencionado, también es importante que existan metodologías de revisión de código en las organizaciones que desarrollen aplicaciones, ya que es posible evitar graves problemas a futuro si se toma el tiempo necesario para realizar una correcta programación, aunque en la vida real y más en el ámbito del desarrollo de aplicaciones no se cuenta con el tiempo necesario para la ejecución de pruebas y muchas veces las empresas que desarrollan aplicaciones, las lanzan al mercado con errores, teniendo que corregirlas sobre la marcha. 
2

Continuar navegando