상세 컨텐츠

본문 제목

공격자들이 이용하는 lsass.exe 자격 증명 덤프 도구 및 대응 방안

침해사고 분석 리포트

by MIR 2022. 10. 31. 17:18

본문

 

1. 개요

공격자들의 주요 목표 중 하나는 대상 시스템에 지속해서 접근하고 내부 이동을 하기위해 자격증명을 탈취(Credential Dumping)하는 것이다. 윈도우 자격 증명을 도용하는 가장 일반적인 방법 중 하나는 시스템에 대한 관리자 권한을 얻은 후, Windows LSASS(Local Security Authority Subsystem Service) 프로세스 메모리를 덤프하는 것이다. 사용자가 로그인에 성공하면 자격 증명이 생성되고 메모리의 로컬 보안 시스템 서비스인 LSASS에 저장되기 때문이다. LSASS 메모리 덤프에는 로그인에 성공한 사용자의 Windows 자격 증명에 대한 NTLM 해시가 포함되어 있어 무차별 암호 대입 공격(brute-force attack)이나 Pass-the-Hash 공격을 통해 다른 장치에 로그인할 수 있다.

 

LSASS 자격 증명 덤핑은 APT 공격 단체인 HAFNIUM, GALLIUM을 비롯한 여러 공격자의 TTP(전술, 기법, 절차)에서 자주 등장한다. 공격자는 계정과 암호를 획득해 기업 내부 네트워크와 데이터에 접근하고 관리자 권한으로 악성 프로그램을 실행시키거나 명령을 내릴 수 있다. 자격 증명이 도용되면 랜섬웨어 감염이나 전체 네트워크가 손상될 위험이 크기 때문에 이러한 공격을 모니터링하는 것이 중요하다. 이 점을 강조하며 공격자가 Windows 시스템에서 lsass.exe 덤프를 통해 자격 증명을 얻는 방법(2. 윈도우 내장 프로그램을 이용한 방법과 3. 도구를 이용한 방법)과 대응 방안에 대해 구체적으로 알아보자.

 

2. LOLBin을 이용한 LSASS.exe Credential Dumping Attack 사례

공격자들은 taskmgr.exe, procdump.exe, comsvc.dll와 같은 LOLBin(Living Off Land Binaries)을 사용한 자격 증명 도용 공격을 여전히 선호하고 있다. 윈도우 내장 기능을 이용하기 때문에 바이러스 백신이나 EDR(Endpoint Detection and Response) 솔루션에 탐지 및 차단될 가능성이 작고 도구를 삭제할 필요가 없기 때문이다.

 

01. 작업 관리자 GUI(Taskmgr.exe)

시스템에 RDP(원격 데스크톱 프로토콜)나 GUI 권한이 있는 경우, 공격자는 Windows 작업 관리자를 이용해 덤프 파일(lsass.dmp)을 얻을 수 있다. 작업 관리자를 통해 lsass.exe를 덤프하는 경우 Windows Defender가 경고하지 않기 때문에 안전하지만, 관리자 권한이 필요하며 속도가 느리다. <lsass.DMP> 파일은 AppData\Local\Temp 디렉터리에 생성된다.

[그림 1] 작업 관리자(GUI)에서 lsass.exe 프로세스 메모리 덤프

 

[그림 2] lsass.exe 프로세스 덤프 완료

 

02. Sysinternals - ProcExp.exe

Windows Sysinternals의 ProcExp.exe 도구를 이용해 lsass.exe 프로세스를 덤프할 수 있다. “다른 이름으로 저장”을 통해 덤프 파일의 저장 위치와 이름을 지정할 수 있다.

[그림 3] Sysinternals ProcExp.exe 도구를 이용한 lsass.exe 프로세스 덤프

 

03. Sysinternals - ProcDump.exe

Sysinternals의 ProcDump.exe는 공격자들이 lsass.exe 프로세스를 덤프하는 데 가장 많이 사용하는 도구 중 하나이다. 기본 덤프 형식에는 스레드와 핸들 정보만 포함되기 때문에 주로 [-ma] 옵션을 이용해 모든 프로세스 메모리가 포함된 덤프 파일을 생성한다. 추가로 [-r] 옵션은 lsass.exe의 복제본을 만들고 복제본을 디스크에 덤프하는 기능이다.

