Compartilhar via


ReparsePointAware Classe

Definição

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.

Aplica-se a