개발/윈도우

NTFS vs ReFS: 파일 필터 드라이버 샘플과 Fallback 설계

-=HaeJuK=- 2025. 4. 16. 10:34
728x90
반응형
NTFS vs ReFS: 파일 필터 드라이버 샘플과 Fallback 설계

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