Короткий ответ
Базовая проверка Windows Server (и типичной станции WS-042) — не pentest и не полный CIS. Это повторяемый срез: слушает ли RDP мир, жив ли SMBv1, кто в локальных админах и есть ли LAPS, включены ли firewall и Defender, насколько старый CU, открыт ли WinRM, есть ли аудит логонов. Результат — файлы в заявке, не «ну вроде нормально». Исправляйте по связанным статьям, не выключая защиту «чтобы быстрее снять отчёт».
Контур: домен contoso.example, DC DC01, пилот хост подставьте. Часть проверок с LTE (периметр), часть с hop в LAN.
Симптомы и как отличить
Это профилактика, не инцидент. Запускайте:
- перед сдачей сервера в прод;
- ежеквартально;
- после «временных» дыр (проброс 3389, firewall off).
| Цель | Не этот чеклист |
|---|---|
| Импорт Security Baseline | hardening |
| Расследование взлома | DFIR, не час среза |
| Только сеть без Windows | ping/traceroute, другой раздел |
| Полный CIS 400 пунктов | отдельный проект |
Возможные причины
- Нет регламента.
- Проверяют только антивирус на ПК директора.
- Сканер с LAN не видит открытый 3389 на WAN.
- Разные админы, нет общего чеклиста.
- Боязнь команд — ниже копипаста безопасных read-only съёмок.
Диагностика
Создайте каталог:
$h = $env:COMPUTERNAME
$dir = "C:\Temp\risk-$h-$(Get-Date -Format 'yyyyMMdd')"
New-Item -ItemType Directory -Force -Path $dir | Out-NullДальше все Out-File в $dir. На DC часть команд с RSAT.
1. Идентичность и патчи
Get-ComputerInfo | Select-Object CsName, WindowsProductName, WindowsVersion, OsBuildNumber, OsUptime |
Format-List | Out-File "$dir\os.txt"
Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 20 |
Format-Table -Auto | Out-File "$dir\hotfix.txt"Сверьте SLA с критическими обновлениями.
2. Периметр RDP / WinRM / SMB (локально)
Get-NetTCPConnection -State Listen | Where-Object LocalPort -in 22,80,443,445,3389,5985,5986,636,389 |
Select-Object LocalAddress, LocalPort | Sort-Object LocalPort |
Format-Table | Out-File "$dir\listen.txt"
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server' |
Select-Object fDenyTSConnections | Out-File "$dir\rdp-flag.txt"С LTE (не из офиса):
Test-NetConnection <WAN-IP> -Port 3389
Test-NetConnection <WAN-IP> -Port 5985
Test-NetConnection <WAN-IP> -Port 445True на 3389/5985/445 с улицы — критично: RDP, WinRM. 445 с WAN — немедленно закрыть.
3. SMB диалект и v1
Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol, EnableSMB2Protocol, RequireSecuritySignature |
Format-List | Out-File "$dir\smb.txt"
Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol |
Out-File "$dir\smb1-feature.txt"
Get-SmbSession | Select-Object ClientComputerName, Dialect, ClientUserName |
Out-File "$dir\smb-sessions.txt"См. SMBv1.
4. Локальные админы и LAPS
Get-LocalGroupMember Administrators | Out-File "$dir\local-admins.txt"
Get-LapsADPassword -Identity $h -ErrorAction SilentlyContinue |
Select-Object ComputerName, PasswordUpdateTime, ExpirationTimestamp |
Out-File "$dir\laps.txt"Get-LapsADPassword — с машины, где есть права чтения, не обязательно с самого хоста. Пустой laps.txt при живом ПК — LAPS / защита локального админа.
5. Firewall и Defender
Get-NetFirewallProfile | Format-Table Name, Enabled | Out-File "$dir\fw.txt"
Get-MpComputerStatus | Select-Object AntivirusEnabled, RealTimeProtectionEnabled,
AntivirusSignatureLastUpdated, AntivirusSignatureAge |
Format-List | Out-File "$dir\mp.txt"Off недопустимы как постоянное состояние: firewall, Defender, базы.
6. TLS на типичных портах (если есть IIS/LDAPS)
Get-TlsCipherSuite | Select-Object Name | Out-File "$dir\ciphers.txt"
Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols' -ErrorAction SilentlyContinue |
Out-File "$dir\schannel-keys.txt"7. Аудит и привилегии
auditpol /get /subcategory:"Logon","Security Group Management","Directory Service Changes" |
Out-File "$dir\auditpol.txt"
Get-WinEvent -LogName 'Microsoft-Windows-PowerShell/Operational' -MaxEvents 1 -ErrorAction SilentlyContinue |
Out-File "$dir\ps-log-alive.txt"
Get-ADGroupMember 'Domain Admins' -Recursive -ErrorAction SilentlyContinue |
Out-File "$dir\da-members.txt"На member-сервере AD-команды с RSAT/jump. См. логоны, группы, PS logging, DA daily.
8. BitLocker (ноутбуки/диски с секретами)
Get-BitLockerVolume -ErrorAction SilentlyContinue |
Select-Object MountPoint, VolumeStatus, ProtectionStatus |
Out-File "$dir\bitlocker.txt"Решение
Чеклист — не «лечение одной кнопкой». Приоритизация находок:
- Открытые 3389/445/5985 с WAN — закрыть в тот же день.
- Firewall/Defender off — включить с правилами, не оставить off.
- Общий локальный админ / нет LAPS.
- SMBv1 на DC/FS.
- CU старше SLA.
- Нет аудита логонов на DC.
- DA-учётки на рабочих станциях.
- Слабые TLS/cipher на интернет-сайтах.
- Admin shares с пользовательских ПК.
- Остальное — в бэклог hardening.
Каждый пункт ведёт в свою инструкцию этого раздела, не в «отключить защиту».
Как проверить, что проблема устранена
Повтор того же каталога команд через неделю после фиксов. Diff: WAN-порты False, SMB1 false, LAPS expiration заполнен, fw/mp True, hotfix дата в SLA. Функционально: пользователи входят, backup жив, RDP через VPN жив.
Храните отчёты не на самом проверяемом хосте единственной копией (скопируйте с jump).
Если не помогло
- Нет RSAT: снимайте локальные пункты, AD — с
DC01. - Server Core: те же cmdlet, без GUI.
- Третий AV:
Get-MpComputerStatusможет не отражать защиту — смотрите консоль вендора плюс firewall. - Кластер: проверяйте оба узла и CSV отдельно.
- Hyper-V: хост и гости — два среза.
Дальше полный hardening, не раздувайте этот час до CIS Level 2.
Профилактика
- Квартальный запуск чеклиста по всем серверам (оркестратор/jump).
- Алерт: 3389/WAN, firewall off, signature age, CU age.
- Онбординг сервера: чеклист обязателен до DNS в прод.
- Не считать зелёный ping заменой этого среза.
FAQ
Это заменяет pentest?
Нет. Это гигиена админа. Pentest ищете глубже (ADCS, делегирования). Без гигиены pentest найдёт 3389 и уйдёт.
Можно ли одним скриптом на весь домен?
Да, с учётки jump и журналом ошибок недоступных хостов. Не требуйте локального админа с каждой WS-042 под DA-учёткой daily.
Сколько времени
Один хост — 15–40 минут с LTE-проверкой. Парк — автоматизация тех же команд.
Нужен ли nmap?
Не обязательно. Test-NetConnection с улицы закрывает вопрос 3389. Внутренний скан портов — по политике, с окна.
Чеклист для DC vs member
На DC добавьте репликацию, LDAP listen только внутренние NIC, не SMBv1, аудит DS Changes. Не патчите единственный DC в том же «часе», что съёмка, без плана.
Куда класть отчёты
Шара с ACL админов, не Teams-чат с паролями LAPS. В laps.txt этого чеклиста не должно быть plaintext пароля (Get-LapsADPassword без -AsPlainText).