Análise de vulnerabilidades graves do sistema Microsoft Windows: pode comprometer a segurança do ecossistema Web3
No mês passado, um patch de segurança lançado pela Microsoft corrigiu uma vulnerabilidade de elevação de privilégios do Windows que estava sendo explorada por hackers. Essa vulnerabilidade afeta principalmente versões anteriores do sistema Windows, e parece que o Windows 11 não é afetado.
Este artigo analisará como os atacantes continuam a explorar essas vulnerabilidades no contexto atual de fortalecimento constante das medidas de segurança. Nossa análise é baseada no Windows Server 2016.
Contexto da Vulnerabilidade
Este é um vulnerabilidade 0day, ou seja, uma vulnerabilidade que ainda não foi divulgada nem corrigida. Os hackers podem explorá-la para atacar sem que os usuários tenham conhecimento, causando grandes danos.
Através desta vulnerabilidade a nível do sistema Windows, os hackers podem obter controle total do sistema. Isso pode levar a sérias consequências como vazamento de informações pessoais, falhas no sistema, perda de dados, perdas financeiras, entre outros. Para os usuários de Web3, as chaves privadas e os ativos digitais podem ser roubados. De uma perspectiva mais ampla, essa vulnerabilidade pode até afetar todo o ecossistema Web3 baseado na infraestrutura Web2.
Análise de Patch
Analisando o código do patch, parece que o problema reside no fato de que a contagem de referências de um objeto foi processada uma vez a mais. Ao olhar para os comentários do código anterior, descobrimos que o código anterior só bloqueava o objeto da janela, sem bloquear o objeto do menu na janela, o que pode ter levado a uma referência incorreta do objeto do menu.
Reproduzindo Vulnerabilidades
Analisando o contexto da função de vulnerabilidade, descobrimos que o menu passado xxxEnableMenuItem() geralmente já foi bloqueado na função superior, e aqui há dúvidas sobre qual objeto de menu realmente precisa ser protegido.
Uma análise mais aprofundada revelou que a função MenuItemState em xxxEnableMenuItem retorna dois tipos possíveis de menus: o menu principal da janela ou um submenu (, ou mesmo um subsubmenu ).
Construímos uma estrutura de menu especial em quatro camadas para explorar vulnerabilidades; esses menus precisam atender a algumas condições específicas para passar na verificação da função. A chave está em remover certas relações de referência entre os menus quando xxxRedrawTitle retorna à camada do usuário, liberando objetos de menu específicos. Assim, no ponto de retorno da função xxxEnableMenuItem, o objeto de menu referenciado já estará inválido.
Exploração de Vulnerabilidades
Ao desenvolver o exploit (exp), consideramos principalmente duas abordagens:
Executar código shellcode: referência a vulnerabilidades semelhantes anteriores, mas pode haver alguns obstáculos na nova versão do Windows.
Utilizar primitivas de leitura e escrita para modificar o endereço do token: este método ainda tem exp público recente para referência, e apresenta uma boa generalidade em relação ao layout da memória de pilha de desktop e às primitivas de leitura e escrita.
Escolhemos a segunda opção, dividindo todo o processo de utilização em duas etapas: como explorar a vulnerabilidade UAF para controlar o valor de cbwndextra e como realizar operações de leitura e escrita de forma estável.
A chave é encontrar um local na estrutura de endereço que possamos construir onde dados possam ser escritos arbitrariamente. No final, escolhemos implementar isso através de uma operação AND em um sinalizador na função xxxRedrawWindow.
Para conseguir um layout de memória estável, projetámos pelo menos três objetos HWND de 0x250 bytes consecutivos, libertando os objetos intermédios e ocupando-os com objetos HWNDClass. Os objetos HWND nas extremidades são utilizados para verificar através de funções e implementar os primitivos de leitura e escrita finais.
Nós também podemos determinar com precisão se os objetos estão dispostos conforme o esperado através dos endereços de manípulo do núcleo vazados. Em termos de primitivas de leitura e escrita, usamos GetMenuBarInfo() para realizar leituras arbitrárias e SetClassLongPtr() para realizar gravações arbitrárias.
Conclusão
A Microsoft está a tentar reestruturar o código relacionado com win32k usando Rust, no futuro, este tipo de vulnerabilidades pode ser eliminado em novos sistemas.
O processo de exploração deste tipo de vulnerabilidade é relativamente simples, dependendo principalmente da divulgação do endereço do manipulador da pilha de desktop. Se este problema não for resolvido de forma completa, sistemas antigos continuarão a enfrentar riscos de segurança.
A descoberta desta vulnerabilidade pode ser atribuída a técnicas de verificação de cobertura de código mais aprimoradas.
Para a deteção de exploração de vulnerabilidades, além de monitorizar funções críticas, também deve-se prestar atenção a layouts de memória anómalos e comportamentos de leitura e escrita de dados.
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.
11 Curtidas
Recompensa
11
7
Repostar
Compartilhar
Comentário
0/400
SelfSovereignSteve
· 08-14 15:57
Usa Linux, não há nada a complicar.
Ver originalResponder0
rug_connoisseur
· 08-13 09:13
Mais uma falha do Windows, já estou habituado!
Ver originalResponder0
rekt_but_not_broke
· 08-12 05:14
Ganhar dinheiro não pode esperar, a Carteira deve ser protegida primeiro!
Ver originalResponder0
MetaLord420
· 08-12 05:02
Quem ainda usa Windows se atreve a mexer com web3?!
Ver originalResponder0
SighingCashier
· 08-12 05:00
O velho sistema apresenta este problema, já era hora de trocar.
Ver originalResponder0
ForkMaster
· 08-12 04:59
fazer as pessoas de parvas não dá mais? correr para o buraco da Mineração?
A ameaça de vulnerabilidades no sistema Windows à segurança do ecossistema Web3: análise profunda dos mecanismos de exploração pelos especialistas.
Análise de vulnerabilidades graves do sistema Microsoft Windows: pode comprometer a segurança do ecossistema Web3
No mês passado, um patch de segurança lançado pela Microsoft corrigiu uma vulnerabilidade de elevação de privilégios do Windows que estava sendo explorada por hackers. Essa vulnerabilidade afeta principalmente versões anteriores do sistema Windows, e parece que o Windows 11 não é afetado.
Este artigo analisará como os atacantes continuam a explorar essas vulnerabilidades no contexto atual de fortalecimento constante das medidas de segurança. Nossa análise é baseada no Windows Server 2016.
Contexto da Vulnerabilidade
Este é um vulnerabilidade 0day, ou seja, uma vulnerabilidade que ainda não foi divulgada nem corrigida. Os hackers podem explorá-la para atacar sem que os usuários tenham conhecimento, causando grandes danos.
Através desta vulnerabilidade a nível do sistema Windows, os hackers podem obter controle total do sistema. Isso pode levar a sérias consequências como vazamento de informações pessoais, falhas no sistema, perda de dados, perdas financeiras, entre outros. Para os usuários de Web3, as chaves privadas e os ativos digitais podem ser roubados. De uma perspectiva mais ampla, essa vulnerabilidade pode até afetar todo o ecossistema Web3 baseado na infraestrutura Web2.
Análise de Patch
Analisando o código do patch, parece que o problema reside no fato de que a contagem de referências de um objeto foi processada uma vez a mais. Ao olhar para os comentários do código anterior, descobrimos que o código anterior só bloqueava o objeto da janela, sem bloquear o objeto do menu na janela, o que pode ter levado a uma referência incorreta do objeto do menu.
Reproduzindo Vulnerabilidades
Analisando o contexto da função de vulnerabilidade, descobrimos que o menu passado xxxEnableMenuItem() geralmente já foi bloqueado na função superior, e aqui há dúvidas sobre qual objeto de menu realmente precisa ser protegido.
Uma análise mais aprofundada revelou que a função MenuItemState em xxxEnableMenuItem retorna dois tipos possíveis de menus: o menu principal da janela ou um submenu (, ou mesmo um subsubmenu ).
Construímos uma estrutura de menu especial em quatro camadas para explorar vulnerabilidades; esses menus precisam atender a algumas condições específicas para passar na verificação da função. A chave está em remover certas relações de referência entre os menus quando xxxRedrawTitle retorna à camada do usuário, liberando objetos de menu específicos. Assim, no ponto de retorno da função xxxEnableMenuItem, o objeto de menu referenciado já estará inválido.
Exploração de Vulnerabilidades
Ao desenvolver o exploit (exp), consideramos principalmente duas abordagens:
Executar código shellcode: referência a vulnerabilidades semelhantes anteriores, mas pode haver alguns obstáculos na nova versão do Windows.
Utilizar primitivas de leitura e escrita para modificar o endereço do token: este método ainda tem exp público recente para referência, e apresenta uma boa generalidade em relação ao layout da memória de pilha de desktop e às primitivas de leitura e escrita.
Escolhemos a segunda opção, dividindo todo o processo de utilização em duas etapas: como explorar a vulnerabilidade UAF para controlar o valor de cbwndextra e como realizar operações de leitura e escrita de forma estável.
A chave é encontrar um local na estrutura de endereço que possamos construir onde dados possam ser escritos arbitrariamente. No final, escolhemos implementar isso através de uma operação AND em um sinalizador na função xxxRedrawWindow.
Para conseguir um layout de memória estável, projetámos pelo menos três objetos HWND de 0x250 bytes consecutivos, libertando os objetos intermédios e ocupando-os com objetos HWNDClass. Os objetos HWND nas extremidades são utilizados para verificar através de funções e implementar os primitivos de leitura e escrita finais.
Nós também podemos determinar com precisão se os objetos estão dispostos conforme o esperado através dos endereços de manípulo do núcleo vazados. Em termos de primitivas de leitura e escrita, usamos GetMenuBarInfo() para realizar leituras arbitrárias e SetClassLongPtr() para realizar gravações arbitrárias.
Conclusão
A Microsoft está a tentar reestruturar o código relacionado com win32k usando Rust, no futuro, este tipo de vulnerabilidades pode ser eliminado em novos sistemas.
O processo de exploração deste tipo de vulnerabilidade é relativamente simples, dependendo principalmente da divulgação do endereço do manipulador da pilha de desktop. Se este problema não for resolvido de forma completa, sistemas antigos continuarão a enfrentar riscos de segurança.
A descoberta desta vulnerabilidade pode ser atribuída a técnicas de verificação de cobertura de código mais aprimoradas.
Para a deteção de exploração de vulnerabilidades, além de monitorizar funções críticas, também deve-se prestar atenção a layouts de memória anómalos e comportamentos de leitura e escrita de dados.