[그림 4] Sysinternals ProcDump.exe 도구를 이용한 lsass.exe 프로세스 덤프 

 

04. Comsvc.dll

comsvcs.dll은 Windows 시스템에 기본 내장된 파일로, PID별로 프로세스를 덤프하는 기능이 있다. 디버그 권한이 필요하므로 PowerShell 명령을 이용한다. 이란 PHOSPHORUS의 하위 그룹인 Nemesis Kitten(DEV-0270) 랜섬웨어  그룹을 포함한 많은 공격자가 사용하는 방법 중 하나로, 탐지를 피하기 위해 파일 이름을 반전하는 사례(ssasl.dmp)도 발견되었다.

[그림 5] comsvcs.dll을 이용한 lsass.exe 프로세스 덤프

 

3. 도구를 이용한 LSASS.exe Credential Dumping Attack 사례

01. Mimikatz

Mimikatz는 공격자 사이에서 윈도우 메모리에서 자격 증명을 덤프하는 데 가장 활발히 사용되는 도구이다. Mimikatz는 본래 LSASS의 취약점을 보완하고 보안 관리자들이 시스템 내에서 자격 증명 덤핑 취약점을 확인하기 위해 개발된 도구이다. 하지만 APT10, Kimsuky, FIN7 등의 APT 그룹도 Mimikatz를 활용하여 Windows Active Directory 환경에서 각종 사용자 계정과 관련된 정보를 훔쳐 기업 네트워크를 장악하고 측면 이동하는 데 사용하고 있다. 사이버 보안 회사 Trellix에 따르면 2021년 3분기, Mimikatz(27%)는 Cobalt Strike(34%)에 이어 가장 널리 확산한 APT 도구로 나타났다.

[그림 6] mimikatz 실행 - NTLM, SHA1 해시 확인 가능(Windows 10)

 

02. Pypykatz

Pypykatz는 파이썬 환경에서 mimikatz 기능을 구현한 도구로 python>=3.6을 지원하는 모든 OS에서 실행할 수 있다. Pypykatz는 현재 시스템 메모리에서 작동하는 live 버전과 미리 덤프한 lsass.DMP 파일을 사용하는 일반 버전이 있다.

pypykatz lsa minidump /home/kali/Desktop/lsass.DMP

[표 1] pypykatz 명령어

 

[그림 7] pypykatz 실행 - 미리 덤프한 lsass.DMP 파일 확인

 

03. Spraykatz

spraykatz는 Windows 시스템과 Active Directory 환경에서 자격 증명을 검색할 수 있는 도구로, 원격 procdump와 lsass 프로세스 구문 분석을 자동화해 자격 증명을 수집한다.

./spraykatz.py -u Administrator -p L0c4L4dm1n -t 192.168.91.0/24

[표 2] spraykatz 명령어

 

[그림 8] spraykatz 실행 - 특정 네트워크 대역의  lsass.DMP 자격 증명 수집

 

04. Lsassy

Lsassy는 impacket 프로젝트를 사용해 lsass 메모리를 덤프하고 pypykatz에서 필요한 바이트를 원격으로 읽어 자격 증명을 추출한다. 파이썬 3.7 이상에서 작동한다.

Lsassy -u Administrator -p L0c4L4dm1n -t 192.168.91.0/24

[표 3] Lsassy 명령어

 

[그림 9] Lsassy 실행 - 특정 네트워크 대역의  lsass.DMP 자격 증명 수집

 

4. 대응 방안

