Flexible Security for Your Peace of Mind

Vergabe von lokalen Administratorrechten (auf einem bestimmten Rechner) an einen Domänenbenutzer

Wir leben in einer Zeit, in der mehr denn je von zu Hause oder unterwegs gearbeitet wird. Das stellt IT-Abteilungen vor zahlreiche Herausforderungen hinsichtlich des Supports, insbesondere wenn es um die Sicherheit geht.

Diese Sicherheitsproblematik hat sich in den letzten Jahren durch Malware in Form von Würmern verschärft, die auf Benutzer mit Administratorrechten an lokalen Rechnern abzielt. Über einen solchen Angriff können andere im Netzwerk leicht infiziert werden, zumal viele Unternehmen Funktionen wie die Windows Firewall deaktivieren. Mehr denn je ist es notwendig, ein Gleichgewicht zwischen der Sicherheit Ihres Windows-Arbeitsplatzsystems und lokaler administrativer Autonomie zu schaffen.

Lokale Administratorrechte werden standardmäßig durch Hinzufügen einer AD-Gruppe über „eingeschränkte Gruppen“ zu den von einem GPO betroffenen Rechnern gewährt.

Lokale Administratorrechte - Group Policy Management Editor

Das mag bei Desktop- und Servicedesk-Support-Gruppen gut funktionieren, bedeutet aber auch, dass jeder Benutzer in diesen Gruppen automatisch Administratorrechte auf jedem Rechner erhält, für den die Richtlinie gilt. Für einen einzelnen Benutzer, der vielleicht von zu Hause aus einen Druckertreiber hinzufügen oder sonst eine lokale Aufgabe ausführen muss, die erhöhte Rechte erfordert, ist dies kein guter Ansatz.

Sie könnten viele verschiedene GPO erstellen, aber das wäre keine gute bzw. skalierbare Lösung für dieses Problem. Sie könnten auch LAPS verwenden, aber dazu müsste der Benutzer den Servicedesk kontaktieren und sich ein komplexes Passwort zuschicken lassen, was ebenfalls nicht ideal ist.

Mit der folgenden Lösung erhält ein bestimmter Benutzer Administratorrechte auf einem bestimmten Rechner. Dadurch werden die Auswirkungen auf andere Rechner begrenzt, sollte er einen Fehler machen, und man kann ihm die Rechte ganz einfach wieder entziehen, sobald er diese erhöhten Zugriffsrechte nicht mehr benötigt.

Wir verwenden nach wie vor ein GPO, nun aber mit einem Attribut für das Computerobjekt in AD, um den jeweiligen Benutzer festzulegen. Ein kleines aber feines Stückchen PowerShell, das von unserem Forschungsleiter Thorbjorn Sjovold erstellt wurde, wird als Startskript ausgeführt, um den Benutzer zur Gruppe der lokalen Administratoren hinzuzufügen.

Zunächst haben wir eine Vorbedingung. Version 5 von PowerShell muss auf allen Ihren Client-Rechnern installiert sein. Alles, was älter als Windows 10 ist, muss für diese Version von PowerShell zunächst aktualisiert werden. Dann müssen Sie das Skript erstellen (siehe unten).

############################################################################### 
# Script intended to run as a computer startup script to add a user that      #
# is referenced in the "manager" attribute to the local administrator group.  #
#                                                                             #
# The "manager" attribute for the computer should be populated with the DN of #
# the user, just like the managedBy attribute.                                #
###############################################################################


# Change to $VerbosePreference = "Continue" if more output is required
$VerbosePreference = "SilentlyContinue"

function Get-ADSIUser ($UserDistinguishedName)
{
        $root = [ADSI]'';
        $searcher = New-Object System.DirectoryServices.DirectorySearcher($root);
        $searcher.filter = "(&(objectClass=user)(distinguishedName= $UserDistinguishedName))";
        $user = $searcher.FindOne().GetDirectoryEntry()
        return $user
} 

function Get-ADSIComputer ($ComputerAccountName)
{
        $root = [ADSI]'';
        $searcher = New-Object System.DirectoryServices.DirectorySearcher($root);
        $searcher.filter = "(&(objectCategory=computer)(sAMAccountName=$ComputerAccountName))";
        $computer = $searcher.FindOne().GetDirectoryEntry()
        return $computer
} 


