cc-memtest para probar la seguridad de la memoria para OpenBSD

1

enlace

enlace

¿Alguien tiene el código binario o código fuente de cc-memtest o cc-memtest?

Un programa que puede probar lo siguiente:

Las actividades de aseguramiento dirigen al evaluador a:

Acquire or construct a test program which attempts to allocate memory that is both writable and executable. The evaluator will run the program and confirm that it fails to allocate memory that is both writable and executable.
Acquire or construct a test program which allocates memory that is executable and then subsequently requests additional write/modify permissions on that memory. The evaluator will run the program and confirm that at no time during the lifetime of the process is the memory both writable and executable.
Acquire or construct a test program which allocates memory that is writable and then subsequently requests additional execute permissions on that memory. The evaluator will run the program and confirm that at no time during the lifetime of the process is the memory both writable and executable.
    
pregunta Peter84753 07.10.2016 - 20:44
fuente

2 respuestas

1

Del blog que cites:

  

... Intentando ejecutar mi aplicación de prueba, cc-memtest, ...

Lo que significa que es la aplicación de prueba de los autores, así que contáctate con el autor del artículo del blog.

Aparte de eso, no debería ser demasiado difícil construir un programa que realice estas pruebas siempre que entienda mmap (2) y mprotect (2) . Incluso encontrará algún código si observa más de cerca las imágenes del artículo. Pero la ayuda en esta área (es decir, la programación) está fuera de tema y le recomiendo que lea las páginas del manual.

    
respondido por el Steffen Ullrich 07.10.2016 - 20:52
fuente
0

Es probable que tal programa no se publique porque es tan trivial, ya que solo llama a algunas funciones y comprueba si tienen éxito o fallan. Escribí un programa rápido de C que debería hacer esto, basado en las actividades de aseguramiento que enumeró. Escribí esto en Linux, pero es probable que funcione igual de bien en OpenBSD.

El mmap syscall crea una asignación con los permisos especificados y devuelve la dirección de la primera página en caso de éxito y MAP_FAILED en caso de error. mprotect syscall modifica los permisos de una asignación existente, devolviendo 0 en caso de éxito y -1 en caso de error.

#include <err.h>
#include <errno.h>
#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>

int main(void)
{
    void *map;

    /* create: wx */
    if ((map = mmap(NULL, 4096, PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)) == MAP_FAILED)
        perror("unable to create page as wx");

    /* modify: x -> wx */
    if ((map = mmap(NULL, 4096, PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)) == MAP_FAILED)
        err(1, "unable to map x page... this should never happen");

    if (mprotect(map, 4096, PROT_WRITE|PROT_EXEC) < 0)
        perror("unable to change page from x to wx");

    /* modify: w -> wx */
    if ((map = mmap(NULL, 4096, PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)) == MAP_FAILED)
        err(1, "unable to map w page... this should never happen");

    if (mprotect(map, 4096, PROT_WRITE|PROT_EXEC) < 0)
        perror("unable to change page from w to wx");

    return 0;
}

Estos son los resultados que obtengo en un sistema Linux con los parches PaX (PAX_MPROTECT, que proporcionan propiedades de seguridad similares, pero más estrictas, a W ^ X de OpenBSD).

$ gcc cc-memtest2.c
$ ./a.out
unable to create page as wx: Operation not permitted
unable to change page from x to wx: Permission denied
unable to change page from w to wx: Permission denied
    
respondido por el anon 10.09.2017 - 09:16
fuente

Lea otras preguntas en las etiquetas