Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
r0ak — Utilitário de linha de comando do Windows para ler, escrever e executar código em modo kernel a partir do contexto de Administrador usando uma técnica de redirecionamento de execução de validação de fontes, permitindo depuração avançada do kernel e solução de problemas do sistema. | Kitploit
Ferramentas/GitHubGitHub/harryanon/r0ak
Escalada de PrivilégiosForensia de MemóriaAnálise de VulnerabilidadesExploraçãoDepuradoresPós-ExploraçãoTestes de PenetraçãoExploração de Binários
GitHubharryanon/r0ak

r0ak

Ver Repositório
10873há 8 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →

Sobre

Utilitário de linha de comando do Windows para ler, escrever e executar código em modo kernel a partir do contexto de Administrador usando uma técnica de redirecionamento de execução de validação de fontes, permitindo depuração avançada do kernel e solução de problemas do sistema.

Compartilhar

r0akDownloads

r0ak é um utilitário de linha de comando do Windows que permite ler, escrever e executar código em modo kernel (com algumas limitações) diretamente do prompt de comando, sem exigir nada além de privilégios de Administrador.

Visão Rápida

root@kitploit:~
r0ak v1.0.0 -- Ring 0 Army Knife
http://www.github.com/ionescu007/r0ak
Copyright (c) 2018 Alex Ionescu [@aionescu]
http://www.windows-internals.com

USAGE: r0ak.exe
       [--execute <Address | module.ext!function> <Argument>]
       [--write   <Address | module.ext!function> <Value>]
       [--read    <Address | module.ext!function> <Size>]

Screenshot

Introdução

Motivação

O kernel do Windows é um ambiente rico no qual centenas de drivers executam em um sistema típico, e onde milhares de variáveis contendo estado global estão presentes. Para solução de problemas avançada, especialistas de TI normalmente usam ferramentas como o Windows Debugger (WinDbg), ferramentas SysInternals, ou escrevem suas próprias. Infelizmente, o uso dessas ferramentas está se tornando cada vez mais difícil, e elas próprias são limitadas pelo seu acesso às APIs do Windows e recursos expostos.

Alguns dos desafios atuais incluem:

  • O Windows 8 e versões posteriores suportam Secure Boot, o que impede a depuração do kernel (incluindo depuração local) e o carregamento de código de driver assinado de teste. Isso restringe as ferramentas de solução de problemas àquelas que possuem um driver em modo kernel assinado.
  • Mesmo em sistemas sem Secure Boot habilitado, ativar a depuração local ou alterar opções de inicialização que facilitam as capacidades de depuração frequentemente acionará o modo de recuperação do BitLocker.
  • O Windows 10 Anniversary Update e versões posteriores incluem requisitos de assinatura de driver muito mais rígidos, que agora exigem a Microsoft EV Attestation Signing. Isso restringe a liberdade dos desenvolvedores de software, já que drivers genéricos "leia-escreva-tudo" são mal vistos.
  • O Windows 10 Spring Update agora inclui opções voltadas ao cliente para habilitar o HyperVisor Code Integrity (HVCI), que restringe ainda mais os drivers permitidos e coloca na lista negra vários drivers de terceiros que tinham capacidades "leia-escreva-tudo" devido a interfaces mal escritas e riscos de segurança.
  • Tecnologias como Supervisor Mode Execution Prevention (SMEP), Kernel Control Flow Guard (KCFG) e HVCI com Second Level Address Translation (SLAT) estão tornando os 'truques' tradicionais de execução no Ring 0 obsoletos, então uma nova abordagem é necessária.

Em tal ambiente, ficou claro que uma ferramenta simples que possa ser usada como um curativo/hotfix de emergência e para solucionar rapidamente problemas de kernel/sistema que podem ser aparentes através da análise do estado do kernel poderia ser valiosa para a comunidade.

Como Funciona

Arquitetura Básica

Diagram

r0ak funciona redirecionando o fluxo de execução das verificações de validação de fonte confiável do gerenciador de janelas ao tentar carregar uma nova fonte, substituindo a rotina de comparação da tabela de fontes confiáveis por uma função alternativa que agenda um item de trabalho executivo (WORK_QUEUE_ITEM) armazenado no nó de entrada. Em seguida, o filho direito da tabela de fontes confiáveis (que serve como nó raiz) é sobrescrito com o buffer de escrita de um pipe nomeado (NP_DATA_ENTRY) no qual um item de trabalho personalizado é armazenado. A função de trabalho subjacente deste item e seu parâmetro são o que eventualmente será executado por um ExpWorkerThread dedicado em PASSIVE_LEVEL assim que uma tentativa de carregamento de fonte ocorrer e a rotina de comparação executar, recebendo o nó pai baseado no pipe nomeado como sua entrada. Um evento de rastreamento de Event Tracing for Windows (ETW) em tempo real é usado para receber uma notificação assíncrona de que o item de trabalho terminou de executar, o que torna seguro desmontar as estruturas, liberar os buffers em modo kernel e restaurar a operação normal.

