Seguridad en el ciclo de vida del desarrollo del software.

Daniel V.
4 min readMar 27, 2021

Según un informe de la firma de ciberseguridad Imperva, los ataques a aplicativos web del sector salud incrementaron en un 51% desde que las vacunas contra la COVID-19 fueron anunciadas. Ataques que se hicieron más notables durante los meses de Noviembre y Diciembre, justo cuando se empezaron a distribuir las vacunas.

Tomado de Imperva Research Labs

También según el mismo estudio se evidenció que mientras más aumentaba el apoyo al trabajo remoto en las organizaciones en este caso de salud, más se descuidaban las áreas relacionadas a la seguridad de la información.

Las organizaciones de salud reportaron 187 millones de ataques mensualmente en el transcurso de Noviembre y Diciembre.

Según el mismo estudio, ciertos tipos de ataques fueron los que predomiraron, entre ellos:

  • Remote Code Execution(RCE)
  • SQL Injection
  • Cross-site scripting

Pero, ¿cómo abordar esto desde el punto de vista del desarrollo?

Primero es necesario definir lo que es el ciclo de vida del desarrollo del software (SDLC), qué, según el sitio tutorialspoint se define como:

Es un proceso que se sigue al llevar a cabo un proyecto de software … El cual define una metodología para mejorar la calidad del software y el proceso de desarrollo en general.

Ahora, según la definición anterior es importante comprender que tener una estructura sólida de principio a fin en todas las etapas del desarrollo es fundamental para evaluar y mejorar la seguridad del ecosistema del producto final o pieza de software.

Estas etapas van desde la planeación y diseño, pasando a la etapa de desarrollo para luego llegar a la etapa de despliegue, en cada una de ellas es fundamental llevar a cabo decisiones teniendo en cuenta las implicaciones de estas en la seguridad del aplicativo e infraestructura.

Demos un breve vistazo de los aspectos relacionados a la seguridad que deben ser tomados en cuenta en cada una de las etapas.

Revision de requerimientos

Revisar los requerimientos de seguridad es una etapa crucial en el proceso de desarrollo, por ejemplo un requerimiento podría ser que solo los usuarios registrados del aplicativo tengan acceso a una sección determinada dentro del aplicativo, pero ¿significa esto que el usuario debe estar solo registrado o tambien autenticado en el sistema?. Como desarrollador se deben tener claros cada uno de estos términos y planificar su manejo desde un principio.

Es necesario revisar como se implementarán mecanismos entre otros para:

  • Administración de usuarios
  • Autenticación
  • Autorización
  • Integridad de los datos
  • Confidencialidad de los datos
  • Administración de sesión

Planificando asi aquellos procesos críticos de la lógica del negocio, que podrian llevar a una vulnerabilidad y a una posterior explotación de la misma.

Revisión de diseño y arquitectura

Identificar procesos sensibles o propensos a fallas de seguridad durante el diseño, es una de las tareas mas beneficiosas, ya que en este punto se pueden mitigar con mayor facilidad, por ejemplo: Se tienen varias rutas y recursos dentro del aplicativo que contienen datos sensibles en los que se requiere que el usuario tenga los permisos necesarios (autorización) para acceder a ellos, en este caso se deberia optar por crear un componente central donde se maneje apropiadamente la autorizacion de dicho usuario.

Asi se previene desde la etapa de diseño multiples tipos de ataques entre los que se encuentra por ejemplo, IDOR (Insecure Direct Object Reference), el cuál le permite a un atacante entre otras acciones, acceder, editar o eliminar datos de otro usuario del aplicativo. Este tipo de ataque puede desencadenar desde filtración de información, hasta escalamiento horizontal y vertical de privilegios, entre muchos otros tipos de de ataques.

Fase de desarrollo

Es normal reformular algunas definiciones y mecanismos ideados en la fase de diseño, como desarrollador se deberá tomar ciertas decisiones para resolver problemas típicos de la fase de desarrollo que no fueron previstos durante la fase de diseño; lo ideal seria que todos estos escenarios que el desarrollador encuentra fuesen previstos desde la etapa de diseño, pero lo cierto es que a menudo no siempre es asi.

Por lo que siempre es útil hacer una revisión del código ideado por el desarrollador junto a su equipo, para solventar inconvenientes encontrados, permitiendo al desarrollador dar un contexto y explicar el porqué se tomaron ciertas determinaciones al momento del desarrollo.

Fase de despliegue

Al final del proceso de desarrollo, lo ideal sería que cualquier vulnerabilidad fuese prevista y solventada, sin embargo después del despliegue se pueden realizar ciertas operaciones tales como pruebas de penetracion, para comprobar la robustes y seguridad del producto final.

Otro aspecto a tener en cuenta es al momento del despliegue revisar ciertas configuraciones que estén determinadas por defecto tanto en servidores como en servicios en la nube, que podrian dejar vulnerable tanto la aplicación como la infraestructura.

Conclusión

Debido a que cada vez nuestro mundo se vuelve por decirlo de cierto modo “mas digital” y que esto conlleva a una mayor exposición de los datos e infraestructura tanto de compañias como de personas es necesario tener siempre en cuenta las implicaciones de seguridad que puede conllevar la toma de ciertas decisiones y la importancia de una buena comunicación entre todo el equipo durante el ciclo de desarrollo del software.

Bueno, eso es todo por el momento, espero que hayas aprendido algo nuevo y… Have a nice day :)

Referencias:

--

--