Lectura oscura | Seguridad | Proteja el negocio



Si existe una vulnerabilidad en el sistema operativo y las aplicaciones que ejecuta, puede estar seguro de que un atacante encontrará una forma de aprovecharla. La única forma segura de eliminar tal amenaza es corregir la vulnerabilidad en la base de código. Pero hasta que se publique un parche de seguridad, sus sistemas están a merced de ser explotados. Muchos de nosotros aceptamos este status quo.

Afortunadamente, existe una opción mejor y se llama Defensa de objetivo móvil rotacional (rMTD).

rMTD es el proceso de hacer que una vulnerabilidad existente sea difícil de explotar. Esto se puede lograr a través de una variedad de técnicas diferentes que son estáticas, integradas durante la compilación de la aplicación, denominadas Autoprotección de aplicaciones en tiempo de compilación (CASP), o aplicadas dinámicamente durante el tiempo de ejecución, denominadas Autoprotección de aplicaciones en tiempo de ejecución (RASP). ). CASP y RASP no se excluyen mutuamente y pueden combinarse.

CASP modifica el código ensamblador generado por la aplicación durante la compilación de tal manera que dos compilaciones no generen el mismo conjunto de instrucciones ensambladoras. Los piratas informáticos confían en un diseño de ensamblaje conocido a partir de una compilación estática generada para diseñar su ataque. Una vez que han creado su ataque, pueden apuntar a sistemas con los mismos binarios. Aprovechan la naturaleza estática de la aplicación compilada o del sistema operativo para secuestrar sistemas.

Esto es análogo a que un ladrón obtenga una copia de la misma caja fuerte que usted tiene y tenga tiempo para averiguar cómo descifrarla. La única diferencia es que, en el caso de un pirata informático, es mucho más fácil conseguir una copia del computer software que una caja fuerte, y la vulnerabilidad es conocida y publicada. Con CASP, la misma caja fuerte (es decir, aplicación) se ve muy diferente bajo el capó (es decir, diseño binario).

RASP adopta el enfoque de crear entropía mientras se ejecuta la aplicación. El diseño binario se cambia dinámicamente cada vez que se ejecuta la aplicación. El atacante ya no puede hacer suposiciones sobre el diseño de la pila de la aplicación y las direcciones de las funciones y bibliotecas. Esto es análogo a apagar el motor y reconfigurar los componentes de un automóvil mientras se conduce simultáneamente por la carretera.

CASP y RASP se logran mediante una variedad de técnicas. Vamos a ver.

Técnicas CASP

1. Modificación del código de ensamblaje: Sustituya el conjunto de instrucciones de ensamblaje authentic de la biblioteca por un conjunto de instrucciones diferente pero lógicamente equivalente. La interfaz binaria de aplicación (ABI) es la convención de llamada para interactuar con el binario. La modificación del conjunto de instrucciones de montaje no afecta el ABI. Las aplicaciones que interactúan con este binario siguen siendo las mismas.

Los atacantes examinan el diseño del conjunto de instrucciones de ensamblaje de un binario para diseñar sus ataques. Su herramienta de elección, ADA, les permite examinar el código compilado, que generate instrucciones de ensamblaje, para buscar fallas de código (es decir, desbordamientos de búfer, subdesbordamiento, desbordamiento de enteros, llamadas dobles libres, etcetera.). Una vez que se descubre una falla, confían en el diseño de ensamblaje del binario para aprovechar las instrucciones de ensamblaje circundantes para diseñar su ataque. Al modificar el código ensamblador sin que el atacante lo sepa, el ataque falla porque se cambió el diseño de las instrucciones ensambladoras del binario.

2. Aleatorización de la dirección de inicio de cada función dentro de cada biblioteca: Cada biblioteca o módulo expone funciones que las aplicaciones pueden llamar. De forma predeterminada, la dirección de inicio de cada función se fija durante la compilación.

Los atacantes pueden examinar el binario compilado y determinar fácilmente la dirección de cada función sin necesidad de examinar el código fuente. Esta información se utiliza luego para crear un ataque. Cuando se secuestra la pila, el código de ataque puede especificar la dirección de la biblioteca a la que el atacante quiere llamar para iniciar un shell, por ejemplo.

3. Protección de la estructura de datos: El diseño de la memoria de las estructuras de datos en binarios se aleatoriza durante la compilación y los campos de datos se cifran dinámicamente en tiempo de ejecución para evitar que se sobrescriban o lean.

Las estructuras de datos a menudo contienen búferes, como búferes de cadenas o matrices. Estos son objetivos para realizar un ataque de desbordamiento de búfer. Para secuestrar con éxito la pila utilizando un búfer definido en una estructura de datos, el atacante debe confiar en la posición del búfer dentro de la estructura de datos. Al aleatorizar el diseño de la estructura de datos durante la compilación, el atacante ya no puede confiar en determinar la ubicación del búfer dentro de la estructura de datos.

Técnicas RASP

1. Aleatorización de direcciones de biblioteca dinámica: En tiempo de ejecución, la dirección de las bibliotecas es aleatoria. Todas las referencias a una biblioteca se actualizan para reflejar la nueva dirección. Esta medida hace que sea más difícil para los atacantes llamar a una biblioteca externa desde la aplicación que secuestraron el proceso.

2. Aleatorización de la dirección de la función dinámica: La dirección de cada función definida en una biblioteca recibe una dirección estática durante la compilación. Además de aleatorizar la dirección de las bibliotecas, la dirección de cada función también se cambia dinámicamente durante la ejecución cuando una aplicación la llama.

3. Canario de pila dinámica: En lugar de un canario de pila estático, que es un valor aleatorio fijo que se puede eludir fácilmente, el canario se aleatoriza dinámicamente a lo largo del tiempo. Al aleatorizar dinámicamente el canario de la pila, el atacante no tiene tiempo suficiente para adivinarlo antes de que gire.

4. Pila de sombras: Una pila de sombra es una copia de la pila generada durante la compilación, donde solo las direcciones de retorno se almacenan en esta pila de sombra. Las direcciones de retorno están encriptadas en la pila de sombra para que no puedan ser manipuladas por un atacante. Antes de que la aplicación lea la dirección de retorno de la pila para volver al estado de ejecución anterior, la dirección de retorno se cifra y se compara con la copia en la pila de sombra. Si coinciden, la ejecución salta a la siguiente instrucción apuntada por la dirección de retorno. Si no coinciden, un atacante modificó la dirección de retorno y se genera una falla en la aplicación, lo que hace que la aplicación se bloquee y se registre un evento.

5. Codificación PLT: La tabla de vinculación de procedimientos (PLT) es una tabla de búsqueda para localizar la dirección de las funciones expuestas por otras bibliotecas. En lugar de una tabla de búsqueda estática, la dirección de las funciones de las bibliotecas externas se almacena aleatoriamente en el PLT durante la ejecución del proceso.

Esto evita que los atacantes llamen a una función a una biblioteca conocida, como libc, para generar una terminal, por ejemplo. Al cambiar dinámicamente la ubicación (es decir, la dirección) de las funciones definidas en bibliotecas externas, el atacante ya no puede realizar un ataque de retorno a plt al descubrir la dirección de una función externa, como la función, strcpy (), de la biblioteca libc en el PLT para poder llamarlo.

rMTD es la próxima frontera para defendernos contra los ataques de día cero y hacer que nuestras computadoras y sistemas sean más resistentes contra los piratas informáticos. A medida que esta tecnología madura y gana en adopción en toda la industria, podría llegar a ser tan ubicua como el program antivirus.



Enlace a la noticia authentic