8.3 KiB
Níveis de Integridade
A partir do Windows Vista, todos os objetos protegidos são rotulados com um nível de integridade. A maioria dos arquivos de usuário e sistema e chaves de registro no sistema têm um rótulo padrão de integridade "médio". A principal exceção é um conjunto específico de pastas e arquivos editáveis pelo Internet Explorer 7 com integridade Baixa. A maioria dos processos executados por usuários padrão são rotulados com integridade média (mesmo aqueles iniciados por um usuário dentro do grupo de administradores), e a maioria dos serviços são rotulados com integridade do sistema. O diretório raiz é protegido por um rótulo de alta integridade.
Observe que um processo com um nível de integridade inferior não pode escrever em um objeto com um nível de integridade superior.
Existem vários níveis de integridade:
- Não confiável – processos que são autenticados anonimamente são automaticamente designados como Não confiáveis. Exemplo: Chrome
- Baixo – O nível de integridade Baixo é o nível usado por padrão para interação com a Internet. Enquanto o Internet Explorer for executado em seu estado padrão, Modo Protegido, todos os arquivos e processos associados a ele são atribuídos ao nível de integridade Baixo. Algumas pastas, como a Pasta de Internet Temporária, também são atribuídas ao nível de integridade Baixo por padrão. No entanto, observe que um processo de baixa integridade é muito restrito, ele não pode escrever no registro e é limitado de escrever na maioria dos locais no perfil do usuário atual. Exemplo: Internet Explorer ou Microsoft Edge
- Médio – Médio é o contexto em que a maioria dos objetos será executada. Usuários padrão recebem o nível de integridade Médio, e qualquer objeto não explicitamente designado com um nível de integridade inferior ou superior é Médio por padrão. Note que um usuário dentro do grupo de Administradores por padrão usará níveis de integridade médios.
- Alto – Administradores recebem o nível de integridade Alto. Isso garante que os Administradores sejam capazes de interagir com e modificar objetos designados com níveis de integridade Médio ou Baixo, mas também podem agir em outros objetos com um nível de integridade Alto, o que usuários padrão não podem fazer. Exemplo: "Executar como Administrador"
- Sistema – Como o nome indica, o nível de integridade do Sistema é reservado para o sistema. O kernel do Windows e os serviços centrais são concedidos o nível de integridade do Sistema. Sendo ainda mais alto que o nível de integridade Alto dos Administradores, protege essas funções centrais de serem afetadas ou comprometidas mesmo por Administradores. Exemplo: Serviços
- Instalador – O nível de integridade do Instalador é um caso especial e é o mais alto de todos os níveis de integridade. Em virtude de ser igual ou superior a todos os outros níveis de integridade do WIC, objetos designados com o nível de integridade do Instalador também são capazes de desinstalar todos os outros objetos.
Você pode obter o nível de integridade de um processo usando o Process Explorer da Sysinternals, acessando as propriedades do processo e visualizando a aba "Segurança":
Você também pode obter seu nível de integridade atual usando whoami /groups
Níveis de Integridade no Sistema de Arquivos
Um objeto dentro do sistema de arquivos pode exigir um requisito mínimo de nível de integridade e, se um processo não tiver esse nível de integridade, não poderá interagir com ele.
Por exemplo, vamos criar um arquivo regular a partir do console de um usuário regular e verificar as permissões:
echo asd >asd.txt
icacls asd.txt
asd.txt BUILTIN\Administrators:(I)(F)
DESKTOP-IDJHTKP\user:(I)(F)
NT AUTHORITY\SYSTEM:(I)(F)
NT AUTHORITY\INTERACTIVE:(I)(M,DC)
NT AUTHORITY\SERVICE:(I)(M,DC)
NT AUTHORITY\BATCH:(I)(M,DC)
Agora, vamos atribuir um nível de integridade mínimo de High ao arquivo. Isso deve ser feito a partir de um console executado como administrador, pois um console regular estará executando no nível de integridade Medium e não será permitido atribuir o nível de integridade High a um objeto:
icacls asd.txt /setintegritylevel(oi)(ci) High
processed file: asd.txt
Successfully processed 1 files; Failed processing 0 files
C:\Users\Public>icacls asd.txt
asd.txt BUILTIN\Administrators:(I)(F)
DESKTOP-IDJHTKP\user:(I)(F)
NT AUTHORITY\SYSTEM:(I)(F)
NT AUTHORITY\INTERACTIVE:(I)(M,DC)
NT AUTHORITY\SERVICE:(I)(M,DC)
NT AUTHORITY\BATCH:(I)(M,DC)
Mandatory Label\High Mandatory Level:(NW)
Aqui é onde as coisas ficam interessantes. Você pode ver que o usuário DESKTOP-IDJHTKP\user
tem privilégios COMPLETOS sobre o arquivo (de fato, foi o usuário que criou o arquivo), no entanto, devido ao nível de integridade mínimo implementado, ele não poderá modificar o arquivo a menos que esteja executando dentro de um Nível de Integridade Alto (note que ele ainda poderá lê-lo):
echo 1234 > asd.txt
Access is denied.
del asd.txt
C:\Users\Public\asd.txt
Access is denied.
{% hint style="info" %} Portanto, quando um arquivo tem um nível de integridade mínimo, para modificá-lo você precisa estar executando pelo menos nesse nível de integridade. {% endhint %}
Níveis de Integridade em Binários
Eu fiz uma cópia do cmd.exe
em C:\Windows\System32\cmd-low.exe
e defini um nível de integridade baixo a partir de um console de administrador:
icacls C:\Windows\System32\cmd-low.exe
C:\Windows\System32\cmd-low.exe NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APP PACKAGES:(I)(RX)
Mandatory Label\Low Mandatory Level:(NW)
Agora, quando eu executo cmd-low.exe
, ele será executado sob um nível de integridade baixo em vez de um médio:
Para os curiosos, se você atribuir um nível de integridade alto a um binário (icacls C:\Windows\System32\cmd-high.exe /setintegritylevel high
), ele não será executado automaticamente com nível de integridade alto (se você o invocar de um nível de integridade médio --por padrão-- ele será executado sob um nível de integridade médio).
Níveis de Integridade em Processos
Nem todos os arquivos e pastas têm um nível de integridade mínimo, mas todos os processos estão sendo executados sob um nível de integridade. E, similar ao que aconteceu com o sistema de arquivos, se um processo deseja escrever dentro de outro processo, ele deve ter pelo menos o mesmo nível de integridade. Isso significa que um processo com nível de integridade baixo não pode abrir um handle com acesso total a um processo com nível de integridade médio.
Devido às restrições comentadas nesta e na seção anterior, do ponto de vista de segurança, é sempre recomendado executar um processo no menor nível de integridade possível.
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios do HackTricks e HackTricks Cloud no github.