Mimikatz나 자격 증명 덤핑을 차단하기 위해 시그니처 기반 탐지와 EDR을 사용하는 것은 부적절하다. 이러한 공격을 방지하기 위해서 기업이 가장 먼저 해야 할 것은 지원되는 Windows  운영체제를 업그레이드하는 것이다. 최신 Windows 운영체제는 기본적으로 WDigest를 비활성화하여 평문으로 저장된 비밀번호가 덤프되는 것을 방지한다. 하지만 공격자는 NTLM 해시를 덤프해 pass-the-hash 공격으로도 비밀번호를 알아낼 수 있다. 가장 중요한 대응 방안 중 하나는 가능한 한 로컬 접근을 제한하는 것이다. 이 두 가지 규칙 외에도 아래와 같은 방법을 사용할 수 있다.

  • 지원이 종료된 Windows 운영 체제는 폐기
  • 로컬 관리자 접근 최대한 제한
  • Windows 8 및 Windows Server 2012 R2 이전의 모든 Windows 운영 체제에서 WDigest 비활성화
  • Windows Defender Credential Guard 활성화
  • 레지스트리 변경 사항을 모니터링하여 WDigest가 다시 활성화되지 않았는지, Windows Defender Credential Guard가 비활성화되지 않았는지 확인
  • pass-the-hash 공격에 대한 경고 및 제한
  • Windows Defender ASR Rule 적용
  • 도메인 로컬 그룹 정책 수정

 

01. Windows Defender ASR(Attack Surface Reduction)

적용 대상: Windows 10, Windows 11, Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows Server 2012 R2

 

“Attack Surface”는 조직의 사이버 보안 취약성과 모든 잠재적 공격 벡터를 말한다. Microsoft Defender for Endpoint(MDE) ASR(Attack Surface Reduction) 규칙을 구성하면 공격 표면을 줄여 조직의 자산과 네트워크를 보호하는 데 도움이 될 수 있다.

 

Microsoft Credential Guard의 경우 일부 드라이버와 응용프로그램에서 충돌이 발생하기 때문에 기업에서는 호환성 문제로 비활성화할 수 있다. Credential Guard에서 충돌을 일으키지 않고 Windows 자격 증명 도용을 완화하는 방법으로 Microsoft Windows Defender ASR의 "Windows 로컬 보안 기관 하위 시스템(lsass.exe)에서 자격 증명 도용 차단" 규칙을 적용할 수 있다.

Intune name: Flag credential stealing from the Windows local security authority subsystem
Configuration Manager name: Block credential stealing from the Windows local security authority subsystem
GUID: 9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2
Advanced hunting action type:
  • AsrLsassCredentialTheftAudited
  • AsrLsassCredentialTheftBlocked
Dependencies: Microsoft Defender Antivirus

[표 4] Defender ASR - lsass.exe rule 상세 내역

 

Attack surface reduction (ASR) rules에 대한 추가 정보는 다음 링크를 참조: 

https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/attack-surface-reduction-rules-reference?view=o365-worldwide#block-credential-stealing-from-the-windows-local-security-authority-subsystem

 

02. LSA Protection(RunAsPPL) 활성화

적용 대상: Windows Server 2022, Windows Server 2019, Windows Server 2016

기본 활성화:  Windows 11 Enterprise 22H2 and Windows 11 Education 22H2

 

Local Security Authority(LSA) 하위 시스템은 로그온 시도, 암호 변경, 액세스 토큰 생성, Windows 인증 및 권한 부여 프로토콜과 관련된 작업을 수행한다. 이 기능은 보호되지 않은 프로세스에 의한 메모리 읽기 및 코드 삽입을 방지한다. LSA Protection 설정은 Windows 8.1 이상에서 구성할 수 있다. LSA Protection을 활성화하기 위해서는 레지스트리 편집기를 통해 RunAsPPL 키를 1로 변경한 후 재부팅해야 한다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
registry key to: “RunAsPPL”=dword:00000001

[표 5] LSA Protection 레지스트리 설정

 

이 매개변수가 적용된 후 공격자는 LSA 메모리에 액세스할 수 없으며 mimikatz 도구를 사용할 경우 sekurlsa::logonpasswords 명령에 [그림 10]과 같은 오류를 확인할 수 있다.

[그림 10] sekurlsa::logonpasswords 명령 오류

 

LSA Protection에 대한 추가 정보는 다음 링크를 참조: 

https://learn.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/configuring-additional-lsa-protection#protected-process-requirements-for-plug-ins-or-drivers 

 

03. Windows Defender Credential Guard 활성화

적용 대상: Windows 10 Enterprise/Pro, Windows Server 2016, Windows Server 2019

기본 활성화: Windows 11 Enterprise  22H2, Windows 11 Education  22H2

 

