ECSS - Modulo 10

Criptografia, hash e assinatura digital

O aluno vai validar integridade de arquivos, assinar um script e proteger uma mensagem usando certificados locais. O exercicio usa recursos nativos do Windows e nao exige maquina adicional.

Cenario

A equipe de seguranca precisa comprovar que um arquivo nao foi alterado, proteger uma informacao sensivel e demonstrar que um script foi assinado por uma identidade confiavel.

Neste laboratorio, o aluno trabalha como analista e usa PowerShell para executar tarefas basicas de criptografia, integridade e assinatura digital em ambiente controlado.

Resumo

Duracao
35 a 50 min
VM principal
Windows 11
Opcional
Windows Server
Ferramentas
PowerShell, certutil
Custo extra
Nenhum

Objetivos do lab

  • Calcular hashes SHA-256 e MD5 de arquivos.
  • Comprovar que pequenas alteracoes mudam completamente o hash.
  • Criar certificado local para assinatura de codigo.
  • Assinar e validar um script PowerShell.
  • Criptografar e descriptografar uma mensagem com certificado local.
  • Relacionar os resultados com integridade, confidencialidade, autenticidade e nao repudio.

Antes de comecar

Execute os comandos no Windows 11 do seu student. Use PowerShell como administrador quando possivel. Nao use dados reais de clientes, alunos ou empresa.

1. Criar os arquivos de teste

Crie uma pasta local e dois arquivos simples para o exercicio.

New-Item -ItemType Directory -Path C:\ECSS-M10 -Force | Out-Null
"Relatorio financeiro interno - ECSS" | Out-File C:\ECSS-M10\relatorio.txt -Encoding utf8
"Write-Host 'Script aprovado pelo instrutor'" | Out-File C:\ECSS-M10\script-lab.ps1 -Encoding utf8
Get-ChildItem C:\ECSS-M10

Resultado esperado: os arquivos relatorio.txt e script-lab.ps1 aparecem em C:\ECSS-M10.

2. Calcular hashes do arquivo

Use dois algoritmos para comparar a saida. SHA-256 e preferivel para uso moderno; MD5 aparece aqui apenas para comparacao historica.

Get-FileHash C:\ECSS-M10\relatorio.txt -Algorithm SHA256
Get-FileHash C:\ECSS-M10\relatorio.txt -Algorithm MD5
certutil -hashfile C:\ECSS-M10\relatorio.txt SHA256

Anote: copie o hash SHA-256 original no seu relatorio.

3. Simular alteracao nao autorizada

Altere o conteudo do arquivo e compare o hash antigo com o novo.

$HashOriginal = (Get-FileHash C:\ECSS-M10\relatorio.txt -Algorithm SHA256).Hash
"Alteracao nao autorizada" | Add-Content C:\ECSS-M10\relatorio.txt
$HashNovo = (Get-FileHash C:\ECSS-M10\relatorio.txt -Algorithm SHA256).Hash
$HashOriginal
$HashNovo
$HashOriginal -eq $HashNovo

Resultado esperado: a comparacao retorna False. Isso mostra que o hash detecta perda de integridade.

4. Criar certificado para assinatura de codigo

Crie um certificado local de assinatura de codigo no perfil do usuario atual.

$cert = New-SelfSignedCertificate -Subject "CN=ECSS Lab Student" -Type CodeSigningCert -CertStoreLocation Cert:\CurrentUser\My
$cert.Thumbprint
Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert

Anote: o Thumbprint do certificado criado.

5. Assinar e validar o script

Assine o script criado no inicio do lab e veja o status da assinatura.

Set-AuthenticodeSignature -FilePath C:\ECSS-M10\script-lab.ps1 -Certificate $cert
Get-AuthenticodeSignature C:\ECSS-M10\script-lab.ps1 | Format-List Status,SignerCertificate

Se o status aparecer como UntrustedRoot, significa que o script foi assinado, mas o certificado ainda nao e confiavel para o Windows. Para confiar no certificado apenas neste lab, execute:

Export-Certificate -Cert $cert -FilePath C:\ECSS-M10\ecss-code-signing.cer
Import-Certificate -FilePath C:\ECSS-M10\ecss-code-signing.cer -CertStoreLocation Cert:\CurrentUser\Root
Import-Certificate -FilePath C:\ECSS-M10\ecss-code-signing.cer -CertStoreLocation Cert:\CurrentUser\TrustedPublisher
Get-AuthenticodeSignature C:\ECSS-M10\script-lab.ps1 | Format-List Status

6. Criptografar uma mensagem com certificado

Crie um certificado de protecao de documentos e proteja um arquivo sensivel com CMS.

$encCert = New-SelfSignedCertificate -Subject "CN=ECSS Data Protection" -Type DocumentEncryptionCert -CertStoreLocation Cert:\CurrentUser\My
"Senha temporaria do lab: Pa`$`$w0rd" | Out-File C:\ECSS-M10\segredo.txt -Encoding utf8
Protect-CmsMessage -To $encCert -Path C:\ECSS-M10\segredo.txt -OutFile C:\ECSS-M10\segredo.cms
Get-Content C:\ECSS-M10\segredo.cms
Unprotect-CmsMessage -Path C:\ECSS-M10\segredo.cms

Resultado esperado: o arquivo segredo.cms nao mostra o texto original. O comando Unprotect-CmsMessage recupera a mensagem usando a chave privada local.

7. Evidencias para entregar

  • Hash SHA-256 original e hash apos alteracao.
  • Status da assinatura do script.
  • Print ou texto mostrando que a mensagem criptografada foi recuperada.
  • Resposta curta: qual controle garante integridade? Qual controle garante confidencialidade?

Perguntas de revisao

  1. Por que o hash muda mesmo com uma pequena alteracao no arquivo?
  2. Qual e a diferenca entre hash e criptografia?
  3. O que uma assinatura digital prova sobre um arquivo?
  4. Por que um certificado autoassinado nao deve ser automaticamente confiado em producao?