cc-memtest per testare la sicurezza della memoria per OpenBSD

1

link

link

Qualcuno ha ricevuto il cc-memtest binario o il codice sorgente o cc-memtest?

Un programma in grado di testare quanto segue:

Le attività di assicurazione indirizzano il valutatore 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.
    
posta Peter84753 07.10.2016 - 20:44
fonte

2 risposte

1

Dal blog citi:

..Attempting to run my test application, cc-memtest, ...

Il che significa che l'autrice possiede l'applicazione di prova quindi per favore contatta l'autore dell'articolo del blog.

A parte questo, non dovrebbe essere troppo difficile costruire un programma che faccia questi test finché capisci mmap (2) e mprotect (2) . Troverai anche del codice se guardi più da vicino le immagini nell'articolo. Ma l'aiuto in quest'area (cioè la programmazione) è fuori tema qui e ti consiglio di leggere solo le pagine man.

    
risposta data 07.10.2016 - 20:52
fonte
0

Un programma di questo tipo probabilmente non viene rilasciato perché è così banale, chiama solo poche funzioni e controlla se hanno successo o falliscono. Ho scritto un programma rapido C che dovrebbe fare questo, basato sulle attività di assicurazione che hai elencato. Ho scritto questo su Linux, ma probabilmente funzionerà altrettanto bene su OpenBSD.

Il mmap syscall crea un mapping con le autorizzazioni specificate e restituisce l'indirizzo della prima pagina in caso di successo e MAP_FAILED in caso di errore. Il mprotect syscall modifica le autorizzazioni di una mappatura esistente, restituendo 0 in caso di successo e -1 in caso di fallimento.

#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;
}

Questi sono i risultati che ottengo su un sistema Linux con le patch PaX (PAX_MPROTECT, che fornisce proprietà di sicurezza simili ma più severe a W ^ X di 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
    
risposta data 10.09.2017 - 09:16
fonte

Leggi altre domande sui tag