Windows Defender Credential Guard는 SYSTEM 권한이 있는 사용자로부터도 LSASS 프로세스를 격리할 수 있다. 모든 사용자에 대한 액세스를 방지하는 가상화된 컨테이너에서 LSASS를 실행하는 방법을 사용해 LSASS 메모리를 덤프하는 것을 불가능하게 한다.

 

Credential Guard에 대한 추가 정보는 다음 링크를 참조: 

https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage

 

04. WDigest에서 "UseLogonCredential" 비활성화

적용 대상: Windows 8, Windows Server 2012 R2 이전

 

WDigest 프로토콜은 Windows XP 때 등장했으며, LSASS에서 메모리에 비밀번호를 평문으로 저장하는 것을 방지하기 위해 WDigest를 비활성화해야 한다. 구버전 Windows 운영 체제(Windows 8, Windows Server 2012 R2 이전)의 경우, WDigest가 기본적으로 활성화되어있기 때문에 그룹 정책을 수정하여 비활성화해야 한다. Microsoft는 이전 버전의 Windows와 Windows Server에서 레지스트리 값을 설정해  WDigest를 비활성할 수 있도록 윈도우 보안 업데이트(KB2871997)를 제공한다. 보안 업데이트를 먼저 설치한 후, 레지스트리 키(UseLogonCredential)를 0으로 바꿔야한다. 또한 주기적으로 이 레지스트리 키를 모니터링해 키가 1로 설정되거나 활성화되는지 확인해야 한다.

HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\UseLogonCredential
registry key to: “UseLogonCredential”=dword:00000000

[표 6] 레지스트리 키(UseLogonCredential) 변경 방법

 

UseLogonCredential 레지스트리 값이 0으로 설정하면 공격자가 Mimikatz를 이용할 때 Password가 (null)로 표시되고 평문 암호는 얻을 수 없다.

[그림 11] UseLogonCredential 0일 때, Mimikatz Password 값(null) 

 

또한, 사용자가 로그오프하고 나서 30초 후 메모리에서 자격 증명 삭제를 위해 레지스트리를 설정한다. TokenLeakDetectDelaySecs 키를 DWORD type으로 생성하고 30초의 권장값을 설정한다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\TokenLeakDetectDelaySecs
registry key to: “TokenLeakDetectDelaySecs”=dword:0000001e (30)

[표 7] 로그오프 이후 자격 증명 제거

 

Windows 8.1, Windows Server 2012 R2 이상(Windows 10 포함) 버전에서는 기본적으로 WDigest 자격 증명이 메모리에 캐싱되지 않도록 설정되어 있다. 레지스트리 항목이 없는 경우 UseLogonCredential 값은 기본적으로 0이다. 따라서, Windows 10 사용자라면 별도의 설정이 필요하지 않다. 아래 [그림 12]은 윈도우 버전과 UseLogonCredential 값과의 관계를 나타내고 있다.

[그림 12] 윈도우 버전 별  UseLogonCredential  값(출처:Netwrix)

 

05. Debug Privileges (디버그 권한) 사용 방지하기

SeDebugPrivilege는 다른 계정이 소유한 프로세스의 메모리를 디버그(Debug)하고 조정하는 데 필요하다. 공격자는 이를 사용해 감지를 피하고 자격 증명 액세스를 확보한다. 프로그램 디버깅 사용 권한은 Administrators에 부여되는데, 대부분의 경우 관리자들은 이 기능을 사용하지 않기 때문에 보안을 위해 SeDebugPrivilege를 비활성화하는 것이 좋다. 윈도우 명령어 'whoami /priv'를 사용해 디버그 권한이 활성화되어 있는지 확인할 수 있다.

[그림 13] SeDebugPrivilege 활성여부 확인

 

디버그 권한 사용을 방지하기 위해서는 gpedit.msc 실행 Windows 설정 → 보안 설정 → 로컬 정책 → 사용자 권한 할당의 정책 컬럼에서 프로그램 디버깅으로 이동한다. 개발을 위해 필요하지 않다면 Administrators를 제거하여 빈 칸으로 비워둔다.

[그림 14] 디버그 권한 사용 방지

 

