Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-01-2005, 17:27   #1
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
[C] Zona di memoria "sicura"

Salve,

sapete se c'è un modo per porre delle variaili di un programma in una zona di memoria 'sicura', in cui non ci possano essere accessi illegali, ad esempio evitando che si acceda a quella zona al di fuori di una funzione?

Il mio obiettivo è registrare una funzione che viene richiamata se si genera un segmentation fault; in C ciò è possibile registrando una funzione come handler per il segnale di segmentation fault; quando l'errore si verifica, la funzione viene eseguita, ad esempio tale funzione puo semplicemente stampare una stringa del tipo:

"C'è stato un errore di segmentation fault".

Il prolema è pero che se il segmentation fault si è verificato, alcuni dati del programma possono essere stati alterati, quindi la stessa stringa può essere stata danneggiata...il mio scopo era allora far in modo che non si potesse accedere all'aria di memoria che corrisponde a quella stringa, al di fuori della funzione handler, in modo che quella variabile non venga di sicuro alterata.

Come si puo fare?

Ciao e grazie.
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2005, 07:51   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
This function changes the access protection on a region of committed pages in the virtual address space of the calling process.

BOOL VirtualProtect(
LPVOID lpAddress,
DWORD dwSize,
DWORD flNewProtect,
PDWORD lpflOldProtect
);
Parameters
lpAddress
[in] Pointer to the base address of the region of pages whose access protection attributes are to be changed.

All pages in the specified region must be allocated in a single call to the VirtualAlloc function.

The pages cannot span adjacent regions that were allocated by separate calls to VirtualAlloc.
dwSize
[in] Specifies the size, in bytes, of the region whose access protection attributes are to be changed.

The region of affected pages includes all pages containing one or more bytes in the range from the lpAddress parameter to lpAddress+dwSize. This means that a 2-byte range straddling a page boundary causes the protection attributes of both pages to be changed.
flNewProtect
[in] Specifies the new access protection.

You can specify any one of the following flags, along with the PAGE_GUARD and PAGE_NOCACHE protection modifier flags, as necessary.
Value Description
PAGE_READONLY Enables read access to the committed region of pages.

An attempt to write to the committed region results in an access violation.

If the system differentiates between read-only access and execute access, an attempt to execute code in the committed region results in an access violation.
PAGE_EXECUTE Enables execute access to the committed region of pages.

An attempt to read or write to the committed region results in an access violation.
PAGE_EXECUTE_READ Enables execute and read access to the committed region of pages.

An attempt to write to the committed region results in an access violation.
PAGE_GUARD Pages in the region become guard pages.

An attempt to access a guard page causes the system to raise a STATUS_GUARD_PAGE exception and turn off the guard page status. Guard pages thus act as a one-shot access alarm.

The PAGE_GUARD flag is a page protection modifier. An application uses it with one of the other page protection flags, with one exception: it cannot be used with PAGE_NOACCESS.

When an access attempt leads the system to turn off guard page status, the underlying page protection takes over.

If a guard page exception occurs during a system service, the service typically returns a failure status indicator.
PAGE_NOACCESS Disables all access to the committed region of pages.

An attempt to read from, write to, or execute in the committed region results in an access violation exception, called a general protection (GP) fault.
PAGE_NOCACHE Allows no caching of the committed regions of pages.

The hardware attributes for the physical memory should be specified as no cache. This is not recommended for general use. It is useful for device drivers; for example, mapping a video frame buffer with no caching.

This flag is a page protection modifier and is valid when used with a page protection other than PAGE_NOACCESS.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2005, 08:22   #3
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Re: [C] Zona di memoria "sicura"

Quote:
Originariamente inviato da anx721
Il prolema è pero che se il segmentation fault si è verificato, alcuni dati del programma possono essere stati alterati, quindi la stessa stringa può essere stata danneggiata...il mio scopo era allora far in modo che non si potesse accedere all'aria di memoria che corrisponde a quella stringa, al di fuori della funzione handler, in modo che quella variabile non venga di sicuro alterata.

