O que é o Stack Clash e o que posso fazer sobre isso?

27

Eu ouvi falar de uma nova vulnerabilidade chamada Stack Clash, que aparentemente afeta vários sistemas semelhantes ao Unix (não apenas Linux, mas também os BSDs, Solaris).

  • O que é isso? Como um bug multi-OS aconteceu?
  • Como protejo meus sistemas?
muru
fonte

Respostas:

29

O Stack Clash é uma exploração baseada em uma técnica bastante antiga. A memória usada por um processo é dividida em duas regiões - a pilha e a pilha . Geralmente se imagina a pilha crescendo para baixo e a pilha crescendo para cima. O que acontece quando um cresce o suficiente para colidir com o outro? De maneira mais geral, o que acontece quando a pilha cresce o suficiente para invadir espaços de memória não relacionados? A vulnerabilidade original tem 12 anos e os desenvolvedores do kernel Linux a corrigiram temporariamente usando uma página de proteção . No entanto, os pesquisadores da Qualys conseguiram explorar isso, apesar da página de guarda.

A Ars Technica informa :

As vulnerabilidades do Stack Clash lentamente ganharam amplo conhecimento, primeiro em 2005 com as descobertas do pesquisador de segurança Gaël Delalleau e cinco anos depois com o lançamento da vulnerabilidade do Linux pelo pesquisador Rafal Wojtczuk. Os desenvolvedores do Linux introduziram uma proteção destinada a evitar conflitos de pilha, mas as pesquisas de hoje demonstram que é relativamente fácil para os invasores contornar essa medida.

O principal ataque de prova de conceito desenvolvido pela Qualys explora uma vulnerabilidade indexada como CVE-2017-1000364. Os pesquisadores da Qualys também desenvolveram ataques que usam o Stack Clash para explorar vulnerabilidades separadas, incluindo o CVE-2017-1000365 e o CVE-2017-1000367. Por exemplo, quando combinado com o CVE-2017-1000367, uma falha recentemente corrigida no Sudo também descoberta pela Qualys, os usuários locais podem explorar o Sudo para obter privilégios de root completos em uma variedade muito maior de sistemas operacionais. Até o momento, a Qualys não conseguiu fazer as explorações executar remotamente o código. O único aplicativo remoto que eles investigaram foi o servidor de correio Exim, que por coincidência se mostrou inexplorável. Qualys disse que não pode descartar a possibilidade de tais explorações remotas de execução de código. A Qualys disse que lançará as explorações de prova de conceito em uma data posterior,

[...] Muito mais informações estão disponíveis neste detalhado conselho técnico da Qualys e nesta análise técnica da grsecurity .

Citando o artigo do LWN sobre a correção original de 2010:

Como o Linux não separa a pilha de processos e as páginas de heap, é possível substituir uma página de pilha em uma página de heap adjacente. Isso significa que uma pilha suficientemente profunda (de uma chamada recursiva, por exemplo) pode acabar usando a memória na pilha. Um programa que pode gravar nessa página de pilha (por exemplo, um cliente X) pode manipular o endereço de retorno de uma das chamadas para ir para um local de sua escolha. Isso significa que o cliente pode fazer com que o servidor execute o código de sua escolha - execução arbitrária de código - que pode ser aproveitada para obter privilégios de root.

A descrição acima se aplica a vários kernels do tipo Unix.

Embora a Ars Technica observe uma solução temporária mencionada no relatório Qualys ("defina o  RLIMIT STACK rígido e o RLIMIT_AS  dos  usuários locais  e  serviços remotos  com um valor baixo"), que isso não necessariamente protege contra essa exploração . A única saída segura atualmente é atualizar. De acordo com a análise grsecurity:

Deve ficar claro que as tentativas apenas do kernel para resolver esse problema sempre serão necessariamente incompletas, pois o problema real está na falta de análise de pilha. Como a solução real alternativa depende da reconstrução de todas as áreas de usuários, essa é provavelmente a única solução viável no futuro próximo.

O melhor que podemos fazer agora é atualizar o kernel para uma versão corrigida.

A exploração de 2010 usou o servidor X, este usou o sudo, o próximo pode ser um dos inúmeros programas da área de usuários que, em algum momento, são executados sob privilégios elevados.

A Qualys ainda não publicou nenhum código de prova de conceito para explorações (eles planejam fazer isso posteriormente).


Existem vários Avisos de segurança do Ubuntu associados ao CVE-2017-1000364:

Observe também que o rastreador CVE lista várias combinações de release / kernel como correções pendentes.

Geralmente, a correção mais simples é atualizar seus sistemas para o pacote mais recente do kernel o mais rápido possível.

As versões relevantes do kernel dos USNs (selecionadas usando 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-generic 4.8.0.56.69
linux-image-4.8.0-56-generic 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-genérico 4.4.0-81.104
linux-image-powerpc64-smp-lts-vívido 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-generic 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-genérico 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-genérico 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-virtual 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-generic 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-generic 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-generic 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-generic 3.2.0-128.173
Ubuntu 12.04 LTS:
linux-image-3.13.0-121-genérico 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 ~ specific1

Sudo

O bug do sudo mencionado acima é coberto pelo USN-3304-1 , de 30 de maio de 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
muru
fonte
Então, em resumo, ele já deve ser corrigido na maioria das versões do Ubuntu que ainda são suportadas, basta uma atualização?
CJCombrink
@TheBadger no, conforme observado pelo rastreador CVE, algumas combinações ainda estão listadas como pendentes de liberação. Suponho que mais USNs serão publicados à medida que as correções forem lançadas.
Muru
4
Mas, sim, a atualização deve ser suficiente, não é necessária configuração adicional.
Muru
Se está afetando, como verificar?
daisy
1
@immibis de acordo com a seguinte artigo são, mas não implementação existente não funcionar corretamente: StackGuard bug explicação pela Qualys Research Labs
Igor B
1

Como um bug multi-OS aconteceu?

Para abordar esta parte da sua pergunta especificamente:

Esse problema ocorre devido ao uso de um espaço de endereço compartilhado para heap (que cresce para cima) e pilha (que aumenta para baixo).

Esse design é comum em muitos sistemas, portanto, por que muitos sistemas são vulneráveis ​​à mesma classe de vulnerabilidade.

user7761803
fonte