> For the complete documentation index, see [llms.txt](https://docs.stoik.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.stoik.io/cyber-best-practices/de/anleitungen-zur-behebung-von-schwachstellen/ad-scan-vulnerability-remediation-guide/stale-objects.md).

# Veraltete Objekte

## S-OldNtlm

#### Was es bedeutet

Windows unterstützt mehrere Authentifizierungsprotokolle, von sehr alten und unsicheren (LM, NTLMv1) bis hin zu modernen und sicheren (NTLMv2, Kerberos). Die älteren Protokolle haben bekannte Schwachstellen, die Angreifer ausnutzen können, um Passwörter im Netzwerk abzufangen und zu knacken.

Die **LAN-Manager-Authentifizierungsstufe** steuert, welche Protokolle zulässig sind. Es sollte auf **Stufe 5** gesetzt werden, was bedeutet: „nur NTLMv2 akzeptieren, alle älteren Protokolle ablehnen.“

#### Was der Scan prüft

Der AD-Scan liest Gruppenrichtlinienobjekte (GPOs), um zu überprüfen, dass die `LmCompatibilityLevel` Einstellung auf **5** gesetzt ist. Wenn keine GPO diese Einstellung definiert, verwendet Windows standardmäßig **Stufe 3**, die immer noch einige schwächere Protokolle akzeptiert.

| Stufe | Was es zulässt                                     | Sicher? |
| ----- | -------------------------------------------------- | ------- |
| 0-2   | LM und/oder NTLMv1                                 | Nein    |
| 3     | NTLMv2 (verweigert ältere Protokolle jedoch nicht) | Nein    |
| **5** | **Nur NTLMv2, LM und NTLMv1 ablehnen**             | **Ja**  |

#### Warum die Warnung bestehen bleiben kann

1. **Sie haben die Registrierung direkt geändert** anstatt eine GPO zu verwenden. Der AD-Scan liest GPO-Dateien, keine lokalen Registrierungseinstellungen. Selbst wenn der DC den richtigen Wert in der Registrierung hat, bleibt die Warnung bestehen, wenn er nicht über Gruppenrichtlinien gesetzt wurde.
2. **Konfliktierende GPOs:** Eine GPO setzt Stufe 5, aber eine andere GPO überschreibt sie mit einer niedrigeren Stufe.
3. **Überhaupt keine GPO:** Ohne GPO ist der Standard Stufe 3 (unsicher).

#### So diagnostizieren Sie

```powershell
# Prüfen Sie die wirksame Einstellung auf jedem DC
Get-ADDomainController -Filter * | ForEach-Object {
  $level = Invoke-Command -ComputerName $_.HostName -ScriptBlock {
    (Get-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa" `
      -Name LmCompatibilityLevel -ErrorAction SilentlyContinue).LmCompatibilityLevel
  }
  Write-Host "$($_.HostName): LmCompatibilityLevel = $level"
}

# Prüfen Sie, welche GPOs diese Einstellung definieren
Import-Module GroupPolicy
Get-GPO -All | ForEach-Object {
  [xml]$r = Get-GPOReport -Guid $_.Id -ReportType Xml
  if ($r.InnerXml -match "LmCompatibilityLevel") {
    Write-Host "GPO: $($_.DisplayName)"
  }
}
```

#### So beheben Sie es

**Über die Gruppenrichtlinienverwaltungskonsole (empfohlen):**

1. Öffnen Sie `gpmc.msc`
2. Bearbeiten Sie die GPO, die verknüpft ist mit `OU=Domain Controllers`
3. Navigieren Sie zu: `Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > Security Options`
4. Setzen Sie **„Netzwerksicherheit: LAN-Manager-Authentifizierungsebene“** auf `Nur NTLMv2-Antwort senden. LM & NTLM ablehnen`
5. Setzen Sie **„Netzwerksicherheit: LAN-Manager-Hashwert bei nächster Kennwortänderung nicht speichern“** auf `Aktiviert`
6. Führen Sie `gpupdate /force` auf allen Domänencontrollern aus

**Über PowerShell:**

```powershell
$gpoName = "DC - NTLMv2 erzwingen"
$gpo = Get-GPO -Name $gpoName -ErrorAction SilentlyContinue
if (-not $gpo) { $gpo = New-GPO -Name $gpoName }

Set-GPRegistryValue -Name $gpoName `
  -Key "HKLM\System\CurrentControlSet\Control\Lsa" `
  -ValueName "LmCompatibilityLevel" -Type DWord -Value 5

