개발/윈도우

ReFS 실행 제어: 파일 필터 없이 커널 콜백으로 차단하기

-=HaeJuK=- 2025. 4. 16. 10:47
728x90
반응형
ReFS 실행 제어: 파일 필터 없이 커널 콜백으로 차단하기

📌 ReFS 실행 제어: 파일 필터 없이 커널 콜백으로 차단하기

✅ 요약

NTFS에서는 파일 필터 드라이버(FltMgr)를 이용해 실행을 제어할 수 있지만, ReFS는 필터링 지원이 제한되어 기존 방식이 작동하지 않습니다.
하지만 PsSetCreateProcessNotifyRoutineEx를 사용하면 파일 시스템 종류와 관계없이 프로세스 실행을 차단할 수 있습니다.

✅ 언제 파일 필터 대신 PsNotify를 쓰는가?

기능 파일 필터 드라이버 PsNotify 콜백
.exe 실행 차단 ✅ NTFS만 ✅ NTFS + ReFS
파일 읽기/쓰기 감시
ReFS 지원 ❌ 제한적 ✅ 완벽 지원
드라이버 구조 복잡 (FltMgr 기반) 간단 (WDM 기반)

📦 아키텍처 구조도


┌────────────┐     프로세스 실행 요청      ┌──────────────┐
│ 사용자 앱 │ ──────────────────────────▶ │ CreateProcess│
└────────────┘                            └──────┬───────┘
                                                 │
                                PsSetCreateProcessNotifyRoutineEx
                                                 │
       정책 위반이면 ──────── STATUS_ACCESS_DENIED ◀────
                                                 │
                                           실행 차단
  

🧪 .sys 드라이버 뼈대 예제

// KernelDriver.c
#include <ntddk.h>

VOID OnProcessNotify(
    PEPROCESS Process,
    HANDLE ProcessId,
    PPS_CREATE_NOTIFY_INFO CreateInfo)
{
    if (CreateInfo == NULL || CreateInfo->ImageFileName == NULL)
        return;

    UNICODE_STRING* imagePath = CreateInfo->ImageFileName;

    // 정책: ReFS 영역 실행 차단
    if (wcsstr(imagePath->Buffer, L"\\Device\\HarddiskVolumeX\\Restricted\\")) {
        DbgPrint("[정책] 실행 차단됨: %wZ\n", imagePath);
        CreateInfo->CreationStatus = STATUS_ACCESS_DENIED;
    }
}

void UnloadDriver(PDRIVER_OBJECT DriverObject)
{
    PsSetCreateProcessNotifyRoutineEx(OnProcessNotify, TRUE);
    DbgPrint("드라이버 언로드 완료\n");
}

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
    UNREFERENCED_PARAMETER(RegistryPath);
    DriverObject->DriverUnload = UnloadDriver;

    PsSetCreateProcessNotifyRoutineEx(OnProcessNotify, FALSE);

    DbgPrint("실행 차단 드라이버 로드됨\n");
    return STATUS_SUCCESS;
}
  

📎 이 코드는 실행 시점에서 `.exe` 파일의 전체 경로를 확인하고, 정책에 따라 STATUS_ACCESS_DENIED를 설정해 실행을 차단합니다.

✅ 결론

  • ReFS는 NTFS처럼 파일 필터링으로 제어하기 어렵다.
  • PsSetCreateProcessNotifyRoutineEx는 파일 시스템 종류에 관계없이 프로세스 실행 시점을 후킹 가능하다.
  • 간단한 WDM 드라이버만으로도 효과적인 실행 차단이 가능하다.
  • 실행만 제어한다면, 파일 필터 드라이버는 불필요하다.

📌 실행 제어가 목적이라면, PsNotify 기반 커널 드라이버가 ReFS 환경에서도 가장 실용적인 방법입니다.

728x90