Hoy día son cada vez más las empresas que necesitan desarrollar su propio software, ya sea porque forma parte de los productos que ofrecen o simplemente porque requieren un desarrollo a medida para mejorar sus procesos administrativos. Ahora bien, cuando decidimos desarrollar un software debemos tomar en cuenta que por medio de este, manejaremos una gran cantidad de datos que pueden ser susceptibles a ataques y que debemos cuidar desde el inicio del desarrollo.
De esta forma, cuando se modela un software no solo debe hacerse desde el punto de vista de las funcionalidades, sino que deben tener en cuenta todas las necesidades de seguridad y esto debe preverse desde el primer día de las fases de desarrollo de un software.
Según nuestro especialista en ciberseguridad, Ignacio Íñigo “así como tradicionalmente se hace el desarrollo de software, también se puede modelar un caso de ataque o amenaza concreta y así se desarrolla, previendo este tipo de ataques específicos”. También explica que desde el punto de vista presupuestario es muy importante tomar en cuenta la seguridad de los datos desde el principio del desarrollo, ya que es más fácil y factible ir trabajando sobre las posibles amenazas que tener que rehacer el código para subsanar estas fallas del sistema.
Tipo de pruebas que pueden determinar la seguridad del software
Existen dos tipos de pruebas, las pruebas de código tradicionales y las pruebas de penetración, las cuales son muy importantes de aplicar, ya que nos permite asegurarnos de que nuestro software hace exclusivamente para lo que fue creado y no tiene un comportamiento inesperado.
En cuanto a las pruebas de software tradicional, se pueden dividir en dos categorías que explicaremos a continuación:
- Pruebas estáticas o de análisis de código: estas son pruebas en las que se realiza una revisión del propio código, ya sea de forma manual o automatizada donde se buscan errores o malas prácticas, funciones no seguras o paquetes y librerías de software que no deberían estar en uso por falta de actualización, entre otras variables.
- Pruebas dinámicas: son pruebas que se realizan directamente al código, ejecutando un análisis de sus funcionalidades. Dentro de este tipo de pruebas dinámicas existen las pruebas sintéticas que se realizan imitando lo que haría un usuario y evaluar el comportamiento del sistema en una circunstancia normal; y las pruebas que se llaman fuzzing en las que se envían al sistema una serie de datos combinados y no comunes para de esta forma tratar de romper la aplicación y conseguir algún tipo de error de funcionamiento.
Adicionalmente, Ignacio comenta que también puede hacerse un test de interfases o APIs entre los diferentes componentes de una determinada aplicación o API’s, también comenta que hay pruebas de interfaces gráficas de los usuarios y en el caso de los equipos tecnológicos incluso hay pruebas físicas de sensores o detectores del equipo como tal.
Existe una métrica importante a tomar en cuenta cuando se realizan estos test y que son evaluados por medio de un análisis de cobertura del test, con el que se puede evaluar qué porcentaje de la funcionalidad total de una aplicación se está cubriendo con las pruebas, ya que de esta forma se puede tener una idea más precisa de la efectividad de los test.
Una vez que ya hemos desarrollado gran parte de nuestro sistema o aplicación, lo correcto es realizar un pentest o pruebas de penetración y estas deben ser realizadas por un equipo externo. Este tipo de pruebas normalmente se dividen en 5 fases que involucran el reconocimiento seguida por una fase de escaneo, un análisis de vulnerabilidades para pasar a una fase de explotación de las mismas y finalmente emitir un reporte que se entrega al cliente con la intención de notificar las posibles fallas encontradas en el sistema.
Según nos comenta Ignacio, existen muchos tipos de herramientas para ejecutar los pentest, incluso algunas muy específicas que ayudan a evaluar una fase de la prueba de penetración de forma particular, como son las herramientas que escanean las redes que ayudan a ubicar computadoras o puertos abiertos y que pueden ser vulnerados. También podemos conseguir herramientas que evalúan vulnerabilidades de redes concretas y por último, conseguimos herramientas que ayudan a ubicar vulnerabilidades web.
Por otra parte, Ignacio explica que en definitiva distribuciones específicas como Kali Linux incluyen una gran cantidad de herramientas en las cuales puedes apoyarte a la hora de ejecutar un test de penetración. También hay herramientas para realizar ataques de fuerza bruta, o de automatización de ataques para la fase de explotación.
Pero además, nos explica que existen organismos sin ánimo de lucro como OWASP que maneja un proyecto de código abierto consagrado a determinar y combatir las causas que hacen que un software sea inseguro, que son una “buena fuente gratuita” para obtener herramientas e información en general para seguridad web de toda las empresas y emprendimientos.
¿Cómo podemos gestionar el cambio de la forma correcta?
Es normal que una empresa tenga que dejar atrás algunos sistemas que se han vuelto obsoletos o que simplemente ya no se adaptan a los requerimientos de una organización, pero cuando estos cambios de sistemas deben implementarse es importante asegurarnos de realizar backups o copias de seguridad de todo el sistema para que cuando se ejecute el cambio, no perdamos ningún tipo de información vital para la empresa.
Ignacio asegura, que este tipo de procesos son muy importantes ya que si durante esta implementación se presenta algún fallo siempre podremos volver a la fase anterior y recuperar la información sin que afecte la operatividad de la empresa.
Lo mismo sucede en el desarrollo del software ya que lo recomendable es realizar un backup de tu sistema antes de subir los cambios a producción, ya que si se presenta cualquier inconveniente de funcionalidad, podemos siempre hacer un Roll-back sin perder información o afectar otras integraciones.
Como podemos ver, desde el punto de vista del desarrollo de software, el tema de la ciberseguridad es muy amplio y está presente a cada paso del camino, para estar seguros de que nuestra información de empresa es segura y además cuidar cada uno de los datos de nuestros clientes. Es muy importante tomar en cuenta estas recomendaciones y trabajar en la seguridad desde el inicio, estudiando nuestras vulnerabilidades y trabajando en ellas para brindar sistemas robustos.