06. 해독 가능한 암호 저장 비활성화

Active Directory에 평문으로 사용자 비밀번호를 저장하는 것을 하지 말아야 한다. 이를 위해 gpedit.msc 실행 → Windows 설정 → 보안 설정 → 계정 정책 → 암호 정책의 정책 컬럼에서 해독 가능한 암호화를 사용하여 암호 저장으로 이동한다. 값을 사용 안 함으로 설정한다.

[그림 15] 해독 가능한 암호 저장 비활성화

 

07. 자격 증명 저장 사용하지 않기

도메인 사용자가 네트워크 리소스에 접근하기 위해 Credential Manager에 비밀번호를 저장하지 못하게 할 수 있다. 이를 위해서 gpedit.msc 실행 → Windows 설정 → 보안 설정 → 로컬 정책 → 보안옵션의 정책 컬럼에서 네트워크 액세스: 네트워크 인증에 대한 암호 및 자격 증명의 저장소 허용 안 함으로 이동한다. 값을 사용으로 설정한다.

[그림 16] 자격 증명 저장 사용하지 않기

 

08. Cached Credentials 비활성화

mimikatz 기능 중 하나는 HKEY_LOCAL_MACHINE\SECURITY\Cache 키에서 사용자 비밀번호 해시를 가져오는 것이다. 보통 여기에는 마지막으로 로그온한 도메인 사용자 10명의 비밀번호 해시가 저장된다. 이 해시는 도메인 컨트롤러를 사용할 수 없는 경우 시스템에서 사용자를 인증하는 데 사용된다. Cached Credentials를 비활성화하기 위해서는 gpedit.msc 실행 → Windows 설정 → 보안 설정 → 로컬 정책 → 보안옵션의 정책 컬럼에서 대화형 로그온:캐시할 로그온 횟수(도메인 컨트롤러를 사용할 수 없는 경우)로 이동한다. 값을 0으로 설정한다. Windows 10 Enterprise, Windows Server 2016 부터는 LSASS에 무단 접근으로부터 격리하고 보호할 수 있는 Credential Guard가 탑재되었다.

[그림 17] Cached Credentials 비활성화

 

5. MITER ATT&CK References

MITRE Technique Description
T1003.001 OS Credential Dumping: LSASS Memory

[표 8] MITER ATT&CK Technique

 

6. 참고 자료

[1] Microsoft Security Threat Intelligence,  Detecting and preventing LSASS credential dumping attacks

https://www.microsoft.com/security/blog/2022/10/05/detecting-and-preventing-lsass-credential-dumping-attacks/

[2] Red Teaming Experiments, Dumping Lsass Without Mimikatz

https://www.ired.team/offensive-security/credential-access-and-credential-dumping/dump-credentials-from-lsass-process-without-mimikatz 

[3] White Oak Security, Attacks & Defenses: Dumping LSASS With No Mimikatz

https://www.whiteoaksecurity.com/blog/attacks-defenses-dumping-lsass-no-mimikatz/ 

[4] Microsoft, 자격 증명에 대한 추가 LSA 보호를 구성하는 방법

https://learn.microsoft.com/ko-kr/windows-server/security/credentials-protection-and-management/configuring-additional-lsa-protection 

[5] Microsoft, Manage Windows Defender Credential Guard

https://learn.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage 

[6] Microsoft, Attack surface reduction (ASR) rules reference

https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/attack-surface-reduction-rules-reference?view=o365-worldwide#block-credential-stealing-from-the-windows-local-security-authority-subsystem 

[7] Netwrix, WDigest Clear-Text Passwords: Stealing More than a Hash

https://blog.netwrix.com/2022/10/11/wdigest-clear-text-passwords-stealing-more-than-a-hash/ 

[8] WindowsOSHub, Defending Windows Domain Against Mimikatz Attacks

http://woshub.com/defending-windows-domain-against-mimikatz-attacks/

[9] Piolink, mimikatz 공격 대응 방법

https://www.piolink.com/kr/service/Security-Analysis.php?bbsCode=security&vType=view&idx=76&page=1&ckattempt=1 



보안관제센터 MIR Team

관련글 더보기

댓글 영역