티스토리 뷰
728x90
반응형
📌 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
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 블루버블다이빙팀
- 성산블루버블
- DLL
- 리눅스
- 스쿠버다이빙
- PowerShell
- 서귀포
- Thread
- Linux
- 암호화
- ip
- 울릉도
- OpenSource
- C#
- C#.NET
- CMake
- 서귀포블루버블
- 디자인패턴
- 현포다이브
- Windows
- C
- C# 고급 기술
- Build
- 블루버블다이브팀
- ReFS
- 제주도
- 블루버블
- 윈도우
- C++
- 패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함