MS16-072 の既知の問題の影響を受ける GPO を PowerShell を使って調べる方法

今回は、MS16-072 の問題に関する情報を取り上げます。

MS16-072 の問題の詳細は上記のポストを見ていただければと思います。

MS16-072 の問題の対象となる GPO を調べる方法がありましたので共有します。

#Load GPO module
Import-Module GroupPolicy
#Get all GPOs in current domain
$GPOs = Get-GPO -All
#Check we have GPOs
if ($GPOs) {
#Loop through GPOs
foreach ($GPO in $GPOs) {
#Nullify $AuthUser & $DomComp
$AuthUser = $null
$DomComp = $null
#See if we have an Auth Users perm
$AuthUser = Get-GPPermissions -Guid $GPO.Id -TargetName “Authenticated Users” -TargetType Group -ErrorAction SilentlyContinue
 #See if we have the ‘Domain Computers perm
$DomComp = Get-GPPermissions -Guid $GPO.Id -TargetName “Domain Computers” -TargetType Group -ErrorAction SilentlyContinue
 #Alert if we don’t have an ‘Authenticated Users’ permission
if (-not $AuthUser) {
#Now check for ‘Domain Computers’ permission
if (-not $DomComp) {
                Write-Host “WARNING: $($GPO.DisplayName) ($($GPO.Id)) does not have an ‘Authenticated Users’ permission or ‘Domain Computers’ permission – please investigate” -ForegroundColor Red
}   #end of if (-not $DomComp)
else {
#COMMENT OUT THE BELOW LINE TO REDUCE OUTPUT!
               Write-Host “INFORMATION: $($GPO.DisplayName) ($($GPO.Id)) does not have an ‘Authenticated Users’ permission but does have a ‘Domain Computers’ permission” -ForegroundColor Yellow
}   #end of else (-not $DomComp)
}   #end of if (-not $AuthUser)
elseif (($AuthUser.Permission -ne “GpoApply”) -and ($AuthUser.Permission -ne “GpoRead”)) {
#COMMENT OUT THE BELOW LINE TO REDUCE OUTPUT!
Write-Host “INFORMATION: $($GPO.DisplayName) ($($GPO.Id)) has an ‘Authenticated Users’ permission that isn’t ‘GpoApply’ or ‘GpoRead'” -ForegroundColor Yellow
}   #end of elseif (($AuthUser.Permission -ne “GpoApply”) -or ($AuthUser.Permission -ne “GpoRead”))
else {
   #COMMENT OUT THE BELOW LINE TO REDUCE OUTPUT!
            Write-Output “INFORMATION: $($GPO.DisplayName) ($($GPO.Id)) has an ‘Authenticated Users’ permission”
        }   #end of else (-not $AuthUser)
    }   #end of foreach ($GPO in $GPOs)
}   #end of if ($GPOs)

※ 上記の PowerShell コマンドはダブルクリックすると全選択できます。PowerShell または PowerShell ISE に貼り付けて実行ができます。


Reference from MS16-072 – Known Issue – Use PowerShell to Check GPOs


表示された結果の見方:
WARNING:” … この GPO は今回の問題の影響を受ける可能性があります。
INFORMATION“(黄色) … この GPO は、 Authenticated Users Group にアクセス許可権限は含んでいないが、Domain Computers Group にアクセス許可権限は含んでいる。
または、Authenticated Users Group に Read / Apply の権限または Read 権限が無い。
INFORMATION“(白色) …Authenticated Users に期待されたアクセス許可権限がある。


実際に上記の PowerShell を Domain Controller で実行すると下記のような画面になります。対象の GPO (Test GPO) は赤字で表示されます。

GPO