0%
Segurança de Senhas no Windows: Guia Completo

Segurança de Senhas no Windows: Guia Completo

Descubra as melhores práticas para proteger as senhas do Windows, técnicas de gerenciamento e ferramentas de proteção.

I

InSkillCoach

· min

Segurança de Senhas no Windows: Guia Completo

O gerenciamento seguro de senhas é um aspecto fundamental da cibersegurança no Windows. Este guia explora técnicas avançadas de proteção e gerenciamento de senhas.

1. Política de Senhas

Configuração Básica

# Configuração da política de senhas
net accounts /minpwlen:12 /maxpwage:90 /minpwage:1 /uniquepw:24

# Ativação da complexidade
secedit /configure /cfg C:\Windows\Security\templates\secsetup.inf /areas SECURITYPOLICY

# Configuração via GPO
gpupdate /force

Parâmetros Avançados

# Configuração detalhada
$passwordPolicy = @{
    "MinimumLength" = 12
    "MaximumAge" = 90
    "MinimumAge" = 1
    "ComplexityEnabled" = $true
    "ReversibleEncryptionEnabled" = $false
    "PasswordHistorySize" = 24
}

# Aplicação dos parâmetros
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" -Name "RequireSignOrSeal" -Value 1

2. Gerenciamento de Contas

Criação de Contas

# Criação de uma conta com senha complexa
$password = ConvertTo-SecureString "P@ssw0rd123!" -AsPlainText -Force
New-LocalUser -Name "User1" -Password $password -PasswordNeverExpires $false -UserMayNotChangePassword $false

# Configuração das permissões
$acl = Get-Acl "C:\Users\User1"
$acl.SetAccessRuleProtection($true, $false)
Set-Acl "C:\Users\User1" $acl

Gerenciamento de Grupos

# Criação de um grupo de segurança
New-LocalGroup -Name "SecurityAdmins" -Description "Administrateurs de sécurité"

# Adição de usuários ao grupo
Add-LocalGroupMember -Group "SecurityAdmins" -Member "User1"

# Configuração dos direitos
$groupPolicy = @{
    "PasswordComplexity" = 1
    "MinimumLength" = 12
    "MaximumAge" = 90
}

3. Proteção das Senhas

Criptografia

# Criptografia das senhas armazenadas
$password = Read-Host -AsSecureString "Entrez le mot de passe"
$encrypted = ConvertFrom-SecureString $password

# Armazenamento seguro
$secureString = ConvertTo-SecureString $encrypted

Verificação de Força

# Script de verificação da força das senhas
function Test-PasswordStrength {
    param (
        [Parameter(Mandatory=$true)]
        [string]$Password
    )
    
    $score = 0
    if ($Password.Length -ge 12) { $score++ }
    if ($Password -match "[A-Z]") { $score++ }
    if ($Password -match "[a-z]") { $score++ }
    if ($Password -match "[0-9]") { $score++ }
    if ($Password -match "[^A-Za-z0-9]") { $score++ }
    
    return $score
}

4. Auditoria e Monitoramento

Configuração da Auditoria

# Ativação da auditoria de senhas
auditpol /set /category:"Account Logon" /success:enable /failure:enable
auditpol /set /category:"Account Management" /success:enable /failure:enable

# Configuração dos logs
wevtutil sl Security /maxsize:4294967296 /retention:true

Monitoramento das Tentativas

# Script de monitoramento das tentativas de login
function Monitor-LoginAttempts {
    $events = Get-EventLog -LogName Security -InstanceId 4625 -After (Get-Date).AddHours(-1)
    foreach ($event in $events) {
        Write-Host "Tentative échouée: $($event.TimeGenerated) - $($event.Message)"
    }
}

5. Recuperação e Redefinição

Procedimentos de Recuperação

# Criação de uma conta de recuperação
$recoveryPassword = ConvertTo-SecureString "Rec0v3ryP@ss" -AsPlainText -Force
New-LocalUser -Name "RecoveryAdmin" -Password $recoveryPassword -Description "Compte de récupération"

# Configuração dos direitos de recuperação
$recoveryGroup = New-LocalGroup -Name "RecoveryOperators"
Add-LocalGroupMember -Group "RecoveryOperators" -Member "RecoveryAdmin"

Redefinição Segura

