Che cos'è Stack Clash e cosa posso fare al riguardo?


27

Ho sentito parlare di una nuova vulnerabilità chiamata Stack Clash che apparentemente riguarda più sistemi simili a Unix (non solo Linux, ma anche i BSD, anche Solaris).

  • Che cos'è? Come è nato un bug multi-OS?
  • Come posso proteggere i miei sistemi?

Risposte:


29

Stack Clash è un exploit basato su una tecnica abbastanza vecchia. La memoria utilizzata da un processo è divisa in due regioni: lo stack e l'heap . Uno generalmente immagina che la pila cresca verso il basso e che il mucchio cresca verso l'alto. Cosa succede quando l'uno o l'altro cresce abbastanza da scontrarsi con l'altro? Più in generale, cosa succede quando lo stack cresce abbastanza da invadere spazi di memoria non correlati? La vulnerabilità originale ha 12 anni e gli sviluppatori del kernel Linux l'hanno risolta temporaneamente usando una pagina di guardia . Tuttavia, i ricercatori di Qualys sono riusciti a sfruttarlo nonostante la pagina di guardia.

Ars Technica riferisce :

Le vulnerabilità di Stack Clash hanno lentamente guadagnato una consapevolezza diffusa, prima nel 2005 con le scoperte del ricercatore di sicurezza Gaël Delalleau e cinque anni dopo con il rilascio di una vulnerabilità di Linux da parte del ricercatore Rafal Wojtczuk. Gli sviluppatori Linux hanno introdotto una protezione che aveva lo scopo di prevenire gli scontri con lo stack, ma la ricerca odierna dimostra che è relativamente facile per gli aggressori ignorare quella misura.

L'attacco primario di prova sviluppato da Qualys sfrutta una vulnerabilità indicizzata come CVE-2017-1000364. I ricercatori di Qualys hanno inoltre sviluppato attacchi che utilizzano Stack Clash per sfruttare vulnerabilità separate, tra cui CVE-2017-1000365 e CVE-2017-1000367. Ad esempio, se combinato con CVE-2017-1000367, un difetto recentemente risolto in Sudo scoperto anche da Qualys, gli utenti locali possono sfruttare Sudo per ottenere i privilegi di root completi su una gamma molto più ampia di sistemi operativi. Finora Qualys non è stato in grado di eseguire il codice da remoto. L'unica applicazione remota su cui avevano indagato era il server di posta Exim, che per coincidenza si è rivelato essere inesplicabile. Qualys ha affermato di non poter escludere la possibilità che esistano tali exploit di esecuzione remota di codice. Qualys ha dichiarato che rilascerà gli exploit di proof of concept in un secondo momento,

[...] Molte più informazioni sono disponibili in questa consulenza tecnica dettagliata di Qualys e in questa analisi tecnica di grsecurity .

Citando l'articolo LWN sulla correzione originale del 2010:

Poiché Linux non separa le pagine stack e heap di processo, è possibile eseguire l'overrunning di una pagina stack in una pagina heap adiacente. Ciò significa che uno stack sufficientemente profondo (ad esempio da una chiamata ricorsiva) potrebbe finire per usare la memoria nell'heap. Un programma in grado di scrivere su quella pagina heap (ad esempio un client X) potrebbe quindi manipolare l'indirizzo di ritorno di una delle chiamate per passare a un luogo di sua scelta. Ciò significa che il client può far sì che il server esegua il codice di sua scelta (esecuzione di codice arbitrario) che può essere sfruttato per ottenere i privilegi di root.

La descrizione sopra si applica a vari kernel simili a Unix.

Mentre Ars Technica rileva una soluzione temporanea menzionata nel rapporto Qualys ("imposta il valore  RLIMIT STACK e RLIMIT_AS  degli  utenti locali  e dei  servizi remoti  su un valore basso"), va notato che ciò non protegge necessariamente da questo exploit . Al momento l'unica via di uscita sicura è l'aggiornamento. Secondo l'analisi grsecurity:

Dovrebbe essere chiaro che i tentativi del solo kernel di risolvere questo problema saranno necessariamente sempre incompleti, poiché il vero problema risiede nella mancanza di stack stacking. Poiché la vera soluzione alternativa dipende dalla ricostruzione di tutti gli utenti, questa è probabilmente l'unica soluzione possibile per il prossimo futuro.

Il meglio che possiamo fare ora è aggiornare il kernel a una versione con patch.

L'exploit del 2010 ha utilizzato il server X, questo ha usato sudo, il prossimo potrebbe essere uno qualsiasi di una moltitudine di programmi userland che, a un certo punto, funzionano con privilegi elevati.

Qualys non ha ancora pubblicato alcun codice di prova del concetto di exploit (hanno in programma di farlo in un secondo momento).


Esistono più avvisi di sicurezza di Ubuntu associati a CVE-2017-1000364:

Si noti inoltre che il tracker CVE elenca diverse combinazioni release / kernel come correzioni in sospeso.

