¿Finaliza definitivamente la posibilidad de ejecución de código en el caso de desbordamientos de pila de sistemas de archivos?

1

Local only Filesystems (como ntfs o btrfs) consta de muchas estructuras de datos que requieren un código muy complejo para analizarlos.
Por lo tanto, tales sistemas de archivos, si se implementan en el espacio de usuario, pueden sufrir vulnerabilidades de desbordamiento de búfer como muchos analizadores.

En ese caso, el atacante deja una tarjeta SD de alta capacidad con datos diseñados en el estacionamiento que tomará el control de la computadora portátil del miembro del personal tan pronto como intente montarla.

El punto es que creo que ya no hay nada que temer al usar la tarjeta SD de 512 Gb que se encuentra en el suelo debido a aslr:

  • La única forma que conozco de omitir ASLR en Linux de 64 bits es explotar los accesos repetidos a la red que normalmente realiza el ejecutable (lo que permite al atacante seleccionar la dirección de retorno correcta para enviar dentro de su vulnerabilidad) .
  • Las principales distribuciones de Linux de hoy como Red Hat y Chrome os o Android ahora compilan y vinculan todos sus ejecutables con -fPIE , por lo que los programas de espacio de usuario ya no usan ninguna dirección estática.
  • los sistemas de archivos implementados con fusible que solo tratan con archivos de dispositivos no contienen ningún código que acceda a la red. Por otra parte, después de buscar vulnerabilidades anteriores en los sistemas de archivos del espacio de usuario, no encontré ningún tipo de vulnerabilidad que evitara aslr . Los únicos puntos vulnerables de los sistemas de archivos que encontré funcionan con el código del kernel o confían en que el ejecutable principal no sea una dirección independiente. (aunque podría haber buscado mal y podría existir un ejemplo contre)

Pregunta:

Entonces, mientras el sistema de archivos no sea nfs o scsi conectado en serie y no se ejecute en el espacio del kernel ni el sistema contenga ejecutables dependientes de la posición, ni use la pila ejecutable, aslr no solo mitiga, sino que previene completamente los ataques de desbordamiento de búfer , ¿no es así?
¿O también se puede pasar por alto realizando un desbordamiento de búfer único que toma el control de todas las variables asignadas en el montón incluso si el programa no utiliza ninguna red? (También noté con el sistema de archivos que toda la estructura del montón se puede hacer predecible)

Detalles:

En el caso de los sistemas de archivos, lo típico que sucede es esto:

struct boot_sector ef=malloc(sizeof(struct boot_sector));
ef->dev=open("/dev/sdb1");
ef->sb=malloc(sizeof(struct super_block));
pread(ef->dev, ef->sb, sizeof(struct super_block), 0);
ef->first_extend =malloc (user_controlled_value * CLUSTER_SIZE); // get allocated at the begging of the heap.
pread(ef->dev, ef->first_extend, second_controlled_value << CLUSTER_SIZE, 1024); // overwrite every struct * that follow, including ef. Notice since we control file system data we know the value the varying struct * should have.

Aunque en ese tipo de caso, ninguna estructura contiene información de puntero, por lo que es necesario corromper los datos dlmalloc de glibc.

    
pregunta user2284570 19.03.2017 - 22:36
fuente

0 respuestas

Lea otras preguntas en las etiquetas