# Script de redefinição de senha
function Reset-PasswordSecurely {
    param (
        [Parameter(Mandatory=$true)]
        [string]$Username
    )
    
    $newPassword = [System.Web.Security.Membership]::GeneratePassword(12, 3)
    $securePassword = ConvertTo-SecureString $newPassword -AsPlainText -Force
    Set-LocalUser -Name $Username -Password $securePassword
    
    # Notificação ao usuário
    Send-MailMessage -To "user@example.com" -Subject "Réinitialisation de mot de passe" -Body "Votre nouveau mot de passe est: $newPassword"
}

6. Boas Práticas

Políticas de Rotação

# Configuração da rotação das senhas
$rotationPolicy = @{
    "RotationInterval" = 90
    "NotificationDays" = 7
    "GracePeriod" = 3
}

# Script de notificação
function Send-PasswordExpirationNotice {
    $users = Get-LocalUser | Where-Object {$_.Enabled -eq $true}
    foreach ($user in $users) {
        $passwordAge = (Get-Date) - $user.PasswordLastSet
        if ($passwordAge.Days -ge ($rotationPolicy.RotationInterval - $rotationPolicy.NotificationDays)) {
            Send-MailMessage -To "$($user.Name)@example.com" -Subject "Expiration de mot de passe" -Body "Votre mot de passe expire dans $($rotationPolicy.RotationInterval - $passwordAge.Days) jours"
        }
    }
}

Gerenciamento de Exceções

# Gerenciamento das contas de serviço
function Set-ServiceAccountPassword {
    param (
        [Parameter(Mandatory=$true)]
        [string]$ServiceName
    )
    
    $service = Get-Service $ServiceName
    if ($service) {
        $newPassword = [System.Web.Security.Membership]::GeneratePassword(32, 5)
        $securePassword = ConvertTo-SecureString $newPassword -AsPlainText -Force
        
        # Atualização da senha da conta de serviço
        Set-LocalUser -Name $service.UserName -Password $securePassword
        
        # Reinício do serviço
        Restart-Service $ServiceName
    }
}

7. Ferramentas e Scripts

Verificação de Segurança

# Script de verificação da segurança das senhas
function Test-PasswordSecurity {
    $issues = @()
    
    # Verificação da política
    $policy = Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters"
    if ($policy.MinimumPasswordLength -lt 12) {
        $issues += "Longueur minimale insuffisante"
    }
    
    # Verificação das contas
    $accounts = Get-LocalUser | Where-Object {$_.Enabled -eq $true}
    foreach ($account in $accounts) {
        if ($account.PasswordRequired -eq $false) {
            $issues += "Compte $($account.Name) sans mot de passe requis"
        }
    }
    
    return $issues
}

Manutenção Automática

# Script de manutenção das senhas
function Update-PasswordSecurity {
    # Atualização da política
    net accounts /minpwlen:12 /maxpwage:90 /minpwage:1 /uniquepw:24
    
    # Verificação das contas
    $accounts = Get-LocalUser | Where-Object {$_.Enabled -eq $true}
    foreach ($account in $accounts) {
        if ($account.PasswordRequired -eq $false) {
            Set-LocalUser -Name $account.Name -PasswordRequired $true
        }
    }
    
    # Limpeza das senhas expiradas
    $expiredAccounts = Get-LocalUser | Where-Object {$_.PasswordExpires -and $_.PasswordLastSet -lt (Get-Date).AddDays(-90)}
    foreach ($account in $expiredAccounts) {
        Disable-LocalUser -Name $account.Name
    }
}

Conclusão

A segurança das senhas no Windows exige:

  • Uma política de senhas robusta
  • Um gerenciamento rigoroso das contas
  • Um monitoramento constante
  • Procedimentos de recuperação
  • Uma documentação precisa

Pontos-chave a lembrar:

  • Utilizar senhas complexas
  • Implementar uma rotação regular
  • Monitorar as tentativas de login
  • Manter procedimentos de recuperação
  • Documentar todas as ações
InSkillCoach

Sobre InSkillCoach

Especialista em treinamento e tecnologias

Coach especializado em tecnologias avançadas e IA, apoiado pela GNeurone Inc.

Certificações:

  • AWS Certified Solutions Architect – Professional
  • Certificações Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
1.7k
349

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!