목차
Part 1: 개요
Part 2: 탐지 레이어별 기술 분석
3. T1055 프로세스 인젝션 — 탐지 레이어별 분석
4. T1003 자격증명 덤핑 — 탐지 레이어별 분석
5. 레이어 간 상관관계 분석
Part 3: 제품별 탐지 비교 매트릭스
6. 멀티 AV/EDR 제품 비교
7. 탐지 공백 영역 식별
Part 4: 결론 및 권고
8. 방어 권고사항
9. 결론
부록
Part 1: 개요
1. Executive Summary
"우리 회사는 AV를 쓰고 있으니 안전하지 않을까?"
보안 업계에서 가장 위험한 착각 중 하나다. 현대의 공격자는 단일 탐지 레이어를 우회하는 것이 아니라, 탐지 레이어 간의 빈틈을 파고든다. 시그니처를 우회했더니 행위 분석에 걸리고, 행위 분석을 우회했더니 메모리 스캔에 걸리는 — 이 "다계층 탐지"가 정확히 어떻게 작동하는지 종합 분석하였다.
핵심 발견 사항
| 항목 | 결과 |
|---|---|
| 분석 기법 | T1055 (12개 서브 기법), T1003 (8개 서브 기법) |
| 비교 제품 | Microsoft Defender, CrowdStrike Falcon, SentinelOne, Elastic Security, Kaspersky |
| 가장 효과적인 단일 탐지 포인트 | Sysmon Event ID 10 (LSASS 접근) / ETW Threat Intelligence Provider |
| 가장 큰 탐지 공백 | 직접 시스콜(Direct Syscall) 기반 인젝션 — 유저랜드 후킹 우회 |
| 가장 견고한 탐지 레이어 | 동적 분석 — 정적/휴리스틱 우회 시에도 가장 높은 확률로 탐지 |
| 모든 제품이 놓친 기법 | 모듈 스톰핑(Module Stomping) — 정상 DLL 메모리를 덮어쓰는 기법 |
| 최고 종합 점수 제품 | CrowdStrike Falcon (9.3/10) — 커널 수준 가시성 최우수 |
| 권고 방어 전략 | 심층 방어(Defense-in-Depth): 예방 + 탐지 + 대응 3계층 병행 |
2. 분석 대상 행위 개요
2.1 왜 이 두 기법인가
프로세스 인젝션 (T1055) — 공격자의 "은신술". 다른 프로세스의 주소 공간에 코드를 주입하면, 그 프로세스의 신뢰도를 빌릴 수 있다. svchost.exe에 셸코드를 주입하면, 방화벽은 정상적인 시스템 프로세스의 네트워크 활동으로 인식한다. MITRE에 등록된 서브 기법만 12개 — 그만큼 공격자가 자주 쓰고, 변형이 많다.
자격증명 덤핑 (T1003) — 공격자의 "만능열쇠". LSASS 메모리에서 평문 비밀번호나 NTLM 해시를 추출하면, 도메인 전체를 횡이동할 수 있다. 단 하나의 관리자 해시가 기업 전체 침해로 이어지는 경우가 빈번하다.
2.2 T1055 주요 서브 기법
| ID | 서브 기법 | 핵심 API 시퀀스 |
|---|---|---|
| T1055.001 | DLL 인젝션 | OpenProcess → VirtualAllocEx → WriteProcessMemory → CreateRemoteThread(LoadLibrary) |
| T1055.002 | PE 인젝션 | OpenProcess → VirtualAllocEx(RWX) → WriteProcessMemory(PE image) → CreateRemoteThread |
| T1055.003 | 스레드 실행 하이재킹 | SuspendThread → VirtualAllocEx → WriteProcessMemory → SetThreadContext → ResumeThread |
| T1055.004 | APC 인젝션 | OpenProcess → VirtualAllocEx → WriteProcessMemory → QueueUserAPC |
| T1055.012 | 프로세스 할로잉 | CreateProcess(SUSPENDED) → NtUnmapViewOfSection → VirtualAllocEx → WriteProcessMemory → SetThreadContext → ResumeThread |
| T1055.013 | 프로세스 도플갱잉 | NtCreateTransaction → CreateFileTransacted → NtCreateSection → RollbackTransaction → NtCreateProcessEx |
2.3 T1003 주요 서브 기법
| ID | 서브 기법 | 주요 방법 |
|---|---|---|
| T1003.001 | LSASS 메모리 | Mimikatz, comsvcs.dll MiniDump, procdump, 직접 메모리 읽기 |
| T1003.002 | SAM | reg save HKLM\SAM, Volume Shadow Copy, 직접 레지스트리 접근 |
| T1003.003 | NTDS | ntdsutil IFM, Volume Shadow Copy, DCSync |
| T1003.004 | LSA Secrets | reg save HKLM\SECURITY, Mimikatz lsadump::secrets |
| T1003.005 | 캐시된 도메인 자격증명 | HKLM\Security\Cache 접근 |
| T1003.006 | DCSync | DRS 프로토콜 악용 (DRSGetNCChanges) |
Part 2: 탐지 레이어별 기술 분석
3. T1055 프로세스 인젝션 — 탐지 레이어별 분석
3.1 정적 분석 (Static Analysis) — 실행 전에 잡아낸다
정적 분석은 바이너리를 실행하지 않고 파일 자체의 속성을 검사하는 첫 번째 방어선이다. 마치 공항 수하물 X-ray처럼, 내용물을 열어보지 않고도 위험을 판별한다.
3.1.1 IAT(Import Address Table) 분석
고위험 API 임포트 조합 ("인젝션 트라이어드"):
VirtualAllocEx + WriteProcessMemory + CreateRemoteThread/NtCreateThreadEx + OpenProcess
아래 3개 이상이 동시에 임포트되면 인젝션 의심:
| API 함수 | 인젝션 용도 | 위험도 |
|---|---|---|
OpenProcess |
대상 프로세스 핸들 획득 | 중간 (정상 사용 빈번) |
VirtualAllocEx |
원격 프로세스 메모리 할당 | 높음 — 정상 사용 극히 드묾 |
WriteProcessMemory |
원격 프로세스에 페이로드 쓰기 | 높음 |
CreateRemoteThread |
원격 프로세스에서 코드 실행 | 매우 높음 |
NtCreateThreadEx |
ntdll 수준 원격 스레드 생성 | 매우 높음 (API 후킹 우회 시도) |
QueueUserAPC |
APC 인젝션 | OpenProcess와 결합 시 높음 |
NtUnmapViewOfSection |
프로세스 이미지 언매핑 (할로잉) | 매우 높음 — 정상 사용 거의 없음 |
SetThreadContext |
스레드 레지스터 변경 (하이재킹) | 높음 |
CreateFileTransacted |
NTFS 트랜잭션 파일 조작 | 매우 높음 (도플갱잉) |
NtWriteVirtualMemory |
ntdll 수준 메모리 쓰기 | 매우 높음 (후킹 우회) |
하지만 공격자가 GetProcAddress로 런타임에 API를 해결하면? IAT에는 GetProcAddress와 LoadLibrary만 보이고, 실제 인젝션 API는 숨겨진다.
3.1.2 문자열(String) 분석
탐지 대상 문자열 패턴:
- DLL 경로:
kernel32.dll,ntdll.dll+LoadLibraryA,LoadLibraryW - 대상 프로세스명:
explorer.exe,svchost.exe,lsass.exe,spoolsv.exe - 런타임 해결 ntdll 함수명:
NtCreateThreadEx,NtUnmapViewOfSection,RtlCreateUserThread,NtQueueApcThread - 셸코드 프리앰블:
\xFC\x48\x83\xE4\xF0(x64 Cobalt Strike/msfvenom),\xFC\xE8(x86 블록 API 해시 리졸루션) - API 해싱 상수:
0x6A4ABC5B(ROR13 CreateRemoteThread 해시),0x0726774C(LoadLibraryA 해시)
3.1.3 엔트로피(Entropy) 분석
파일의 "무작위성"을 측정한다. 정상적인 컴파일된 코드의 .text 섹션은 엔트로피가 5.5~6.5 정도다. 암호화되거나 패킹된 페이로드는 7.0 이상으로 튀어오른다.
| 조건 | 정상 범위 | 의심 기준 |
|---|---|---|
.text 섹션 엔트로피 |
5.5 ~ 6.5 | > 6.8 |
| 개별 섹션 엔트로피 | < 7.0 | > 7.0 (암호화/압축/패킹) |
| 전체 파일 엔트로피 (< 100KB) | < 6.5 | > 7.0 + 작은 크기 = 매우 의심 |
.data/.rsrc 섹션 |
< 5.0 | > 7.0 (암호화 셸코드 내장) |
3.1.4 PE 헤더 이상 징후
| 이상 징후 | 설명 | 탐지 신뢰도 |
|---|---|---|
| RWX 섹션 | IMAGE_SCN_MEM_READ|WRITE|EXECUTE (0xE0000020) |
높음 — 정상 PE에서 극히 드묾 |
| 비표준 섹션명 | UPX0/UPX1, 공백 이름, 비ASCII |
중간 |
| Raw size=0, Virtual size>0 | 언패킹 스텁 존재 | 높음 |
| 최소 임포트 테이블 | LoadLibrary + GetProcAddress만 임포트 |
높음 (런타임 해결 패턴) |
| 엔트리 포인트 위치 이상 | .text 외부 또는 마지막 섹션 |
높음 |
| 체크섬 불일치 | PE 체크섬과 실제 불일치 | 중간 |
| TLS 디렉토리 존재 | 비멀티스레드 앱에서 (콜백 악용) | 중간~높음 |
3.1.5 YARA 룰 패턴
rule Process_Injection_API_Combination {
meta:
description = "프로세스 인젝션 API 조합 탐지"
mitre_attack = "T1055"
strings:
$api1 = "VirtualAllocEx"
$api2 = "WriteProcessMemory"
$api3 = "CreateRemoteThread"
$api4 = "OpenProcess"
$ntapi1 = "NtCreateThreadEx"
$ntapi2 = "NtUnmapViewOfSection"
condition:
($api1 and $api2 and ($api3 or $ntapi1)) or
($ntapi2 and $api2)
}
rule Process_Hollowing_Indicators {
meta:
description = "프로세스 할로잉 지표 탐지"
mitre_attack = "T1055.012"
strings:
$s1 = "NtUnmapViewOfSection"
$s2 = "ZwUnmapViewOfSection"
$flag = { 04 00 00 00 } // CREATE_SUSPENDED flag
condition:
($s1 or $s2) and $flag
}
rule Direct_Syscall_Pattern {
meta:
description = "직접 시스콜 호출 패턴 (후킹 우회)"
strings:
$syscall = { 4C 8B D1 B8 ?? ?? 00 00 0F 05 C3 }
// mov r10, rcx; mov eax, <num>; syscall; ret
condition:
#syscall > 3
}
정적 분석의 한계: 난독화, 패킹, 런타임 API 해결 등으로 비교적 쉽게 우회된다. 이것이 정적 분석만으로는 부족한 이유다.
3.2 동적 분석 (Dynamic/Behavioral Analysis) — 행동을 지켜본다
정적 분석을 우회했더라도, 실제로 인젝션을 수행하려면 결국 동일한 행위를 해야 한다. 동적 분석은 이 행위를 실시간으로 모니터링한다.
3.2.1 API 호출 시퀀스 트리거 조건
Classic DLL 인젝션 시퀀스 (5초 이내 발생):
① OpenProcess(대상 프로세스)
↓
② VirtualAllocEx(PAGE_READWRITE 또는 PAGE_EXECUTE_READWRITE)
↓
③ WriteProcessMemory(할당된 영역에 페이로드 쓰기)
↓
④ CreateRemoteThread 또는 NtCreateThreadEx(LoadLibraryA 또는 할당 영역 지점)
문자열을 아무리 암호화해도, IAT를 아무리 숨겨도, 실행 시점에서 이 API 호출 시퀀스는 반드시 발생한다. EDR은 이 시퀀스가 5초 이내에 연속으로 발생하면 인젝션으로 판단한다.
프로세스 할로잉 시퀀스:
① CreateProcessW/A(CREATE_SUSPENDED, 0x4)
↓
② NtUnmapViewOfSection(원본 이미지 언매핑)
↓
③ VirtualAllocEx(원본 이미지 베이스 주소)
↓
④ WriteProcessMemory(새 PE 헤더 + 각 섹션)
↓
⑤ SetThreadContext(새 엔트리 포인트로 업데이트)
↓
⑥ ResumeThread
APC 인젝션 시퀀스:
① OpenProcess + OpenThread (또는 CreateToolhelp32Snapshot로 스레드 열거)
↓
② VirtualAllocEx → WriteProcessMemory
↓
③ QueueUserAPC(대상 스레드에 APC 큐잉)
3.2.2 메모리 속성 변경 모니터링
| 탐지 조건 | 설명 | 위험도 |
|---|---|---|
| RWX 할당 | VirtualAllocEx/VirtualProtect로 PAGE_EXECUTE_READWRITE(0x40) 설정 |
높음 — 정상 소프트웨어에서 거의 불필요 |
| RW→RX 전환 | RW로 할당 후 페이로드 기록, 이후 PAGE_EXECUTE_READ(0x20)로 변경 |
높음 — 더 정교하지만 탐지 가능 |
| 비백킹 실행 메모리 | MEM_PRIVATE + 실행 가능 — 디스크상 DLL/EXE에 매핑되지 않은 영역 | 매우 높음 — 인젝션의 강력한 지표 |
| 원격 대용량 할당 | 부모/디버거가 아닌 프로세스에서 대상 프로세스에 대용량 메모리 할당 | 높음 |
| PEB 수정 | 프로세스 할로잉 시 ImageBaseAddress 업데이트 |
높음 |
3.2.3 프로세스 관계 이상 탐지
[정상 프로세스 계층]
System → smss.exe → csrss.exe
→ wininit.exe → services.exe → svchost.exe
→ lsass.exe
winlogon.exe → userinit.exe → explorer.exe
[이상 징후 예시]
✗ cmd.exe → svchost.exe (CREATE_SUSPENDED) ← 할로잉 의심
✗ powershell.exe → explorer.exe 메모리 쓰기 ← 인젝션 의심
✗ svchost.exe가 services.exe 자식이 아님 ← 위장 프로세스
✗ 동일 프로세스 다중 인스턴스 (예: lsass.exe 2개) ← 비정상
✗ 비보안 도구가 PROCESS_VM_WRITE로 다른 프로세스 접근 ← 인젝션 시도
3.2.4 네트워크 행위 지표
- 인젝션된
svchost.exe/explorer.exe에서 C2 서버로의 아웃바운드 연결 - 원래 네트워크 연결을 하지 않는 프로세스의 갑작스러운 TCP/HTTP 연결
- 비코닝 패턴: 정규 간격(지터 포함) 외부 IP/도메인 콜백
- DGA(Domain Generation Algorithm) 패턴의 DNS 쿼리
동적 분석의 한계: "직접 시스콜(Direct Syscall)"이라는 우회 기법이 있다. ntdll.dll의 API 후킹을 건너뛰고 커널에 직접 시스템 호출을 보내는 것이다. 유저랜드 후킹에 의존하는 EDR은 이를 놓칠 수 있다.
3.3 휴리스틱 분석 (Heuristic Analysis) — 맥락을 읽는다
"이 파일이 뭘 하는가"가 아니라 "이 파일이 누구인가"를 본다.
3.3.1 파일 평판 (Reputation)
클라우드 기반 평판 시스템은 전 세계 수억 대의 엔드포인트에서 수집한 데이터를 기반으로 파일의 "신뢰도"를 매긴다. 처음 보는 바이너리 + 인젝션 API + 미서명 = 자동으로 위험 등급 상승.
| 신호 | 위험 가중치 |
|---|---|
| 미알려진 바이너리 (글로벌 유병률 낮음) | 높음 |
| 최근 컴파일 (PE 타임스탬프 수시간/수일 내) | 중간 |
| 해당 엔드포인트/네트워크에서 최초 발견 | 높음 |
| 클라우드 평판 조회 이력 없음 (zero prevalence) | 높음 |
3.3.2 디지털 서명 (Digital Signature)
Microsoft가 서명한 procdump.exe는 합법적인 디버깅 도구다. 하지만 이 도구가 lsass.exe를 대상으로 실행되면? 서명이 유효해도 맥락이 악성이다. 현대 EDR은 이 "합법적 도구의 비정상 사용"까지 탐지한다.
| 서명 상태 | 평가 |
|---|---|
| 미서명 바이너리 + 인젝션 API | 매우 높은 위험 |
| 유효하지 않은 서명 (해지/만료/변조) | 높은 위험 |
| 자가 서명 (알려지지 않은 발급자) | 높은 위험 |
| 유효 서명 (손상된 벤더) | 낮은 위험 — 탐지 어려움 |
| 유효 서명 (정상 벤더) | 낮은 위험 |
3.3.3 파일 경로 이상
C:\Windows\System32\svchost.exe는 정상. C:\Users\victim\Downloads\svchost.exe는 의심. 같은 파일명이라도 경로가 다르면 위장 공격일 수 있다.
위험 실행 경로:
%TEMP%,%APPDATA%\Local\Temp,Downloads폴더C:\Users\Public,C:\ProgramData,C:\Windows\Temp- 이중 확장자:
document.pdf.exe C:\Windows\System32외부의 시스템 파일 가장 바이너리
3.3.4 복합 위험도 점수 계산
[크리티컬 — 즉시 차단]
바이너리 수명 < 24시간 + 인젝션 API + 미서명 = 크리티컬
[매우 높음]
작은 파일 (< 200KB) + 높은 엔트로피 + 인젝션 API = 매우 높음
[높음]
프로세스가 SUSPENDED로 자식 생성 후 메모리 쓰기 = 높음
사용자 수준 프로세스에서 SYSTEM 프로세스에 OpenProcess = 높음
다수 프로세스에 대한 빠른 연속 VirtualAllocEx = 높음
4. T1003 자격증명 덤핑 — 탐지 레이어별 분석
4.1 정적 분석 (Static Analysis)
4.1.1 IAT 분석
| API 함수 | 맥락 | 위험도 |
|---|---|---|
OpenProcess (LSASS 대상) |
LSASS 메모리 접근 | 높음 |
MiniDumpWriteDump (DbgHelp.dll) |
프로세스 덤프 생성 | LSASS 대상 시 매우 높음 |
NtReadVirtualMemory |
LSASS 메모리 읽기 | 매우 높음 |
SamConnect / SamOpenDomain / SamQueryInformationUser |
SAM 접근 | 매우 높음 |
RegSaveKey |
레지스트리 하이브 추출 | SAM/SECURITY/SYSTEM 대상 시 높음 |
AdjustTokenPrivileges |
SeDebugPrivilege 활성화 | 높음 |
DsBind / DsGetNCChanges |
DCSync | 비DC에서 매우 높음 |
4.1.2 문자열 분석
Mimikatz 지표:
sekurlsa::logonpasswords, sekurlsa::wdigest, lsadump::sam, lsadump::dcsync
mimikatz, gentilkiwi, Benjamin DELPY, vincent LE TOUX
mimilib.dll, mimidrv.sys, privilege::debug
기타 도구 문자열:
procdump, comsvcs.dll, MiniDump, MiniDumpWriteDump
secretsdump, hashdump
HKLM\SAM, HKLM\SECURITY, HKLM\SYSTEM
ntdsutil, IFM, create full, vssadmin create shadow
인코딩된 페이로드:
- PowerShell 내 Base64 인코딩 PE:
TVqQ로 시작하는 대형 Base64 블록 (MZ 헤더) - Invoke-Mimikatz 등 리플렉티브 로딩 버전
4.1.3 YARA 룰 패턴
rule Mimikatz_Indicators {
meta:
description = "Mimikatz 및 변종 탐지"
mitre_attack = "T1003"
strings:
$s1 = "sekurlsa" ascii wide
$s2 = "logonpasswords" ascii wide
$s3 = "lsadump" ascii wide
$s4 = "gentilkiwi" ascii wide
$s5 = "mimikatz" ascii wide nocase
$s6 = "wdigest" ascii wide
condition:
3 of them
}
rule LSASS_Dump_Tool {
strings:
$api1 = "MiniDumpWriteDump"
$api2 = "OpenProcess"
$api3 = "DbgHelp.dll" nocase
$lsass = "lsass" nocase
condition:
($api1 or $api3) and $api2 and $lsass
}
rule Comsvcs_MiniDump_Abuse {
strings:
$s1 = "comsvcs.dll" nocase
$s2 = "MiniDump"
$s3 = "#24" // MiniDump export ordinal
condition:
$s1 and ($s2 or $s3)
}
4.2 동적 분석 (Dynamic/Behavioral Analysis)
4.2.1 API 호출 시퀀스 트리거 조건
LSASS 메모리 덤프:
① CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS) → Process32First/Next (lsass.exe PID 탐색)
↓
② OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, lsass_pid) — SeDebugPrivilege 필요
↓
③ MiniDumpWriteDump(hLsass, lsass_pid, hFile, MiniDumpWithFullMemory)
SAM 덤프:
① AdjustTokenPrivileges → SeBackupPrivilege 활성화
↓
② RegOpenKeyExA/W(HKEY_LOCAL_MACHINE, "SAM")
↓
③ RegSaveKeyA/W → 파일로 출력
DCSync:
① DsBind(도메인 컨트롤러)
↓
② DsGetNCChanges(DRSUAPI_DRS_INIT_SYNC + DRSUAPI_DRS_WRIT_REP)
↓
③ 반복 호출 → 전체 계정 복제
4.2.2 핸들 및 메모리 지표
| 조건 | 설명 | 위험도 |
|---|---|---|
| 비LSASS 프로세스가 lsass.exe 핸들 보유 (VM_READ) | 보안 제품 및 WerFault.exe 제외 | 크리티컬 |
| SeDebugPrivilege 활성화 | 일반 사용자 프로세스에서 | 높음 |
| LSASS가 갑자기 대용량 파일 생성 | 덤프 파일 | 크리티컬 |
| 다른 프로세스에 복제된 LSASS 토큰 | 토큰 복제 | 높음 |
누가 lsass.exe에 접근하는가가 핵심이다. Sysmon의 Event ID 10은 이 접근을 기록한다:
탐지 규칙:
IF ProcessAccess.TargetImage == "lsass.exe"
AND SourceImage NOT IN (보안 제품 허용 목록)
AND GrantedAccess INCLUDES VM_READ
THEN → CRITICAL ALERT
4.2.3 프로세스 관계 이상
✗ rundll32.exe → comsvcs.dll 로딩 + MiniDump 인수 ← LSASS 덤프 의심
✗ cmd.exe/powershell.exe → reg save SAM/SYSTEM/SECURITY ← 자격증명 추출
✗ 비관리 도구가 lsass.exe 핸들 오픈 ← 비인가 접근
✗ ntdsutil.exe가 비정상 부모 프로세스에서 스폰 ← NTDS 추출 의심
✗ vssadmin.exe가 백업 스케줄 외에 섀도 카피 생성 ← 비정상 사용
4.2.4 Windows 이벤트 로그 지표
| 이벤트 | 소스 | 설명 | 우선순위 |
|---|---|---|---|
| Event ID 10 | Sysmon | lsass.exe에 대한 ProcessAccess | 최우선 — 가장 중요한 단일 탐지 포인트 |
| Event ID 1 | Sysmon | 자격증명 덤핑 도구 해시의 프로세스 생성 | 높음 |
| Event ID 4656/4663 | Windows Security | \Device\HarddiskVolumeShadowCopy*\Windows\NTDS\ntds.dit 접근 |
높음 |
| Event ID 4662 | Windows Security | DS-Replication-Get-Changes GUID 접근 | 최우선 (DCSync) |
| Event ID 4688 | Windows Security | ntdsutil.exe, vssadmin.exe 프로세스 생성 | 중간 |
DCSync 탐지를 위한 핵심 GUID:
{1131f6aa-9c07-11d1-f79f-00c04fc2dcd2}— DS-Replication-Get-Changes{1131f6ad-9c07-11d1-f79f-00c04fc2dcd2}— DS-Replication-Get-Changes-All
4.2.5 파일 시스템 아티팩트
| 아티팩트 | 위치 | 의미 |
|---|---|---|
*.dmp 파일 |
비정상 위치 | LSASS 메모리 덤프 |
sam.hiv, system.hiv, security.hiv |
임시 디렉토리 | 레지스트리 하이브 추출 |
ntds.dit |
C:\Windows\NTDS\ 외부 |
AD 데이터베이스 복사 |
| Prefetch 파일 | C:\Windows\Prefetch\ |
도구 실행 흔적 |
4.3 휴리스틱 분석 (Heuristic Analysis)
- Mimikatz, procdump, gsecdump, pwdump 등의 알려진 해시 + SSDEEP 퍼지 해싱으로 변종 탐지
- Import Hash(imphash) 매칭으로 알려진 자격증명 덤핑 도구 계열 식별
복합 위험도 점수:
[크리티컬 — 즉시 차단]
LSASS 접근 프로세스 + 미서명 + 낮은 평판 = 크리티컬
SeDebugPrivilege 활성화 + LSASS 접근 + 대용량 파일 쓰기 = 크리티컬
MiniDumpWriteDump 호출 + LSASS PID 대상 = 크리티컬 (서명된 도구라도)
reg save SAM/SYSTEM + 비관리 스크립트에서 실행 = 크리티컬
5. 레이어 간 상관관계 분석
핵심 질문: 하나의 레이어를 우회하면 다른 레이어에서 걸리는가?
답은 "거의 항상 그렇다"이다. 다만 모든 조합이 동일하지는 않다.
5.1 정적 분석 우회 시 → 동적 분석에서의 탐지
| 정적 우회 기법 | 동적 탐지 가능 여부 | 설명 |
|---|---|---|
| 문자열 난독화/암호화 | 탐지됨 | 실행 시 동일 API 호출 시퀀스 발생 |
| IAT 은닉 (런타임 해결) | 탐지됨 | GetProcAddress 호출 후 동일 행위 수행 |
| PE 패킹/암호화 | 탐지됨 | 언패킹 후 메모리에서 원본 코드 실행 |
| 커스텀 인코딩 | 탐지됨 | 디코딩 후 동일 행위 패턴 |
| 시그니처 변경 (리빌드) | 탐지됨 | API 시퀀스와 메모리 패턴 동일 |
| 직접 시스콜 | 부분 탐지 | 유저랜드 후킹 우회하나 커널 콜백/ETW는 탐지 |
결론: 정적 분석 우회는 동적 분석에 거의 영향을 미치지 않음. 동적 분석이 가장 견고한 탐지 레이어.
5.2 동적 분석 우회 시 → 다른 레이어의 탐지
| 동적 우회 기법 | 정적 탐지 | 휴리스틱 탐지 | 설명 |
|---|---|---|---|
| 직접 시스콜 (유저랜드 후킹 우회) | 가능 (시스콜 스텁 패턴) | 가능 (미서명+낮은 평판) | 바이트 패턴 4C 8B D1 B8 ?? ?? 00 00 0F 05 C3 탐지 |
| 콜백 기반 실행 | 가능 (API 임포트) | 가능 | EnumWindows, CreateTimerQueueTimer 임포트 |
| 모듈 스톰핑 | 불가 (정상 DLL 덮어쓰기) | 부분 | 메모리 내용이 디스크 원본과 불일치 감지 가능 |
| 파이버 기반 실행 | 가능 (CreateFiber 임포트) |
가능 | 스레드 생성 모니터링 우회하나 다른 지표 |
5.3 휴리스틱 우회 시 → 다른 레이어의 탐지
| 휴리스틱 우회 기법 | 정적 탐지 | 동적 탐지 | 설명 |
|---|---|---|---|
| 유효 코드 서명 (탈취된 인증서) | 가능 | 가능 | 서명만으로 다른 지표 무시되지 않음 |
| 정상 경로 배치 | 가능 | 가능 | 경로만으로 행위 지표 무시되지 않음 |
| LoLBin 사용 (comsvcs.dll 등) | 불가 (정상 파일) | 가능 | 정상 DLL의 비정상 사용 패턴 탐지 |
| 높은 평판 도구 악용 (procdump) | 불가 (MS 서명) | 가능 | LSASS 대상 인수 탐지 |
5.4 레이어 간 상관관계 매트릭스
정적 우회 동적 우회 휴리스틱 우회
정적 탐지 — ✓ 가능 ✓ 가능
동적 탐지 ✓ 가능 — ✓ 가능
휴리스틱 탐지 ✓ 가능 ✓ 가능 —
✓ = 해당 레이어를 우회해도 다른 레이어에서 탐지 가능
5.5 LoLBin 사례 분석 — 다중 레이어 동시 우회
rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump
이 명령은 Windows 시스템 DLL을 사용하여 LSASS를 덤프한다:
- 정적 분석: comsvcs.dll은 정상 시스템 파일 → 우회
- 휴리스틱: Microsoft 서명 + 정상 경로 → 우회
- 동적 분석: "comsvcs.dll의 MiniDump 함수 + lsass.exe PID" 인수 → 탐지됨
결론: 동적 분석이 최후의 보루 역할을 한다.
5.6 핵심 인사이트
- 동적 분석이 가장 견고: 정적/휴리스틱 우회 시에도 동적 분석이 가장 높은 확률로 탐지
- 정적 분석이 가장 취약: 난독화/패킹으로 비교적 쉽게 우회 가능
- LoLBin은 정적+휴리스틱 동시 우회: 시스템 바이너리 악용 시 정적과 휴리스틱 모두 우회되나 동적은 탐지
- 직접 시스콜은 동적+정적 부분 우회: 유저랜드 후킹과 IAT 분석 우회하나 커널 수준 모니터링과 바이트 패턴 분석은 탐지
- 3계층 모두 우회하는 유일한 방법: 커널 수준 악성코드 (루트킷) — 이는 별도의 방어 레이어(Secure Boot, HVCI 등) 필요
Part 3: 제품별 탐지 비교 매트릭스
6. 멀티 AV/EDR 제품 비교
6.1 테스트 대상 제품 개요
| 항목 | Microsoft Defender | CrowdStrike Falcon | SentinelOne | Elastic Security | Kaspersky |
|---|---|---|---|---|---|
| 유형 | AV + EDR | EDR | AV + EDR | SIEM + EDR | AV + EDR |
| 커널 드라이버 | WdFilter.sys | 전용 드라이버 | 전용 드라이버 | Elastic Defend | 전용 드라이버 |
| 탐지 엔진 | 클라우드 AI + ASR | IOA + ML | 행위 AI (ActiveEDR) | 룰 기반 + YARA | BSS + HIPS |
| 자동 대응 | 격리/차단 | 격리/킬 | 킬 + 롤백 | 수동 (기본) | 차단 + 롤백 |
| LSASS 보호 | ASR + PPL + Credential Guard | 커널 수준 | 커널 수준 | OS 의존 | HIPS + 커널 |
| 가격대 | E5 라이선스 포함 | 프리미엄 | 프리미엄 | 무료/상용 | 중간 |
6.2 T1055 프로세스 인젝션 — 서브 기법별 탐지 능력
범례: ● 탐지+차단 ◐ 부분 탐지 △ 구성 필요 ○ 미탐지 가능 — 해당 없음
| 서브 기법 | ID | Defender | CrowdStrike | SentinelOne | Elastic | Kaspersky |
|---|---|---|---|---|---|---|
| DLL 인젝션 | .001 | ● | ● | ● | ◐ | ● |
| PE 인젝션 | .002 | ● | ● | ● | ◐ | ● |
| 스레드 하이재킹 | .003 | ● | ● | ● | ◐ | ● |
| APC 인젝션 | .004 | ● | ● | ● | ◐ | ● |
| TLS 콜백 인젝션 | .005 | ◐ | ● | ◐ | △ | ◐ |
| Ptrace (Linux) | .008 | — | ● | ● | ◐ | — |
| Proc Memory (Linux) | .009 | — | ● | ● | ◐ | — |
| Extra Window Memory | .011 | ◐ | ● | ◐ | △ | ◐ |
| 프로세스 할로잉 | .012 | ● | ● | ● | ◐ | ● |
| 프로세스 도플갱잉 | .013 | ◐ | ● | ● | ○ | ◐ |
| VDSO 하이재킹 (Linux) | .014 | — | ◐ | ◐ | △ | — |
| ListPlanting | .015 | ◐ | ◐ | ◐ | △ | ◐ |
6.3 T1055 — 탐지 레이어별 역량
| 탐지 레이어 | Defender | CrowdStrike | SentinelOne | Elastic | Kaspersky |
|---|---|---|---|---|---|
| 정적: 시그니처/IOC | ★★★★☆ | ★★★★☆ | ★★★★☆ | ★★★☆☆ | ★★★★★ |
| 정적: IAT 분석 | ★★★★☆ | ★★★★☆ | ★★★★☆ | ★★☆☆☆ | ★★★★☆ |
| 정적: 엔트로피/PE 이상 | ★★★☆☆ | ★★★★☆ | ★★★★☆ | ★★☆☆☆ | ★★★☆☆ |
| 동적: API 모니터링 | ★★★★☆ | ★★★★★ | ★★★★☆ | ★★★☆☆ | ★★★★☆ |
| 동적: 커널 수준 탐지 | ★★★★☆ | ★★★★★ | ★★★★☆ | ★★☆☆☆ | ★★★★☆ |
| 동적: 메모리 스캔 | ★★★★☆ | ★★★★☆ | ★★★★☆ | ★★☆☆☆ | ★★★☆☆ |
| 휴리스틱: 클라우드 평판 | ★★★★★ | ★★★★★ | ★★★★☆ | ★★☆☆☆ | ★★★★☆ |
| 휴리스틱: 행위 점수 | ★★★★☆ | ★★★★★ | ★★★★★ | ★★★☆☆ | ★★★★☆ |
6.4 T1055 — 우회 기법 대응력
| 우회 기법 | Defender | CrowdStrike | SentinelOne | Elastic | Kaspersky |
|---|---|---|---|---|---|
| 문자열 난독화 | ● (동적) | ● (IOA) | ● (AI) | ◐ | ● (BSS) |
| IAT 은닉 (런타임 해결) | ● (ETW) | ● (커널) | ● (하이브리드) | ◐ | ● (HIPS) |
| PE 패킹/암호화 | ● (AMSI) | ● (ML) | ● (AI) | ◐ | ● (시스템감시) |
| 직접 시스콜 | ◐ | ● | ◐ | ○ | ◐ |
| 모듈 스톰핑 | ○ | ◐ | ○ | ○ | ○ |
| 콜백 기반 실행 | ◐ | ● | ◐ | ○ | ◐ |
| 프로세스 고스팅 | ◐ | ● | ◐ | ○ | ◐ |
| 파이버 기반 실행 | ◐ | ◐ | ◐ | ○ | ◐ |
6.5 T1055 — 탐지 시점 비교
| 인젝션 기법 | Defender | CrowdStrike | SentinelOne | Elastic | Kaspersky |
|---|---|---|---|---|---|
| Classic DLL 인젝션 | 실행 시 | 실행 시 | 실행 시 | 실행 후 (룰 매칭) | 실행 시 |
| PE 인젝션 | 실행 시 | 실행 시 | 실행 시 | 실행 후 | 실행 시 |
| 프로세스 할로잉 | 실행 시 | 실행 시 | 실행 시 | 실행 후 | 실행 시 |
| APC 인젝션 | 실행 시 | 실행 시 | 실행 시 | 실행 후 | 실행 시 |
| 프로세스 도플갱잉 | 실행 후 | 실행 시 | 실행 시 | 미탐지 가능 | 실행 후 |
| 직접 시스콜 인젝션 | 부분 탐지 | 탐지 (커널) | 부분 탐지 | 미탐지 가능 | 부분 탐지 |
| 모듈 스톰핑 | 미탐지 가능 | 부분 탐지 | 미탐지 가능 | 미탐지 가능 | 미탐지 가능 |
탐지 시점 타임라인:
시간축 → 파일 드롭 → 실행 시작 → API 호출 → 인젝션 완료 → C2 통신
| | | | |
Defender: [시그니처] [AMSI/ASR] [ETW 탐지] [차단/격리] |
CrowdStrike: [ML] [IOA 시작] [커널 탐지] [즉시 차단] |
SentinelOne: [정적AI] [행위 분석] [행위 탐지] [킬+롤백] |
Elastic: | | | | [룰 매칭→알림]
Kaspersky: [시그니처] [HIPS 시작] [BSS 탐지] [차단] |
6.6 T1055 — 알림 방식 비교
| 제품 | 알림 명칭 예시 | 알림 수준 | 자동 조치 |
|---|---|---|---|
| Defender | "Process injection detected", "Suspicious process hollowing" | High/Critical | 격리, 프로세스 종료 |
| CrowdStrike | IOA: "Injected Thread in Remote Process" | Critical | 프로세스 킬, 격리 |
| SentinelOne | "Malicious — Process Injection", Storyline 연계 | Threat (Critical) | 자동 킬 + 롤백 |
| Elastic | "Suspicious Process Injection via CreateRemoteThread" | Critical | 알림만 (수동 대응) |
| Kaspersky | "PDM:Exploit.Win32.Generic", "Dangerous activity detected" | High | 차단, 롤백 |
6.7 T1003 자격증명 덤핑 — 서브 기법별 탐지 능력
| 서브 기법 | ID | Defender | CrowdStrike | SentinelOne | Elastic | Kaspersky |
|---|---|---|---|---|---|---|
| LSASS 메모리 | .001 | ● | ● | ● | ◐ | ● |
| SAM | .002 | ● | ● | ● | ◐ | ● |
| NTDS | .003 | ◐ | ● | ● | ◐ | ◐ |
| LSA Secrets | .004 | ● | ● | ● | ◐ | ● |
| 캐시된 도메인 자격증명 | .005 | ◐ | ● | ◐ | △ | ◐ |
| DCSync | .006 | ● | ● (Identity) | ● (Ranger) | ◐ (이벤트 룰) | ● (네트워크) |
| /proc (Linux) | .007 | — | ● | ● | ◐ | — |
| /etc/shadow (Linux) | .008 | — | ● | ● | ◐ | — |
6.8 T1003 — 도구별 탐지 능력
| 도구/방법 | Defender | CrowdStrike | SentinelOne | Elastic | Kaspersky |
|---|---|---|---|---|---|
| Mimikatz (원본) | ● | ● | ● | ● | ● |
| Mimikatz (패킹/변종) | ● | ● | ● | ◐ | ● |
| Invoke-Mimikatz (PS) | ● (AMSI) | ● | ● | ◐ | ● |
| comsvcs.dll MiniDump | ● (ASR) | ● (IOA) | ● | ◐ (룰) | ● |
| procdump -ma lsass | ● (ASR) | ● | ● | ◐ | ● |
| reg save SAM/SYSTEM | ● | ● | ● | ◐ | ● |
| ntdsutil IFM | ◐ | ● | ● | ◐ | ◐ |
| DCSync (Mimikatz) | ● | ● | ● | ◐ | ● |
| secretsdump.py (Impacket) | ● | ● | ● | ◐ | ● |
| Nanodump | ◐ | ● | ◐ | ○ | ◐ |
| Dumpert | ◐ | ● | ◐ | ○ | ◐ |
| LSASS 클로닝 | ◐ | ● | ● | ○ | ◐ |
| SilentProcessExit | ○ | ◐ | ◐ | ○ | ○ |
| createdump.exe | ◐ | ● | ◐ | ○ | ○ |
6.9 T1003 — 예방적 방어 기능 비교
| 예방 기능 | Defender | CrowdStrike | SentinelOne | Elastic | Kaspersky |
|---|---|---|---|---|---|
| LSASS PPL 보호 | ✓ (기본 활성화 Win11) | ✓ (호환) | ✓ (호환) | △ (OS 의존) | ✓ (호환) |
| Credential Guard (VBS) | ✓ (네이티브) | ✓ (호환) | ✓ (호환) | △ (OS 의존) | ✓ (호환) |
| ASR 규칙 (LSASS 보호) | ✓ (전용 규칙) | N/A (자체 IOA) | N/A (자체 AI) | N/A | N/A (자체 HIPS) |
| LSASS 접근 차단 | ✓ | ✓ | ✓ | △ | ✓ |
| DCSync 네트워크 탐지 | ✓ | ✓ (Identity) | ✓ (Ranger) | ✓ (이벤트 룰) | ✓ (네트워크) |
| 자동 롤백 | △ | ✓ | ✓ ActiveEDR | ○ | ✓ |
자격증명 덤핑 탐지 시점 타임라인:
시간축 → 도구 실행 → LSASS 접근 → 메모리 읽기 → 덤프 파일 생성 → 자격증명 추출
| | | | |
Defender: [ASR 차단] ←── 접근 전 차단 (PPL + ASR 활성 시)
CrowdStrike: [ML] [커널 차단]
SentinelOne: [정적AI] [행위 차단]
Elastic: | | | | [이벤트 룰 알림]
Kaspersky: [시그니처] [HIPS 차단]
6.10 종합 점수 비교 (10점 만점)
| 평가 영역 | Defender | CrowdStrike | SentinelOne | Elastic | Kaspersky |
|---|---|---|---|---|---|
| T1055 정적 탐지 | 8 | 9 | 8 | 5 | 8 |
| T1055 동적 탐지 | 8 | 10 | 8 | 5 | 7 |
| T1055 휴리스틱 | 9 | 9 | 8 | 4 | 7 |
| T1055 종합 | 8.3 | 9.3 | 8.0 | 4.7 | 7.3 |
| T1003 정적 탐지 | 9 | 9 | 9 | 6 | 9 |
| T1003 동적 탐지 | 9 | 10 | 9 | 5 | 8 |
| T1003 휴리스틱 | 9 | 9 | 8 | 4 | 7 |
| T1003 예방 | 10 | 9 | 8 | 3 | 7 |
| T1003 종합 | 9.3 | 9.3 | 8.5 | 4.5 | 7.8 |
| 전체 종합 | 8.8 | 9.3 | 8.3 | 4.6 | 7.6 |
레이더 차트:
CrowdStrike: 정적 9.0 | 동적 10.0 | 휴리스틱 9.0 | 자동대응 9.0
Defender: 정적 8.5 | 동적 8.5 | 휴리스틱 9.0 | 자동대응 8.0
SentinelOne: 정적 8.5 | 동적 8.5 | 휴리스틱 8.0 | 자동대응 9.5
Kaspersky: 정적 8.5 | 동적 7.5 | 휴리스틱 7.0 | 자동대응 7.0
Elastic: 정적 5.5 | 동적 5.0 | 휴리스틱 4.0 | 자동대응 3.0
6.11 의외의 발견들
CrowdStrike가 유일하게 탐지한 것들: 직접 시스콜 인젝션, 프로세스 고스팅, 콜백 기반 실행. 커널 드라이버 기반 아키텍처가 유저랜드 후킹의 한계를 넘어섰다.
Defender의 숨겨진 강점: Credential Guard + PPL + ASR의 조합은 자격증명 덤핑에 대해 예방적 방어 최강이다. LSASS 접근 자체를 원천 차단한다.
SentinelOne의 차별점: "Storyline" 기술이 인젝션 → C2 통신 → 횡이동을 하나의 공격 체인으로 연결한다. 개별 이벤트가 아닌 공격 스토리로 보여준다.
Elastic의 딜레마: 무료이고 커스터마이징이 자유롭지만, 기본 구성에서는 실시간 차단이 없다. 탐지는 하되 사후 알림이다. 전문 보안 인력이 있는 조직에서만 효과적이다.
모든 제품이 놓친 것: 모듈 스톰핑(Module Stomping) — 정상 DLL의 코드 섹션을 셸코드로 덮어쓰는 기법. 메모리가 디스크 파일에 "백킹"되어 있어 비백킹 메모리 스캔을 우회한다.
7. 탐지 공백 영역 식별
7.1 T1055 프로세스 인젝션 — 제품 간 공통 탐지 공백
| 공백 영역 | 우회 기법 | 영향받는 제품 | 위험도 | 보완 방안 |
|---|---|---|---|---|
| 직접 시스콜 | SysWhispers, HellsGate, HalosGate | 유저랜드 후킹 의존 제품 전체 | 크리티컬 | ETW Threat Intel Provider + 커널 콜백 |
| 모듈 스톰핑 | 정상 DLL .text 섹션 덮어쓰기 | 비백킹 메모리 스캔 의존 제품 | 높음 | 디스크-메모리 불일치 검증 |
| 콜백 기반 실행 | EnumWindows, Timer 콜백 | CreateRemoteThread 모니터링 전용 제품 | 높음 | 광범위 콜백 API 모니터링 |
| 프로세스 고스팅 | 파일 삭제 후 섹션 매핑 | 파일 기반 스캔 의존 제품 | 높음 | NtCreateSection 모니터링 |
| 파이버 기반 실행 | CreateFiber/ConvertThreadToFiber | 스레드 생성 모니터링 전용 제품 | 중간 | 파이버 API 모니터링 추가 |
7.2 T1003 자격증명 덤핑 — 제품 간 공통 탐지 공백
| 공백 영역 | 우회 기법 | 영향받는 제품 | 위험도 | 보완 방안 |
|---|---|---|---|---|
| LSASS 클로닝 | PssCaptureSnapshot | 원본 LSASS만 모니터링하는 제품 | 높음 | 스냅샷 API 모니터링 |
| SilentProcessExit 악용 | WerFault.exe 이용 LSASS 덤프 | 정상 프로세스(WerFault) 허용 제품 | 높음 | SilentProcessExit 레지스트리 모니터링 |
| LoLBin 악용 | createdump.exe, rdrleakdiag.exe, tttracer.exe | 서명된 MS 도구 허용 제품 | 높음 | LoLBin 대상 행위 룰 추가 |
| 커널 드라이버 기반 | 커널 드라이버로 LSASS 직접 읽기 | PPL 미적용 환경 | 크리티컬 | HVCI + DSE + PPL 활성화 |
7.3 제품별 고유 공백
| 제품 | 고유 공백 | 원인 | 보완 방안 |
|---|---|---|---|
| Elastic Security | 실시간 차단 부재 (기본 구성) | 룰 기반 사후 탐지 아키텍처 | Elastic Defend 에이전트 + 예방 정책 활성화 |
| Elastic Security | 커널 수준 가시성 제한 | 에이전트 의존도 낮음 | 전용 EDR 보완 |
| Defender | 모듈 스톰핑 탐지 제한 | ETW 기반이나 백킹 검증 부족 | 타사 EDR 보완 |
| SentinelOne | 직접 시스콜 일부 미탐지 | 유저랜드 후킹 의존 영역 존재 | 커널 텔레메트리 강화 |
| Kaspersky | 고급 인메모리 기법 일부 | BSS 패턴 업데이트 의존 | 행위 패턴 DB 주기적 업데이트 |
7.4 탐지 공백 히트맵
공격 기법 vs 제품 탐지 공백 (○ = 공백 존재, · = 공백 없음)
Defender CrowdStrike SentinelOne Elastic Kaspersky
──────────────────────────────────────────────────────────────────────────────
직접 시스콜 인젝션 ○ · ○ ○ ○
모듈 스톰핑 ○ ○ ○ ○ ○
프로세스 고스팅 ○ · ○ ○ ○
콜백 기반 실행 ○ · ○ ○ ○
파이버 기반 실행 ○ ○ ○ ○ ○
LSASS 클로닝 ○ · · ○ ○
SilentProcessExit 악용 ○ ○ ○ ○ ○
LoLBin 크레덴셜 덤프 ○ · ○ ○ ○
──────────────────────────────────────────────────────────────────────────────
공백 개수 7 2 6 8 7
CrowdStrike: 가장 적은 공백 (2개)
Elastic: 가장 많은 공백 (8개)
7.5 탐지 공백 심각도 매트릭스
Defender CrowdStrike SentinelOne Elastic Kaspersky
직접 시스콜 ◐ ● ◐ ○ ◐
모듈 스톰핑 ○ ◐ ○ ○ ○
프로세스 고스팅 ◐ ● ◐ ○ ◐
LSASS 클로닝 ◐ ● ● ○ ◐
LoLBin 자격증명 덤핑 ◐ ● ● △ ◐
DCSync 네트워크 탐지 ● ● ● ◐ ●
● = 탐지 가능 ◐ = 부분 탐지 △ = 구성 필요 ○ = 미탐지 가능
Part 4: 결론 및 권고
8. 방어 권고사항
8.1 지금 당장 할 수 있는 3가지
1. LSASS PPL 활성화
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 1 /f
이것 하나로 미서명 프로세스의 LSASS 접근을 원천 차단한다.
2. Sysmon 배포 + LSASS 접근 모니터링
Sysmon Event ID 10이 자격증명 덤핑 탐지의 "최우선 단일 탐지 포인트"다.
<Sysmon schemaversion="4.90">
<EventFiltering>
<ProcessAccess onmatch="include">
<TargetImage condition="is">C:\Windows\system32\lsass.exe</TargetImage>
</ProcessAccess>
<CreateRemoteThread onmatch="exclude">
<SourceImage condition="is">C:\Windows\system32\svchost.exe</SourceImage>
</CreateRemoteThread>
</EventFiltering>
</Sysmon>
3. ASR 규칙 활성화 (Defender 사용 시)
Defender ASR 규칙 활성화:
- "Block credential stealing from LSASS" (GUID: 9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2)
- "Block process creations from PSExec and WMI" (GUID: d1e49aac-8f56-4280-b9ba-993a6d77406c)
- "Block Win32 API calls from Office macros" (GUID: 92e97fa1-2edf-4476-bdd6-9dd0b4dddc7b)
8.2 탐지 엔지니어링 권고
| 우선순위 | 탐지 규칙 | 대상 기법 | 구현 방법 |
|---|---|---|---|
| P0 | LSASS 접근 모니터링 | T1003.001 | Sysmon Event ID 10 + SIEM 규칙 |
| P0 | DCSync 탐지 | T1003.006 | Event ID 4662 GUID 필터링 |
| P1 | 원격 스레드 생성 모니터링 | T1055.001~004 | Sysmon Event ID 8 |
| P1 | 비백킹 실행 메모리 스캔 | T1055 전체 | EDR 메모리 스캔 기능 |
| P1 | SAM/SECURITY 레지스트리 접근 | T1003.002, .004 | 레지스트리 감사 정책 |
| P2 | CREATE_SUSPENDED 프로세스 체인 | T1055.012 | 프로세스 생성 이벤트 상관 분석 |
| P2 | LoLBin 비정상 사용 | T1003 | 명령줄 인수 분석 규칙 |
| P3 | 직접 시스콜 바이트 패턴 | T1055 (우회) | YARA 메모리 스캔 |
8.3 심층 방어 아키텍처
┌─────────────────────────────────────────────────┐
│ Layer 5: 하드웨어 기반 보호 │
│ UEFI Secure Boot, HVCI, VBS, Credential Guard │
├─────────────────────────────────────────────────┤
│ Layer 4: 커널 수준 탐지 │
│ ETW Threat Intel, 커널 콜백, 드라이버 검증 │
├─────────────────────────────────────────────────┤
│ Layer 3: 동적/행위 탐지 │
│ API 모니터링, 메모리 스캔, 프로세스 관계 분석 │
├─────────────────────────────────────────────────┤
│ Layer 2: 정적 분석 │
│ 시그니처, YARA, IAT 분석, 엔트로피 분석 │
├─────────────────────────────────────────────────┤
│ Layer 1: 휴리스틱/평판 │
│ 클라우드 평판, 디지털 서명, 파일 경로 분석 │
└─────────────────────────────────────────────────┘
공격자가 Layer 1~2를 우회하는 것은 비교적 쉽다.
Layer 3을 우회하는 것은 어렵다.
Layer 4~5를 우회하려면 커널 수준 익스플로잇이 필요하다.
→ 공격의 비용과 복잡도를 극적으로 높인다.
9. 결론
이번 분석의 가장 중요한 교훈은 어떤 단일 제품도 모든 기법을 탐지하지 못한다는 것이다. 최고 점수인 CrowdStrike조차 모듈 스톰핑과 파이버 기반 실행에는 공백이 있다.
하지만 다계층 방어의 목표는 100% 탐지가 아니라, 공격자의 비용을 높이는 것이다. 하나의 레이어를 우회하면 다른 레이어에 걸리고, 두 레이어를 우회하면 세 번째에 걸린다. 공격자가 모든 레이어를 우회해야 한다면, 그 비용과 시간은 대부분의 공격 시나리오에서 수지가 맞지 않게 된다.
결국 방어의 핵심은 "뚫리지 않는 벽"이 아니라 "뚫는 비용이 너무 높은 벽"을 쌓는 것이다.
부록
부록 A: 제품별 강점/약점 요약
Microsoft Defender for Endpoint
| 강점 | 약점 |
|---|---|
| Credential Guard + PPL 네이티브 통합 | 고급 인메모리 우회 기법 (모듈 스톰핑) |
| ASR 규칙으로 선제적 차단 | 직접 시스콜 부분 탐지 |
| SmartScreen 클라우드 평판 | 일부 고급 기법에 업데이트 의존 |
| Windows 생태계 최적화 | 비Windows 환경 미지원 |
| E5 라이선스 포함 (추가 비용 없음) | 별도 EDR 대비 커스터마이징 제한 |
CrowdStrike Falcon
| 강점 | 약점 |
|---|---|
| 커널 수준 가시성 최우수 | 프리미엄 가격 |
| IOA 기반 행위 탐지 최강 | 오탐(False Positive) 관리 필요 |
| 직접 시스콜 탐지 가능 | 초기 설정 복잡도 |
| Identity Protection 모듈 | 에이전트 리소스 사용량 |
| 크로스 플랫폼 (Win/Mac/Linux) | 클라우드 의존도 높음 |
SentinelOne Singularity
| 강점 | 약점 |
|---|---|
| ActiveEDR 자동 대응 + 롤백 | 직접 시스콜 부분 탐지 |
| Storyline 기술로 공격 체인 연계 | 모듈 스톰핑 미탐지 가능 |
| 행위 AI 엔진 | 클라우드 분석 의존도 |
| 자율적 에이전트 (오프라인 동작) | 일부 LoLBin 우회 |
Elastic Security
| 강점 | 약점 |
|---|---|
| 오픈소스 + 무료 탐지 규칙 | 실시간 차단 부재 (기본) |
| 풍부한 커뮤니티 규칙 | 커널 수준 가시성 제한 |
| EQL 기반 유연한 쿼리 | 자동 대응 부족 |
| YARA + Osquery 통합 | 전문 EDR 대비 탐지 깊이 부족 |
| 커스터마이징 자유도 최고 | 휴리스틱/평판 엔진 약함 |
Kaspersky Endpoint Security
| 강점 | 약점 |
|---|---|
| 시그니처 DB 방대 (알려진 도구 탐지 최강) | 고급 인메모리 기법 대응 지연 |
| HIPS 규칙 기반 세밀한 제어 | 직접 시스콜 부분 탐지 |
| 시스템 감시(System Watcher) 롤백 | BSS 패턴 업데이트 의존 |
| 가격 대비 성능 우수 | 지정학적 요인으로 일부 환경 제한 |
부록 B: 환경별 제품 배포 권고
| 환경 | 권장 조합 | 근거 |
|---|---|---|
| 엔터프라이즈 (대규모) | CrowdStrike + Elastic (SIEM) | 최강 탐지 + 로그 분석/커스텀 룰 |
| 중견기업 | Defender (E5) + Sysmon | 비용 효율 + 강력한 예방 |
| 스타트업/SMB | SentinelOne | 자동 대응으로 보안 인력 부담 최소 |
| 예산 제한 | Elastic Security + Sysmon | 무료 + 커스터마이징 가능 |
| 규정 준수 (국내) | Kaspersky 또는 Defender | 인증/검증 제품 |
| 최대 보안 | CrowdStrike + Defender (이중) | 모든 공백 최소화 |
부록 C: 실험 환경 및 재현 절차
본 보고서는 문헌 기반 분석입니다. 실증 검증을 원하는 경우 아래 절차를 따라 격리된 환경에서 테스트를 수행하십시오.
권장 실험 환경
| 구성 요소 | 권장 사항 |
|---|---|
| 가상화 | VMware Workstation Pro / Hyper-V (격리 네트워크) |
| OS | Windows 10 22H2 / Windows 11 23H2 / Windows Server 2022 |
| 도구 | Sysmon, Process Monitor, API Monitor, x64dbg, PE-bear |
| 네트워크 | 격리된 내부 네트워크 (인터넷 차단) |
| 스냅샷 | 각 테스트 전 클린 스냅샷 필수 |
테스트 절차 (방어 검증 목적)
Phase 1: 베이스라인 수립
├── 클린 OS 설치 + 보안 제품 설치
├── Sysmon 구성 배포
├── 정상 행위 베이스라인 24시간 수집
└── 스냅샷 생성
Phase 2: 정적 분석 레이어 테스트
├── 알려진 도구 시그니처 탐지 확인
├── IAT 기반 탐지 트리거 확인
├── 패킹/난독화 적용 후 재테스트
└── 결과 기록: 탐지 여부, 시점, 알림 내용
Phase 3: 동적 분석 레이어 테스트
├── API 호출 시퀀스 모니터링 확인
├── 메모리 속성 변경 탐지 확인
├── 프로세스 관계 이상 탐지 확인
└── 결과 기록: 탐지 여부, 시점, 알림 내용
Phase 4: 휴리스틱 레이어 테스트
├── 미서명 바이너리 + 인젝션 API 테스트
├── 비정상 경로 실행 테스트
├── 평판 없는 신규 바이너리 테스트
└── 결과 기록: 탐지 여부, 시점, 알림 내용
Phase 5: 교차 레이어 상관관계 테스트
├── 정적 우회 후 동적 탐지 확인
├── 동적 우회 후 정적/휴리스틱 탐지 확인
├── 다중 레이어 동시 우회 시나리오
└── 결과 기록 + 상관관계 매트릭스 작성
Phase 6: 멀티 제품 비교
├── 동일 테스트를 각 제품에서 수행
├── 탐지 시점, 레이어, 알림 방식 기록
├── 제품 간 공백 식별
└── 최종 비교 매트릭스 작성
참고 자료
'Documentation & Blog' 카테고리의 다른 글
| PAC 보호기법 조사 (0) | 2026.04.05 |
|---|---|
| 김수키(Kimsuky)의 termsrv.dll 패치 기반 내부 침투 전략 분석 (0) | 2026.04.05 |
| React2Shell 취약점 분석 (0) | 2026.03.20 |
| NAS 취약점 분석 (0) | 2025.10.15 |
| 스타링크 역분석을 통한 무선통신 안전 검증 (0) | 2025.10.15 |