Checkpoint ha proposto una tecnica di protezione chiamata Safe-Linking, che rende più difficile sfruttare le vulnerabilità.

Azienda Checkpoint ha presentato meccanismo di protezione Safe-Linking che rende più difficile la creazione di exploit che manipolano la definizione o la modifica dei puntatori a buffer allocati durante la chiamata malloc. Safe-Linking non blocca completamente la possibilità di sfruttare le vulnerabilità, ma aumenta notevolmente la difficoltà di realizzare alcune categorie di exploit con costi minimi, poiché oltre a un overflow del buffer sfruttato è necessario trovare un'altra vulnerabilità che provocchi una fuga di informazioni sulla posizione dell'heap in memoria.

Le patch con implementazione di Safe-Linking sono state preparate per Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) e Google TCMalloc, e sono state proposte per l'aggiornamento della protezione in Chromium (in
Chromium dal 2012 è già incorporata una tecnica di protezione MaskPtr mirata alla stessa problematica, ma la soluzione di Checkpoint dimostra prestazioni superiori).
Le patch proposte sono già state approvate per essere incluse nel rilascio di agosto Glibc 3.32 e l'implementazione di Safe-Linking sarà inclusa di default. In uClibc-NG, il supporto per Safe-Linking è entrato è parte della versione 1.0.33 e sarà incluso di default. In gperftools (vecchio tcmalloc) le modifiche accettati, ma saranno proposti in una delle prossime versioni come opzione.

Gli sviluppatori TCMalloc (nuovo tcmalloc) hanno rifiutato di essere accettati cambia, citando una significativa riduzione delle prestazioni e la necessità di aggiungere test estesi per garantire che tutto funzioni correttamente. I test eseguiti dagli ingegneri di Checkpoint hanno mostrato che il metodo Safe-Linking non comporta un consumo di memoria aggiuntivo, mentre le prestazioni durante le operazioni con l'heap diminuiscono in media solo dello 0,02%, e nel peggiore dei casi del 1,5% (a titolo di confronto, i costi associati al metodo utilizzato in Chromium sono valutati come «meno del 2%»). L'abilitazione
Safe-Linking porta all'esecuzione di 2-3 istruzioni assembler aggiuntive ad ogni chiamata di free() e 3-4 istruzioni ad ogni chiamata di malloc(). Non è necessario eseguire fasi di inizializzazione e generazione di valori casuali.

Checkpoint ha proposto una tecnica di protezione chiamata Safe-Linking, che rende più difficile sfruttare le vulnerabilità.

Safe-Linking può essere utilizzato non solo per aumentare la sicurezza di diverse implementazioni della heap, ma anche per aggiungere strumenti di controllo dell'integrità a qualsiasi struttura dati che utilizzi liste collegate di puntatori, collocati a fianco dei buffer stessi. Il metodo è molto semplice da implementare e richiede solo l'aggiunta di un macro e il suo utilizzo sui puntatori al prossimo blocco nel codice (ad esempio, per Glibc cambia solo poche righe di codice). Il metodo si riduce ai seguenti cambiamenti:

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

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

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

L'essenza del metodo sta nell'applicazione di dati casuali dal meccanismo di randomizzazione degli indirizzi ASLR (mmap_base) per proteggere liste collegate, come Fast-Bins e TCache. Prima di applicare al valore del puntatore al prossimo elemento nella lista, viene eseguita una trasformazione tramite maschera e un controllo sull'allineamento rispetto ai confini della pagina di memoria. Il puntatore viene sostituito dal risultato dell'operazione «(L >> PAGE_SHIFT) XOR (P)», dove P è il valore del puntatore e L è la posizione in memoria in cui è memorizzato questo puntatore.

Checkpoint ha proposto una tecnica di protezione chiamata Safe-Linking, che rende più difficile sfruttare le vulnerabilità.

Quando utilizzato nel sistema ASLR (Address Space Layout Randomization) parte dei bit L con l'indirizzo di base dell'heap contiene valori casuali, che vengono utilizzati come chiave per la codifica di P (estratti tramite un'operazione di shift di 12 bit per pagine da 4096 byte). Questa manovra riduce il rischio di cattura del puntatore in un exploit, poiché il puntatore non è conservato nella sua forma originale e per sostituirlo è necessario conoscere la posizione dell'heap. Inoltre, nel codice della patch è presente anche un controllo di allineamento del blocco, che impedisce all'attaccante di sostituire il puntatore con un valore non allineato e richiede la conoscenza del numero di bit utilizzati per l'allineamento, il che su sistemi a 64 bit consente di bloccare 15 tentativi su 16 di attacco, non considerando l'allineamento.

Il metodo è efficace per proteggere da attacchi che utilizzano la parziale sovrascrittura dei puntatori (modifica dei byte inferiori), la completa riscrittura dei puntatori (reindirizzamento al codice dell'attaccante) e il cambio di posizione della lista a un indirizzo non allineato. Come esempio, è stato dimostrato che l'applicazione di Safe-Linking in malloc potrebbe bloccare l'exploitation recentemente. identificato dallo stesso ricercatore delle vulnerabilità CVE-2020-6007 nello smart lighting Philips Hue Bridge, causato da un buffer overflow e che consente di prendere il controllo del dispositivo.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster