WPROWADZENIE
Firma Microsoft wydała biuletyn zabezpieczeń MS14-025. Aby dowiedzieć się więcej o tym biuletynie zabezpieczeń:
-
Użytkownicy domowi:
https://www.microsoft.com/security/pc-security/updates.aspxPomiń szczegóły: Pobierz teraz aktualizacje dla komputera domowego lub przenośnego z witryny Microsoft Update w sieci Web:
-
Informatycy:
https://technet.microsoft.com/pl-pl/library/security/ms14-025
Jak uzyskać pomoc i obsługę techniczną związaną z tą aktualizacją zabezpieczeń
Pomoc dotycząca instalowania aktualizacji: Pomoc techniczna dotycząca witryny Microsoft Update Rozwiązania zabezpieczeń dla informatyków: Pomoc techniczna i rozwiązywanie problemów z zabezpieczeniami w witrynie TechNet Pomoc dotycząca ochrony komputera z systemem Windows przed wirusami i złośliwym oprogramowaniem: Centrum rozwiązań dotyczących wirusów i zabezpieczeń Lokalna pomoc techniczna dla danego kraju: Międzynarodowa pomoc techniczna
Więcej informacji
Znane problemy i dodatkowe informacje dotyczące tej aktualizacji zabezpieczeń
Poniższe artykuły zawierają więcej informacji o tej aktualizacji zabezpieczeń w powiązaniu z poszczególnymi wersjami produktu. Te artykuły mogą zawierać informacje o znanych problemach. W takim przypadku znany problem wymieniono po odpowiednim łączu do artykułu.
-
2928120 MS14-025: Opis aktualizacji zabezpieczeń Narzędzi administracji zdalnej serwera systemu Windows dla systemów z zainstalowaną aktualizacją 2919355: 13 maja 2014 (strona może być w języku angielskim)
-
2961899 MS14-025: Opis aktualizacji zabezpieczeń Narzędzi administracji zdalnej serwera systemu Windows dla systemów bez zainstalowanej aktualizacji 2919355: 13 maja 2014 (strona może być w języku angielskim)
Preferencje zasad grupy
Omówienie
W niektórych preferencjach zasad grupy można przechowywać hasło. Ta funkcja jest wycofywana, ponieważ sposób przechowywania hasła nie jest bezpieczny. W tym artykule opisano zmiany w interfejsie użytkownika i wszelkie dostępne obejścia.
Następujące preferencje zasad grupy nie będą już umożliwiać zapisywania nazw użytkowników i haseł:-
Mapowania dysków
-
Użytkownicy i grupy lokalne
-
Zaplanowane zadania
-
Usługi
-
Źródła danych
Wpłynie to na zachowanie wszelkich istniejących obiektów zasad grupy (GPO, Group Policy Object) w środowisku zależnych od haseł zawartych w tych preferencjach. Uniemożliwi to też używanie tej funkcji w nowo tworzonych preferencjach zasad grupy.
W przypadku mapowań dysków, użytkowników i grup lokalnych oraz usług można niekiedy zrealizować podobne cele za pomocą innych, bezpieczniejszych funkcji systemu Windows. W przypadku zaplanowanych zadań i źródeł danych nie można zrealizować tych samych celów co w przypadku użycia niezabezpieczonej funkcji haseł preferencji zasad grupy.Scenariusze
Ta zmiana wpływa na następujące preferencje zasad grupy. Każda pozycja preferencji jest najpierw krótko, a potem bardziej szczegółowo omówiona. Ponadto podano obejścia umożliwiające wykonanie tych samych zadań.
Preferencja, na którą wpływa zmiana |
Dotyczy użytkownika |
Dotyczy komputera |
Zarządzanie użytkownikami lokalnymi |
Tak |
Tak |
Zamapowane dyski |
Tak |
Nie |
Usługi |
Nie |
Tak |
Zaplanowane zadania (wyższy poziom) |
Tak |
Tak |
Zaplanowane zadania (niższy poziom) |
Tak |
Tak |
Zadania natychmiastowe (wyższy poziom) |
Tak |
Tak |
Zadania natychmiastowe (niższy poziom) |
Tak |
Tak |
Źródła danych |
Tak |
Tak |
Podsumowanie zmian
-
Pola haseł we wszystkich objętych zmianą preferencjach są wyłączone. Administratorzy nie mogą utworzyć nowych preferencji za pomocą tych pól haseł.
-
Pole Nazwa użytkownika jest wyłączone w niektórych preferencjach.
-
Istniejących preferencji, które zawierają hasła, nie można zaktualizować. Można je jedynie usunąć lub wyłączyć, zależnie od konkretnej pozycji preferencji.
-
Zachowanie dla akcji usuwania i wyłączania preferencji nie zmieniło się.
-
Gdy administrator otworzy dowolną pozycję preferencji zawierającą atrybut CPassword, zostanie mu wyświetlone następujące okno dialogowe z ostrzeżeniem w celu poinformowania go o niedawnym wycofaniu funkcji. Próby zapisania zmian w nowych lub istniejących preferencjach wymagających atrybutu CPassword spowodują wyświetlenie tego samego okna dialogowego. Jedynie akcje usuwania i wyłączania nie będą powodować wyświetlania okien dialogowych z ostrzeżeniami.
Scenariusz 1. Zarządzanie użytkownikami lokalnymi
Pozycja preferencji zarządzania użytkownikami lokalnymi jest często używana do tworzenia administratorów lokalnych, którzy mają znane hasła na komputerze. Ta funkcja nie jest bezpieczna ze względu na sposób, w jaki preferencje zasad grupy przechowują hasła. Dlatego ta funkcja nie jest już dostępna. Dotyczy to następujących preferencji:
-
Konfiguracja komputera -> Ustawienia Panelu sterowania -> Użytkownicy i grupy lokalne -> Nowy -> Użytkownik lokalny
-
Konfiguracja użytkownika -> Ustawienia Panelu sterowania -> Użytkownicy i grupy lokalne -> Nowy -> Użytkownik lokalny
Ważne zmiany
Akcja: tworzenie lub zamienianie
-
Pola Nazwa użytkownika, Hasło i Potwierdź hasło są wyłączone.
-
Gdy administrator otworzy dowolną istniejącą pozycję preferencji zawierającą hasło lub spróbuje zapisać w niej dowolne zmiany, zostanie mu wyświetlone okno dialogowe z ostrzeżeniem.
Akcja: aktualizowanie
-
Pola Hasło i Potwierdź hasło są wyłączone.
-
Gdy administrator otworzy dowolną istniejącą pozycję preferencji zawierającą hasło lub spróbuje zapisać w niej dowolne zmiany, zostanie mu wyświetlone okno dialogowe z ostrzeżeniem.
Akcja: usuwanie
-
Brak zmian w zachowaniu
Obejścia problemu
Osobom, które wcześniej polegały na preferencjach zasad grupy na potrzeby ustawiania haseł administratorów lokalnych, udostępniony został poniższy skrypt, który jest bezpieczną alternatywą dla atrybutu CPassword. Tę zawartość należy skopiować i zapisać w nowym pliku programu Windows PowerShell. Następnie należy uruchomić ten skrypt zgodnie z instrukcjami w jego sekcji .EXAMPLE.
Firma Microsoft podaje przykłady programowania wyłącznie do celów informacyjnych, bez jakichkolwiek gwarancji wyrażonych wprost lub w sposób dorozumiany. Dotyczy to także, ale nie wyłącznie, gwarancji przydatności handlowej lub do określonego celu. W tym artykule zakłada się, że czytelnik zna prezentowany język programowania oraz narzędzia używane do tworzenia i debugowania procedur. Pracownicy pomocy technicznej firmy Microsoft mogą wyjaśnić funkcję konkretnej procedury. Nie będą jednak modyfikować tych przykładów ani dodawać żadnej funkcji i konstruować nowych procedur w celu dostosowania ich do konkretnych potrzeb użytkownika. function Invoke-PasswordRoll { <# .SYNOPSIS Za pomocą tego skryptu można ustawiać hasła losowe jako hasła kont lokalnych na komputerach zdalnych. Kombinacja nazwa_użytkownika/hasło/serwer zostanie zapisana w pliku CSV. Hasła do kont zapisane w pliku CSV można zaszyfrować za pomocą hasła administratorów w celu zapewnienia, że hasła do kont nie są zapisywane na dysku w postaci zwykłego tekstu. Zaszyfrowane hasła można odszyfrować za pomocą innej funkcji z tego pliku: ConvertTo-CleartextPassword Function: Invoke-PasswordRoll Author: Microsoft Version: 1.0 .DESCRIPTION Za pomocą tego skryptu można ustawiać hasła losowe jako hasła kont lokalnych na komputerach zdalnych. Kombinacja nazwa_użytkownika/hasło/serwer zostanie zapisana w pliku CSV. Hasła do kont zapisane w pliku CSV można zaszyfrować za pomocą hasła administratorów w celu zapewnienia, że hasła do kont nie są zapisywane na dysku w postaci zwykłego tekstu. Zaszyfrowane hasła można odszyfrować za pomocą innej funkcji z tego pliku: ConvertTo-CleartextPassword .PARAMETER ComputerName Tablica komputerów, dla których za pomocą komunikacji zdalnej programu PowerShell ma zostać uruchomiony skrypt. .PARAMETER LocalAccounts Tablica kont lokalnych, których hasła należy zmienić. .PARAMETER TsvFileName Plik, w którym mają zostać zapisane kombinacje nazwa_użytkownika/hasło/serwer. .PARAMETER EncryptionKey Hasło do zaszyfrowania pliku TSV. Stosowane jest szyfrowanie AES. Zaszyfrowane zostaną tylko hasła zapisane w pliku TSV. Nazwa użytkownika i nazwa serwera będą miały postać zwykłego tekstu. .PARAMETER PasswordLength Długość haseł generowanych losowo dla kont lokalnych. .PARAMETER NoEncryption Nie szyfruj haseł do kont zapisanych w pliku TSV. Spowoduje to zapisanie haseł na dysku w postaci zwykłego tekstu. .EXAMPLE . .\Invoke-PasswordRoll.ps1 #Załadowanie funkcji w tym pliku skryptu Invoke-PasswordRoll -ComputerName (Get-Content computerlist.txt) -LocalAccounts @("administrator","CustomLocalAdmin") -TsvFileName "LocalAdminCredentials.tsv" -EncryptionKey "Password1" Nawiązanie połączeń ze wszystkimi komputerami zapisanymi w pliku „computerlist.txt”. Jeśli w systemie jest obecne konto lokalne „administrator” lub „CustomLocalAdmin”, hasło tego konta jest zmieniane na losowo wygenerowane hasło o długości (domyślnej) 20 znaków. Kombinacje nazwa_użytkownika/hasło/serwer są zapisywane w pliku LocalAdminCredentials.tsv. Hasła do kont są szyfrowane algorytmem AES za pomocą hasła „Password1”. .EXAMPLE . .\Invoke-PasswordRoll.ps1 #Załadowanie funkcji w tym pliku skryptu Invoke-PasswordRoll -ComputerName (Get-Content computerlist.txt) -LocalAccounts @("administrator") -TsvFileName "LocalAdminCredentials.tsv" -NoEncryption -PasswordLength 40 Nawiązanie połączeń ze wszystkimi komputerami zapisanymi w pliku „computerlist.txt”. Jeśli w systemie jest obecne konto lokalne „administrator”, hasło tego konta jest zmieniane na losowo wygenerowane hasło o długości 40 znaków. Kombinacje nazwa_użytkownika/hasło/serwer są zapisywane w pliku LocalAdminCredentials.tsv. .NOTES Wymagania: - Musi być zainstalowany składnik PowerShellv2 lub nowsza wersja. - We wszystkich systemach, dla których zostanie uruchomiony skrypt, musi być włączona komunikacja zdalna programu PowerShell. Zachowanie skryptu: - Jeśli w systemie istnieje konto lokalne, ale nie określono go w parametrze LocalAccounts, skrypt wyświetli na ekranie ostrzeżenie z informacją o istnieniu tego konta. W takim przypadku działanie skryptu będzie kontynuowane. - Jeśli w parametrze LocalAccounts określono konto lokalne, ale nie istnieje ono na komputerze, nic się nie wydarzy (NIE zostanie utworzone konto). - Za pomocą zawartej w tym pliku funkcji ConvertTo-CleartextPassword można odszyfrować hasła przechowywane w postaci zaszyfrowanej w pliku TSV. - Jeśli nie można nawiązać połączenia z serwerem określonym w parametrze ComputerName, program PowerShell zwróci komunikat o błędzie. - Firma Microsoft zaleca firmom regularne zmienianie wszystkich haseł do kont lokalnych i domenowych. #> [CmdletBinding(DefaultParameterSetName="Encryption")] Param( [Parameter(Mandatory=$true)] [String[]] $ComputerName, [Parameter(Mandatory=$true)] [String[]] $LocalAccounts, [Parameter(Mandatory=$true)] [String] $TsvFileName, [Parameter(ParameterSetName="Encryption", Mandatory=$true)] [String] $EncryptionKey, [Parameter()] [ValidateRange(20,120)] [Int] $PasswordLength = 20, [Parameter(ParameterSetName="NoEncryption", Mandatory=$true)] [Switch] $NoEncryption ) #Załadowanie wszelkich potrzebnych klas .net Add-Type -AssemblyName "System.Web" -ErrorAction Stop #To jest kod scriptblock, który zostanie wykonany na każdym komputerze określonym w elemencie ComputerName $RemoteRollScript = { Param( [Parameter(Mandatory=$true, Position=1)] [String[]] $Passwords, [Parameter(Mandatory=$true, Position=2)] [String[]] $LocalAccounts, #Ta część umożliwia zarejestrowanie nazwy serwera, z którym połączył się skrypt. Niekiedy powstaje zamieszanie przy rekordach DNS, dlatego warto to zapisać. [Parameter(Mandatory=$true, Position=3)] [String] $TargettedServerName ) $LocalUsers = Get-WmiObject Win32_UserAccount -Filter "LocalAccount=true" | Foreach {$_.Name} #Sprawdzenie, czy na komputerze są jakieś konta użytkowników, których hasła nie zostaną zmienione przez ten skrypt foreach ($User in $LocalUsers) { if ($LocalAccounts -inotcontains $User) { Write-Warning "Server: '$($TargettedServerName)' has a local account '$($User)' whos password is NOT being changed by this script" } } #Zmiana hasła dla każdego konta lokalnego istniejącego na tym serwerze $PasswordIndex = 0 foreach ($LocalAdmin in $LocalAccounts) { $Password = $Passwords[$PasswordIndex] if ($LocalUsers -icontains $LocalAdmin) { try { $objUser = [ADSI]"WinNT://localhost/$($LocalAdmin), user" $objUser.psbase.Invoke("SetPassword", $Password) $Properties = @{ TargettedServerName = $TargettedServerName Username = $LocalAdmin Password = $Password RealServerName = $env:computername } $ReturnData = New-Object PSObject -Property $Properties Write-Output $ReturnData } catch { Write-Error "Error changing password for user:$($LocalAdmin) on server:$($TargettedServerName)" } } $PasswordIndex++ } } #Wygenerowanie hasła na kliencie uruchamiającym ten skrypt, nie na komputerze zdalnym. W składniku .NET Client Profile nie jest dostępna przestrzeń System.Web.Security. Dzięki wykonaniu tego wywołania # na kliencie uruchamiającym skrypt pełne środowisko wykonawcze .NET musi być zainstalowane tylko na jednym komputerze (a nie w każdym systemie, dla którego zmieniane są hasła). function Create-RandomPassword { Param( [Parameter(Mandatory=$true)] [ValidateRange(20,120)] [Int] $PasswordLength ) $Password = [System.Web.Security.Membership]::GeneratePassword($PasswordLength, $PasswordLength / 4) #Nie powinny tu występować żadne błędy, ale na wszelki wypadek dodano zabezpieczenia if ($Password.Length -ne $PasswordLength) { throw new Exception("Password returned by GeneratePassword is not the same length as required. Required length: $($PasswordLength). Generated length: $($Password.Length)") } return $Password } #Główna funkcjonalność — wygenerowanie haseł i skomunikowanie się zdalne z komputerami w celu zmiany haseł określonych kont lokalnych if ($PsCmdlet.ParameterSetName -ieq "Encryption") { try { $Sha256 = new-object System.Security.Cryptography.SHA256CryptoServiceProvider $SecureStringKey = $Sha256.ComputeHash([System.Text.UnicodeEncoding]::Unicode.GetBytes($EncryptionKey)) } catch { Write-Error "Error creating TSV encryption key" -ErrorAction Stop } } foreach ($Computer in $ComputerName) { #Dla każdego konta powinno zostać wygenerowane jedno hasło, które można zmienić $Passwords = @() for ($i = 0; $i -lt $LocalAccounts.Length; $i++) { $Passwords += Create-RandomPassword -PasswordLength $PasswordLength } Write-Output "Connecting to server '$($Computer)' to roll specified local admin passwords" $Result = Invoke-Command -ScriptBlock $RemoteRollScript -ArgumentList @($Passwords, $LocalAccounts, $Computer) -ComputerName $Computer #Jeśli jest używane szyfrowanie, przed zapisaniem na dysku zaszyfrowanie hasła za pomocą klucza dostarczonego przez użytkownika if ($Result -ne $null) { if ($PsCmdlet.ParameterSetName -ieq "NoEncryption") { $Result | Select-Object Username,Password,TargettedServerName,RealServerName | Export-Csv -Append -Path $TsvFileName -NoTypeInformation } else { #Odfiltrowanie zwróconych pozycji $null $Result = $Result | Select-Object Username,Password,TargettedServerName,RealServerName foreach ($Record in $Result) { $PasswordSecureString = ConvertTo-SecureString -AsPlainText -Force -String ($Record.Password) $Record | Add-Member -MemberType NoteProperty -Name EncryptedPassword -Value (ConvertFrom-SecureString -Key $SecureStringKey -SecureString $PasswordSecureString) $Record.PSObject.Properties.Remove("Password") $Record | Select-Object Username,EncryptedPassword,TargettedServerName,RealServerName | Export-Csv -Append -Path $TsvFileName -NoTypeInformation } } } } }function ConvertTo-CleartextPassword { <# .SYNOPSIS Za pomocą tej funkcji można odszyfrować hasła zapisane w postaci zaszyfrowanej przez funkcję Invoke-PasswordRoll. Function: ConvertTo-CleartextPassword Author: Microsoft Version: 1.0 .DESCRIPTION Za pomocą tej funkcji można odszyfrować hasła zapisane w postaci zaszyfrowanej przez funkcję Invoke-PasswordRoll. .PARAMETER EncryptedPassword Zaszyfrowane hasło zapisane w pliku TSV. .PARAMETER EncryptionKey Hasło, za pomocą którego przeprowadzono szyfrowanie. .EXAMPLE. .\Invoke-PasswordRoll.ps1 #Załadowanie funkcji w tym pliku skryptu ConvertTo-CleartextPassword -EncryptionKey "Password1" -EncryptedPassword 76492d1116743f0423413b16050a5345MgB8AGcAZgBaAHUAaQBwADAAQgB2AGgAcABNADMASwBaAFoAQQBzADEAeABjAEEAPQA9AHwAZgBiAGYAMAA1ADYANgA2ADEANwBkADQAZgAwADMANABjAGUAZQAxAGIAMABiADkANgBiADkAMAA4ADcANwBhADMAYQA3AGYAOABkADcAMQA5ADQAMwBmAGYANQBhADEAYQBjADcANABkADIANgBhADUANwBlADgAMAAyADQANgA1ADIAOQA0AGMAZQA0ADEAMwAzADcANQAyADUANAAzADYAMAA1AGEANgAzADEAMQA5ADAAYwBmADQAZAA2AGQA" Odszyfrowanie zaszyfrowanego hasła zapisanego w pliku TSV. #> Param( [Parameter(Mandatory=$true)] [String] $EncryptedPassword, [Parameter(Mandatory=$true)] [String] $EncryptionKey ) $Sha256 = new-object System.Security.Cryptography.SHA256CryptoServiceProvider $SecureStringKey = $Sha256.ComputeHash([System.Text.UnicodeEncoding]::Unicode.GetBytes($EncryptionKey)) [SecureString]$SecureStringPassword = ConvertTo-SecureString -String $EncryptedPassword -Key $SecureStringKey Write-Output ([System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($SecureStringPassword))) } Administratorzy mogą dodawać konta administratorów lokalnych do komputerów, tworząc grupę usługi Active Directory i dodając ją do lokalnej grupy Administratorzy za pomocą pozycji Preferencje zasad grupy -> Grupa lokalna. Ta akcja nie powoduje buforowania poświadczeń. Odpowiednie okno dialogowe przypomina następujące. To obejście wymaga połączenia z usługami domenowymi Active Directory, gdy użytkownik jest zalogowany przy użyciu tych poświadczeń.Scenariusz 2. Zamapowane dyski
Administratorzy używają mapowań dysków do przydzielania lokalizacji sieciowych użytkownikom. Funkcja ochrony hasłem jest używana w celu zapewnienia, że dostęp do dysku jest autoryzowany. Dotyczy to następujących preferencji:
-
Konfiguracja użytkownika -> Ustawienia systemu Windows -> Mapowania dysków -> Nowy -> Dysk zamapowany
Ważne zmiany
Akcja: tworzenie, aktualizowanie lub zamienianie
-
Pola Nazwa użytkownika, Hasło i Potwierdź hasło są wyłączone.
Akcja: usuwanie
-
Brak zmian w zachowaniu
Obejścia problemu
Zamiast stosowania metody hasła do uwierzytelniania można używać Eksploratora Windows do zarządzania uprawnieniami udziału i do przydzielania uprawnień użytkownikom. Uprawnienia folderu można kontrolować za pomocą obiektów usługi Active Directory.
Scenariusz 3. Usługi
Za pomocą preferencji usług można zmienić właściwości usług w taki sposób, że będą one uruchamiane w kontekście innym niż ich pierwotny kontekst zabezpieczeń. Dotyczy to następujących preferencji:
-
Konfiguracja komputera -> Ustawienia Panelu sterowania -> Usługi -> Nowy -> Usługa
Ważne zmiany
Uruchamianie: bez zmian, automatyczne lub ręczne
-
Pola Hasło i Potwierdź hasło są wyłączone.
-
Administrator może używać tylko wbudowanych kont.
Uruchamianie: wyłączanie
-
Brak zmian w zachowaniu
Nowe okno dialogowe
-
Administratorzy próbujący skorzystać z kont użytkowników innych niż wbudowane na potrzeby tego konta otrzymują następujące ostrzeżenie:
Obejścia problemu
Nadal można uruchamiać usługi z poziomu konta systemowego. Uprawnienia usług można zmienić w sposób udokumentowany w następującym artykule z bazy wiedzy Microsoft Knowledge Base:
256345 Jak skonfigurować ustawienia zasad grupy w celu ustawiania zabezpieczeń dla usług systemowych (strona może być w języku angielskim) Uwaga Jeśli usługi, która ma zostać skonfigurowana, nie ma, należy skonfigurować ustawienia na komputerze, na którym ta usługa działa.
Scenariusz 4. Zadania zaplanowane i natychmiastowe (wyższy poziom)
Są one używane do uruchamiania zaplanowanych zadań w określonym kontekście zabezpieczeń. Nie jest już dostępna możliwość zapisania poświadczeń dla zaplanowanych zadań w celu uruchamiania ich za pomocą dowolnego konta użytkownika, które nie jest zalogowane. Dotyczy to następujących preferencji. (Uwaga: w przypadku niektórych platform informacja „przynajmniej system Windows 7” jest zamieniona na „system Windows Vista i nowszy”).
-
Konfiguracja komputera -> Ustawienia Panelu sterowania -> Zaplanowane zadania -> Nowy -> Zaplanowane zadanie (przynajmniej system Windows 7)
-
Konfiguracja komputera -> Ustawienia Panelu sterowania -> Zaplanowane zadania -> Nowy -> Zadanie natychmiastowe (przynajmniej system Windows 7)
-
Konfiguracja użytkownika -> Ustawienia Panelu sterowania -> Zaplanowane zadania -> Nowy -> Zaplanowane zadanie (przynajmniej system Windows 7)
-
Konfiguracja użytkownika -> Ustawienia Panelu sterowania -> Zaplanowane zadania -> Nowy -> Zadanie natychmiastowe (przynajmniej system Windows 7)
Ważne zmiany
Akcja: tworzenie, aktualizowanie lub zamienianie
-
Po wybraniu opcji Uruchom niezależnie od tego, czy użytkownik jest zalogowany nie pojawia się już okno dialogowe monitujące administratora o poświadczenia.
-
Pole wyboru Nie przechowuj hasła jest wyłączone. Domyślnie to pole też jest zaznaczone.
Akcja: usuwanie Brak zmian w zachowaniu
Obejścia problemu
Do zadań typu „Zaplanowane zadanie (przynajmniej system Windows 7)” i „Zadanie natychmiastowe (przynajmniej system Windows 7)” administratorzy mogą używać określonych kont użytkowników, które są zalogowane. Ewentualnie mogą jedynie mieć dostęp do zasobów lokalnych jako ci użytkownicy. Te zadania nadal mogą być uruchamiane w kontekście usługi lokalnej.
Scenariusz 5. Zadania zaplanowane i natychmiastowe (niższy poziom) To jest wersja niższego poziomu preferencji używanych do uruchamiania zaplanowanych zadań w określonym kontekście zabezpieczeń. Nie jest już dostępna możliwość zapisania poświadczeń dla zaplanowanych zadań w celu uruchamiania ich za pomocą dowolnego konta użytkownika, które nie jest zalogowane. Dotyczy to następujących preferencji:
-
Konfiguracja komputera -> Ustawienia Panelu sterowania -> Zaplanowane zadania -> Nowy -> Zaplanowane zadanie
-
Konfiguracja komputera -> Ustawienia Panelu sterowania -> Zaplanowane zadania -> Nowy -> Zadanie natychmiastowe (Windows XP)
-
Konfiguracja użytkownika -> Ustawienia Panelu sterowania -> Zaplanowane zadania -> Nowy -> Zaplanowane zadanie
-
Konfiguracja użytkownika -> Ustawienia Panelu sterowania -> Zaplanowane zadania -> Nowy -> Zadanie natychmiastowe (Windows XP)
Ważne zmiany
Akcja: tworzenie, aktualizowanie lub zamienianie
-
Pole wyboru Uruchom jako jest wyłączone. Dlatego pola Nazwa użytkownika, Hasło i Potwierdź hasło są wyłączone.
Akcja: usuwanie Brak zmian w zachowaniu
Obejścia problemu
W przypadku pozycji „Zaplanowane zadanie” i „Zadanie natychmiastowe (Windows XP)” zaplanowane zadania należy uruchamiać przy użyciu uprawnień, które są obecnie dostępne dla usługi lokalnej.
Scenariusz 6. Źródła danych
Preferencje źródeł danych służą do kojarzenia źródła danych z komputerem lub użytkownikiem. Ta funkcja nie zapisuje już poświadczeń w celu umożliwienia dostępu do źródeł danych chronionych hasłami. Dotyczy to następujących preferencji:
-
Konfiguracja komputera -> Ustawienia Panelu sterowania -> Źródła danych
-
Konfiguracja użytkownika -> Ustawienia Panelu sterowania -> Źródła danych
Ważne zmiany
Akcja: tworzenie, aktualizowanie lub zamienianie
-
Pola Nazwa użytkownika, Hasło i Potwierdź hasło są wyłączone:
Akcja: usuwanie
-
Brak zmian w zachowaniu
Obejścia problemu
Nie są dostępne żadne obejścia problemu. Ta pozycja preferencji nie zapisuje już poświadczeń w celu umożliwienia dostępu do źródeł danych chronionych hasłami.
Wycofanie atrybutu CPassword
Usuwanie atrybutu CPassword
Skrypt programu Windows PowerShell udostępniony w tym artykule z bazy wiedzy Microsoft Knowledge Base wykrywa, czy domena zawiera jakiekolwiek preferencje zasad grupy, które mogą używać atrybutu CPassword. Jeśli w danej pozycji preferencji zostanie wykryty kod XML atrybutu CPassword, zostanie to wyświetlone na tej liście.
Wykrywanie preferencji z atrybutem CPassword
Ten skrypt musi zostać uruchomiony w katalogu lokalnym na kontrolerze domeny, który ma zostać oczyszczony. Tę zawartość należy skopiować i zapisać w nowym pliku programu Windows PowerShell. Następnie należy odszukać dysk systemowy i uruchomić ten skrypt zgodnie z instrukcjami dotyczącymi jego używania.
<# .SYNOPSIS Obiekty zasad grupy w domenie mogą mieć preferencje zapisujące hasła na potrzeby różnych zadań, jak na przykład: 1. Źródła danych 2. Mapowania dysków 3. Użytkownicy lokalni 4. Zaplanowane zadania (XP i wyższego poziomu) 5. Usługi Te hasła są przechowywane w woluminie SYSVOL jako część preferencji zasad grupy i nie są bezpieczne z powodu słabego szyfrowania (32-bajtowego szyfrowania AES). Dlatego nie zaleca się wdrażania takich preferencji w środowisku domeny i zaleca się usunięcie już istniejących. Ten skrypt ma ułatwić administratorowi odnalezienie zawierających hasła preferencji zasad grupy w woluminie SYSVOL domeny. .DESCRIPTION Ten skrypt powinien zostać uruchomiony na kontrolerze domeny lub komputerze klienckim zainstalowanym z Narzędziami administracji zdalnej serwera w celu wyświetlenia wszystkich preferencji zawierających hasła wraz z odpowiednimi informacjami o obiekcie zasad grupy, nazwie preferencji oraz ścieżce GPEdit, w której zdefiniowano dane preferencje. Po uzyskaniu listy dotkniętych problemem preferencji można je usunąć za pomocą edytora w Konsoli zarządzania zasadami grupy. .SYNTAXGet-SettingsWithCPassword.ps1 [-Path <String>] .EXAMPLEGet-SettingsWithCPassword.ps1 -Path %WinDir%\SYSVOL\domain Get-SettingsWithCPassword.ps1 -Path <GPO Backup Folder Path> .NOTES Jeśli nie zostanie odnaleziony moduł PS zasad grupy, informacje wynikowe będą zawierać identyfikatory GUID obiektów zasad grupy, a nie ich nazwy. Ten skrypt można uruchomić na kontrolerze domeny lub można go ponownie uruchomić na komputerze klienckim po zainstalowaniu Narzędzi administracji zdalnej serwera i włączeniu modułu zasad grupy. Ewentualnie można uzyskać nazwy obiektów zasad grupy na podstawie ich identyfikatorów GUID za pomocą polecenia cmdlet Get-GPO. .LINK http://go.microsoft.com/fwlink/?LinkID=390507 #> #---------------------------------------------------------------------------------------------------------------- # Parametry wejściowe #-------------------------------------------------------------------------------------------------------------- param( [string]$Path = $(throw "-Path is required.") # Ścieżka katalogu, w którym znajdują się preferencje zasad grupy. ) #--------------------------------------------------------------------------------------------------------------- $isGPModuleAvailable = $false $impactedPrefs = { "Groups.xml", "ScheduledTasks.xml","Services.xml", "DataSources.xml", "Drives.xml" } #---------------------------------------------------------------------------------------------------------------- # zaimportowanie modułu zasad grupy, jeśli jest dostępny #---------------------------------------------------------------------------------------------------------------- if (-not (Get-Module -name "GroupPolicy")) { if (Get-Module -ListAvailable | Where-Object { $_.Name -ieq "GroupPolicy" }) { $isGPModuleAvailable = $true Import-Module "GroupPolicy" } else { Write-Warning "Unable to import Group Policy module for PowerShell. Therefore, GPO guids will be reported. Run this script on DC to obtain the GPO names, or use the Get-GPO cmdlet (on DC) to obtain the GPO name from GPO guid." } } else { $isGPModuleAvailable = $true } Function Enum-SettingsWithCpassword ( [string]$sysvolLocation ) { # Ścieżki drzewa Konsoli zarządzania zasadami grupy $commonPath = " -> Preferences -> Control Panel Settings -> " $driveMapPath = " -> Preferences -> Windows Settings -> " # Cykliczne pobranie wszystkich plików xml w lokalizacji SYVOL $impactedXmls = Get-ChildItem $sysvolLocation -Recurse -Filter "*.xml" | Where-Object { $impactedPrefs -cmatch $_.Name } # Każdy plik xml zawiera wiele pozycji preferencji. Iterowanie przez poszczególne pozycje preferencji w celu sprawdzenia, # czy dana pozycja zawiera atrybut cpassword, i wyświetlenie go. foreach ( $file in $impactedXmls ) { $fileFullPath = $file.FullName # Ustawienie kategorii ścieżki zasad grupy. Jeśli plik znajduje się w folderze komputera (Machine) w woluminie SYSVOL, # ustawienie jest zdefiniowane w konfiguracji komputera. W przeciwnym przypadku # ustawienie należy do konfiguracji użytkownika if ( $fileFullPath.Contains("Machine") ) { $category = "Computer Configuration" } elseif ( $fileFullPath.Contains("User") ) { $category = "User Configuration" } else { $category = "Unknown" } # Pobranie zawartości pliku jako kodu XML try { [xml]$xmlFile = get-content $fileFullPath -ErrorAction Continue } catch [Exception]{ Write-Host $_.Exception.Message } if ($xmlFile -eq $null) { continue } switch ( $file.BaseName ) { Groups { $gppWithCpassword = $xmlFile.SelectNodes("Groups/User") | where-Object { $_.Properties.cpassword -ne $null} $preferenceType = "Local Users" } ScheduledTasks { $gppWithCpassword = $xmlFile.SelectNodes("ScheduledTasks/*") | where-Object { $_.Properties.cpassword -ne $null} $preferenceType = "Scheduled Tasks" } DataSources { $gppWithCpassword = $xmlFile.SelectNodes("DataSources/DataSource") | where-Object { $_.Properties.cpassword -ne $null} $preferenceType = "Data sources" } Drives { $gppWithCpassword = $xmlFile.SelectNodes("Drives/Drive") | where-Object { $_.Properties.cpassword -ne $null} $preferenceType = "Drive Maps" } Services { $gppWithCpassword = $xmlFile.SelectNodes("NTServices/NTService") | where-Object { $_.Properties.cpassword -ne $null} $preferenceType = "Services" } default { # oczyszczenie elementów gppWithCpassword i preferenceType dla następnej pozycji. try { Clear-Variable -Name gppWithCpassword -ErrorAction SilentlyContinue Clear-Variable -Name preferenceType -ErrorAction SilentlyContinue } catch [Exception]{} } }if ($gppWithCpassword -ne $null) { # Utworzenie nazwy obiektu zasad grupy na podstawie identyfikatora GUID wyodrębnionego z elementu filePath $guidRegex = [regex]"\{(.*)\}" $match = $guidRegex.match($fileFullPath) if ($match.Success) { $gpoGuid = $match.groups[1].value $gpoName = $gpoGuid } else { $gpoName = "Unknown" } if($isGPModuleAvailable -eq $true) { try { $gpoInfo = Get-GPO -Guid $gpoGuid -ErrorAction Continue $gpoName = $gpoInfo.DisplayName } catch [Exception] { Write-Host $_.Exception.Message } } # wyświetlenie preferencji zawierających atrybut cpassword foreach ( $gpp in $gppWithCpassword ) { if ( $preferenceType -eq "Drive Maps" ) { $prefLocation = $category + $driveMapPath + $preferenceType } else { $prefLocation = $category + $commonPath + $preferenceType } $obj = New-Object -typeName PSObject $obj | Add-Member –membertype NoteProperty –name GPOName –value ($gpoName) –passthru | Add-Member -MemberType NoteProperty -name Preference -value ($gpp.Name) -passthru | Add-Member -MemberType NoteProperty -name Path -value ($prefLocation) Write-Output $obj } } # koniec: if $gppWithCpassword } # koniec: foreach $file } # koniec funkcji: Enum-PoliciesWithCpassword #----------------------------------------------------------------------------------- # Sprawdzenie, czy ścieżka jest prawidłowa. Wyliczenie wszystkich ustawień zawierających atrybut cpassword. #----------------------------------------------------------------------------------- if (Test-Path $Path ) { Enum-SettingsWithCpassword $Path } else { Write-Warning "No such directory: $Path" } Przykład zastosowania (założenie: dysk systemowy to C) .\Get-SettingsWithCPassword.ps1 –path “C:\Windows\SYSVOL\domain” | Format-List Uwaga Należy pamiętać, że jako obiektu docelowego ścieżki zamiast domeny można także użyć dowolnej kopii zapasowej obiektu zasad grupy. Skrypt wykrywania generuje listę podobną do następującej: W przypadku dłuższych list warto rozważyć zapisanie wyników w pliku: .\Get-SettingsWithCPassword.ps1 –path “C:\Windows\SYSVOL\domain” | ConvertTo-Html > gpps.htmlUsuwanie preferencji z atrybutem CPassword
W celu usunięcia preferencji zawierających dane CPassword zaleca się skorzystanie z Konsoli zarządzania zasadami grupy (GPMC, Group Policy Management Console) na kontrolerze domeny lub kliencie z zainstalowanymi Narzędziami administracji zdalnej serwera. W tych konsolach można w pięciu krokach usunąć dowolne preferencje. W tym celu wykonaj następujące czynności:
-
W Konsoli zarządzania zasadami grupy otwórz pozycję preferencji zawierającą dane CPassword.
-
Zmień akcję na Usuń lub Wyłącz, odpowiednio do danej pozycji preferencji.
-
Kliknij przycisk OK, aby zapisać zmiany.
-
Poczekaj na wykonanie jednego lub dwóch cykli odświeżania zasad grupy, aby wprowadzone zmiany zostały przekazane do klientów.
-
Po zastosowaniu zmian na wszystkich klientach usuń daną pozycję preferencji.
-
Powtórz kroki od 1 do 5, stosownie do potrzeb, w celu oczyszczenia całego środowiska. Gdy skrypt wykrywania nie zwróci już żadnych wyników, będzie to koniec pracy.
File name |
SHA1 hash |
SHA256 hash |
---|---|---|
Windows6.0-KB2928120-ia64.msu |
B2A74305CB56191774BFCF9FCDEAA983B26DC9A6 |
DCE8C0F9CEB97DBF1F7B9BAF76458B3770EF01C0EDC581621BC8C3B2C7FD14E7 |
Windows6.0-KB2928120-x64.msu |
386457497682A2FB80BC93346D85A9C1BC38FBF7 |
1AF67EB12614F37F4AC327E7B5767AFA085FE676F6E81F0CED95D20393A1D38D |
Windows6.0-KB2928120-x86.msu |
42FF283781CEC9CE34EBF459CA1EFE011D5132C3 |
016D7E9DBBC5E487E397BE0147B590CFBBB5E83795B997894870EC10171E16D4 |
Windows6.1-KB2928120-ia64.msu |
5C2196832EC94B99AAF9B074D3938525B7219690 |
9958FA58134F55487521243AD9740BEE0AC210AC290D45C8322E424B3E5EBF16 |
Windows6.1-KB2928120-x64.msu |
EA5332F4E289DC799611EAB8E3EE2E86B7880A4B |
417A2BA34F8FD367556812197E2395ED40D8B394F9224CDCBE8AB3939795EC2A |
Windows6.1-KB2928120-x86.msu |
7B7B6EE24CD8BE1AB3479F9E1CF9C98982C8BAB1 |
603206D44815EF2DC262016ED13D6569BE13D06E2C6029FB22621027788B8095 |
Windows8-RT-KB2928120-x64.msu |
E18FC05B4CCA0E195E62FF0AE534BA39511A8593 |
FCAED97BF1D61F60802D397350380FADED71AED64435D3E9EAA4C0468D80141E |
Windows8-RT-KB2928120-x86.msu |
A5DFB34F3B9EAD9FA78C67DFC7ACACFA2FBEAC0B |
7F00A72D8A15EB2CA70F7146A8014E39A71CFF5E39596F379ACD883239DABD41 |
Windows8.1-KB2928120-x64.msu |
A07FF14EED24F3241D508C50E869540915134BB4 |
6641B1A9C95A7E4F0D5A247B9F488887AC94550B7F1D7B1198D5BCBA92F7A753 |
Windows8.1-KB2928120-x86.msu |
DE84667EC79CBA2006892452660EB99580D27306 |
468EE4FA3A22DDE61D85FD3A9D0583F504105DF2F8256539051BC0B1EB713E9C |
Windows8.1-KB2961899-x64.msu |
10BAE807DB158978BCD5D8A7862BC6B3EF20038B |
EC26618E23D9278FC1F02CA1F13BB289E1C6C4E0C8DA5D22E1D9CDA0DA8AFF51 |
Windows8.1-KB2961899-x86.msu |
230C64447CC6E4AB3AD7B4D4655B8D8CEFBFBE98 |
E3FAD567AB6CA616E42873D3623A777185BE061232B952938A8846A974FFA7AF |