Come si puo fare?
Utilizzando una zona di memoria a sola lettura. Una stringa const char * dovrebbe essere posta in .rodata, ma non è garantito (credo stia al buon senso del compilatore). Puoi allocare un pò di memoria tramite mmap privato, inizializzarla, e poi renderla a sola lettura tramite mprotect. E' un pò il modo illustrato da Cionci per sistemi win32.
La man page di mprotect mostra un esempio tramite malloc+mprotect (ti consiglio comunque di usare mmap al posto della malloc).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2005, 15:00   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ah...cavolo non avevo pensato se era per Windows o per Linux
Anzi credo che fosse proprio per Linux...visto il "Segmentation Fault"...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2005, 15:35   #5
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Grazie,

ho capito l'esempio di mrotect+malloc, ma non ho capito a che serve mmap e come dovrei usarla al posto di malloc
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2005, 15:36   #6
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Quote:
Originariamente inviato da cionci
Ah...cavolo non avevo pensato se era per Windows o per Linux
Anzi credo che fosse proprio per Linux...visto il "Segmentation Fault"...
in realtà se riuscissi a farla per entrambi sarebbe meglio
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2005, 15:47   #7
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da anx721
Grazie,

ho capito l'esempio di mrotect+malloc, ma non ho capito a che serve mmap e come dovrei usarla al posto di malloc
mmap serve a "mappare qualcosa" (file, dispositivo, memoria fisica, memoria "anonima"...) nel tuo spazio di indirizzamento.
A te serve memoria "anonima".
Questo esempio è analogo a quello che trovi nella manpage, ma fa uso di mmap:

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/mman.h>

int main(void)
{
	void *map;
	char c;
	char *p;
	map = mmap(NULL, 1024, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
	if(map==MAP_FAILED) {
		perror("mmap");
		return -1;
	}
	p = map;
	c = p[666];
	fprintf(stderr, "Read 1 ok c=%d\n", c);
	p[666] = 42;
	fprintf(stderr, "Write 1 ok\n");
	if(mprotect(p, 1024, PROT_READ)) {
		perror("mprotect");
		return -1;
	}
	c = p[666];
	fprintf(stderr, "Read 2 ok c=%d\n", c);
	p[666] = 42;
	fprintf(stderr, "Write 2 ok\n");
	munmap(map, 1024);
	return 0;
}
Dovresti ottenere un segfault sulla seconda write.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2005, 16:19   #8
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Grazie per l'esempio,

volevo pero capire una cosa; leggendo la documentazione mi sembrava di capire che mprotect deve ricevere come indirizzo iniziale un indirizzo che coincide con l'inizio di una pagina di memoria (difatti nell'esempio della manpage si allineava il valore di p con il primo indirizzo multiplo di 4096 se la pagina è di 4096 bytes). mmap restituisce deirettamente un puntatore all'inizio di una pagina o anche in questo caso bisogna eseguire quell'allineamento? E poi perche conviene usare mmap al posto di malloc?

Grazie e ciao.
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2005, 16:52   #9
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
mmap lavora solo per multipli di pagina. Anche se ho chiesto 1024 byte, alloca almeno una pagina. La memoria ovviamente è già allineata. Lo stesso per mprotect.
Quote:
E poi perche conviene usare mmap al posto di malloc?
E' solo con la mmap che il funzionamento è garantito. Da man mprotect:
Quote:
POSIX.1b says that mprotect can be used only on regions of memory obtained from mmap(2).
malloc può allocare memoria con syscall diverse da mmap (ad es. brk). Il fatto che mprotect funzioni anche con memoria ottenuta tramite brk è incidentale, e non richiesto dallo standard posix.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
I nuovi Samsung Galaxy Watch 9 si mostra...
Einsten aveva ragione, di nuovo: captate...
Top 10 offerte Amazon: 5 sono partite qu...
AI Conf 2026: l'intelligenza artificiale...
Samsung Galaxy S26 scende a 711,49€: un ...
Dopo il maxi blackout, la Spagna cambia ...
Costa meno di un MacBook e fa molto di p...
Ecco tutti i robot aspirapolvere rimasti...
Più partite da seguire in contemporanea?...
389€ sono veramente pochi per questo PC ...
Vesuvius Challenge: srotolato in digital...
Torna oggi a soli 101,79€ grazie a un co...
Steam Machine: addio al 4K 60 fps. Valve...
Cosa aumenterà di prezzo dopo com...
Altro che 2028: Micron ha blindato prezz...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:35.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v