Set-GPRegistryValue -Name $gpoName `
  -Key "HKLM\System\CurrentControlSet\Control\Lsa" `
  -ValueName "NoLMHash" -Type DWord -Value 1

New-GPLink -Name $gpoName `
  -Target "OU=Domain Controllers,$($(Get-ADDomain).DistinguishedName)" `
  -LinkEnabled Yes
```

## S-AesNotEnabled

#### Was es bedeutet

Wenn Sie sich in Active Directory authentifizieren, wird Ihr Kennwort verwendet, um die Kommunikation mit einem bestimmten Algorithmus zu verschlüsseln. Ältere Algorithmen (**DES**, **RC4**) sind schwach und können relativ leicht geknackt werden. Moderne Algorithmen (**AES-128**, **AES-256**) sind wesentlich stärker.

Die Unterstützung für AES wurde mit Windows Server 2008 eingeführt. Konten, die jedoch vor dem Upgrade vorhanden waren, oder Konten mit bestimmten Konfigurationen verwenden möglicherweise weiterhin die alte, schwächere Verschlüsselung.

#### Was der Scan prüft

Ein Konto wird in zwei Situationen markiert:

1. **Das Kennwort des Kontos wurde festgelegt, bevor Ihre Domäne auf Server 2008 aktualisiert wurde.** Da AES-Verschlüsselungsschlüssel nur generiert werden, wenn ein Kennwort auf einem modernen DC gesetzt wird, verfügen diese alten Kennwörter nur über schwache RC4/DES-Schlüssel.
2. **Das Konto hat einen Service Principal Name (SPN)** und seine Verschlüsselungseinstellungen enthalten kein AES (die `msDS-SupportedEncryptionTypes` Attribut enthält keine AES-Kennzeichnungen).

#### So diagnostizieren Sie

```powershell
# Dienstkonten ohne AES-Unterstützung finden
Get-ADUser -Filter 'ServicePrincipalName -like "*"' `
  -Properties ServicePrincipalName, "msDS-SupportedEncryptionTypes", PasswordLastSet |
  Where-Object { ([int]$_."msDS-SupportedEncryptionTypes" -band 24) -eq 0 } |
  Select-Object SamAccountName,
    @{N="EncryptionTypes"; E={$_."msDS-SupportedEncryptionTypes"}},
    PasswordLastSet

# Entsprechendes für Computerkonten
Get-ADComputer -Filter 'ServicePrincipalName -like "*"' `
  -Properties "msDS-SupportedEncryptionTypes" |
  Where-Object { ([int]$_."msDS-SupportedEncryptionTypes" -band 24) -eq 0 } |
  Select-Object Name, @{N="EncryptionTypes"; E={$_."msDS-SupportedEncryptionTypes"}}
```

#### So beheben Sie es

**Für Konten mit alten Kennwörtern:** Setzen Sie einfach das Kennwort zurück. Dadurch werden neue AES-Schlüssel erzeugt:

```powershell
Set-ADAccountPassword -Identity "svc_account" `
  -NewPassword (ConvertTo-SecureString "YourNewStr0ngP@ssw0rd!" -AsPlainText -Force) -Reset
```

**Für Konten, denen AES-Verschlüsselungseinstellungen fehlen:** Aktivieren Sie AES in den Verschlüsselungstypen des Kontos:

```powershell
# AES für ein bestimmtes Konto aktivieren (24 = AES-128 + AES-256)
Set-ADUser -Identity "svc_account" -Replace @{"msDS-SupportedEncryptionTypes" = 24}

# Für ein Computerkonto
Set-ADComputer -Identity "server01" -Replace @{"msDS-SupportedEncryptionTypes" = 24}

# Sammelbehebung für alle Dienstkonten ohne AES
Get-ADUser -Filter 'ServicePrincipalName -like "*"' `
  -Properties "msDS-SupportedEncryptionTypes" |
  Where-Object { ([int]$_."msDS-SupportedEncryptionTypes" -band 24) -eq 0 } |
  ForEach-Object {
    Set-ADUser $_ -Replace @{"msDS-SupportedEncryptionTypes" = 24}
    Write-Host "AES für $($_.SamAccountName) aktiviert"
  }
```

> **Hinweis:** Das Aktivieren von AES ist nicht destruktiv: vorhandene Authentifizierung funktioniert weiter. Testen Sie jedoch kritische Dienste, bevor Sie die Änderung massenhaft anwenden.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.stoik.io/cyber-best-practices/de/anleitungen-zur-behebung-von-schwachstellen/ad-scan-vulnerability-remediation-guide/stale-objects.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
