LSA 비밀 정보¶
개요¶
LSA(Local Security Authority)는 비밀 정보를 SECURITY 하이브에 보관합니다. 여기에는 자동 로그온
암호, 서비스가 실행되는 계정의 암호, 컴퓨터 계정의 도메인 암호, DPAPI 시스템 키, 그리고 캐시된 도메인
로그온을 암호화하는 키가 포함됩니다. 또한 도메인 사용자가 도메인 컨트롤러 없이도 로그인할 수 있도록
캐시된 도메인 로그온도 보관합니다.
parse-registry lsa-secrets는 시스템이 어떤 비밀 정보를 보유하고 있으며 언제 설정되었는지, 그리고 캐시된
로그온을 몇 개 보관하고 사용하는지를 나열합니다. 이 명령은 이름과 시간만 읽습니다. 아무것도 복호화하지
않으며, 어떤 비밀 정보의 바이트도 읽거나 쓰지 않습니다. Juntei는 증거를 읽을 뿐 자격 증명을 추출하지
않습니다.
가장 타당한 결론: 시스템이 이 이름의 비밀 정보를 보유하고 있었으며,
이 시간에 설정되었습니다. 서비스의 비밀 정보(_SC_<service>)는 LSA가 해당 서비스가 실행되는 계정의
암호를 저장하고 있음을 의미합니다.
위치¶
C:\Windows\System32\config\SECURITY
Policy\Secrets\<name>\CurrVal the current value (encrypted)
Policy\Secrets\<name>\OldVal the previous value
Policy\Secrets\<name>\CupdTime when the current value was set (FILETIME)
Policy\Secrets\<name>\OupdTime when the previous value was set
Cache\NL$1 … NL$n cached domain logons, one slot each
Cache\NL$Control how many slots Windows keeps
| 이름 | 종류 | 설명 |
|---|---|---|
DefaultPassword |
autologon |
Winlogon이 자동으로 로그인할 때 사용하는 암호입니다. |
_SC_<service> |
service_account |
<service>가 실행되는 계정의 암호입니다. |
$MACHINE.ACC |
machine_account |
도메인에서 컴퓨터 계정의 암호입니다. |
DPAPI_SYSTEM |
dpapi_system |
시스템의 DPAPI 키입니다. |
NL$KM |
cached_logon_key |
캐시된 로그온을 암호화하는 키입니다. |
L$_SQSA_<SID> |
security_questions |
로컬 계정의 보안 질문입니다(Windows 10 이상). |
RasDialParams!<SID>#n, L$_Ras… |
ras_credentials |
전화 접속 및 VPN 자격 증명입니다. |
L$…, G$…, M$… |
local, global, machine |
LsaStorePrivateData가 부여하는 접두사로 구분되는 기타 개인 데이터입니다. |
SECURITY를 트랜잭션 로그와 함께 수집하고, 호스트 이름을 알 수 있는 시스템의 SYSTEM 하이브도
수집하십시오.
분석 시 주의 사항¶
- 값이 아니라 이름과 시간입니다. 값에 데이터가 있는지 여부는 크기로 판단합니다. 그 내용은 읽지 않습니다.
DefaultPassword가 자동 로그온을 의미하지는 않습니다. 이 비밀 정보는 한 번도 자동으로 로그인하지 않는 시스템을 포함해 대부분의 시스템에 존재합니다. 자동 로그온이 구성되어 있는지는SOFTWARE의Microsoft\Windows NT\CurrentVersion\Winlogon(AutoAdminLogon,DefaultUserName)에서 알 수 있습니다. 최근의CurrentSetUTC는 설명이 필요한 변경입니다.- 서비스 비밀 정보:
_SC_<service>는 서비스가 암호가 있는 계정으로 실행되도록 설정되었을 때 나타납니다. 이를parse-registry services(ObjectName)와 비교하고, 최근에 설치되었거나 알 수 없는 서비스를 찾으십시오. 서비스가 사라진 뒤에도 비밀 정보는 남아 있을 수 있습니다. - 시간:
CurrentSetUTC와OldSetUTC는 Windows가 현재 값과 이전 값을 설정한 시점입니다.$MACHINE.ACC암호는 기본적으로 30일마다 변경되므로 그 시간도 바뀝니다.KeyLastWrittenUTC와CurrVal/OldVal키 시간은 비밀 정보가 마지막으로 변경된 시점에 관한 정보입니다. - 캐시된 로그온: 레코드에 사용자 이름이 있으면 해당 슬롯은 사용 중입니다. 레코드의 헤더는 암호화되어
있지 않으며, 사용자 이름 길이만 읽습니다.
CachedLogonsKept는NL$Control의 개수이며,CachedLogonsCount(기본값 10)를 따릅니다. 사용 중인 슬롯은 도메인 사용자가 대화형으로 로그인했음을 의미하며, 그 자격 증명은 하이브에서 오프라인으로 크래킹될 수 있습니다. 사용자 이름은 암호화되어 있으며 디코딩하지 않습니다. 완전한 헤더와 일관된 사용자 이름 길이를 갖춘 검증된 바이너리 레코드만 사용 중으로 집계됩니다.Problems가 손상된 슬롯을 보고하는 경우 사용 중 개수는 검증된 슬롯만 포함하므로, 손상된 슬롯을 비어 있는 것으로 해석하지 마십시오.
Juntei로 파싱하기¶
Usage: juntei parse-registry lsa-secrets <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SECURITY hives
-f, --file <FILE> Parse one SECURITY hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry lsa-secrets -d collection/ -o lsa-secrets.csv
juntei parse-registry lsa-secrets -f SECURITY -t jsonl | jq 'select(.Kind == "service_account")'
요약에는 하이브별로 각 비밀 정보와 그 종류 및 설정 시점이 나열됩니다. 이어서 LSA가 계정 암호를 저장하고 있는 서비스의 이름을 표시하고, 사용 중인 캐시된 로그온 슬롯 수를 집계합니다.
출력 필드¶
| 필드 | 해석 |
|---|---|
Host, SourcePath |
호스트(시스템의 SYSTEM 하이브에서 얻음)와 SECURITY 하이브입니다. |
Secret, Kind |
비밀 정보의 이름과 그 종류(위 표 참조)입니다. 캐시된 로그온 레코드의 경우 Cache와 cached_logons입니다. |
ServiceName, UserSID |
_SC_ 비밀 정보의 대상 서비스와, 이름에 포함된 사용자의 SID(L$_SQSA_, RasDialParams)입니다. |
CurrentSetUTC, OldSetUTC |
CupdTime과 OupdTime: 현재 값과 이전 값이 설정된 시점입니다. |
HasCurrentValue, HasOldValue |
CurrVal과 OldVal에 데이터가 있는지 여부입니다. |
CurrentValueLastWrittenUTC, OldValueLastWrittenUTC, KeyLastWrittenUTC |
CurrVal, OldVal 및 비밀 정보 키의 마지막 쓰기 시간입니다. |
CachedLogons, CachedLogonsInUse, CachedLogonsKept |
캐시된 로그온 레코드: 슬롯 수, 사용 중인 슬롯 수, 그리고 NL$Control의 개수입니다. |
TransactionLogStatus, LogsApplied |
레지스트리 복구 컨텍스트입니다. |
Problems |
잘못된 형식이거나 범위를 벗어난 시간(시간 메타데이터만 표시됨), 손상된 캐시 헤더, 잘못된 캐시 값 유형, 읽을 수 없는 키입니다. |
조사 전략¶
- 알 수 없거나 최근에 설치된 서비스의
_SC_비밀 정보를 찾아,parse-registry services및 이벤트 7045(서비스 설치)와 매칭하십시오. DefaultPassword의 시간을Winlogon의 자동 로그온 설정과 대조하십시오.- 도메인 구성원에서는 사용 중인 캐시된 로그온 슬롯과
Cache가 마지막으로 기록된 시점을 기록해 두십시오. - 비밀 정보의 시간을 타임라인과 비교하십시오. 침입 기간 중에 설정된 비밀 정보는 새 서비스 계정, 자동 로그온 또는 컴퓨터 계정 변경을 나타낼 수 있습니다.