Comandos Suportados

Ao usar a opção --execute, esta função e parâmetro são fornecidos pelo usuário.

Ao usar --write, um gadget personalizado é usado para modificar valores arbitrários de 32 bits em qualquer lugar da memória do kernel.

Ao usar --read, o gadget de escrita é usado para modificar o ponteiro e tamanho do buffer HSTI do sistema (N.B.: Este é um comportamento destrutivo em termos de quaisquer outras aplicações que solicitarão os dados HSTI. Como este é um comportamento opcional do Windows, e esta ferramenta é destinada para depuração/experimentação de emergência, esta perda de dados foi considerada aceitável). Em seguida, a API de Consulta HSTI é usada para copiar de volta para o espaço de endereço em modo usuário da ferramenta, e um dump hexadecimal é exibido.

Como apenas funcionalidade nativa do Windows, assinada pela Microsoft, é usada, e todas as funções chamadas fazem parte do bitmap KCFG, não há violação de nenhuma verificação de segurança, e nenhum sinalizador de depuração é necessário, nem o uso de drivers de terceiros mal escritos.

FAQ

Isso é um bug/vulnerabilidade no Windows?

Não. Como esta ferramenta — e a técnica subjacente — exigem um token privilegiado de nível SYSTEM, que só pode ser obtido por um usuário executando sob a conta de Administrador, nenhuma fronteira de segurança está sendo contornada para alcançar o efeito. O comportamento e a utilidade da ferramenta só são possíveis devido ao contexto de segurança elevado/privilegiado da conta de Administrador no Windows, e é entendido como um comportamento de design.

A Microsoft foi notificada sobre esse comportamento?

Claro! É importante sempre relatar problemas de segurança para a Microsoft, mesmo quando nenhuma violação de limites privilegiados parece ter ocorrido — suas equipes de pesquisadores e desenvolvedores podem encontrar novos vetores e maneiras de alcançar certos caminhos de código que um pesquisador externo pode não ter pensado.

Assim, em novembro de 2014, um caso de segurança foi registrado no Microsoft Security Research Centre (MSRC), que respondeu: "[…] não se enquadra no escopo de um problema de segurança que abordaríamos através de nosso veículo tradicional de boletim de segurança. […] pressupõe privilégios de administrador — um lugar onde, arquitetonicamente, atualmente não definimos uma fronteira de segurança defensável. Como tal, não vamos buscar corrigir isso."

Além disso, em abril de 2015, na conferência Infiltrate, uma palestra intitulada Insection : AWEsomely Exploiting Shared Memory Objects foi apresentada detalhando este problema, inclusive para desenvolvedores da Microsoft presentes, que concordaram que isso estava atualmente fora do escopo das fronteiras de segurança arquitetônicas do Windows. Isso porque existem literalmente dezenas — senão mais — de outras maneiras pelas quais um Administrador pode ler/escrever/executar memória do Ring 0. Esta ferramenta meramente permite uma comodificação fácil de um desses vetores, para fins de depuração e resolução de problemas do sistema.

Isso não pode ser empacotado como parte de um kit de ataque/exploit completo?

Empacotar esse código como uma biblioteca exigiria remover cuidadosamente toda a análise de linha de comando interativa e saída padrão, ponto em que, sem grandes reescritas, o 'kit' iria:

  • Exigir que a máquina alvo esteja executando o Windows 10 Anniversary Update x64 ou posterior
  • Já ter privilégios elevados para SYSTEM
  • Exigir uma conexão ativa com a Internet com um proxy/firewall permitindo acesso ao Servidor de Símbolos da Microsoft
  • Exigir o Windows SDK/WDK instalado na máquina alvo
  • Exigir que uma variável de ambiente _NT_SYMBOL_PATH sensata tenha sido configurada na máquina alvo, e que cerca de 15MB de dados de símbolos sejam baixados e armazenados em cache como arquivos PDB em algum lugar do disco

Atacantes interessados em usar esta abordagem específica — versus muitas outras técnicas mais cross-compatíveis, que não exigem direitos de SYSTEM — provavelmente já adaptaram seu próprio código baseado na Prova de Conceito de abril de 2015 — há mais de 3 anos.

