Lab 4.3: Shadow Copies do Windows
Objetivos de Aprendizagem
Ao final deste laboratório, você será capaz de:
- Compreender o funcionamento das Shadow Copies
- Criar e gerenciar pontos de restauração
- Acessar versões anteriores de arquivos
- Entender as implicações de segurança (recuperação de dados sensíveis)
Duração Estimada
40 minutos
Pré-requisitos
- VM Windows 10/11
- Direitos de administrador
- Espaço em disco disponível (~2 GB mínimo)
Contexto Profissional
As Shadow Copies são usadas para:
- Recuperação de arquivos excluídos/modificados
- Backup sem interrupção de serviço
- Forense: Recuperação de dados históricos
- Segurança: Atacantes podem encontrar informações sensíveis
Parte 1: Compreendendo as Shadow Copies
Etapa 1.1: O que é Shadow Copy?
Shadow Copy (ou VSS - Volume Shadow Copy Service) é um serviço do Windows que cria "instantâneos" do sistema de arquivos em um determinado momento.
Características:
- Backup em nível de bloco
- Funciona mesmo com arquivos abertos
- Usado para Restauração do Sistema e backups do Windows
- Armazenado em um espaço reservado no volume
Etapa 1.2: Verificar o serviço VSS
# Status do serviço
Get-Service VSS
# Iniciar se necessário
Start-Service VSS
Etapa 1.3: Listar as Shadow Copies existentes
# Método 1: vssadmin
vssadmin list shadows
# Método 2: WMI
Get-WmiObject Win32_ShadowCopy | Select-Object ID, InstallDate, VolumeName
Pergunta 1: Quantas Shadow Copies existem no seu sistema?
Parte 2: Criando Shadow Copies
Etapa 2.1: Ativar a proteção do sistema
# Verificar se a proteção está ativada para C:
Get-ComputerRestorePoint -ErrorAction SilentlyContinue
# Ativar via GUI
# Painel de Controle > Sistema > Proteção do Sistema
Via PowerShell (necessita elevação):
# Ativar a proteção em C:
Enable-ComputerRestore -Drive "C:\"
# Verificar
vssadmin list shadowstorage
Etapa 2.2: Criar um ponto de restauração
# Criar um ponto de restauração
Checkpoint-Computer -Description "Lab Shadow Copy Test" -RestorePointType MODIFY_SETTINGS
# Verificar
Get-ComputerRestorePoint | Select-Object -Last 3
Etapa 2.3: Criar uma Shadow Copy diretamente
# Criar uma Shadow Copy via WMI
$class = [WMICLASS]"root\cimv2:Win32_ShadowCopy"
$shadow = $class.Create("C:\", "ClientAccessible")
if ($shadow.ReturnValue -eq 0) {
Write-Host "Shadow Copy criada com sucesso" -ForegroundColor Green
Write-Host "ID: $($shadow.ShadowID)"
} else {
Write-Host "Erro: $($shadow.ReturnValue)" -ForegroundColor Red
}
# Listar para verificar
vssadmin list shadows
Parte 3: Acessando as Shadow Copies
Etapa 3.1: Método GUI - Versões anteriores
- Clique com o botão direito em um arquivo ou pasta
- Propriedades
- Aba "Versões anteriores"
- Selecione uma versão e "Restaurar" ou "Abrir"
Etapa 3.2: Método linha de comando
# Listar as Shadow Copies com seus caminhos
$shadows = Get-WmiObject Win32_ShadowCopy
foreach ($shadow in $shadows) {
Write-Host "Data: $($shadow.InstallDate)" -ForegroundColor Yellow
Write-Host "Path: $($shadow.DeviceObject)"
Write-Host ""
}
Etapa 3.3: Montar uma Shadow Copy
# Obter o caminho da shadow copy
$shadow = Get-WmiObject Win32_ShadowCopy | Select-Object -Last 1
$shadowPath = $shadow.DeviceObject
# Criar um link simbólico
$linkPath = "C:\ShadowMount"
cmd /c mklink /d $linkPath "$shadowPath\"
# Explorar a shadow copy
Get-ChildItem $linkPath
# Acessar os arquivos
Get-ChildItem "$linkPath\Users" -ErrorAction SilentlyContinue
Etapa 3.4: Explorar via caminho UNC
As Shadow Copies são acessíveis por um caminho especial:
# Formato: \\localhost\C$\@GMT-YYYY.MM.DD-HH.MM.SS\
# Mas é mais fácil via DeviceObject
# Listar uma pasta específica na shadow
$shadowPath = (Get-WmiObject Win32_ShadowCopy | Select-Object -Last 1).DeviceObject
cmd /c dir "$shadowPath\Windows\System32\config\" 2>$null
Parte 4: Implicações de Segurança
Etapa 4.1: Riscos de segurança
Dados sensíveis nas Shadow Copies:
- Arquivos de configuração com senhas
- Bancos de dados
- Arquivos excluídos "definitivamente"
- Histórico de modificações
Etapa 4.2: Demonstração - Recuperar um arquivo excluído
# 1. Criar um arquivo "sensível"
$testFile = "C:\Temp\fichier_secret.txt"
New-Item -Path "C:\Temp" -ItemType Directory -Force | Out-Null
"Mot de passe: SuperSecret123!" | Out-File $testFile
Write-Host "Arquivo criado: $testFile" -ForegroundColor Green
# 2. Criar uma Shadow Copy
$class = [WMICLASS]"root\cimv2:Win32_ShadowCopy"
$shadow = $class.Create("C:\", "ClientAccessible")
Start-Sleep -Seconds 2
Write-Host "Shadow Copy criada" -ForegroundColor Green
# 3. Excluir o arquivo
Remove-Item $testFile -Force
Write-Host "Arquivo excluído" -ForegroundColor Yellow
# 4. Verificar se realmente foi excluído
if (-not (Test-Path $testFile)) {
Write-Host "Arquivo confirmado como excluído" -ForegroundColor Yellow
}
# 5. Recuperar da Shadow Copy
$latestShadow = Get-WmiObject Win32_ShadowCopy | Select-Object -Last 1
$shadowPath = $latestShadow.DeviceObject
# Acessar o arquivo na shadow
$recoveredPath = "$shadowPath\Temp\fichier_secret.txt"
$content = cmd /c type "$recoveredPath" 2>$null
if ($content) {
Write-Host "`nARQUIVO RECUPERADO da Shadow Copy:" -ForegroundColor Red
Write-Host $content -ForegroundColor Red
} else {
Write-Host "Nota: O arquivo deve ter sido criado ANTES da shadow copy"
}
Pergunta 2: Por que isso é um risco de segurança?
Etapa 4.3: Implicações para atacantes
Os atacantes podem usar as Shadow Copies para:
- Recuperar arquivos excluídos (credenciais, configs)
- Contornar proteções (arquivos bloqueados)
- Extrair dados históricos (versões antigas de arquivos)
Etapa 4.4: Acesso a arquivos de sistema sensíveis
# Os arquivos SAM/SYSTEM normalmente estão bloqueados
# Mas acessíveis via Shadow Copy!
$shadow = (Get-WmiObject Win32_ShadowCopy | Select-Object -Last 1).DeviceObject
# Verificar se é possível listar os arquivos de config
$configPath = "$shadow\Windows\System32\config"
Write-Host "Arquivos na Shadow Copy:" -ForegroundColor Yellow
cmd /c dir "$configPath" 2>$null
# Nota: Copiar esses arquivos permite extrair os hashes
# Isso é usado por ferramentas como secretsdump
Parte 5: Proteção e Limpeza
Etapa 5.1: Excluir as Shadow Copies
Atenção: Use com cautela em produção!
# Excluir TODAS as shadow copies (PERIGOSO!)
# vssadmin delete shadows /all /quiet
# Excluir a mais antiga
# vssadmin delete shadows /for=C: /oldest /quiet
# Excluir por ID
$shadowId = (Get-WmiObject Win32_ShadowCopy | Select-Object -First 1).ID
# Get-WmiObject Win32_ShadowCopy | Where-Object {$_.ID -eq $shadowId} | Remove-WmiObject
Etapa 5.2: Limitar o espaço das Shadow Copies
# Ver o espaço utilizado
vssadmin list shadowstorage
# Limitar o espaço (ex: 10% do volume)
# vssadmin resize shadowstorage /for=C: /maxsize=10%
Etapa 5.3: Script de segurança
# Script de verificação das Shadow Copies
Write-Host "=== AUDITORIA SHADOW COPIES ===" -ForegroundColor Cyan
# Contar as shadow copies
$shadows = Get-WmiObject Win32_ShadowCopy
Write-Host "`nNúmero de Shadow Copies: $($shadows.Count)"
# Espaço utilizado
Write-Host "`nEspaço Shadow Storage:" -ForegroundColor Yellow
vssadmin list shadowstorage 2>$null
# Listar as datas
if ($shadows) {
Write-Host "`nShadow Copies disponíveis:" -ForegroundColor Yellow
foreach ($s in $shadows) {
$date = [Management.ManagementDateTimeConverter]::ToDateTime($s.InstallDate)
Write-Host " - $date"
}
}
# Recomendações
Write-Host "`n=== RECOMENDAÇÕES ===" -ForegroundColor Cyan
Write-Host "1. Limitar o espaço de armazenamento do VSS"
Write-Host "2. Excluir regularmente as cópias antigas"
Write-Host "3. Não armazenar dados sensíveis em texto claro"
Write-Host "4. Monitorar o acesso às Shadow Copies"
Etapa 5.4: Limpeza do lab
# Excluir o link simbólico
if (Test-Path "C:\ShadowMount") {
cmd /c rmdir "C:\ShadowMount"
}
# Excluir os arquivos de teste
Remove-Item "C:\Temp\fichier_secret.txt" -Force -ErrorAction SilentlyContinue
Write-Host "Limpeza concluída" -ForegroundColor Green
Entregáveis
-
Respostas às 2 perguntas
-
Capturas de tela:
- Lista das Shadow Copies
- Acesso às versões anteriores
- Demonstração de recuperação
-
Relatório (1 página):
- Funcionamento das Shadow Copies
- Riscos de segurança identificados
- Recomendações de proteção
Critérios de Avaliação
| Critério | Pontos |
|---|---|
| Criação Shadow Copy | 25% |
| Acesso aos dados | 30% |
| Compreensão de segurança | 25% |
| Recomendações | 20% |
Comandos de Referência
# Serviço
Get-Service VSS
Start-Service VSS
# Listar
vssadmin list shadows
Get-WmiObject Win32_ShadowCopy
# Criar
Checkpoint-Computer -Description "Test"
([WMICLASS]"root\cimv2:Win32_ShadowCopy").Create("C:\", "ClientAccessible")
# Excluir
vssadmin delete shadows /for=C: /oldest
# Espaço
vssadmin list shadowstorage
vssadmin resize shadowstorage /for=C: /maxsize=10%
Recursos
Lab desenvolvido no âmbito do curso Sistemas Operacionais - MÓDULO 4