Checkpoint ha proposto la tecnica di protezione Safe-Linking, rendendo più difficile lo sfruttamento delle vulnerabilità

Compagnia del punto di controllo presentato Meccanismo di protezione Safe-Linking, che rende difficile la creazione di exploit che manipolino la definizione o la modifica dei puntatori ai buffer allocati durante l'esecuzione di una chiamata malloc. Safe-Linking non blocca completamente la possibilità di sfruttare le vulnerabilità, ma con un sovraccarico minimo complica notevolmente la creazione di alcune categorie di exploit, poiché oltre allo sfruttamento del buffer overflow, è necessario trovare un'altra vulnerabilità che causa la perdita di informazioni su il posizionamento dell'heap in memoria.

Sono state preparate patch che implementano Safe-Linking per Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) e Google TCMalloc, e sono proposte anche per l'aggiornamento della protezione in Chromium (in
Dal 2012, Chromium ha già integrato la tecnica di protezione MaskPtr volta a risolvere lo stesso problema, ma la soluzione di Checkpoint dimostra prestazioni più elevate).
Le patch suggerite sono già state approvate per la distribuzione nella versione di agosto Glibc 3.32 e il collegamento sicuro sarà abilitato per impostazione predefinita. uClibc-NG supporta il collegamento sicuro entrato incluso nella versione 1.0.33 ed è abilitato per impostazione predefinita. Modifiche in gperftools (vecchio tcmalloc) accettato, ma verrà offerto come opzione in una versione futura.

Sviluppatori TCMalloc (nuovo tcmalloc) ha rifiutato di accettare cambiare, citando un grave degrado delle prestazioni e la necessità di aggiungere test approfonditi per verificare regolarmente che tutto funzioni come previsto. I test condotti dagli ingegneri di Checkpoint hanno dimostrato che il metodo Safe-Linking non comporta un ulteriore consumo di memoria e che le prestazioni durante l'esecuzione di operazioni heap si riducono in media solo dello 0.02% e, nel peggiore dei casi, dell'1.5% (per confronto, il sovraccarico in il metodo utilizzato in Chromium sono stimati come “meno del 2%”). Inclusione
Il collegamento sicuro comporta l'esecuzione di 2-3 istruzioni di assembly aggiuntive ogni volta che viene chiamato free() e 3-4 istruzioni ogni volta che viene chiamato malloc(). Non è necessario eseguire le fasi di inizializzazione e di generazione di valori casuali.

Checkpoint ha proposto la tecnica di protezione Safe-Linking, rendendo più difficile lo sfruttamento delle vulnerabilità

Safe-Linking può essere utilizzato non solo per migliorare la sicurezza di varie implementazioni di heap, ma anche per aggiungere controlli di integrità a qualsiasi struttura di dati che utilizza elenchi di puntatori collegati singolarmente posizionati accanto ai buffer stessi. Il metodo è molto semplice da implementare e richiede solo l'aggiunta di una macro e l'applicazione ai puntatori al blocco successivo nel codice (ad esempio, per Glibc i cambiamenti solo poche righe di codice). Il metodo si riduce alle seguenti modifiche:

+#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 è utilizzare dati casuali dal meccanismo di randomizzazione degli indirizzi ASLR (mmap_base) per proteggere elenchi collegati singolarmente come Fast-Bins e TCache. Prima di applicare al valore un puntatore all'elemento successivo nell'elenco, esegue una conversione della maschera e controlla l'allineamento della pagina. Il puntatore viene sostituito dal risultato dell'operazione "(L >> PAGE_SHIFT) XOR (P)", dove P è il valore del puntatore e L è la posizione di memoria in cui è memorizzato il puntatore.

Checkpoint ha proposto la tecnica di protezione Safe-Linking, rendendo più difficile lo sfruttamento delle vulnerabilità

Se utilizzato nel sistema ASLR (Address Space Layout Randomization) parte dei bit L con l'indirizzo base dell'heap contiene valori casuali che vengono utilizzati come chiave per codificare P (estratti da un'operazione di spostamento a 12 bit per pagine da 4096 byte). Questa manipolazione riduce il rischio di dirottamento del puntatore in un exploit, poiché il puntatore non viene archiviato nella sua forma originale e la sua sostituzione richiede la conoscenza dell'allocazione dell'heap. Inoltre, il codice patch contiene anche un controllo aggiuntivo per l'allineamento dei blocchi, che non consente a un utente malintenzionato di sostituire un puntatore con un valore non allineato e richiede la conoscenza del numero di bit allineati, che sui sistemi a 64 bit consente inoltre il blocco 15 tentativi di attacco su 16 che non tengono conto dell'allineamento.

Il metodo è efficace per la protezione dagli attacchi che utilizzano la riscrittura parziale del puntatore (modifica dei byte bassi), la riscrittura completa del puntatore (reindirizzamento al codice dell'aggressore) e la modifica della posizione dell'elenco in un indirizzo non allineato. Ad esempio, è dimostrato che l'uso di Safe-Linking in malloc consentirebbe di bloccare lo sfruttamento recente identificato dagli stessi ricercatori sulle vulnerabilità CVE-2020-6007 nella luce intelligente Philips Hue Bridge, causata da un buffer overflow e che consente di ottenere il controllo del dispositivo.

Fonte: opennet.ru

Aggiungi un commento