Controles de Integridade

O controle de integridade protege os processos de serem acessados pelos processos com menor nível de integridade. Isso evita que uma aplicação mal intencionada, que está sendo executada como usuário comum, acesse uma aplicação que está sendo executada com privilégios administrativos e consiga executar comandos com direito elevado.

A partir do Windows Vista, o Windows estende o mecanismo de segurança de controle de acesso (no caso o ACL) e rotula os objetos com um nível de integridade. No caso dos objetos (Arquivos, diretórios e chaves de registro por exemplo) o nível de integridade é armazenado no descritor de segurança do objeto.

O nível de integridade que de um processo é armazenado no token de acesso do processo, de forma que os processos não podem modificar objetos que possuem um nível de integridade mais alto.

A figura abaixo exibe os acessos que um processo executando no nível de integridade médio possui sobre outros processos e objetos.

 

Quando um processo tenta acessar um objeto, a verificação de integridade ocorre antes do padrão DACL  (Discretionary Access Control List) checar a função SeAccessCheck do kernel. De acordo com as diretivas de integridade padrão, um processo só pode abrir um objeto para acesso de gravação se seu nível de integridade (Integrity Level ou IL) for igual ou superior a IL do objeto e a DACL também conceder ao processo os acessos que ele deseja. Por exemplo, um processo de IL baixo não pode abrir um processo de IL médio para acesso de gravação, mesmo se a DACL concede o acesso de gravação do processo.

Exemplo: A configuração padrão de segurança do arquivo C:\Windows\System32\Drivers\etc\hosts permite que o arquivo seja alterado apenas pelos usuários do grupo administrador. Entretanto, se o administrador editar o arquivo no notepad e tentar salvar o arquivo o Windows irá exibir a tela de “Salvar Como” e, caso o administrador tente sobrescrever o arquivo, será exibida uma mensagem notificando que o usuário não possui permissão para modificar o arquivo.

Para entendermos melhor o que ocorre, vamos utilizar o Process Explorer para verificar qual é o nível de integridade do Notepad. No Process Explorer localize o processo Notepad e dê um duplo-clique para abrir as propriedades do processo. Observe na aba Security que o nível de integridade do processo Notepad é Médio (Medium Mandatory Level).

A solução nesse caso é executar o notepad elevado (como administrador) antes de editar o arquivo para que o notepad seja executado no nível de integridade alto. É importante registrar que o arquivo deve ser aberto através do notepad, pois caso o arquivo for arrastado (recurso drag and drop) o notepad não irá abrir o arquivo decorrente da diferença dos níveis de integridade entre o notepad e o explorer.

Com a diretiva de integridade padrão, os processos podem abrir qualquer objeto — com exceção de processo e thread objetos — para acesso de leitura, desde que do objeto DACL conceda-lhes acesso de leitura. Isso significa que um processo executado em baixo IL pode abrir qualquer arquivo acessível para a conta de usuário em que ele está executando.

O modo protegido do Internet Explorer usa os níveis de integridade para ajudar a impedir que um malware modifique as configurações de conta de usuário. Entretanto, ele não impede o malware de realizar a leitura de documentos do usuário. O modo protegido do IE está habilitado por padrão para os sites da zona de segurança Internet.Os sites que pertencem à zona de internet são executados em um processo do IE que possuí o nível de integridade baixo. Consequentemente, o site só conseguirá gravar arquivos no recurso %userprofile%\appdata\LocalLow que possui o nível de integridade baixo.

Para verificar o nível de integridade de um diretório, utilize o seguinte comando:

icacls C:\Users\luisdem\appdata\locallow\temp

O resultado da execução do comando acima é:

NT AUTHORITY\SYSTEM:(OI)(CI)(F)

BUILTIN\Administrators:(OI)(CI)(F)

SOUTHAMERICA\luisdem:(OI)(CI)(F)

Mandatory Label\Low Mandatory Level:(I)(OI)(CI)(NW)

 

Nota: O utilitário icacls.exe não irá retornar o nível de integridade quando os objetos (arquivos, diretórios e chaves de registro) tiverem o nível médio. Isso ocorre devido ao nível médio de integridade ser o padrão.

 O modo protegido do IE redireciona o acesso aos diretórios do usuário para os diretórios correspondentes que possuem o nível de integridade baixo:

Localização

Modo Protegido Desativado

(IL Médio)

Modo Protegido Habilitado

(IL baixo)

Pasta Documentos

Não redireciona

%LOCALAPPDATA% \ Microsoft \ Windows \ Temporary Internet Files \ Virtualized \ C \ Users \ username \ Documents

C:\Windows

%LOCALAPPDATA% \ VirtualStore \ Windows

Access denied

HKCU\Software\Test

Não redireciona

HKCU \ Software \ Microsoft \ Internet Explorer \ InternetRegistry \ REGISTRY \ USER \ sid \ Software \ Test

HKLM\Software\Test

HKCU \ Software \ Classes \ VirtualStore \ MACHINE \ SOFTWARE \ Test

Access denied

Diretórios acessados quando o Modo Protegido está habilitado:

Leitura e Gravação

Localização

Cache

%userprofile%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low

Temp

%userprofile%\AppData\Local\Temp\Low

Cookies

%userprofile%\AppData\Roaming\Microsoft\Windows\Cookies\Low

History

%userprofile%\AppData\Local\Microsoft\Windows\History\Low