try {
    New-EventLog -LogName Application -Source "Specops Local Admin Mgmt" -ErrorAction SilentlyContinue

    $computerName = $Env:COMPUTERNAME + "$"
    
    $currentComputer = Get-ADSIComputer($computerName)

    if ($currentComputer.manager -ne $null) {
        Write-Verbose "Manager attribute in AD is $($currentComputer.manager)"
        
        $managerUser = Get-ADSIUser $currentComputer.manager
        $binarySID = $managerUser.ObjectSid.Value
        $objSID = New-Object System.Security.Principal.SecurityIdentifier($binarySID,0)
        $objUser = ($objSID.Translate( [System.Security.Principal.NTAccount])).Value  
        Write-Verbose "User name referenced in the manager attribute in AD is $objUser"
 
        # The local Administrator group SID is S-1-5-32-544
        $localUserAdded =  Get-LocalGroupMember -SID S-1-5-32-544 -Member $objUser -ErrorAction SilentlyContinue

        if ($localUserAdded -eq $null) {

            Write-Verbose "User $objUser will be added to local Administrators group ..."
            Add-LocalGroupMember -SID S-1-5-32-544 -Member $objUser
            Write-Output "Added user $objUser to local Administrators group ..."            
            Write-EventLog -LogName Application -EntryType Information -EventId 100 -Source "Specops Local Admin Mgmt" -Message "Added user $objUser to local Administrators group."

        } else
        {

            Write-Verbose "User already a member of the local Administrators Group, no action taken ..."
            Write-EventLog -LogName Application -EntryType Information -EventId 101 -Source "Specops Local Admin Mgmt" -Message "User $objUser already a member of the local Administrators Group, no action taken."
        }

     } else
     {
        Write-Verbose "No administrator assigned to this computer, no action taken ..."
        Write-EventLog -LogName Application -EntryType Information -EventId 102 -Source "Specops Local Admin Mgmt" -Message "No administrator assigned to this computer, no action taken."
     }
 }
 catch [System.SystemException]
 {

    Write-Output "Failed to add local admin with the following exception: $_"

    New-EventLog -LogName Application -Source "Specops Local Admin Mgmt" -ErrorAction SilentlyContinue
    Write-EventLog -LogName Application -EntryType Error -EventId 200 -Source "Specops Local Admin Mgmt" -Message "Failed to add local admin with the following exception: $_"
 }

Speichern Sie das Skript unter dem Namen AddlocalAdmin.ps1 auf einer Freigabe in Ihrem Netzwerk so, dass alle Computerkonten über Leserechte verfügen, z. B.
\\<fqdn-domain-name>\sysvol\<fqdn-domain-name>\Scripts.

Öffnen Sie die GPMC, um ein neues GPO zu erstellen, oder fügen Sie es auf Wunsch zu einem bestehenden hinzu, das für alle Arbeitsplatzrechner gilt, an die Sie Administratorrechte delegieren möchten.

Gehen Sie zu Computerkonfiguration > Richtlinien > Windows-Einstellungen > Skripte (Starten/Herunterfahren) und fügen Sie ein neues Startskript hinzu.

Lokale Administratorrechte an einen Domainnutzer vergeben - Startup Skript

Stellen Sie sicher, dass die Ansicht Erweiterte Funktionen in Active-Directory-Benutzer und -Computer aktiviert ist und dass die Attributliste nicht gefiltert wird. Sobald das erledigt ist, müssen wir nur noch den „Distinguished Name“ unserer Testuser …

Lokale Administratorrechte an einen Domainnutzer vergeben - Add-users-Distinguished-Name

… zum Manager-Attribut der von ihnen verwendeten Computer hinzufügen.

Lokale Administratorrechte an einen Domainnutzer vergeben - Add User

Zum Abschluss muss der Rechner neu gestartet werden. Sobald er wieder gestartet ist, sollte der Benutzer ein lokaler Administrator auf diesem Rechner sein.

Lokale Administratorrechte an einen Domainnutzer vergeben

Das obige Skript generiert auch einige Ereignisprotokolleinträge für Prüfungen und Fehlerbehebungen.

EventID 100 = User added successfully
EventID 101 = User already a member of Local Admins
EventID 102 = No Manager assigned to this computer
EventID 200 = Failed to add the user to the local Administrators group

Mit dieser Methode können Sie Benutzer zu allen Gruppen mit bekanntem SID hinzufügen.

https://support.microsoft.com/en-gb/help/243330/well-known-security-identifiers-in-windows-operating-systems

Was das Entziehen der Zugriffsrechte betrifft, würde ich immer noch den Weg über das GPO „eingeschränkte Gruppen“ empfehlen, um die Gruppe der lokalen Administratoren zu sperren. Bei der beschriebenen Startskript-Methode wird der Benutzer nur beim Booten hinzugefügt und nicht erneut bei der GP-Aktualisierung. Die Administratorrechte sind immer temporär und gelten bis zur Aktualisierung der Gruppenrichtlinie auf dem jeweiligen Computer. Dies könnte ein erwünschter Nebeneffekt sein, da der Zugriff nach dem Neustart nur für kurze Zeit (90 bis 120 Minuten) gewährt wird, wodurch sich das Risiko einer Bedrohung verringert.

Wenn Sie die lokalen Administratorrechte dauerhaft gewähren möchten, können Sie zum Beispiel Specops Command verwenden, mit den beliebigen PowerShell-Skripten und die davon abhängigen Module verpackt und mithilfe von Gruppenrichtlinien an bestimmte Ziele übertragen werden können.

(Zuletzt aktualisiert am 15/06/2021)

Zurück zum Blog