Uso

Requisitos

Devido ao uso do Mecanismo de Símbolos do Windows, você deve ter o Windows Software Development Kit (SDK) ou o Windows Driver Kit (WDK) instalado com as Ferramentas de Depuração para Windows. A ferramenta encontrará seu caminho de instalação automaticamente e aproveitará os arquivos DbgHelp.dll e SymSrv.dll presentes nesse diretório. Como esses arquivos não são redistribuíveis, eles não podem ser incluídos no lançamento da ferramenta.

Alternativamente, se você obtiver essas bibliotecas por conta própria, pode modificar o código-fonte para usá-las.

O uso de símbolos requer uma conexão com a Internet, a menos que você os tenha pré-cacheado localmente. Além disso, você deve configurar a variável _NT_SYMBOL_PATH apontando para um servidor de símbolos apropriado e um local de cache.

Presume-se que um Especialista de TI ou outro solucionador de problemas que aparentemente precisa ler/escrever/executar memória do kernel (e tem conhecimento das variáveis de kernel apropriadas para acessar) já está mais do que intimamente familiarizado com os requisitos de configuração acima. Por favor, não abra issues perguntando o que é o SDK ou como definir uma variável de ambiente.

Casos de Uso

  • Algum driver vazou pool do kernel? Por que não chamar ntoskrnl.exe!ExFreePool e passar o endereço do kernel que está vazando? E uma referência de objeto? Vá chamar ntoskrnl.exe!ObfDereferenceObject e limpe isso.

  • Quer despejar o log DbgPrint do kernel? Por que não despejar o buffer circular interno em ntoskrnl.exe!KdPrintCircularBuffer

  • Curioso sobre o tamanho das pilhas do kernel na sua máquina? Tente olhar em ntoskrnl.exe!KeKernelStackSize

  • Quer despejar a tabela de chamadas do sistema para procurar hooks? Vá imprimir ntoskrnl.exe!KiServiceTable

Estes são apenas alguns exemplos — todos os endereços do Ring 0 são aceitos, seja pela sintaxe module!symbol ou passando diretamente o ponteiro do kernel se conhecido. O Mecanismo de Símbolos do Windows é usado para localizá-los.

Limitações

A ferramenta requer certas variáveis e funções do kernel que só são conhecidas por existir em versões modernas do Windows 10, e foi projetada para funcionar apenas em sistemas de 64 bits. Essas limitações se devem ao fato de que em sistemas mais antigos (ou sistemas x86), esses requisitos de segurança mais rigorosos não existem e, como tal, abordagens mais tradicionais podem ser usadas. Esta é uma ferramenta pessoal que estou disponibilizando, e eu não precisava desses sistemas mais antigos, onde eu poderia usar um driver simples. Dito isso, este repositório aceita pull requests, se alguém estiver interessado em portá-la.

Em segundo lugar, devido aos casos de uso e às minhas próprias necessidades, as seguintes restrições se aplicam:

  • Leituras — Limitadas a 4 GB de dados por vez
  • Escritas — Limitadas a 32 bits de dados por vez
  • Execuções — Limitadas a funções que recebem apenas 1 parâmetro escalar

Obviamente, essas limitações poderiam ser corrigidas escolhendo programaticamente uma abordagem diferente, mas elas atendem às necessidades de uma ferramenta de linha de comando e aos meus casos de uso. Novamente, pull requests são aceitos se outros desejarem contribuir com suas próprias adições.

Observe que toda execução (incluindo a execução dos comandos --read e --write) ocorre no contexto de uma Thread de Trabalho do Sistema em PASSIVE_LEVEL. Portanto, endereços em modo usuário não devem ser passados como parâmetros/argumentos.

Contribuindo

Pull requests são bem-vindos. Para mudanças importantes, por favor abra uma issue primeiro para discutir o que você gostaria de alterar.

Licença

root@kitploit:~
Copyright 2018 Alex Ionescu. All rights reserved. 

Redistribution and use in source and binary forms, with or without modification, are permitted provided
that the following conditions are met: 
1. Redistributions of source code must retain the above copyright notice, this list of conditions and
   the following disclaimer. 
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
   and the following disclaimer in the documentation and/or other materials provided with the 
   distribution. 

THIS SOFTWARE IS PROVIDED BY ALEX IONESCU ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ALEX IONESCU
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation are those of the authors and
should not be interpreted as representing official policies, either expressed or implied, of Alex Ionescu.
Baixar ferramenta