Segurança de buffer e direitos de acesso do console
O modelo de segurança do Windows oferece controle de acesso aos buffers de entrada do console e aos buffers da tela do console. Para obter mais informações sobre segurança, consulte Modelo de Controle de Acesso.
Descritores de segurança de objeto do console
Você pode especificar um descritor de segurança para a entrada do console e buffers de tela do console ao chamar a função CreateFile ou CreateConsoleScreenBuffer. Se você especificar NULO, o objeto receberá um descritor de segurança padrão. As ACLs no descritor de segurança padrão para um buffer do console vêm do token primário 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_WRITE genéricos.
Valor | Significado |
---|---|
GENERIC_READ (0x80000000L) | Solicita acesso de leitura ao buffer de tela do console para que o processo possa ler os dados do buffer. |
GENERIC_WRITE (0x40000000L) | Solicita acesso de gravação ao buffer de tela do console para que o processo possa gravar dados no buffer. |
Observação
Os aplicativos de console da Plataforma Universal do Windows e aqueles com nível de integridade inferior ao do console conectado ficarão impedidos de ler o buffer de saída e de gravar no buffer de entrada, mesmo que os descritores de segurança acima permitam. Confira a discussão Verbos incorretos abaixo para ver mais detalhes.
Verbos incorretos
Algumas operações para objetos de console serão negadas mesmo se o objeto tiver um descritor de segurança com permissão específica de leitura ou gravação. Essa condição se aplica especificamente a aplicativos de linha de comando em execução em um contexto de privilégio reduzido e que compartilham uma sessão de console criada por um aplicativo de linha de comando em um contexto mais permissivo.
O termo "verbos incorretos" se aplica à operação inversa ao fluxo normal para um dos objetos do console. Especificamente, o fluxo normal para o buffer de saída é realizar a gravação e o fluxo normal para o buffer de entrada é a leitura. Assim, o "caminho incorreto" é 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 de Console de Baixo Nível.
Os dois cenários em que a situação pode ser encontrada são:
- Aplicativos da Plataforma Universal do Windows. Como são primos de outros aplicativos da Plataforma Universal do Windows, eles estão isolados de outros aplicativos e oferecem garantias ao usuário sobre os efeitos de suas operações.
- Os aplicativos de console iniciados intencionalmente com um nível de integridade inferior à sessão existente por meio da manipulação de tokens ou de rótulos durante o CreateProcess.
Se um desses cenários for detectado, o console aplicará o sinalizador "verbos incorretos" à conexão do aplicativo de linha de comando e rejeitará chamadas às APIs a seguir 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, como se a permissão de leitura ou gravação tivesse sido negada pelos descritores de segurança no objeto.