Análise e Exploração de Vulnerabilidades 0day no Sistema Windows da Microsoft
Recentemente, o patch de segurança lançado pela Microsoft inclui uma vulnerabilidade de elevação de privilégios win32k que está sendo explorada. Esta vulnerabilidade existe principalmente em versões mais antigas do sistema Windows, não podendo ser acionada no Windows 11. Este artigo irá analisar como os atacantes continuam a explorar esse tipo de vulnerabilidade, em um contexto onde a proteção de segurança está constantemente a ser reforçada. O nosso processo de análise foi realizado no ambiente do Windows Server 2016.
Contexto da Vulnerabilidade
A vulnerabilidade 0day refere-se a uma falha de segurança que ainda não foi divulgada e não foi corrigida, semelhante ao conceito de negociação T+0 nos mercados financeiros. Uma vez descoberta, essa vulnerabilidade pode ser explorada maliciosamente sem ser percebida, causando enormes danos.
A vulnerabilidade 0day do sistema Windows descoberta desta vez pode permitir que os atacantes obtenham controle total do sistema. Isso pode resultar em sérias consequências, como vazamento de informações pessoais, falhas no sistema, perda de dados e perdas financeiras. Do ponto de vista do Web3, as chaves privadas dos usuários podem ser roubadas e os ativos digitais transferidos. De uma forma mais ampla, essa vulnerabilidade pode afetar todo o ecossistema do Web3 que opera com base na infraestrutura do Web2.
Análise de Vulnerabilidades
Ao analisar o código do patch, descobrimos que se trata de um problema de contagem de referências de objeto. Os comentários no código win32k anterior mostram que apenas o objeto da janela foi bloqueado, sem bloquear o objeto do menu na janela, o que pode levar a uma referência incorreta do objeto do menu.
Análise adicional revela que, na função xxxEnableMenuItem, o objeto de menu retornado pode ser o menu principal da janela, um submenu ou até mesmo um menu mais profundo. Isso fornece uma ideia para construir um POC.
Implementação POC
Construímos uma estrutura de menu em múltiplas camadas, contendo quatro objetos de menu com relações específicas. Ao configurar cuidadosamente as propriedades e relações desses menus, é possível contornar a detecção da função xxxEnableMenuItem e liberar objetos de menu críticos quando a função retorna. Assim, ao referenciar esse objeto posteriormente, um vulnerabilidade UAF será acionada.
Exploração de vulnerabilidade ( EXP ) implementação
Abordagem geral
Consideramos duas formas de exploração: executar shellcode e explorar primitivas de leitura/escrita para modificar o token. Optámos pela segunda, pois é mais viável em versões mais recentes do Windows. Dividimos todo o processo de exploração em duas etapas: como controlar o valor de cbwndextra através de UAF e como utilizar o cbwndextra controlado para realizar primitivas de leitura/escrita estáveis.
escrita de dados iniciais
Utilizamos o objeto de nome da classe de janela WNDClass para ocupar a memória de objetos de menu que foram liberados. Após analisar vários pontos de escrita possíveis, escolhemos, finalmente, utilizar a operação AND nos flags do objeto na função xxxRedrawWindow para escrever o valor cb-extra da HWNDClass.
layout de memória
Desenhamos um layout de memória composto por três objetos HWND consecutivos, onde o objeto do meio é liberado e ocupado pelo objeto HWNDClass. Os objetos HWND na frente e atrás são utilizados para contornar a detecção e implementar as primitivas de leitura e escrita finais. Através do endereço do manipulador de núcleo vazado, podemos controlar precisamente a disposição desses objetos.
implementação de leitura e escrita de primitivos
Qualquer operação de leitura utiliza a função GetMenuBarInfo, enquanto qualquer operação de escrita utiliza a função SetClassLongPtr. Exceto pela escrita do TOKEN, que depende do objeto de classe da segunda janela, todas as outras operações de escrita utilizam o objeto de classe da primeira janela, implementando-o através de deslocamento.
Resumo
A Microsoft está a tentar reestruturar o código win32k usando Rust, no futuro, tais vulnerabilidades poderão ser totalmente resolvidas em novos sistemas.
O processo de exploração deste tipo de vulnerabilidade é relativamente simples, sendo o principal desafio como controlar a primeira gravação de dados.
A descoberta de vulnerabilidades pode ser atribuída a tecnologias de detecção de cobertura de código mais sofisticadas.
Para a deteção de vulnerabilidades, além de focar nos pontos críticos das funções desencadeadoras, também deve-se monitorizar disposições de memória anormais e operações de leitura e escrita de dados.
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
7 gostos
Recompensa
7
6
Partilhar
Comentar
0/400
DeFiGrayling
· 4h atrás
A Microsoft realmente se superou desta vez -_-
Ver originalResponder0
HackerWhoCares
· 4h atrás
Não é de admirar que o meu computador esteja tão lento!
Ver originalResponder0
ResearchChadButBroke
· 4h atrás
A Microsoft desta vez está arruinada.
Ver originalResponder0
GasWrangler
· 4h atrás
tecnicamente falando, essa falha no layout de memória é suboptimal af
Vulnerabilidade 0day no sistema Windows gera riscos de segurança no Web3 Análise do processo de exploração por especialistas
Análise e Exploração de Vulnerabilidades 0day no Sistema Windows da Microsoft
Recentemente, o patch de segurança lançado pela Microsoft inclui uma vulnerabilidade de elevação de privilégios win32k que está sendo explorada. Esta vulnerabilidade existe principalmente em versões mais antigas do sistema Windows, não podendo ser acionada no Windows 11. Este artigo irá analisar como os atacantes continuam a explorar esse tipo de vulnerabilidade, em um contexto onde a proteção de segurança está constantemente a ser reforçada. O nosso processo de análise foi realizado no ambiente do Windows Server 2016.
Contexto da Vulnerabilidade
A vulnerabilidade 0day refere-se a uma falha de segurança que ainda não foi divulgada e não foi corrigida, semelhante ao conceito de negociação T+0 nos mercados financeiros. Uma vez descoberta, essa vulnerabilidade pode ser explorada maliciosamente sem ser percebida, causando enormes danos.
A vulnerabilidade 0day do sistema Windows descoberta desta vez pode permitir que os atacantes obtenham controle total do sistema. Isso pode resultar em sérias consequências, como vazamento de informações pessoais, falhas no sistema, perda de dados e perdas financeiras. Do ponto de vista do Web3, as chaves privadas dos usuários podem ser roubadas e os ativos digitais transferidos. De uma forma mais ampla, essa vulnerabilidade pode afetar todo o ecossistema do Web3 que opera com base na infraestrutura do Web2.
Análise de Vulnerabilidades
Ao analisar o código do patch, descobrimos que se trata de um problema de contagem de referências de objeto. Os comentários no código win32k anterior mostram que apenas o objeto da janela foi bloqueado, sem bloquear o objeto do menu na janela, o que pode levar a uma referência incorreta do objeto do menu.
Análise adicional revela que, na função xxxEnableMenuItem, o objeto de menu retornado pode ser o menu principal da janela, um submenu ou até mesmo um menu mais profundo. Isso fornece uma ideia para construir um POC.
Implementação POC
Construímos uma estrutura de menu em múltiplas camadas, contendo quatro objetos de menu com relações específicas. Ao configurar cuidadosamente as propriedades e relações desses menus, é possível contornar a detecção da função xxxEnableMenuItem e liberar objetos de menu críticos quando a função retorna. Assim, ao referenciar esse objeto posteriormente, um vulnerabilidade UAF será acionada.
Exploração de vulnerabilidade ( EXP ) implementação
Abordagem geral
Consideramos duas formas de exploração: executar shellcode e explorar primitivas de leitura/escrita para modificar o token. Optámos pela segunda, pois é mais viável em versões mais recentes do Windows. Dividimos todo o processo de exploração em duas etapas: como controlar o valor de cbwndextra através de UAF e como utilizar o cbwndextra controlado para realizar primitivas de leitura/escrita estáveis.
escrita de dados iniciais
Utilizamos o objeto de nome da classe de janela WNDClass para ocupar a memória de objetos de menu que foram liberados. Após analisar vários pontos de escrita possíveis, escolhemos, finalmente, utilizar a operação AND nos flags do objeto na função xxxRedrawWindow para escrever o valor cb-extra da HWNDClass.
layout de memória
Desenhamos um layout de memória composto por três objetos HWND consecutivos, onde o objeto do meio é liberado e ocupado pelo objeto HWNDClass. Os objetos HWND na frente e atrás são utilizados para contornar a detecção e implementar as primitivas de leitura e escrita finais. Através do endereço do manipulador de núcleo vazado, podemos controlar precisamente a disposição desses objetos.
implementação de leitura e escrita de primitivos
Qualquer operação de leitura utiliza a função GetMenuBarInfo, enquanto qualquer operação de escrita utiliza a função SetClassLongPtr. Exceto pela escrita do TOKEN, que depende do objeto de classe da segunda janela, todas as outras operações de escrita utilizam o objeto de classe da primeira janela, implementando-o através de deslocamento.
Resumo
A Microsoft está a tentar reestruturar o código win32k usando Rust, no futuro, tais vulnerabilidades poderão ser totalmente resolvidas em novos sistemas.
O processo de exploração deste tipo de vulnerabilidade é relativamente simples, sendo o principal desafio como controlar a primeira gravação de dados.
A descoberta de vulnerabilidades pode ser atribuída a tecnologias de detecção de cobertura de código mais sofisticadas.
Para a deteção de vulnerabilidades, além de focar nos pontos críticos das funções desencadeadoras, também deve-se monitorizar disposições de memória anormais e operações de leitura e escrita de dados.