Estás a ler: O software OEM oferece mais de 100 milhões de PCs / laptops Dell (executando o Windows) …
Introdução
No artigo a seguir, apresentaremos uma nova vulnerabilidade no SupportAssist da Dell[1] software descoberto pelo Safebreach Labs.
ATUALIZAÇÃO: Depois de enviarmos os detalhes à Dell, descobrimos que essa vulnerabilidade não afeta apenas o Dell SupportAssist, mas também mais OEMs que estão usando uma versão renomeada dos componentes do PC-Doctor. O PC-Doctor não queria compartilhar a lista desses OEMs. Leia abaixo para descobrir se o seu laptop possui o mesmo software vulnerável instalado.
Demonstraremos como explorar essa vulnerabilidade para carregar um DLL não assinada arbitrária em um serviço que é executado como SYSTEM, alcançando escalação e persistência de privilégios.
Além disso, apresentaremos alguns dos possíveis cenários maliciosos aos quais a vulnerabilidade e o software SupportAssist podem levar, como a leitura de memória física (a Prova de conceito está incluída) usando o driver assinado da Dell (que faz parte do software SupportAssist).
Dell SupportAssist
Dell SupportAssist[1] é um software pré-instalado na maioria dos computadores Dell. O objetivo do software é verificar proativamente a integridade do hardware e do software do sistema, que, como você provavelmente adivinhou, às vezes requer altas permissões. Para executar com altas permissões, um driver assinado é instalado, além de vários serviços que estão sendo executados como SYSTEM.
PC-Doctor
Os componentes que permitem ao SupportAssist acessar hardware de baixo nível (como memória física, PCI e SMBios) foram escritos pelo PC-Doctor[2] empresa, que desenvolve software de diagnóstico de hardware.
Neste artigo, focaremos nos componentes do PC-Doctor para descrever a vulnerabilidade e explorá-la para obter acesso de baixo nível (por exemplo, a memória física).
Vulnerabilidade
Descoberta
Visamos o serviço “Dell Hardware Support”, supondo que ele tenha algum tipo de acesso ao hardware do PC (que requer altas permissões) e é isso que queríamos alcançar, além da escalada de privilégios.
Depois que o serviço é iniciado, ele executa DSAPI.exe que executa pcdrwi.exe (ambos executados como SYSTEM):
Em seguida, o serviço executa vários executáveis do PC-Doctor que coletam informações sobre o SO e o hardware do computador. Esses executáveis são realmente arquivos PE comuns, mas possuem uma extensão diferente – “p5x”.
Todos esses executáveis carregam bibliotecas DLL muito interessantes, capazes de coletar informações de diferentes fontes (software e hardware). Após o carregamento, observamos o seguinte no ProcMon (Observação: filtramos os eventos não relevantes da captura de tela):
3 dos executáveis do p5x estão tentando encontrar os seguintes arquivos DLL no diretório c: python27 (que está na minha variável de ambiente PATH):
- LenovoInfo.dll
- AlienFX.dll
- atiadlxx.dll
- atiadlxy.dll
Parece uma vulnerabilidade de seqüestro de DLL.
Na minha VM, o c: python27 (que está na minha variável de ambiente PATH) possui uma ACL que permite a qualquer usuário autenticado gravar arquivos nela, o que facilita ainda mais a escalação de privilégios e permite que um usuário comum grave o arquivo DLL ausente e obtenha a execução de código como SYSTEM.
Para testar isso, compilamos uma DLL (não assinada) que escreve o seguinte no nome do arquivo de um arquivo txt:
- O nome de usuário que o executou.
- O nome do arquivo DLL.
A DLL foi carregado e executado como SYSTEM quando o renomeamos com os seguintes nomes:
- LenovoInfo.dll
- atiadlxx.dll
Causa raiz
Os módulos p5x (e a maioria do código PC-Doctor) estão usando uma biblioteca de utilitários chamada Common.dll, que fornece muitas funcionalidades, incluindo a opção de carregar um arquivo DLL:
Como você pode ver na captura de tela, existem duas causas principais para a vulnerabilidade:
- A falta de carregamento seguro da DLL. O código está usando LoadLibraryW, ao invés de usar LoadLibraryExW que permite definir a ordem de pesquisa usando determinados sinalizadores, como LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR que pesquisa a DLL apenas em sua própria pasta, evitando o cenário de pesquisar a DLL na variável PATH.
- Nenhuma validação de certificado digital é feita no binário. O programa não valida se a DLL que ele carregará está assinada. Portanto, ele carregará uma DLL não assinada arbitrária sem qualquer hesitação.
Exploração (R / W na memória física)
Driver assinado pelo PC-Doctor
Como mencionado acima, o SupportAssist está usando um driver assinado pelo PC-Doctor chamado pcdsrvc_x64.pkms, para acessar regiões de baixo nível.
Recentemente, um pesquisador de segurança chamado Bryan Alexander encontrou uma vulnerabilidade [3] nele, que permitia a um usuário não administrador enviar um IOCTL e acessar o hardware. A maior parte da lógica do motorista é descrita em seu blog.
PoC – Leitura da memória física
Entre as bibliotecas interessantes que são carregadas nos executáveis do PC-Doctor .p5x, podemos encontrar SysSpace.dll que fornece uma excelente função de wrapper para a funcionalidade de leitura da memória física, chamada PhysicalMemory :: read.
A função abre um identificador para o driver e envia o IOCTL relevante para o driver, então tudo o que precisamos fazer é descobrir quais parâmetros precisamos enviar para a função.
Procuramos uma DLL que importe a função PhysicalMemory :: read e a use, para que possamos entender rapidamente como usar essa função. Usamos dumpbin para esse fim.
Então, abrimos o Quip.dll usando o IDA e extraímos a implementação que chama a função:
Tudo o que precisamos fazer é carregar o SysSpace.dll, definir o construtor do PhysicalMemory e chamar a função PhysicalMemory :: read.
Vamos ler algum endereço arbitrário da memória física.
Primeiro de tudo, vamos verificar o conteúdo desse endereço físico com o WinDbg Kernel Debugger:
Agora vamos carregar nossa DLL não assinada usando a vulnerabilidade e gravar a saída em um arquivo txt:
Como você pode ver, conseguimos imprimir facilmente o conteúdo de um endereço de memória física arbitrário, usando a vulnerabilidade.
Potencial uso malicioso e impacto
De acordo com o site da Dell, o SupportAssist está pré-instalado na maioria dos dispositivos Dell executando o Windows, o que significa que, enquanto o software não estiver corrigido, essa vulnerabilidade provavelmente afeta muitos usuários da Dell.
Abaixo, mostramos dois exemplos dos possíveis usos mal-intencionados que um invasor pode obter com a vulnerabilidade que encontramos (alguns deles usarão o driver pcdsrvc_x64.pkms do SupportAssist).
Execução assinada e desvio da lista de permissões
A vulnerabilidade fornece a capacidade de ser carregado e executado por um serviço assinado. Essa capacidade pode ser abusada por um invasor para diferentes finalidades, como execução e evasão, por exemplo:
- Ignorar a lista de permissões do aplicativo
- Ignorar validação de assinatura
Desvio DSE
Para carregar um driver no modo kernel no Windows 10, ele deve ser assinado digitalmente[4] por um fornecedor autorizado pela Microsoft. Para impor isso, a Microsoft implementou um mecanismo chamado Aplicação de assinatura de motorista (DSE) que trava o sistema operacional se um driver no modo kernel não assinado estiver tentando ser carregado.
Um invasor pode obter primitivas R / W, fornecidas pelo driver pcdsrvc_x64.pkms, que é um driver no modo kernel já carregado – o invasor pode não precisar carregar um driver sozinho, porque o driver carregado já oferece um controle considerável.
Para alcançar as primitivas R / W, o atacante pode:
- Explorar a vulnerabilidade para obter escalação de privilégios e executar como SYSTEM
- Use o driver pcdsrvc_x64.pkms que é assinado e carregado
- Envie os IOCTLs relevantes (ou use as funções de invólucro que a Dell fornece na DLL como fizemos acima) para ler / gravar diretamente a memória física.
- O invasor agora terá uma primitiva R / W completa, dentro do contexto de um driver no modo kernel (não é necessário carregar um driver adicional, já temos um carregado, portanto o DSE não é relevante).
Linha do tempo
- 29/04/19 – Vulnerabilidade relatada
- 29/04/19 – Resposta inicial da Dell agendada para 7 de maio de 2019
- 05/08/19 – Dell confirmou a vulnerabilidade
- 21/05/19 – Dell enviou o problema ao PC-Doctor
- 21/05/19 – O PC-Doctor agendou uma correção para ser lançada em meados de junho, pois afeta não apenas a Dell, mas vários OEMs.
- 22/05/19 – CVE-2019-12280 Atribuído por PC-Doctor
- 12/06/19 – Data de divulgação prorrogada até 19 de junho
- 19/06/2019 – Vulnerabilidade divulgada.
Referências
[1] http://www.dell.com/support/contents/us/en/04/article/product-support/self-support-knowledgebase/software-and-downloads/supportassist [2] http://www.pc-doctor.com/ [3] https://hatriot.github.io/blog/2018/05/17/dell-supportassist-local-privilege-escalation [4] https://docs.microsoft.com/en-us/windows-hardware/drivers/install/kernel-mode-code-signing-policy–windows-vista-and-later-
PCtg.net é o lugar perfeito para encontrar as últimas notícias e análises sobre gadgets e aplicativos de tecnologia, bem como dicas e truques sobre como tirar o máximo proveito de sua tecnologia.