ReparsePointAware Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Coleção de funções de utilitário de Arquivo e Diretório que garantem que os arquivos e pastas que estão sendo interagidos não tenham pontos de nova análise do Windows em seus caminhos e que os caminhos no código correspondam aos caminhos reais no disco.
A injeção de ponto de nova análise é um vetor conhecido/comum de explorações de segurança. Confira aqui para obter mais informações gerais sobre eles: https://docs.microsoft.com/en-us/windows/win32/fileio/reparse-points
A meta desse conjunto de funções é obter um identificador de arquivo do Windows, verificar se ele está no caminho esperado e, em seguida, fazer todas as operações de arquivo com o mesmo identificador. NÃO é um padrão seguro verificar o arquivo e executar operações adicionais usando o caminho do arquivo, pois um invasor pode explorar a corrida entre o marcar do arquivo e a operação de arquivo com base no caminho do arquivo. Essa classe de ataque é conhecida como TOCTOU (Tempo de Verificação/Tempo de Uso). Para evitar isso, essa classe manterá o identificador de arquivo e executará todas as operações no identificador depois que ele for considerado no local correto. Como todas as operações são baseadas no identificador de arquivo, sabemos que estamos modificando o arquivo que verificamos estar correto.
public static class ReparsePointAware
type ReparsePointAware = class
Public Class ReparsePointAware
- Herança
-
ReparsePointAware
Métodos
CreateDirectory(String) |
Cria todos os diretórios e subdiretórios no caminho especificado. Se o caminho canônico do diretório contiver Pontos de Nova Análise do Windows, UnauthorizedAccessException será gerado. |
CreateText(String) |
Cria ou abre um arquivo para gravar texto codificado em UTF-8. Se abrir um arquivo existente, o arquivo será truncado. Se o caminho canônico do arquivo contiver Pontos de Nova Análise do Windows, UnauthorizedAccessException será gerado e nada será gravado. |
DeleteFile(String) |
Exclui o arquivo especificado. Se o caminho canônico do arquivo contiver Pontos de Nova Análise do Windows, UnauthorizedAccessException será gerado e nada será excluído. |
GetFinalPath(SafeFileHandle) |
Obtenha o caminho canônico completo para um determinado SafeFileHandle, com cada ponto de nova análise expandido. |
HasReparsePoints(SafeFileHandle, String) |
Verifica se o objeto do sistema de arquivos representado pelo SafeFileHandle tem um caminho canônico que corresponde ao expectedPath fornecido. |
MoveFile(String, String) |
Move um arquivo especificado para um novo local, oferecendo a opção de especificar um novo nome de arquivo. Se o caminho canônico do arquivo contiver Pontos de Nova Análise do Windows, UnauthorizedAccessException será gerado. |
OpenFile(String, FileMode, FileAccess, FileShare) |
Abre um System.IO.FileStream no caminho especificado, tendo o modo especificado com acesso de leitura, gravação ou leitura/gravação e a opção de compartilhamento especificada. Se o caminho canônico do arquivo contiver Pontos de Nova Análise do Windows, UnauthorizedAccessException será gerado. O OpenFile fixará o diretório primeiro antes de fazer qualquer operação de arquivo. Se a fixação do diretório falhar ou o diretório for um ReparsePoint, UnauthorizedAccessException será gerado. |
OpenRead(String) |
Abre um arquivo existente para leitura. Se o caminho canônico do arquivo contiver Pontos de Nova Análise do Windows, UnauthorizedAccessException será gerado. |
OpenWrite(String) |
Abre um arquivo existente ou cria um novo arquivo para gravação. Se o caminho canônico do arquivo contiver Pontos de Nova Análise do Windows, UnauthorizedAccessException será gerado. |
PinAndRequireNoReparsePoints(String, Boolean) |
Abre um SafeFileHandle para um arquivo ou diretório existente e confirma que o caminho canônico resultante corresponde ao do caminho fornecido. O SafeFileHandle resultante é IDisposable e pode ser usado em instruções using para garantir que as operações de arquivo subsequentes estejam gravando em caminhos sem pontos de nova análise. |
PinHandle(String, Boolean) |
Usa um identificador em um arquivo ou diretório existente para garantir que ele não possa se mover. |
RequireNoReparsePoints(String, Boolean) |
Gerará UnauthorizedAccessException se o caminho canônico não for o mesmo que expectedPath. |
RequireSamePath(SafeFileHandle, String) |
Gerará UnauthorizedAccessException se o caminho canônico de SafeFileHandle fornecido não for o mesmo que expectedPath. |
SetFileAttributeNormal(String) |
Verifica se um arquivo pode ser excluído definindo FileAttribute = Normal. Se não for possível definir o atributo, o usuário não terá direitos de acesso |
WriteAllText(String, String) |
Cria um novo arquivo, grava a cadeia de caracteres especificada no arquivo e fecha o arquivo. Se o arquivo de destino já existir, ele será substituído. Se o caminho canônico do arquivo contiver Pontos de Nova Análise do Windows, UnauthorizedAccessException será gerado e nada será gravado. |