Análise da vulnerabilidade 0day da Microsoft: pode representar uma ameaça significativa à infraestrutura Web3
O patch de segurança da Microsoft do mês passado continha uma vulnerabilidade de elevação de privilégios win32k que estava sendo explorada. Esta vulnerabilidade parece existir apenas em sistemas Windows mais antigos e não pode ser acionada no Windows 11.
A exploração deste tipo de vulnerabilidade existe há muito tempo. Este artigo analisará como os atacantes podem continuar a explorar essa vulnerabilidade no contexto atual de constantes melhorias nas novas medidas de mitigação. Realizámos todo o processo de análise no ambiente do Windows Server 2016.
Uma vulnerabilidade 0day refere-se a uma vulnerabilidade que não foi divulgada ou corrigida, podendo ser explorada maliciosamente sem ser detectada, apresentando grande potencial destrutivo. A vulnerabilidade 0day recém-descoberta localiza-se no nível do sistema Windows, e os hackers podem obter controle total do Windows através dessa vulnerabilidade.
O controle do sistema por hackers pode levar a vazamentos de informações pessoais, falhas do sistema, perda de dados, perdas financeiras, implantação de malware, entre outras consequências. Para os usuários do Web3, as chaves privadas podem ser roubadas e os ativos digitais podem ser transferidos. Em uma escala maior, essa vulnerabilidade pode até afetar todo o ecossistema Web3 que opera com base na infraestrutura Web2.
Análise de Patch
Após analisar o patch, parece que o problema é apenas que a contagem de referências de um objeto foi manipulada uma vez a mais. Como o código do win32k é relativamente antigo, conseguimos encontrar alguns comentários de código mais antigos que indicam que o código anterior apenas bloqueava o objeto da janela, sem bloquear o objeto do menu dentro do objeto da janela, onde o objeto do menu pode ter sido referenciado incorretamente.
Prova de Conceito de Exploração de Vulnerabilidades(PoC)
Descobrimos que o menu passado para xxxEnableMenuItem() geralmente já está bloqueado na função superior. Uma análise adicional revelou que a função MenuItemState em xxxEnableMenuItem retorna dois tipos possíveis de menu: o menu principal da janela ou um submenu dentro do menu (, ou até mesmo um submenu do submenu ).
No PoC, construímos uma estrutura de menu especial de quatro camadas e definimos propriedades específicas para cada nível do menu, a fim de realizar detecções e julgamentos através da função xxxEnableMenuItem. Os passos chave incluem a remoção de certas relações de referência do menu e a liberação de objetos de menu específicos quando xxxRedrawTitle retorna à camada do usuário.
Exploração de vulnerabilidades ( Exp ) implementação
Abordagem geral
Consideramos principalmente duas direções de exploração: executar código shellcode e usar primitivas de leitura e escrita para modificar o endereço do token. Tendo em conta vários fatores, optamos pela segunda.
Todo o exp utiliza-se pode ser dividido em duas questões-chave: como explorar a vulnerabilidade UAF para controlar o valor de cbwndextra, e como implementar primitivas de leitura e escrita estáveis após controlar o valor de cbwndextra.
Implementar a primeira gravação de dados
Utilizamos o objeto de nome da janela na classe WNDClass para ocupar e liberar objetos de menu. O importante é encontrar um local na estrutura de endereço que possamos construir, onde dados possam ser escritos de forma arbitrária.
Finalmente, escolhemos implementar a escrita através de uma operação de AND 2 em uma flag na função xxxRedrawWindow. Escrevemos no cb-extra do HWNDClass em vez do cb-extra do objeto da janela, para melhor controlar a disposição da memória.
Layout de memória estável
Projetámos pelo menos três layouts de memória de objetos HWND de 0x250 bytes em sequência, libertando o do meio e ocupando com um objeto HWNDClass de 0x250 bytes. Os objetos HWND anterior e posterior são utilizados, respetivamente, para verificar parâmetros e como meio de leitura/escrita.
Através do endereço do manipulador do núcleo vazado na memória heap, podemos determinar com precisão se o objeto da janela solicitado está organizado conforme esperado.
Modificação de primitivas de leitura e escrita
Usamos GetMenuBarInfo() para implementar leitura arbitrária e SetClassLongPtr() para implementar escrita arbitrária. Exceto pela operação de escrita que substitui o TOKEN, todas as outras escritas são realizadas utilizando o objeto class do primeiro objeto de janela com um deslocamento.
Resumo
A vulnerabilidade win32k existe há muito tempo, mas a Microsoft está tentando reestruturar o código do núcleo relacionado usando Rust; no futuro, esse tipo de vulnerabilidade pode ser eliminado em novos sistemas.
O processo de exploração desta vulnerabilidade é relativamente simples, sendo o principal desafio controlar a primeira gravação. A vulnerabilidade ainda depende fortemente da divulgação do endereço do manipulador da pilha de desktop, o que continua a ser um risco de segurança para sistemas antigos.
A descoberta desta vulnerabilidade pode ter sido facilitada por uma detecção de cobertura de código mais robusta.
Para a deteção de exploração de vulnerabilidades, além de focar nos pontos-chave das funções que ativam as vulnerabilidades, deve-se também realizar deteções direcionadas de layouts de memória anormais e operações de leitura e escrita de dados de janela.
Ver original
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
13 Curtidas
Recompensa
13
7
Compartilhar
Comentário
0/400
CryptoPhoenix
· 18h atrás
Mais uma oportunidade de reconstruir a fé! Faça backup da carteira fria, é importante sair da zona de fundo para garantir a sobrevivência.
Ver originalResponder0
SignatureVerifier
· 22h atrás
*sigh* mais uma validação tecnicamente insuficiente... quando é que eles vão aprender a contar corretamente?
Ver originalResponder0
FlatTax
· 22h atrás
Atualiza o sistema primeiro e depois falamos, cuidado para não perder a conta.
Ver originalResponder0
MysteriousZhang
· 22h atrás
Mais uma vez win, em que ano ainda estamos a correr nós Nó no win?
Ver originalResponder0
TooScaredToSell
· 22h atrás
Não brinca com a carteira do velho computador, transfira rápido.
Ver originalResponder0
LootboxPhobia
· 22h atrás
Assustador Chave privada Carteira fria sensação de segurança++
Ver originalResponder0
CryptoCross-TalkClub
· 22h atrás
Bear Market canta uma comédia, bull run negocia criptomoedas, realmente me fez a Microsoft criar uma faca rápida de idiotas.
A vulnerabilidade 0day ameaça o sistema Win e pode comprometer a segurança da infraestrutura Web3.
Análise da vulnerabilidade 0day da Microsoft: pode representar uma ameaça significativa à infraestrutura Web3
O patch de segurança da Microsoft do mês passado continha uma vulnerabilidade de elevação de privilégios win32k que estava sendo explorada. Esta vulnerabilidade parece existir apenas em sistemas Windows mais antigos e não pode ser acionada no Windows 11.
A exploração deste tipo de vulnerabilidade existe há muito tempo. Este artigo analisará como os atacantes podem continuar a explorar essa vulnerabilidade no contexto atual de constantes melhorias nas novas medidas de mitigação. Realizámos todo o processo de análise no ambiente do Windows Server 2016.
Uma vulnerabilidade 0day refere-se a uma vulnerabilidade que não foi divulgada ou corrigida, podendo ser explorada maliciosamente sem ser detectada, apresentando grande potencial destrutivo. A vulnerabilidade 0day recém-descoberta localiza-se no nível do sistema Windows, e os hackers podem obter controle total do Windows através dessa vulnerabilidade.
O controle do sistema por hackers pode levar a vazamentos de informações pessoais, falhas do sistema, perda de dados, perdas financeiras, implantação de malware, entre outras consequências. Para os usuários do Web3, as chaves privadas podem ser roubadas e os ativos digitais podem ser transferidos. Em uma escala maior, essa vulnerabilidade pode até afetar todo o ecossistema Web3 que opera com base na infraestrutura Web2.
Análise de Patch
Após analisar o patch, parece que o problema é apenas que a contagem de referências de um objeto foi manipulada uma vez a mais. Como o código do win32k é relativamente antigo, conseguimos encontrar alguns comentários de código mais antigos que indicam que o código anterior apenas bloqueava o objeto da janela, sem bloquear o objeto do menu dentro do objeto da janela, onde o objeto do menu pode ter sido referenciado incorretamente.
Prova de Conceito de Exploração de Vulnerabilidades(PoC)
Descobrimos que o menu passado para xxxEnableMenuItem() geralmente já está bloqueado na função superior. Uma análise adicional revelou que a função MenuItemState em xxxEnableMenuItem retorna dois tipos possíveis de menu: o menu principal da janela ou um submenu dentro do menu (, ou até mesmo um submenu do submenu ).
No PoC, construímos uma estrutura de menu especial de quatro camadas e definimos propriedades específicas para cada nível do menu, a fim de realizar detecções e julgamentos através da função xxxEnableMenuItem. Os passos chave incluem a remoção de certas relações de referência do menu e a liberação de objetos de menu específicos quando xxxRedrawTitle retorna à camada do usuário.
Exploração de vulnerabilidades ( Exp ) implementação
Abordagem geral
Consideramos principalmente duas direções de exploração: executar código shellcode e usar primitivas de leitura e escrita para modificar o endereço do token. Tendo em conta vários fatores, optamos pela segunda.
Todo o exp utiliza-se pode ser dividido em duas questões-chave: como explorar a vulnerabilidade UAF para controlar o valor de cbwndextra, e como implementar primitivas de leitura e escrita estáveis após controlar o valor de cbwndextra.
Implementar a primeira gravação de dados
Utilizamos o objeto de nome da janela na classe WNDClass para ocupar e liberar objetos de menu. O importante é encontrar um local na estrutura de endereço que possamos construir, onde dados possam ser escritos de forma arbitrária.
Finalmente, escolhemos implementar a escrita através de uma operação de AND 2 em uma flag na função xxxRedrawWindow. Escrevemos no cb-extra do HWNDClass em vez do cb-extra do objeto da janela, para melhor controlar a disposição da memória.
Layout de memória estável
Projetámos pelo menos três layouts de memória de objetos HWND de 0x250 bytes em sequência, libertando o do meio e ocupando com um objeto HWNDClass de 0x250 bytes. Os objetos HWND anterior e posterior são utilizados, respetivamente, para verificar parâmetros e como meio de leitura/escrita.
Através do endereço do manipulador do núcleo vazado na memória heap, podemos determinar com precisão se o objeto da janela solicitado está organizado conforme esperado.
Modificação de primitivas de leitura e escrita
Usamos GetMenuBarInfo() para implementar leitura arbitrária e SetClassLongPtr() para implementar escrita arbitrária. Exceto pela operação de escrita que substitui o TOKEN, todas as outras escritas são realizadas utilizando o objeto class do primeiro objeto de janela com um deslocamento.
Resumo
A vulnerabilidade win32k existe há muito tempo, mas a Microsoft está tentando reestruturar o código do núcleo relacionado usando Rust; no futuro, esse tipo de vulnerabilidade pode ser eliminado em novos sistemas.
O processo de exploração desta vulnerabilidade é relativamente simples, sendo o principal desafio controlar a primeira gravação. A vulnerabilidade ainda depende fortemente da divulgação do endereço do manipulador da pilha de desktop, o que continua a ser um risco de segurança para sistemas antigos.
A descoberta desta vulnerabilidade pode ter sido facilitada por uma detecção de cobertura de código mais robusta.
Para a deteção de exploração de vulnerabilidades, além de focar nos pontos-chave das funções que ativam as vulnerabilidades, deve-se também realizar deteções direcionadas de layouts de memória anormais e operações de leitura e escrita de dados de janela.