Introducción a las bases del desarrollo software contra las amenazas de los programas (I)


Desarrollo Software Seguridad Ingeniería del Software Calidad del Software Ingeniería Prevención Diseño de Sistemas Gestión de Proyectos

Este artículo forma parte de una serie relacionada con el desarrollo software y la seguridad, desde las bases y conceptos globales aplicados, hasta los controles y técnicas más específicas para hacer frente a las amenazas de los programas construidos.

Existen múltiples maneras en las que un programa puede fallar y a su vez, otras tantas vías en las que se pueden convertir dichas fallas en brechas de seguridad. Tal y como ocurre con la mayoría de industrias que conocemos, en general es mejor centrarse en el seguimiento y potenciación de las técnicas preventivas que en la propia cura y mitigación del fallo una vez producido. No solo por los grandes ahorros que supone, sino por las potenciales desgracias que se puedan propiciar al explotar dichas vulnerabilidades o fallas críticas. Del mismo modo, en la ingeniería del software disponemos de múltiples técnicas que influyen en los controles contra las amenazas del software construido. Es más, estos se pueden —y deben— propiciar durante todos los ciclos de desarrollo, desde la especificación y el diseño, pasando por la ejecución y el testeo, hasta llegar a las fases de verificación, mantenimiento y monitorización. De todas formas, este problema es abordado desde una perspectiva global por la ingeniería del software, afectando directamente a la calidad del software, es decir, a todos los procesos y técnicas que propicien una correcta calidad software.

En este artículo nos centramos en los principios y técnicas que abordan un control adecuado del desarrollo. El objetivo no es otro que detectar y mitigar los problemas encontrados durante las fases de especificación, diseño, construcción o testeo.

amenazas del software

La naturaleza colectiva del desarrollo y sus fases

Aunque puede dar la sensación que el proceso de ingeniería y desarrollo software es una tarea perfectamente individual —y no lo negamos para casos específicos, personas todoterreno o profesionales realmente experimentados—, generalmente la aportación de valor y competitividad empresarial incluye procesos complejos y necesita de grandes interrelaciones, buena orquestación y una ejecución del desarrollo de elevada calidad. Por supuesto, no hablamos de aplicaciones pequeñas, pruebas de concepto o proyectos personales paralelos. Nos centramos en la construcción de software empresarial que requiere de muchos recursos, meses de ejecución y costos considerables. Es aquí donde entra en juego el grupo de trabajo y el esfuerzo colaborativo, involucrando a gente con capacidades totalmente diferentes que, eficientemente combinadas y organizadas, son capaces de producir un producto funcional de calidad.

En definitiva, el desarrollo requiere de un colectivo que sea capaz de:

  • Especificar el sistema. Desde la fase de prospección y la captura de requisitos, hasta la elaboración de los casos de uso y modelado funcional del sistema.
  • Diseñar el sistema. Elaborando la propuesta arquitectural, el modelado de la solución y la solución aportada ante los requisitos funcionales y no funcionales.
  • Implementación del sistema. Partiendo de la fase anterior, gestionando, combinando y distribuyendo los recursos (materiales, abstractos y humanos) para la construcción de la solución.
  • Verificación y testeo del sistema. Asegurando que se cumplen tanto los requisitos como la ejecución en base al diseño y su planificación.
  • Revisión del sistema. Contrastando que los activos producidos son consistentes con las especificaciones y los modelos diseñados.
  • Gestión del sistema. Estimar los recursos y restricciones existentes en el proyecto, en las etapas de ejecución y en las micro-tareas, así como las proyecciones de estimación y evolución del proyecto.
  • Mantener el sistema. El seguimiento de los problemas encontrados, las mejoras, los evolutivos, los cambios necesitados y realizados, así como la evaluación de los efectos propiciados por las mismas en la calidad y funcionalidad general.

Cada equipo es distinto, y las dinámicas de trabajo y capacidades de cada uno son totalmente diferentes, más aún cuando las labores de dirección varían. Esta combinación influye considerablemente en el éxito del grupo y de cada proyecto que asuman y ejecuten.

Aspectos generales

Es importante recordar que existen ataques realmente sofisticados que generalmente solo pueden ser evitados con una correcta ejecución del sistema, teniendo en cuenta tanto la seguridad y la usabilidad ya desde la propia fase de diseño. Este es un factor clave que no se suele considerar, pues las organizaciones de software propician los aspectos funcionales y el diseño basado únicamente en las necesidades del cliente, cuando se debería ampliar el alcance. En la mayoría de casos estas no atienden más que a su modelo de negocio y los casos de uso de los usuarios del sistema, y no al resto de aspectos clave para el correcto funcionamiento del sistema completo y la prevención de amenazas. Desde nuestra perspectiva, recomendamos y hacemos especial hincapié en:

  • Reutilizar los sistemas de seguridad siempre que se mantengan en constante revisión, verificación y mantenimiento.
  • Adaptar el sistema a la seguridad, y no a la inversa.
  • La usabilidad queda en segundo plano ante una necesidad y requisito vital de seguridad.
  • La usabilidad juega un papel importante en la reducción del bloqueo e ineficiencia del sistema debido a la seguridad.
  • Diseña la usabilidad y la seguridad como un sub-sistema cohesionado.
  • Las herramientas no son soluciones.
  • Invierte en revisión y control de código periódico, suites de ataque controlado, así como verificación y monitorización del sistema.
  • Invierte más recursos en las capas altas del sistema. La arquitectura es determinante.
  • El cliente debe estar satisfecho.

En la siguiente parte hablaremos de los aspectos de modularidad, encapsulamiento y ocultación de la información, entre otros. Poco a poco iremos abordando los aspectos clave en la prevención de fallas y brechas de seguridad durante el desarrollo de software.

Este sitio web emplea cookies propias y de terceros para analizar el tráfico y ofrecerle una mejor experiencia. Al navegar o utilizar nuestros servicios el usuario está aceptando su uso.Más información.