개발/윈도우
NTFS vs ReFS: 파일 필터 드라이버 샘플과 Fallback 설계
-=HaeJuK=-
2025. 4. 16. 10:34
728x90
반응형
NTFS vs ReFS: 파일 필터 드라이버 샘플과 Fallback 설계
1. NTFS용 파일 필터 드라이버 샘플
NTFS에서는 FltMgr 기반 미니필터를 통해 다양한 IRP를 가로채고 파일 시스템 동작을 감시할 수 있습니다.
예제: PreCreate 및 PreWrite 필터링
FLT_PREOP_CALLBACK_STATUS
PreCreateCallback(
PFLT_CALLBACK_DATA Data,
PCFLT_RELATED_OBJECTS FltObjects,
PVOID* CompletionContext)
{
PFLT_FILE_NAME_INFORMATION nameInfo = nullptr;
if (NT_SUCCESS(FltGetFileNameInformation(Data, FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT, &nameInfo))) {
FltParseFileNameInformation(nameInfo);
DbgPrint("Create: %wZ\n", &nameInfo->Name);
FltReleaseFileNameInformation(nameInfo);
}
return FLT_PREOP_SUCCESS_WITH_CALLBACK;
}
FLT_PREOP_CALLBACK_STATUS
PreWriteCallback(
PFLT_CALLBACK_DATA Data,
PCFLT_RELATED_OBJECTS FltObjects,
PVOID* CompletionContext)
{
ULONG len = Data->Iopb->Parameters.Write.Length;
if (len > 0) {
DbgPrint("Write intercepted: %u bytes\n", len);
}
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
이 구조는 NTFS에서 정상적으로 동작하지만, ReFS에서는 Callback이 호출되지 않거나 일부 정보가 누락될 수 있습니다.
2. ReFS 대응 Fallback 설계
ReFS는 필터링 지원이 제한되므로, 다른 방식을 조합해 감시 시스템을 구축해야 합니다.
📦 아키텍처 구성
┌───────────────┐ ┌──────────────────┐
│ File System │◄────►│ Kernel Filter(NTFS)│
└───────────────┘ └──────────────────┘
▲ ▲
│ │
│ ▼
┌────────────┐ ┌─────────────────────┐
│ ETW │───────▶│ User-mode Monitor │
└────────────┘ └─────────────────────┘
│
▼
┌──────────────────┐
│ Log / Alert / DB │
└──────────────────┘
Fallback 기술 요소
항목 | 방식 | 설명 |
---|---|---|
ETW | 커널 추적 | Microsoft-Windows-Kernel-File로 감시 |
WMI / Sysmon | 이벤트 로그 | 파일 생성/변경 추적, 비실시간 |
Reparse Point | 미러 폴더 방식 | ReFS는 미지원, 사용자 모드 감시 대안 |
VSS | 스냅샷 | 이전 상태와 비교하여 변경 추적 |
ETW 예시: 파일 쓰기 이벤트 감지
# 관리자 PowerShell
logman create trace ReFSWatcher -p "Microsoft-Windows-Kernel-File" 0x10 -nb 128 640 -bs 1024 -o ReFSTrace.etl -ets
→ 이후 tracerpt
나 사용자 파서로 .etl 분석
User-mode Hook 예시: CreateFileW 가로채기
HANDLE WINAPI HookedCreateFileW(
LPCWSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile)
{
Log(L"[HOOK] File open: %s", lpFileName);
return Real_CreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
}
✅ 결론
NTFS는 커널 모드 필터로 충분히 감시할 수 있지만, ReFS는 설계 특성상 해당 방식이 제한적입니다. 따라서 다음과 같이 접근하는 것이 현실적입니다:
시나리오 | 권장 방식 |
---|---|
NTFS 대상 시스템 | 커널 모드 미니필터 (FltMgr) |
ReFS 대상 시스템 | ETW + 사용자 모드 Hook + 스냅샷 기반 추적 |
728x90