Generalmente, la soluzione più semplice è aggiornare i sistemi all'ultimo pacchetto del kernel al più presto.

Le versioni del kernel pertinenti dagli USN (selezionate utilizzando for i in {24..35}; curl -s https://www.ubuntu.com/usn/usn-33$i-1/ | pup 'dl:nth-last-of-type(1)'):

Ubuntu 17.04:
linux-image-4.10.0-24-lowlatency 4.10.0-24.28
linux-image-generic-lpae 4.10.0.24.26
linux-image-generic 4.10.0.24.26
linux-image-4.10.0-24-generic-lpae 4.10.0-24.28
linux-image-4.10.0-24-generic 4.10.0-24.28
linux-image-lowlatency 4.10.0.24.26
Ubuntu 17.04:
linux-image-4.10.0-1008-raspi2 4.10.0-1008.11
linux-image-raspi2 4.10.0.1008.10
Ubuntu 16.10:
linux-image-powerpc-smp 4.8.0.56.69
linux-image-powerpc-e500mc 4.8.0.56.69
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61
linux-image-4.8.0-56-lowlatency 4.8.0-56.61
linux-image-generico 4.8.0.56.69
linux-image-4.8.0-56-generico 4.8.0-56.61
linux-image-powerpc64-emb 4.8.0.56.69
linux-image-virtual 4.8.0.56.69
linux-image-powerpc64-smp 4.8.0.56.69
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61
linux-image-generic-lpae 4.8.0.56.69
linux-image-lowlatency 4.8.0.56.69
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61
Ubuntu 16.10:
linux-image-4.8.0-1040-raspi2 4.8.0-1040.44
linux-image-raspi2 4.8.0.1040.44
Ubuntu 16.04 LTS:
linux-image-powerpc64-smp-lts-utopic 4.4.0.81.87
linux-image-generic- lts - wily 4.4.0.81.87
linux-image-generic- lts - utopic 4.4.0.81.87
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104
linux-image-powerpc64-emb- lts -vivid 4.4.0.81.87
linux-image-powerpc-e500mc 4.4.0.81.87
linux-image-generic-lpae-lts-xenial 4.4.0.81.87
linux-image-generic-lpae-lts-utopic 4.4.0.81.87
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104
linux-image-powerpc-e500mc-lts-wily 4.4.0.81.87
linux-image-4.4.0-81-powerpc-e500mc 4.4.0-81.104
linux-image-generic-lpae-lts-wily 4.4.0.81.87
linux-image-virtual- lts -vivid 4.4.0.81.87
linux-image-virtual- lts - utopic 4.4.0.81.87
linux-image-virtual 4.4.0.81.87
linux-image-powerpc64-emb-lts-wily 4.4.0.81.87
linux-image-lowlatency-lts-vivid 4.4.0.81.87
linux-image-powerpc-e500mc-lts-vivid 4.4.0.81.87
linux-image-powerpc64-emb 4.4.0.81.87
linux-image-powerpc-smp-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-generico 4.4.0-81.104
linux-image-powerpc64-smp- lts -vivid 4.4.0.81.87
linux-image-lowlatency-lts-wily 4.4.0.81.87
linux-image-4.4.0-81-lowlatency 4.4.0-81.104
linux-image-generico 4.4.0.81.87
linux-image-lowlatency-lts-xenial 4.4.0.81.87
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.87
linux-image-powerpc64-emb-lts-utopic 4.4.0.81.87
linux-image-generic-lts-xenial 4.4.0.81.87
linux-image-generic- lts -vivid 4.4.0.81.87
linux-image-powerpc-e500mc-lts-utopic 4.4.0.81.87
linux-image-powerpc-smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104
linux-image-generic-lpae-lts-vivid 4.4.0.81.87
linux-image-generic-lpae 4.4.0.81.87
linux-image-powerpc64-smp-lts-wily 4.4.0.81.87
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.87
linux-image-powerpc-smp-lts-wily 4.4.0.81.87
linux-image-virtual- lts - wily 4.4.0.81.87
linux-image-powerpc64-smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104
linux-image-powerpc-smp-lts-utopic 4.4.0.81.87
linux-image-powerpc-smp- lts -vivid 4.4.0.81.87
linux-image-lowlatency 4.4.0.81.87
linux-image-virtual-lts-xenial 4.4.0.81.87
linux-image-lowlatency-lts-utopic 4.4.0.81.87
Ubuntu 16.04 LTS:
linux-image-4.4.0-1016-gke 4.4.0-1016.16
Ubuntu 16.04 LTS:
linux-image-snapdragon 4.4.0.1061.54
linux-image-4.4.0-1061-snapdragon 4.4.0-1061.66
Ubuntu 16.04 LTS:
linux-image-4.4.0-1020-aws 4.4.0-1020.29
Ubuntu 16.04 LTS:
linux-image-raspi2 4.4.0.1059.60
linux-image-4.4.0-1059-raspi2 4.4.0-1059.67
Ubuntu 16.04 LTS:
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-lowlatency 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-generic 4.8.0-56.61 ~ 16.04.1
linux-image-generic-hwe-16.04 4.8.0.56.27
linux-image-lowlatency-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61 ~ 16.04.1
linux-image-virtual-hwe-16.04 4.8.0.56.27
linux-image-generic-lpae-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61 ~ 16.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-smp-lts-xenial 4.4.0.81.66
linux-image-lowlatency-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-PowerPC e500mc 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-lowlatency 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lpae-lts-xenial 4.4.0.81.66
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-generico 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lts-xenial 4.4.0.81.66
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.66
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.66
linux-image-virtual-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104 ~ 14.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-e500mc 3.13.0.121.131
linux-image-lowlatency-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-emb 3.13.0-121.170
linux-image-generic-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc-smp 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500mc 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500 3.13.0-121.170
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170
linux-image-generic-lts-quantal 3.13.0.121.131
linux-image-virtuale 3.13.0.121.131
linux-image-PowerPC e500 3.13.0.121.131
linux-image-generic- lts -trusty 3.13.0.121.131
linux-image-3.13.0-121-generico 3.13.0-121.170
linux-image-omap 3.13.0.121.131
linux-image-powerpc64-emb 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-smp 3.13.0-121.170
linux-image-generico 3.13.0.121.131
linux-image-highbank 3.13.0.121.131
linux-image-generic- lts -saucy 3.13.0.121.131
linux-image-powerpc-smp 3.13.0.121.131
linux-image-3.13.0-121-lowlatency 3.13.0-121.170
linux-image-generic-lpae-lts-saucy 3.13.0.121.131
linux-image-generic- lts -raring 3.13.0.121.131
linux-image-powerpc64-smp 3.13.0.121.131
linux-image-generic-lpae-lts-trusty 3.13.0.121.131
linux-image-generic-lpae 3.13.0.121.131
linux-image-lowlatency 3.13.0.121.131
Ubuntu 12.04 ESM:
linux-image-powerpc-smp 3.2.0.128.142
linux-image-3.2.0-128-virtual 3.2.0-128.173
linux-image-3.2.0-128-generic-pae 3.2.0-128.173
linux-image-generico 3.2.0.128.142
linux-image-generic-pae 3.2.0.128.142
linux-image-highbank 3.2.0.128.142
linux-image-3.2.0-128-highbank 3.2.0-128.173
linux-image-3.2.0-128-powerpc-smp 3.2.0-128.173
linux-image-virtual 3.2.0.128.142
linux-image-powerpc64-smp 3.2.0.128.142
linux-image-3.2.0-128-omap 3.2.0-128.173
linux-image-3.2.0-128-powerpc64-smp 3.2.0-128.173
linux-image-omap 3.2.0.128.142
linux-image-3.2.0-128-generico 3.2.0-128.173
Ubuntu 12.04 LTS:
linux-image-3.13.0-121-generico 3.13.0-121.170 ~ preciso1
linux-image-generic-lpae-lts-trusty 3.13.0.121.112
linux-image-generic- lts -trusty 3.13.0.121.112
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170 ~ precise1

sudo

Il summenzionato bug sudo è coperto da USN-3304-1 , dal 30 maggio 2017:

Ubuntu 17.04:
sudo-ldap 1.8.19p1-1ubuntu1.1
sudo 1.8.19p1-1ubuntu1.1
Ubuntu 16.10:
sudo-ldap 1.8.16-0ubuntu3.2
sudo 1.8.16-0ubuntu3.2
Ubuntu 16.04 LTS:
sudo-ldap 1.8.16-0ubuntu1.4
sudo 1.8.16-0ubuntu1.4
Ubuntu 14.04 LTS:
sudo-ldap 1.8.9p5-1ubuntu1.4
sudo 1.8.9p5-1ubuntu1.4

Quindi, in sintesi, dovrebbe già essere risolto nella maggior parte delle versioni di Ubuntu che sono ancora supportate, basta aggiornare?
CJCombrink,

@TheBadger no, come notato dal tracker CVE, alcune combinazioni sono ancora elencate come release in sospeso. Suppongo che verranno pubblicati più USN man mano che vengono rilasciate le correzioni.
Muru,

4
Sì, l'aggiornamento dovrebbe essere sufficiente, non è necessaria una configurazione aggiuntiva.
Muru,

Se sta interessando, come verificare?
margherita,

1
@immibis in base al seguente articolo, ma l'implementazione esistente non funziona correttamente: spiegazione dei bug di Stackguard da Qualys Research Labs
Igor B

1

Come è nato un bug multi-OS?

Per affrontare specificamente questa parte della tua domanda:

Questo problema sorge a causa dell'uso di uno spazio di indirizzi condiviso per heap (che cresce verso l'alto) e stack (che cresce verso il basso).

Questo design è comune a molti sistemi, quindi perché molti sistemi sono vulnerabili alla stessa classe di vulnerabilità.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.