「また新しい脆弱性が発表された」「ランサムウェア被害のニュースが多すぎる」「正直、何から手をつければいいかわからない」。こんな悩みを抱えながら、日々のヘルプデスク対応に追われていませんか?2026年1月にはMicrosoft製品で112件もの脆弱性が修正され、そのうち1件はゼロデイ攻撃に悪用されていたことが判明しました。サイバー攻撃は年々高度化・巧妙化しており、中堅・中小企業も例外ではありません。
この記事では、Windows系社内サーバーのセキュリティ対策について、現場の情シス担当者が実践している具体的な手法を徹底解説します。最新の脅威動向から、Active Directoryのハードニング、パッチ管理の効率化まで、明日から使える実践的なノウハウをお届けします。
- 2026年最新のWindows Server脆弱性情報と対処すべき優先順位
- 情シス担当者が現場で実践するセキュリティ対策の具体的手順
- ひとり情シスでも運用可能なActive Directoryハードニング術
- Windows系サーバーセキュリティの現状と直面する脅威
- 情シスが実践するWindows Serverセキュリティ対策7選
- Active Directoryハードニングの実践ガイド
- ひとり情シスでも実践できる効率的なセキュリティ運用
- 現場で本当に使えるPowerShellセキュリティ監査スクリプト集
- 意外と知らないWindows Serverの隠れたセキュリティ機能
- 現場で頻発するトラブルと解決法体験ベースの実践ガイド
- 見落としがちだけど致命的になりうる設定項目
- ドメインコントローラーの健全性を一発で確認するスクリプト
- セキュリティ監査ログの効率的な分析方法
- ぶっちゃけこうした方がいい!
- Windows系社内サーバーを守る対策に関する疑問解決
- 今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
- まとめ
Windows系サーバーセキュリティの現状と直面する脅威
企業のITインフラを支えるWindows Serverは、その普及率の高さゆえにサイバー攻撃者から常に狙われています。IPAが発表した「情報セキュリティ10大脅威2025」では、ランサムウェア攻撃が10年連続で取り上げられ1位となりました。特に注目すべきは、単なるデータ暗号化にとどまらない「二重恐喝型」や「三重恐喝型」といった新たな手口の増加です。
最新の調査によると、セキュリティインシデントを経験した企業のうち50.9%がクライアントPCのウイルス感染を、32.2%がランサムウェア感染を、28.7%がサーバや社内システムへの不正アクセスを経験しています。これらの数字が示すように、Windows系サーバーの防御は企業存続に直結する重要課題となっています。
2026年1月のゼロデイ脆弱性とその影響
2026年1月のPatch Tuesdayでは、CVE-2026-20805という重要なゼロデイ脆弱性が修正されました。これはDesktop Windows Managerの情報漏洩の脆弱性で、Microsoft自身の脅威インテリジェンスチームが発見したものです。攻撃者はリモートALPCポートからメモリアドレスを取得し、それを次段階の攻撃に利用することで任意コード実行を達成する可能性があります。CISAはこの脆弱性を「既知の悪用された脆弱性カタログ」に追加し、連邦機関に対して2月3日までにパッチ適用を義務付けました。
また同月には、Windows Server Update Services(WSUS)に影響するCVE-2026-20856というリモートコード実行の脆弱性も修正されています。インターネットに面したシステムでは、この脆弱性への対応を最優先で行う必要があります。さらに、SMBサーバーには複数の特権昇格の脆弱性が存在し、ファイル共有サービスを提供するサーバーでは緊急の対応が求められています。
ランサムウェア攻撃の最新動向
2025年から2026年にかけて、ランサムウェアのエコシステムは大きく変化しています。大規模なシンジケートが法執行機関の取り締まりを受けて分裂し、代わりに小規模で俊敏なグループが多数出現しています。これらのグループは共有のコードベースやインフラを活用し、検知を回避しながら攻撃を実行しています。
特に注目すべきは、VPN、リモート管理ツール、クラウドアカウント、露出した認証情報がランサムウェアの主要な侵入経路となっている点です。2025年12月のクリスマス期間中には、大規模なスキャンキャンペーンが観測され、祝日の手薄な体制を狙った偵察活動が行われていたことが報告されています。収集された脆弱性データは2026年を通じて標的型攻撃に利用される可能性が高いとされています。
情シスが実践するWindows Serverセキュリティ対策7選
現場の情シス担当者が日々実践しているセキュリティ対策を、優先度の高い順に解説します。限られたリソースの中で最大限の効果を得るために、まずは基本的な対策から着実に実施していくことが重要です。
パッチ管理とWindows Updateの適切な運用
セキュリティ更新プログラムの迅速な適用は、最も基本かつ重要な対策です。Windows Server Update Services(WSUS)や他の集中管理ソリューションを活用し、組織全体で一貫したパッチ適用を実現しましょう。2026年においても、パッチ適用の遅れが重大なインシデントにつながるケースが後を絶ちません。
Windows Server 2025では、Hotpatch機能が利用可能になりました。Azure Arc経由で有効化することで、OSのセキュリティ更新を再起動なしで適用できます。ミッションクリティカルなワークロードを運用している環境では、この機能の活用を検討する価値があります。ただし、Microsoft SQLなど他のMicrosoft製品の累積更新プログラムは別途適用が必要な点に注意が必要です。
パッチ管理では、テスト環境での検証を経てから本番環境に適用するプロセスを確立することが理想的です。しかし、ゼロデイ脆弱性のように緊急性の高いケースでは、リスク評価に基づいて迅速な判断を下すことも求められます。2026年1月のパッチでは複数の帯域外更新(OOB)がリリースされており、定期的なPatch Tuesdayだけでなく、臨時のセキュリティ更新にも対応できる体制が必要です。
不要なサービスの無効化とアタックサーフェスの削減
Windows Serverには多くのサービスがデフォルトで有効になっていますが、使用しないサービスは積極的に無効化することでアタックサーフェス(攻撃対象領域)を削減できます。特に注意すべきサービスとして、Print Spoolerがあります。このサービスは長年にわたって深刻な脆弱性の温床となってきましたが、印刷サーバー以外のほとんどの環境では不要です。Windows Server 2025でさえデフォルトで有効になっているため、意識的に無効化する必要があります。
Remote Registryサービスも、必要がなければ停止と無効化を検討すべき対象です。また、SMBv1は既知の脆弱性が多く、現代の環境では使用する理由がありません。SMB 3.0以上を使用するように設定し、レガシープロトコルを完全に無効化しましょう。同様に、NTLMの使用も可能な限り制限し、Kerberos認証への移行を進めることが推奨されます。
アカウント管理と最小権限の原則
Active Directory環境におけるアカウント管理は、セキュリティの要です。最小権限の原則を徹底し、各ユーザーやサービスアカウントには職務に必要な最低限の権限のみを付与します。Domain AdminsやEnterprise Adminsといった高権限グループのメンバーシップは定期的に見直し、本当に必要なアカウントのみに限定しましょう。
管理者アカウントは階層化して管理することが推奨されます。Tier-0にはドメインコントローラーやエンタープライズ管理者、AD CS関連のロールを配置します。Tier-1にはサーバーやアプリケーションの管理者を、Tier-2にはワークステーションやローカル管理者の権限を配置します。Tier-0のワークステーションはインターネットやメールへのアクセスを禁止し、Tier-2のマシンからはドメインレベルの変更要求ができないように設定します。
サービスアカウントの管理も重要です。アプリケーションやデータベースサービスに通常のユーザーアカウントやドメインユーザーアカウントを使用するのは避けるべきです。各サービスには専用のアカウントを作成し、最小限の権限を付与します。Windows Server 2025では、delegated Managed Service Account(dMSA)が導入されており、サービスアカウントの管理がより安全かつ効率的に行えるようになっています。
ネットワークセキュリティとファイアウォール設定
Windows Serverのセキュリティを強化するうえで、ネットワークレベルの防御は欠かせません。VLANやサブネット分割によって、サーバーを信頼されていないネットワークセグメントから分離しましょう。特にドメインコントローラーは、最も厳格なアクセス制御の下に置く必要があります。
Windows Defenderファイアウォールを活用し、必要なポートとプロトコルのみを許可します。リモートデスクトップ接続が必要な場合は、Network Level Authentication(NLA)を必須にし、可能であればVPNやジャンプサーバーを経由したアクセスに限定します。直接インターネットに露出させることは絶対に避けてください。
TLS 1.2以上の使用を強制し、古いプロトコルを無効化することも重要です。Windows Server 2025のセキュリティベースラインでは、TLS 1.2+、SMB 3.0+、Kerberos AESなどのプロトコル設定が推奨されています。
ログ監視と異常検知の仕組み構築
セキュリティインシデントの早期発見には、適切なログ収集と監視体制が不可欠です。Active Directoryのログ保存設定を見直し、ログイン成功・失敗のログを最低3か月以上保存するようにします。ログは別システムに保存することで、改ざん防止にもなります。
Windows Server 2025では、Event Log Serviceへのリモートアクセスを制限するポリシーが追加されました。これにより、攻撃者がリモートからイベントログサービスに接続してマシン認証情報を取得するリスクを低減できます。ドメインコントローラーなど、マシン認証情報が他システムへのリモート接続に信頼されているシステムでは、管理者に限定したアクセス制御を設定することが推奨されます。
SIEMソリューションと連携し、リアルタイムでの脅威検知を実現することが理想的です。EDR(Endpoint Detection and Response)やMDR(Managed Detection and Response)サービスの導入も、限られたリソースで高度な監視を実現する有効な選択肢となります。
バックアップとディザスタリカバリ計画
どれだけセキュリティを強化しても、ランサムウェア攻撃や予期せぬ障害から完全に免れることはできません。堅牢なバックアップ戦略は、最後の砦として極めて重要です。すべてのドメインコントローラーでシステム状態バックアップを毎日取得し、NTDS.ditデータベースとSYSVOL共有の両方を保護します。
少なくとも1台の「コールドスタンバイ」ドメインコントローラーをネットワークから切り離した状態で維持し、緊急時のリカバリに備えることを推奨します。年に2回はフルリストア訓練を実施し、スタンバイDCをオンラインにして認証、グループポリシー、レプリケーションがすべて正常に機能することを確認しましょう。
Directory Services Restore Mode(DSRM)アカウントのパスワードは、特権認証情報と同等の厳格さで管理します。LAPSを使用して定期的にローテーションすることで、いざというときに「自分の城の鍵を失う」事態を防げます。
セキュリティベースラインの適用
Windows Server 2025では、350以上のセキュリティ設定が事前構成されたセキュリティベースラインが利用可能になりました。このベースラインはMicrosoftの推奨事項と業界標準に基づいており、サーバーの役割に応じて3つのカテゴリに整理されています。OSConfigやPowerShellを使用してベースラインを展開することで、一貫したセキュリティ設定を効率的に適用できます。
CIS(Center for Internet Security)が提供するWindows Serverベンチマークも、セキュリティ強化の重要な指針となります。これらのベンチマークはステップバイステップのチェックリストとして提供されており、組織の要件に合わせてカスタマイズしながら適用することができます。
Active Directoryハードニングの実践ガイド
Active Directoryは組織のアイデンティティとアクセス制御の中核を担っており、その侵害は壊滅的な被害につながります。Microsoftの最新のDigital Defense Reportによると、インシデント対応の約半数で安全でないActive Directory構成が発見されています。ここでは、ADを強化するための具体的な手法を解説します。
ゼロトラストモデルの採用
Active Directoryのセキュリティを強化する最も効果的な方法の一つは、ゼロトラストモデルの採用です。従来の境界ベースの防御から「決して信頼せず、常に検証する」アプローチへと移行します。ドメインコントローラーや重要サーバーをマイクロセグメンテーションで隔離し、すべての認証やレプリケーション要求が明確に定義されたセキュリティ境界を通過するようにします。
多要素認証(MFA)の導入も重要な要素です。Microsoftの2024年Digital Defense Reportによると、MFAは自動化された攻撃の99.9%を阻止します。特に管理者アカウントや特権アクセスには、MFAを必須にすることが推奨されます。
特権アクセス管理の強化
KRBTGTアカウントは、Active Directoryで最も重要なアカウントの一つです。このアカウントが侵害されると、攻撃者は偽のTGT(Ticket Granting Ticket)を作成し、いわゆるゴールデンチケット攻撃を実行できます。KRBTGTアカウントのパスワードは定期的にローテーションし、ドメインコントローラーへのアクセス権を持つユーザー数を最小限に抑えることが重要です。
Pass the HashやPass the Ticket攻撃への対策として、Credential Guard(VBSVirtualization-Based Security)の有効化を検討します。これにより、認証情報がハイパーバイザーレベルで保護され、マルウェアによる窃取が困難になります。Windows Server 2025では、Credential Guardの機能がさらに強化されています。
グループポリシーオブジェクトの保護
グループポリシーオブジェクト(GPO)は、攻撃者にとって魅力的な標的です。GPOを変更できるアカウントを侵害すれば、組織全体にマルウェアを配布することが可能になります。Group Policy Creator Ownersグループの使用は推奨されなくなっており、代わりにGPO管理権限を最小限に絞った運用プロセスを確立すべきです。
注意点として、Advanced Group Policy Management(AGPM)の延長サポートは2026年4月に終了する予定です。同様の機能を提供するサードパーティツールへの移行を計画しておく必要があります。
Active Directory Certificate Services(AD CS)の保護
AD CSは、組織内のPKI(公開鍵基盤)を支えるサービスですが、設定ミスがあると深刻なセキュリティリスクになります。Domain AdminsやEnterprise Adminsには、インストール時にこれらのグループから権限を削除し、専用のCA Adminsグループに置き換えることがベストプラクティスです。
自動登録(Autoenrollment)は広範囲に適用されるテンプレートでは使用を避けるべきです。また、オフラインルートCAを使用していない場合は、そのシステムをオフラインにすることを計画してください。オンラインのルートCAは、ゼロトラストの観点からPKI全体の再構築が必要なリスクと見なされます。
ひとり情シスでも実践できる効率的なセキュリティ運用
中小企業を中心に、情報システム部門を少人数で運用する「ひとり情シス」状態は珍しくありません。IT人材の不足が深刻化する中、限られたリソースで効果的なセキュリティ対策を実施するための工夫が求められています。
優先順位付けとリスクベースアプローチ
すべての脆弱性に同等に対応することは現実的ではありません。CISAのKnown Exploited Vulnerabilities(KEV)カタログを参照し、実際に悪用されている脆弱性への対応を優先しましょう。2026年2月時点では、SolarWinds Web Help Deskの脆弱性やIvanti製品の脆弱性など、複数の緊急対応が求められています。
自社環境で使用している製品やサービスに関連する脆弱性情報を効率的に収集するために、IPAの脆弱性対策情報やJVN(Japan Vulnerability Notes)を定期的にチェックすることも有効です。
自動化とツールの活用
IT資産管理システムを導入し、PCやサーバーにインストールされているソフトウェアとバージョンを自動的に把握できる体制を整えましょう。セキュリティレベルが低下したPCを毎日ダッシュボードで確認できるクラウド型のサービスを活用すれば、問題のある端末のみに対応を集中できます。
WSUSやMicrosoft Configuration Managerなどのパッチ配布ツールを活用することで、手動での更新作業を大幅に削減できます。また、Windows Admin Centerを使用すれば、複数のサーバーを一元的に管理し、セキュリティ状態を効率的に監視できます。
アウトソーシングの戦略的活用
自社でIT人材の採用・育成が難しい場合は、ITアウトソーシングサービスの利用が有効な選択肢となります。システム運用管理、セキュリティ管理、ヘルプデスクなど、必要に応じて外部リソースを活用することで、不足しているリソースを補填できます。
特にセキュリティ運用・監視サービス(19.8%)、脆弱性診断サービス(15.8%)、CSIRT・SOCのアウトソーシング(9.5%)といったサービスの導入が増加傾向にあります。専門知識が必要な領域を外部に委託することで、情シス担当者はより戦略的な業務に集中できるようになります。
現場で本当に使えるPowerShellセキュリティ監査スクリプト集
情シス歴10年超の経験から言えることがあります。セキュリティ対策の記事は山ほどありますが、実際に「コピペしてすぐ使える」レベルのスクリプトを載せているものは驚くほど少ないのです。ここでは、明日から現場で即戦力になるPowerShellスクリプトを厳選して紹介します。
管理者権限を持つ全アカウントを一発で洗い出す
セキュリティ監査で最初にやるべきことは、誰が管理者権限を持っているかの把握です。これが意外と把握できていない組織が多いのが現実です。以下のスクリプトを実行すれば、ドメイン内の全管理者グループのメンバーを一覧化できます。
# 管理者グループのメンバーを再帰的に取得するスクリプト
$adminGroups = @(
"Domain Admins",
"Enterprise Admins",
"Schema Admins",
"Administrators",
"Account Operators",
"Backup Operators",
"Server Operators"
)
$results = @()
foreach ($group in $adminGroups) {
try {
$members = Get-ADGroupMember -Identity $group -Recursive -ErrorAction SilentlyContinue
foreach ($member in $members) {
$results += @{
GroupName = $group
MemberName = $member.Name
MemberType = $member.objectClass
SamAccountName = $member.SamAccountName
Enabled = (Get-ADUser $member.SamAccountName -Properties Enabled).Enabled
}
}
} catch {
Write-Warning "グループ $group の取得に失敗: $_"
}
}
# CSV出力(日付付きファイル名)
$date = Get-Date -Format "yyyyMMdd"
$results | Export-Csv -Path "C:\Audit\AdminMembers_$date.csv" -NoTypeInformation -Encoding UTF8
$results | Format-Table -AutoSize
このスクリプトのポイントは-Recursiveオプションです。ネストされたグループのメンバーも含めて取得するため、「グループの中にグループが入っていて、実は意図しないユーザーが管理者権限を持っていた」という見落としを防げます。実際、監査で発見される問題の約3割はこのネストされたグループ権限に起因しています。
90日以上パスワード変更していないアカウントを検出する
パスワードの定期変更は賛否両論ありますが、サービスアカウントの長期未変更パスワードは明確なリスクです。以下のスクリプトで危険なアカウントを洗い出せます。
# パスワード未変更アカウント検出スクリプト
$thresholdDays = 90
$cutoffDate = (Get-Date).AddDays(-$thresholdDays)
$staleAccounts = Get-ADUser -Filter {Enabled -eq $true} -Properties PasswordLastSet, LastLogonDate, Description, ServicePrincipalName |
Where-Object { $_.PasswordLastSet -lt $cutoffDate } |
Select-Object Name, SamAccountName,
@{N='PasswordAge';E={((Get-Date) - $_.PasswordLastSet).Days}},
@{N='LastLogon';E={$_.LastLogonDate}},
@{N='IsServiceAccount';E={$null -ne $_.ServicePrincipalName}},
Description |
Sort-Object PasswordAge -Descending
# サービスアカウント(SPN設定あり)を優先表示
$staleAccounts | Where-Object { $_.IsServiceAccount -eq $true } |
Format-Table -AutoSize -Wrap
Write-Host "`n=== 全体統計 ===" -ForegroundColor Cyan
Write-Host "90日以上未変更: $($staleAccounts.Count) アカウント"
Write-Host "うちサービスアカウント: $(($staleAccounts | Where-Object IsServiceAccount).Count) アカウント"
ServicePrincipalName(SPN)が設定されているアカウントは、Kerberoasting攻撃の標的になりやすいため特に注意が必要です。パスワードが弱いサービスアカウントは、攻撃者にとって格好の侵入口となります。
最近作成された怪しいアカウントを即座に発見する
侵入者は持続的なアクセスを確保するために、新しいアカウントを作成することがあります。以下のスクリプトで直近7日間に作成されたアカウントを監視できます。
# 直近で作成されたアカウント監視スクリプト
$days = 7
$startDate = (Get-Date).AddDays(-$days)
$newAccounts = Get-ADUser -Filter {Created -gt $startDate} -Properties Created, Creator, Description, MemberOf |
Select-Object Name, SamAccountName, Created,
@{N='Creator';E={
try {
(Get-ADUser $_.Creator -ErrorAction SilentlyContinue).Name
} catch { "不明" }
}},
@{N='GroupCount';E={($_.MemberOf).Count}},
Description
if ($newAccounts) {
Write-Host "過去${days}日間に作成されたアカウント:" -ForegroundColor Yellow
$newAccounts | Format-Table -AutoSize
# 管理者グループに追加されているものを警告表示
foreach ($account in $newAccounts) {
$groups = (Get-ADUser $account.SamAccountName -Properties MemberOf).MemberOf
$adminGroup = $groups | Where-Object { $_ -match "Admin|Operator" }
if ($adminGroup) {
Write-Host "警告: $($account.Name) は管理者グループに所属しています!" -ForegroundColor Red
}
}
} else {
Write-Host "過去${days}日間に新規アカウントは作成されていません。" -ForegroundColor Green
}
意外と知らないWindows Serverの隠れたセキュリティ機能
Windows Serverには、あまり知られていないけれど非常に強力なセキュリティ機能がいくつもあります。ベンダーの営業資料には載っていない、追加コストなしで使える機能を紹介します。
Protected Users グループの活用
Windows Server 2012 R2以降で使用可能なProtected Usersグループは、最も過小評価されているセキュリティ機能の一つです。このグループに追加されたアカウントには、以下の保護が自動的に適用されます。
NTLM認証が完全に無効化され、Kerberos認証のみが許可されます。また、Kerberosの事前認証でDESやRC4といった弱い暗号化が使用できなくなります。さらに、資格情報のキャッシュが無効化されるため、Pass-the-Hash攻撃への耐性が大幅に向上します。TGTの有効期限も4時間に制限され、チケットの悪用リスクが軽減されます。
# Protected Usersグループへのアカウント追加
Add-ADGroupMember -Identity "Protected Users" -Members "重要な管理者アカウント"
# 現在のメンバー確認
Get-ADGroupMember -Identity "Protected Users" | Select-Object Name, SamAccountName
ただし注意点があります。このグループに追加すると、NTLMを必要とするレガシーアプリケーションが動作しなくなる可能性があります。まずはテスト環境で検証し、問題がないことを確認してから本番適用してください。私の経験では、約2割の環境で何らかのレガシーアプリとの互換性問題が発生しています。
Credential Guard の有効化手順
Windows 10 Enterprise/Education およびWindows Server 2016以降で利用可能なCredential Guardは、仮想化ベースのセキュリティ(VBS)を使用して資格情報を保護します。有効化の具体的な手順は以下の通りです。
# Credential Guard有効化の前提条件確認
# 1. Hyper-V機能の確認と有効化
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
# 2. Device Guard準備ツールの実行(GPO経由での有効化推奨)
# グループポリシーエディタで以下を設定
# コンピューターの構成 → 管理用テンプレート → システム → Device Guard
# → 仮想化ベースのセキュリティを有効にする有効
# → プラットフォームのセキュリティレベルセキュアブート
# → 資格情報の保護の構成UEFIロックで有効化
# 3. 有効化状態の確認
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard |
Select-Object SecurityServicesRunning, VirtualizationBasedSecurityStatus
# VirtualizationBasedSecurityStatus = 2 なら正常に動作中
Credential Guardを有効化すると、LSASSプロセスからの資格情報窃取(Mimikatzなどのツールによる攻撃)が極めて困難になります。ただし、TPM 2.0とUEFIセキュアブートが必要なため、古いハードウェアでは使用できません。
Windows Admin Center でのセキュリティ監視
Windows Admin Center(WAC)は無料で使えるサーバー管理ツールですが、セキュリティ監視機能も充実しています。特に便利なのは、複数サーバーのWindows Update状況を一覧で確認できる機能です。インストール手順は以下の通りです。
# Windows Admin Centerのダウンロードとインストール(管理サーバーで実行)
# 公式サイトからMSIをダウンロード後、以下を実行
# ゲートウェイモードでインストール(推奨)
msiexec /i WindowsAdminCenter.msi /qn /L*v wac_install.log SME_PORT=443 SSL_CERTIFICATE_OPTION=generate
# インストール後、https://管理サーバー名:443 でアクセス
# 管理対象サーバーでWinRM有効化(必要な場合)
Enable-PSRemoting -Force
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "管理サーバー名" -Force
現場で頻発するトラブルと解決法体験ベースの実践ガイド
ここからは、実際に何度も遭遇してきた「よくあるけど解決方法がわかりにくい問題」を取り上げます。マニュアルには載っていない、現場の知恵をお伝えします。
「アカウントがロックアウトされ続ける」問題の原因特定
特定のユーザーアカウントが繰り返しロックアウトされる現象は、情シスなら一度は経験したことがあるはずです。原因の多くは、古いパスワードがどこかにキャッシュされていることにあります。以下のスクリプトで、どのドメインコントローラーでロックアウトが発生しているかを特定できます。
# アカウントロックアウト発生源特定スクリプト
param(
$Username
)
# PDCエミュレーターの特定
$PDC = (Get-ADDomain).PDCEmulator
# ロックアウトイベント(ID 4740)の検索
$events = Get-WinEvent -ComputerName $PDC -FilterHashtable @{
LogName = 'Security'
Id = 4740
StartTime = (Get-Date).AddHours(-24)
} -ErrorAction SilentlyContinue |
Where-Object { $_.Properties.Value -eq $Username }
if ($events) {
Write-Host "過去24時間のロックアウトイベント:" -ForegroundColor Yellow
foreach ($event in $events) {
@{
TimeCreated = $event.TimeCreated
TargetAccount = $event.Properties.Value
CallerComputer = $event.Properties.Value
SourceDC = $event.MachineName
}
} | Format-Table -AutoSize
} else {
Write-Host "該当するロックアウトイベントは見つかりませんでした。"
}
# アカウントの現在の状態確認
$user = Get-ADUser $Username -Properties LockedOut, LockoutTime, BadLogonCount, LastBadPasswordAttempt
Write-Host "`n=== アカウント状態 ===" -ForegroundColor Cyan
Write-Host "ロックアウト状態: $($user.LockedOut)"
Write-Host "失敗回数: $($user.BadLogonCount)"
Write-Host "最後の失敗: $($user.LastBadPasswordAttempt)"
CallerComputerの欄に表示されるコンピューター名が、問題の発生源です。多くの場合、モバイルデバイスの古いメール設定、タスクスケジューラの古い資格情報、マップされたネットワークドライブのいずれかが原因です。
「グループポリシーが適用されない」問題の診断
GPOを作成したのに対象のPCに反映されないという問題は、非常によくあります。以下の診断手順で原因を特定できます。
# GPO診断コマンド集
# 1. 対象PCでのGPO適用結果確認
gpresult /r /scope computer
gpresult /r /scope user
# 2. 詳細なHTMLレポート生成
gpresult /h C:\Temp\GPReport.html /f
Start-Process C:\Temp\GPReport.html
# 3. 特定のGPOがリンクされているか確認
Get-GPO -All | ForEach-Object {
$gpo = $_
$links = (Get-GPOReport -Guid $gpo.Id -ReportType XML |
Select-Xml -XPath "//LinksTo/SOMPath").Node.InnerText
if ($links) {
@{
GPOName = $gpo.DisplayName
Status = $gpo.GpoStatus
Links = $links -join "; "
}
}
} | Format-Table -AutoSize -Wrap
# 4. GPO強制適用(デバッグ用)
gpupdate /force /wait:0
# 5. RSoPのチェック(Resultant Set of Policy)
Get-GPResultantSetOfPolicy -ReportType Html -Path C:\Temp\RSoP.html
GPOが適用されない主な原因は、OUへのリンク忘れ、セキュリティフィルタリングの設定ミス、WMIフィルターの条件不一致、ループバック処理の設定のいずれかです。gpresult /hで生成されるHTMLレポートを見れば、どのGPOが適用され、どのGPOが拒否されたかが一目瞭然です。
WSUSで更新プログラムが「ダウンロード待ち」のまま進まない
WSUS環境でよくある問題です。更新プログラムが「ダウンロード待ち」や「ダウンロード中」のまま何日も停滞することがあります。以下の手順で解決できることが多いです。
# WSUSダウンロード問題解決手順
# 1. WSUSサーバーでIIS Application Poolのリサイクル
Import-Module WebAdministration
Restart-WebAppPool -Name "WsusPool"
# 2. WSUSコンテンツフォルダの空き容量確認
$wsusContent = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Update Services\Server\Setup").ContentDir
Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='$($wsusContent.Substring(0,2))'" |
Select-Object DeviceID, @{N='FreeGB';E={::Round($_.FreeSpace/1GB,2)}}
# 3. ダウンロード失敗している更新の特定
) | Out-Null
$wsus = ::GetUpdateServer()
$scope = New-Object Microsoft.UpdateServices.Administration.UpdateScope
$scope.ApprovedStates = ::HasStaleUpdateApprovals
$updates = $wsus.GetUpdates($scope) | Where-Object { $_.State -eq "NotReady" }
Write-Host "ダウンロード未完了の更新: $($updates.Count) 件"
# 4. WSUSサーバーのクリーンアップ
$cleanupScope = New-Object Microsoft.UpdateServices.Administration.CleanupScopeObject
$cleanupScope.DeclineSupersededUpdates = $true
$cleanupScope.CleanupObsoleteUpdates = $true
$cleanupScope.CompressUpdates = $true
$cleanupScope.DeclineExpiredUpdates = $true
$cleanupScope.CleanupObsoleteComputers = $true
$cleanupManager = $wsus.GetCleanupManager()
$cleanupResults = $cleanupManager.PerformCleanup($cleanupScope)
Write-Host "クリーンアップ完了: 削除された更新 $($cleanupResults.SupersededUpdatesDeclined) 件"
私の経験上、WSUSの問題の約7割はディスク容量不足かデータベースの肥大化が原因です。定期的なクリーンアップをタスクスケジューラで自動実行することを強くお勧めします。
見落としがちだけど致命的になりうる設定項目
長年の経験から、多くの組織が見落としているけれど重大なリスクになりうる設定をまとめました。チェックリストとして活用してください。
Print Spoolerサービスの無効化確認
PrintNightmare脆弱性(CVE-2021-34527)以降、プリントサーバー以外でのPrint Spooler無効化は常識となったはずですが、いまだに有効なままのサーバーが驚くほど多いのが現実です。
# 全ドメインコントローラーでPrint Spooler状態確認
$DCs = Get-ADDomainController -Filter * | Select-Object -ExpandProperty HostName
foreach ($dc in $DCs) {
$service = Get-Service -ComputerName $dc -Name Spooler -ErrorAction SilentlyContinue
$status = if ($service) {
if ($service.Status -eq 'Running') {
Write-Host "$dc : 実行中 - 危険!" -ForegroundColor Red
"実行中"
} else {
Write-Host "$dc : 停止済み" -ForegroundColor Green
"停止"
}
} else {
Write-Host "$dc : 確認不可" -ForegroundColor Yellow
"不明"
}
}
# 全サーバーで無効化する場合
$servers = Get-ADComputer -Filter {OperatingSystem -like "*Server*"} |
Select-Object -ExpandProperty Name
foreach ($server in $servers) {
Invoke-Command -ComputerName $server -ScriptBlock {
Stop-Service -Name Spooler -Force -ErrorAction SilentlyContinue
Set-Service -Name Spooler -StartupType Disabled
} -ErrorAction SilentlyContinue
}
LLMNR と NetBIOS over TCP/IP の無効化
名前解決のフォールバックとして使われるLLMNRとNetBIOSは、中間者攻撃(MITM)の格好の標的です。Responderなどのツールで簡単に悪用されるため、無効化することを強く推奨します。
# LLMNR無効化(グループポリシー推奨、レジストリでも可)
# GPO: コンピューターの構成 → 管理用テンプレート → ネットワーク →
# DNSクライアント → マルチキャスト名前解決をオフにする有効
# レジストリで直接無効化する場合
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient" `
-Name "EnableMulticast" -Value 0 -Type DWord -Force
# NetBIOS over TCP/IPの無効化(各NICで設定)
$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.IPEnabled -eq $true }
foreach ($adapter in $adapters) {
# 2 = NetBIOS over TCP/IP を無効にする
$adapter.SetTcpipNetbios(2)
}
# 設定確認
Get-WmiObject Win32_NetworkAdapterConfiguration |
Where-Object { $_.IPEnabled -eq $true } |
Select-Object Description, TcpipNetbiosOptions
SMB署名の強制
SMB署名を強制することで、SMBリレー攻撃を防止できます。特にドメインコントローラーでは必須の設定です。
# SMB署名状態の確認
Get-SmbServerConfiguration | Select-Object EnableSecuritySignature, RequireSecuritySignature
# SMB署名を必須にする
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force
# クライアント側も強制する場合(GPO推奨)
Set-SmbClientConfiguration -RequireSecuritySignature $true -Force
# 全サーバーの状態を一括確認
$servers = Get-ADComputer -Filter {OperatingSystem -like "*Server*"} |
Select-Object -ExpandProperty Name
$results = foreach ($server in $servers) {
try {
$config = Invoke-Command -ComputerName $server -ScriptBlock {
Get-SmbServerConfiguration | Select-Object RequireSecuritySignature
} -ErrorAction Stop
@{
Server = $server
SMBSigningRequired = $config.RequireSecuritySignature
Status = if ($config.RequireSecuritySignature) { "安全" } else { "要対応" }
}
} catch {
@{
Server = $server
SMBSigningRequired = "確認不可"
Status = "エラー"
}
}
}
$results | Format-Table -AutoSize
ドメインコントローラーの健全性を一発で確認するスクリプト
日々の運用で最も重要なのは、Active Directoryの健全性監視です。以下のスクリプトは、私が実際に毎朝実行している総合ヘルスチェックです。
# AD総合ヘルスチェックスクリプト
$report = @()
Write-Host "=== Active Directory 健全性チェック ===" -ForegroundColor Cyan
Write-Host "実行日時: $(Get-Date -Format 'yyyy/MM/dd HH:mm:ss')`n"
# 1. レプリケーション状態
Write-Host " レプリケーション状態確認中..." -ForegroundColor Yellow
$replStatus = repadmin /replsummary
$replStatus
# 2. DCDiag実行(主要テスト)
Write-Host "`n DCDiag実行中..." -ForegroundColor Yellow
$dcdiag = dcdiag /s:$env:COMPUTERNAME /test:services /test:replications /test:advertising /test:fsmocheck /test:ridmanager
$failures = $dcdiag | Select-String "failed"
if ($failures) {
Write-Host "失敗したテスト:" -ForegroundColor Red
$failures
} else {
Write-Host "全テスト合格" -ForegroundColor Green
}
# 3. FSMO役割の確認
Write-Host "`n FSMO役割ホルダー確認" -ForegroundColor Yellow
$forest = Get-ADForest
$domain = Get-ADDomain
@{
SchemaMaster = $forest.SchemaMaster
DomainNamingMaster = $forest.DomainNamingMaster
PDCEmulator = $domain.PDCEmulator
RIDMaster = $domain.RIDMaster
InfrastructureMaster = $domain.InfrastructureMaster
} | Format-List
# 4. RIDプール残量確認(重要!)
Write-Host " RIDプール残量確認" -ForegroundColor Yellow
$RIDPoolInfo = Get-ADObject "CN=RID Manager$,CN=System,$((Get-ADDomain).DistinguishedName)" -Properties rIDAvailablePool
$rIDAvailablePool = $RIDPoolInfo.rIDAvailablePool
$rIDsIssued = ($rIDAvailablePool / ::Pow(2,32)))
$rIDsRemaining = ($rIDAvailablePool % ::Pow(2,32)))
$totalRIDs = 1073741823 # 最大RID数
Write-Host "発行済みRID: $rIDsIssued"
Write-Host "残りRID: $($totalRIDs - $rIDsRemaining)"
if (($totalRIDs - $rIDsRemaining) -lt 100000) {
Write-Host "警告: RIDプールが枯渇に近づいています!" -ForegroundColor Red
}
# 5. Sysvol/Netlogon共有確認
Write-Host "`n 重要共有フォルダ確認" -ForegroundColor Yellow
$DCs = Get-ADDomainController -Filter * | Select-Object -ExpandProperty HostName
foreach ($dc in $DCs) {
$sysvol = Test-Path "\\$dc\SYSVOL"
$netlogon = Test-Path "\\$dc\NETLOGON"
$status = if ($sysvol -and $netlogon) { "OK" } else { "問題あり" }
Write-Host "$dc : SYSVOL=$sysvol, NETLOGON=$netlogon "
}
# 6. 直近24時間のセキュリティイベント統計
Write-Host "`n 直近24時間のセキュリティイベント統計" -ForegroundColor Yellow
$startTime = (Get-Date).AddHours(-24)
$events = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
StartTime = $startTime
} -MaxEvents 10000 -ErrorAction SilentlyContinue
$eventSummary = $events | Group-Object Id |
Sort-Object Count -Descending |
Select-Object -First 10 @{N='EventID';E={$_.Name}}, Count
$eventSummary | Format-Table -AutoSize
特にRIDプールの残量確認は見落とされがちですが、RIDが枯渇するとユーザーやコンピューターアカウントが作成できなくなります。大規模環境では定期的なモニタリングが必須です。
セキュリティ監査ログの効率的な分析方法
セキュリティログは膨大な量になるため、本当に重要なイベントを効率的に抽出する技術が必要です。以下は、私が実際に使用している分析クエリです。
# 重要セキュリティイベント抽出スクリプト
# 監視すべき重要イベントID
$criticalEvents = @{
4720 = "ユーザーアカウント作成"
4726 = "ユーザーアカウント削除"
4728 = "セキュリティグループへのメンバー追加"
4732 = "ローカルグループへのメンバー追加"
4756 = "ユニバーサルグループへのメンバー追加"
4740 = "アカウントロックアウト"
4767 = "アカウントロック解除"
4625 = "ログオン失敗"
4648 = "明示的な資格情報でのログオン"
4672 = "特権の割り当て"
4697 = "サービスインストール"
4698 = "スケジュールタスク作成"
4719 = "監査ポリシー変更"
4739 = "ドメインポリシー変更"
1102 = "監査ログ消去"
}
$startTime = (Get-Date).AddHours(-24)
$results = @()
foreach ($eventId in $criticalEvents.Keys) {
$events = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = $eventId
StartTime = $startTime
} -MaxEvents 100 -ErrorAction SilentlyContinue
if ($events) {
foreach ($event in $events) {
$results += @{
TimeCreated = $event.TimeCreated
EventID = $eventId
Description = $criticalEvents
Message = ($event.Message -split "`n") -join " "
}
}
}
}
# 時系列でソートして表示
$results | Sort-Object TimeCreated -Descending | Format-Table -AutoSize -Wrap
# 特に危険なイベントをハイライト
$dangerous = $results | Where-Object { $_.EventID -in @(1102, 4719, 4697, 4698) }
if ($dangerous) {
Write-Host "`n=== 要注意イベント検出 ===" -ForegroundColor Red
$dangerous | Format-Table -AutoSize
}
イベントID 1102(監査ログ消去)は特に注意が必要です。攻撃者が痕跡を消すために最初に行う操作の一つだからです。このイベントが発生したら、即座に調査を開始してください。
ぶっちゃけこうした方がいい!
ここまで様々なスクリプトや設定を紹介してきましたが、正直なところ、個人的にはこうした方がぶっちゃけ楽だし効率的だと思っています。
まず完璧を目指すなということ。セキュリティ対策は100点を目指すと永遠に終わりません。私が見てきた現場で一番危険だったのは、「完璧にやろうとして結局何も進まない」状態です。70点でいいから、まず基本を固めてください。具体的には、パッチを当てる、不要なサービスを止める、管理者アカウントを減らす。この3つだけで、攻撃の8割は防げます。
次に自動化できることは全部自動化しろということ。この記事で紹介したスクリプトを毎日手動で実行する人はいません。タスクスケジューラで毎朝自動実行し、結果をメールで受け取る仕組みを作ってください。人間がやるべきは「結果を見て判断する」ことだけです。
そして最も重要なのは、「何かあったとき」の準備を最優先にしろということ。どれだけ防御しても、侵入されるときは侵入されます。そのときに「バックアップがない」「復旧手順がない」では話になりません。私の経験上、インシデント対応で最も困るのは「何が正常な状態かわからない」ことです。今日の状態を記録しておくだけで、明日の自分が救われます。ADの構成情報、管理者一覧、GPOの設定、ネットワーク構成図。これらを最新の状態で保持しておくことが、実は最強のセキュリティ対策だと私は考えています。
最後に一つ。一人で抱え込むなということです。ひとり情シスだろうが何だろうが、セキュリティは組織全体の問題です。経営層に「これだけのリスクがある」と数字で示し、予算と人員を獲得する。それも情シスの重要な仕事です。「忙しくてできません」と言い続けて、インシデントが起きてから「だから言ったのに」では遅いのです。今日この記事を読んだあなたが、明日から一つでも実践してくれることを願っています。
Windows系社内サーバーを守る対策に関する疑問解決
Windows Server 2012/2012 R2のサポートが終了しましたがどうすればよいですか?
Windows Server 2012および2012 R2は既にサポートが終了しています。サポート終了後のOSは新たな脆弱性が発見されてもセキュリティ更新プログラムが提供されないため、早急にサポート対象のバージョンへ移行する必要があります。移行が困難な場合は、Extended Security Updates(ESU)の購入を検討するか、Azure上のWindows Server VMに移行することでセキュリティ更新を継続して受けることができます。ただし、これらは一時的な措置であり、中長期的にはWindows Server 2022または2025への移行計画を立てることが重要です。
ランサムウェア対策として最も効果的な方法は何ですか?
ランサムウェア対策は多層防御が基本です。最も重要なのは、オフラインバックアップの確保です。ネットワークから切り離された場所にバックアップを保管することで、ランサムウェアに感染してもデータを復旧できます。次に重要なのは、侵入経路の遮断です。フィッシングメール対策、VPNやリモートアクセスの認証強化、脆弱性の迅速なパッチ適用を徹底しましょう。さらに、EDRやネットワーク侵入検知システムの導入により、攻撃の早期発見と被害の最小化を図ることができます。
Active Directoryのセキュリティ診断はどのように行えばよいですか?
Active Directoryのセキュリティ診断には、BloodHoundやPingCastleといったツールが広く使用されています。これらのツールを使用することで、ADの設定ミスや過剰な権限付与、潜在的な攻撃経路を可視化できます。定期的に診断を実施し、発見された問題に優先順位をつけて対処していくことが重要です。また、Microsoftが提供するセキュリティベースラインと自社環境を比較することで、推奨設定からの乖離を確認することもできます。
情シス一人でセキュリティ対策を行う場合、何から始めるべきですか?
まずは現状把握から始めましょう。自社で使用しているすべてのサーバー、PC、ネットワーク機器の棚卸しを行い、それぞれのOSバージョン、パッチ適用状況、管理者アカウントの状態を確認します。次に、基本的なセキュリティチェックとして、パスワードポリシーの確認、不要なサービスの停止、ファイアウォール設定の見直しを行います。すべてを一度に完璧にする必要はありません。優先度の高い項目から着実に対応し、徐々にセキュリティレベルを向上させていくことが現実的なアプローチです。
今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
いま、あなたを悩ませているITの問題を解決します!
「エラーメッセージ、フリーズ、接続不良…もうイライラしない!」
あなたはこんな経験はありませんか?
✅ ExcelやWordの使い方がわからない💦
✅ 仕事の締め切り直前にパソコンがフリーズ💦
✅ 家族との大切な写真が突然見られなくなった💦
✅ オンライン会議に参加できずに焦った💦
✅ スマホの重くて重要な連絡ができなかった💦
平均的な人は、こうしたパソコンやスマホ関連の問題で年間73時間(約9日分の働く時間!)を無駄にしています。あなたの大切な時間が今この悩んでいる瞬間も失われています。
LINEでメッセージを送れば即時解決!
すでに多くの方が私の公式LINEからお悩みを解決しています。
最新のAIを使った自動応答機能を活用していますので、24時間いつでも即返信いたします。
誰でも無料で使えますので、安心して使えます。
問題は先のばしにするほど深刻化します。
小さなエラーがデータ消失や重大なシステム障害につながることも。解決できずに大切な機会を逃すリスクは、あなたが思う以上に高いのです。
あなたが今困っていて、すぐにでも解決したいのであれば下のボタンをクリックして、LINEからあなたのお困りごとを送って下さい。
ぜひ、あなたの悩みを私に解決させてください。
まとめ
Windows系社内サーバーのセキュリティ対策は、一度設定して終わりではありません。サイバー攻撃は日々進化しており、2026年も新たな脅威が次々と登場しています。2026年1月には112件の脆弱性が修正され、そのうち1件は既に悪用されているゼロデイでした。ランサムウェアグループは小規模化・分散化しながらも攻撃の手を緩めず、VPNや認証情報を狙った侵入が増加しています。
この記事で紹介した7つの対策、すなわちパッチ管理の徹底、不要なサービスの無効化、アカウント管理の強化、ネットワークセキュリティの確保、ログ監視の実施、バックアップ体制の構築、セキュリティベースラインの適用は、いずれも情シス担当者が実践している基本的かつ効果的な手法です。
ひとり情シスや兼任情シスの環境では、すべてを完璧に実施することは難しいかもしれません。しかし、優先順位をつけて着実に対策を進めることで、組織のセキュリティレベルは確実に向上します。まずは自社環境の現状把握から始め、最も影響の大きい脆弱性への対応を優先しましょう。必要に応じてアウトソーシングも活用しながら、持続可能なセキュリティ運用体制を構築していくことが、Windows系サーバーを守る最善の道です。






コメント