Saltar al contenido

Ingeniería Inversa en la Seguridad Informática. Elaboración de Software. Parte 1

image_print

Autor: Junior Mota Centro de Seguridad Informática y Certificación Electrónica (CESICE)-FIIIDT. 

 

La ingeniería inversa es algo de mucha importancia cuando se habla se seguridad informática, esto se usa para darle fuerza a una industria que se dedica al desarrollo de software, además de darle confianza a los usuarios que usan los productos de esa compañía. Buscar y reportar vulnerabilidades de software es a lo que se dedica la ingeniería inversa en el área de los programas computacionales. Por esto, las consecuencias de prohibir, restringir o limitar el uso de la ingeniería inversa en estos programas puede ser muy malo y puede perjudicar de forma significativa a todas aquellas personas o empresas que usen programas computacionales, que en la actualidad es la mayoría, porque pueden ser programas defectuosos.

 

¿Qué es la ingeniería inversa?

Comprobar los fundamentos técnicos de un software, un dispositivo o un sistema sea este mecánico o electrónico, es lo que se define como ingeniería inversa. Para esto es necesario desarmar (despiece) y analizar cada componente de un dispositivo, ya sea para crear una réplica exacta o mejorar el que se está revisando. Cuando nos referimos al software, el proceso es diferente, en este caso se revisa el programa ejecutable o se puede ejecutar bajo unas condiciones específicas para ver su funcionamiento de forma detallada durante todo el proceso de ejecución.

 

El código fuente es algo que también se debe revisar y analizar, esto vendría a ser, el programa escrito en un lenguaje de programación determinado. De esta manera la ingeniería inversa ejecutada de la forma correcta, le permite al programador o al encargado de hacer este proceso, manejar y operar de forma correcta dentro del software.

Hacer ingeniería inversa programa computacional no es algo muy complicado, ya que evaluar un programa ingresándole datos incorrectos ya funciona como ingeniería inversa.

 

Ingeniería inversa con fines de Investigación en seguridad

 Primero explicaremos como es el proceso que se debe llevar a cabo para desarrollar un software, para así poder entender como la ingeniería inversa se puede utilizar en el proceso de elaboración de software.

  • El proceso de desarrollo de software: este proceso es largo y difícil, ya que se requiere de conocimientos específicos y una de las cosas más importantes es entender con exactitud todas las necesidades y requerimientos de los usuarios actuales y de los futuros usuarios, esto quiere decir que se debe prever cual es la forma de como usaran el software y como lo quieren utilizar más adelante. Hacer sistemas que funcionen de forma correcta y adecuada, es un trabajo difícil para cualquier empresa, programador, analista, entre otros y una de las cosas que caracteriza a un sistema de calidad es su seguridad. Para ser merecedores de que un sistema es seguro, este debe cumplir con dos requisitos que son fundamentales: (1) el sistema fue diseñado para dar prioridad a la seguridad de todo tipo de dato e información que se le proporcione al sistema, y (2) no puede tener errores que le permitan a personas no autorizadas dañar el funcionamiento del sistema y robar la información a través de estos errores.
  • Ataques computacionales o vulnerabilidad: para explicar que son los ataques computacionales me apoyare en un ejemplo, en una empresa de finanzas existe un sistema que permite llevar la contabilidad (software de contabilidad). Este sistema para poder funcionar de forma correcta, no solo es basta con decir que hace todos los cálculos de forma óptima y sin equivocarse, sino que debe estar libre o tener la mínima cantidad de errores sin que afecta su operatividad en ningún momento o la seguridad del programa. Las vulnerabilidades, para explicarlo de una forma más fácil, son errores que pueden usar los usuarios externos para entrar al sistema y robar información o hacer que no funcione de la forma correcta.
  • El rol de la empresa fabricante del software: las empresas y los programadores encargados de desarrollar el software no crean vulnerabilidades de forma intencional. Estas por el contrario, aparecen por la mala calidad y la falta de revisión del código fuente. Es por eso que estos errores no requieren de alguien que pertenece a la empresa para poder ser explotados.

Para esto es necesario obligar a las empresas a tener un proceso de revisión y verificación en el que se hagan todas las pruebas correspondientes, para asegurar la calidad de software. Es evidente que esta petición va a disminuir la cantidad de errores que pueden aprovechar usuarios externos para dañar el sistema, pero esto no sería una solución definitiva. A lo largo de la historia se ha podido comprobar que desarrollar software sin errores es una tarea en extremo difícil a la hora de llevarlo a la práctica (para eso existen parches de seguridad). Las empresas más grandes no son la excepción cuando se habla de tener problemas en la seguridad de sus softwares.

  • Detectar vulnerabilidades: de todo lo que se puede decir que se ha usado para combatir las vulnerabilidades, la más efectiva y la más práctica es la experiencia de profesionales, que revisando detalladamente el programa y realizando ingeniería inversa, es que logran dar con las vulnerabilidades que pueden existir en un software, para así poder informar a los responsables de su diseño y que ellos se encarguen de corregirlos, para proteger a sus clientes. Los profesionales que se mencionaron anteriormente no forman parte del equipo de desarrollo del software, ya que ellos solo se dedican a la revisión y comprobación del funcionamiento óptimo y correcto del sistema.
  • La importancia de los plazos para reportar, corregir y anunciar una vulnerabilidad: este proceso en el que se encuentra, se reporta y se arregla un error no es algo que se tome a la ligera, ya que se debe tomar el tiempo que sea necesario, porque se deben evitar que interfieran terceros que puedan entorpecer este proceso. Con el paso del tiempo, cada compañía, junto a sus programadores han desarrollado diversas políticas y formas para realizar de forma correcta este procedimiento, siendo notificación responsable la más conocida y aceptada de todas. Esta política una de sus características es que la persona que descubre la vulnerabilidad es quien debe reportarla lo antes posible a los desarrolladores o a la misma institución o empresa. Luego de este reporte la empresa podrá disponer de un periodo de 3 meses (que pueden ser prorrogables), para evaluar cómo afecta esta vulnerabilidad, corregirla (de ser necesario) y publicarla. Si la empresa no se encarga de realizar todo el procedimiento, el responsable que encontró el error debe comunicarla a la comunidad que usa el software y darle toda la información, para que verifiquen la existencia de la vulnerabilidad, y que den un plazo para así proteger a los usuarios que se verían afectados. El objetivo de todo esto es que ellos mismos puedan conocer sobre el error e intenten solucionarlo para prevenir ser atacados.

 

Referencias

 

 

 

Contacto: motaibhaltair@gmail.com

Compartir en Redes Sociales
0 Shares