Checkpoint propuxo a técnica de protección Safe-Linking, o que dificulta a explotación das vulnerabilidades

Compañía Checkpoint presentado Mecanismo de protección Safe-Linking, que dificulta a creación de exploits que manipulen a definición ou modificación de punteiros aos búfers asignados ao executar unha chamada malloc. Safe-Linking non bloquea por completo a posibilidade de explotar vulnerabilidades, pero cunha sobrecarga mínima dificulta considerablemente a creación de determinadas categorías de exploits, xa que ademais do desbordamento do búfer explotable, é necesario atopar outra vulnerabilidade que provoque fugas de información sobre a colocación do montón na memoria.

Preparáronse parches que implementan Safe-Linking para Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) e Google TCMalloc, e tamén se propoñen para actualizar a protección en Chromium (en
Desde 2012, Chromium xa incorpora a técnica de protección MaskPtr destinada a resolver o mesmo problema, pero a solución de Checkpoint demostra un maior rendemento).
Os parches suxeridos xa foron aprobados para a súa entrega na versión de agosto Glibc 3.32 e Safe-Linking estará activado por defecto. uClibc-NG admite a conexión segura entrou incluído na versión 1.0.33 e está activado por defecto. Cambios en gperftools (antigo tcmalloc) aceptada, pero ofrecerase como opción nunha versión futura.

Desenvolvedores TCMalloc (novo tcmalloc) negouse a aceptar cambiar, citando unha grave degradación do rendemento e a necesidade de engadir probas extensas para comprobar regularmente que todo funciona como se esperaba. As probas realizadas polos enxeñeiros de Checkpoint mostraron que o método Safe-Linking non leva a un consumo de memoria adicional e que o rendemento cando se realizan operacións de montón redúcese de media só un 0.02% e, no peor dos casos, un 1.5% (para comparación, a sobrecarga en o método utilizado en Chromium estímase como "menos do 2%"). Inclusión
A conexión segura dá lugar a que se executen 2-3 instrucións de montaxe adicionais cada vez que se chama free() e 3-4 instrucións cada vez que se chama a malloc(). Non é necesario executar as fases de inicialización e xeración de valores aleatorios.

Checkpoint propuxo a técnica de protección Safe-Linking, o que dificulta a explotación das vulnerabilidades

Safe-Linking pódese usar non só para mellorar a seguridade de varias implementacións do montón, senón tamén para engadir controis de integridade a calquera estrutura de datos que utilice listas de punteiros ligadas individualmente situadas xunto aos propios búfers. O método é moi sinxelo de implementar e só require engadir unha macro e aplicala aos punteiros ao seguinte bloque do código (por exemplo, para Glibc cambios só unhas poucas liñas de código). O método redúcese aos seguintes cambios:

+#definir PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))

+#definir REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)

- seguintep = p->fd;
+ nextp = REVEAL_PTR (p->fd);
...

A esencia do método é usar datos aleatorios do mecanismo de aleatorización de enderezos ASLR (mmap_base) para protexer listas ligadas individualmente como Fast-Bins e TCache. Antes de aplicar o valor a un punteiro ao seguinte elemento da lista, realiza unha conversión de máscara e verifica o aliñamento da páxina. O punteiro substitúese polo resultado da operación "(L >> PAGE_SHIFT) XOR (P)", onde P é o valor do punteiro e L é a localización da memoria onde se almacena o punteiro.

Checkpoint propuxo a técnica de protección Safe-Linking, o que dificulta a explotación das vulnerabilidades

Cando se usa no sistema ASLR (Address Space Layout Randomization) parte dos bits L co enderezo base do montón contén valores aleatorios que se usan como clave para codificar P (extraídos mediante unha operación de desprazamento de 12 bits para páxinas de 4096 bytes). Esta manipulación reduce o risco de secuestro do punteiro nun exploit, xa que o punteiro non se almacena na súa forma orixinal e para substituílo require coñecemento da asignación do montón. Ademais, o código do parche tamén contén unha comprobación adicional para o aliñamento de bloques, que non permite que un atacante substitúa un punteiro por un valor non aliñado e require o coñecemento do número de bits que están aliñados, o que nos sistemas de 64 bits permite ademais o bloqueo. 15 de cada 16 intentos de ataque que non teñen en conta o aliñamento.

O método é eficaz para protexerse contra ataques que usan a reescritura parcial do punteiro (cambio de bytes baixos), a reescritura completa do punteiro (redireccionamento ao código do atacante) e o cambio da posición da lista nun enderezo non aliñado. Como exemplo, móstrase que o uso de Safe-Linking en malloc permitiría bloquear a explotación recentemente identificado polos mesmos investigadores de vulnerabilidade CVE-2020-6007 na luz intelixente Philips Hue Bridge, causada por un desbordamento do búfer e que che permite controlar o dispositivo.

Fonte: opennet.ru

Engadir un comentario