Todos los días, los piratas informáticos de todo el mundo descubren y explotan nuevas vulnerabilidades en sitios web, aplicaciones e incluso en la arquitectura del sistema. Una cosa común en todos los dispositivos electrónicos, viejos o nuevos, es que son ejecutados por programas que se almacenan en la memoria. Los piratas informáticos se han aprovechado de esto y han encontrado vulnerabilidades conocidas como desbordamientos de búfer.
Aunque no son nuevos, los ataques de desbordamiento de búfer y las vulnerabilidades han causado estragos en el ciberespacio. Aquí le explicaremos qué son los ataques de desbordamiento de búfer y cómo puede prevenirlos.
Comprender los búferes y la memoria del sistema
Para comprender qué es un ataque de desbordamiento de búfer y cómo funciona, debe saber qué es un búfer y cómo funciona la memoria de una computadora.
Memoria de pila y montón son dos características principales de la memoria de una computadora. Son estructuras de datos utilizadas para la asignación de memoria. Aunque son similares,
la pila y la memoria del montón difieren de múltiples maneras.La pila, que utiliza el concepto de último en entrar, primero en salir (LIFO), se utiliza en la RAM (memoria de acceso aleatorio) para almacenar ejecuciones de programas temporalmente, mientras que el montón asigna memoria mediante asignación dinámica a global variables Pero lo único que tienen en común es un amortiguador.
¿Qué es un búfer?
Un búfer es una región de la memoria utilizada para almacenar datos, muy probablemente en la memoria RAM de una computadora, mientras se mueve de un lugar a otro. Estos datos suelen ser programas que deben ejecutarse. Los búferes se almacenan en la pila o montón. Optimizan la ejecución de datos.
¿Qué es un desbordamiento de búfer?
Un desbordamiento de búfer ocurre cuando el búfer recibe más datos que su capacidad de almacenamiento. Debido a que no puede procesar esa cantidad de datos, se desborda.
Ahora, en la memoria de una computadora, justo después de un búfer o un espacio de búfer hay una dirección de retorno. Esta dirección de retorno en realidad se denomina puntero de instrucciones extendidas (EIP). Su función es apuntar la computadora a un programa específico cuando está lleno. Cuando un búfer tiene más datos de los que puede contener y se desborda, se desborda en la dirección de retorno.
Para entender esto, supongamos que tiene un espacio de búfer que solo puede contener cinco letras. Entonces, si agrega palabras como "azúcar" o "paz", el flujo del búfer puede contenerlo. Pero cuando tienes una palabra como "autenticación", inevitablemente se desbordará. Esto conduce a un error o falla en el sistema. Pero los piratas informáticos pueden explotar esta vulnerabilidad para iniciar un ataque de desbordamiento de búfer.
¿Qué es un ataque de desbordamiento de búfer y cómo funciona?
Los ataques de desbordamiento de búfer ocurren cuando el pirata informático toma el control de la dirección de retorno o EIP. Cuando el atacante conoce el tamaño de la memoria de un sistema, puede escribir datos intencionalmente en ese sistema solo para desbordarlo. Luego se aseguran de que el EIP o la dirección de retorno esté escrito para apuntar a un programa que pueda darles acceso al sistema o revelar información confidencial almacenada en el sistema.
El atacante puede incluso escribir algunos datos que contengan código malicioso y hacer que el búfer se desborde. A continuación, se escribe el EIP para redirigir el sistema de vuelta al código malicioso y se ejecuta. Entonces, el hacker obtiene el control del sistema.
Hay cinco pasos principales en los ataques de desbordamiento de búfer:
- clavando
- Fuzzing
- Encontrar el desplazamiento
- Sobrescribir el EIP o la dirección del remitente
- Explotando la vulnerabilidad
Pinchar es el primer paso. Aquí, los piratas informáticos encuentran la parte de la memoria del programa que es vulnerable a los desbordamientos del búfer. Luego viene el fuzzing, que es similar al spiking, pero aquí, el hacker envía caracteres al programa para ver si se puede romper. Una vez que tiene éxito, el atacante procede a encontrar el desplazamiento, que es donde se desbordó el búfer. Esto se hace para conocer el tamaño del búfer y la dirección de retorno. Luego, el hacker inserta un código shell malicioso y controla el sistema.
¿Cuáles son los tipos de ataques de desbordamiento de búfer?
Hay dos tipos principales de ataques de desbordamiento de búfer: ataques basados en pila y basados en montón.
1. Ataques de desbordamiento de búfer basados en pilas
Los ataques de desbordamiento de búfer basados en pila son el tipo más popular de ataques de desbordamiento de búfer. Ocurren cuando la memoria de pila del sistema se desborda y se explota. También se conoce como aplastamiento de pilas.
2. Ataques de desbordamiento de búfer basados en montón
Este tipo de desbordamiento de pila no es muy común, ya que es difícil de implementar y explotar. Ocurre cuando la memoria asignada a un programa se desborda. En enero de 2021, Google descubrió un desbordamiento de búfer basado en montón Vulnerabilidad en el componente V8 de Chrome.
¿Cómo se pueden prevenir los ataques de desbordamiento de búfer?
Los ataques de desbordamiento de búfer se pueden mitigar utilizando protecciones de tiempo de ejecución del sistema operativo, lenguajes de programación seguros, aleatorización del diseño del espacio de direcciones y la garantía de medidas de seguridad adecuadas en general.
1. Uso de la protección en tiempo de ejecución del sistema operativo
La protección en tiempo de ejecución también se conoce como verificación de límites de matriz en tiempo de ejecución. Esto asegura que cada ejecución del programa esté dentro del espacio de búfer o la memoria disponible. Y comprueba todos los datos escritos en la memoria del sistema. Esto dificulta que los piratas informáticos sobrescriban datos en el sistema y exploten la vulnerabilidad.
2. Uso de lenguajes de programación seguros
Los lenguajes de programación como C y C ++ no implementan la verificación de límites de matriz en tiempo de ejecución porque se necesita código adicional para verificar cada programa escrito en el sistema y lo ralentiza. Por lo tanto, son más susceptibles a ataques de desbordamiento de búfer. Usar lenguajes más seguros como C#, Java y Python es mejor porque corren un menor riesgo de ataques de desbordamiento de búfer.
3. Utilice la aleatorización del diseño del espacio de direcciones (ASLR)
Esta medida de seguridad asigna aleatoriamente las direcciones de los programas y funciones en la memoria de un sistema a diferentes regiones de datos. Hace que sea difícil para un atacante navegar a través de funciones sensibles en la memoria.
4. Garantice políticas de seguridad estrictas
Esto implica mantener el sistema actualizado regularmente, validar todos los datos escritos en el sistema y asignar los privilegios mínimos a los usuarios. Con las políticas de seguridad adecuadas implementadas, no debería tener que preocuparse por un ataque de desbordamiento de búfer.
Mantener su seguridad estricta es esencial para combatir los ataques de desbordamiento de búfer
Según un dicho popular en seguridad, “mientras un sistema es utilizado por humanos, existe una vulnerabilidad”, lo cual es cierto e inevitable. Sin embargo, siempre se pueden reducir las posibilidades de un ataque asegurándose de que se implementen y cumplan estrictamente las medidas de seguridad adecuadas.
Recuerde que los piratas informáticos encuentran constantemente nuevas formas de explotar vulnerabilidades como esta. Por lo tanto, depende de usted mantenerse a la vanguardia y estar atento a los últimos avances en el campo de la ciberseguridad.