Aprenda a Ganhar Dinheiro do seu Jeito na Internet!

O software OEM oferece mais de 100 milhões de PCs / laptops Dell (executando o Windows) …

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):

memória física

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):

memória física

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):

  1. LenovoInfo.dll
  2. AlienFX.dll
  3. atiadlxx.dll
  4. 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:

  1. O nome de usuário que o executou.
  2. O nome do arquivo DLL.

memória física

A DLL foi carregado e executado como SYSTEM quando o renomeamos com os seguintes nomes:

  1. LenovoInfo.dll
  2. 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:

memória física

Como você pode ver na captura de tela, existem duas causas principais para a vulnerabilidade:

  1. 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.
  2. 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:

memória física

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:

Computadores Dell

Agora vamos carregar nossa DLL não assinada usando a vulnerabilidade e gravar a saída em um arquivo txt:

Computadores Dell

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:

  1. Ignorar a lista de permissões do aplicativo
  2. 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:

  1. Explorar a vulnerabilidade para obter escalação de privilégios e executar como SYSTEM
  2. Use o driver pcdsrvc_x64.pkms que é assinado e carregado
  3. 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.
  4. 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.