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.
InSkillCoach
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
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+
Comentários
Os comentários são alimentados pelo GitHub Discussions
Conecte-se com o GitHub para participar da discussão