Partilhar via


Segurança do buffer do console e direitos de acesso

O modelo de segurança do Windows permite controlar o acesso aos buffers de entrada do console e aos buffers de tela do console. Para obter mais informações sobre segurança, consulte Access-Control Model.

Descritores de segurança de objeto de console

Você pode especificar um descritor de segurança para a entrada do console e os buffers de tela do console ao chamar a função CreateFile ou CreateConsoleScreenBuffer . Se você especificar NULL , o objeto obterá um descritor de segurança padrão. As ACLs no descritor de segurança padrão para um buffer de console vêm do token principal ou de representação do criador.

Os identificadores retornados por CreateFile, CreateConsoleScreenBuffer e GetStdHandle têm os direitos de acesso GENERIC_READ e GENERIC_WRITE .

Os direitos de acesso válidos incluem os direitos de acesso GENERIC_READ e GENERIC_WRITEgenéricos.

Valor Significado
GENERIC_READ (0x80000000L) Solicita acesso de leitura ao buffer de tela do console, permitindo que o processo leia dados do buffer.
GENERIC_WRITE (0x40000000L) Solicita acesso de gravação ao buffer de tela do console, permitindo que o processo grave dados no buffer.

Observação

Os aplicativos de console da Plataforma Universal do Windows e aqueles com um nível de integridade inferior ao console conectado serão proibidos de ler o buffer de saída e gravar no buffer de entrada, mesmo que os descritores de segurança acima normalmente o permitam. Por favor, veja a discussão Wrong Way Verbs abaixo para obter mais detalhes.

Wrong-Way Verbos

Algumas operações para os objetos do console serão negadas mesmo se o objeto tiver um descritor de segurança que seja indicado para permitir especificamente a leitura ou a gravação. Isso diz respeito especificamente a aplicativos de linha de comando executados em um contexto de privilégios reduzidos que estão compartilhando uma sessão de console que foi criada por um aplicativo de linha de comando em um contexto mais permissivo.

O termo "verbos errados" destina-se a ser aplicado à operação que é o inverso do fluxo normal para um dos objetos do console. Especificamente, o fluxo normal para o buffer de saída é a gravação e o fluxo normal para o buffer de entrada é a leitura. O "caminho errado" seria, portanto, a leitura do buffer de saída ou a gravação do buffer de entrada. Essas são funções descritas na documentação de Funções de E/S do ConsoleLow-Level .

Os dois cenários em que isso pode ser encontrado são:

  1. Aplicativos de console da Plataforma Universal do Windows. Como estes são primos de outros aplicativos da Plataforma Universal do Windows, eles têm a promessa de que estão isolados de outros aplicativos e fornecem garantias ao usuário em torno dos efeitos de sua operação.
  2. Qualquer aplicativo de console intencionalmente iniciado com um nível de integridade mais baixo do que a sessão existente, o que pode ser realizado com rotulagem ou manipulação de token durante o CreateProcess.

Se um desses cenários for detetado, o console aplicará o sinalizador "verbos errados" à conexão do aplicativo de linha de comando e rejeitará chamadas para as seguintes APIs para reduzir a superfície de comunicação entre os níveis:

As chamadas rejeitadas receberão um código de erro de acesso negado , o mesmo que se a permissão de leitura ou gravação fosse negada pelos descritores de segurança no objeto.