개발/윈도우
ReFS에서 실행 차단: NTFS처럼 파일 필터가 안될 때의 대안
-=HaeJuK=-
2025. 4. 16. 10:42
728x90
반응형
📌 ReFS에서 실행 차단: NTFS처럼 파일 필터가 안될 때의 대안
NTFS용 파일 필터 드라이버는 파일 실행 시점에서 경로를 추적하고 차단이 가능하지만, ReFS에서는 필터링 포인트 자체가 제한적입니다.
따라서 ReFS에서 파일 실행을 제어하려면 다른 방식(정책 또는 커널 후킹 등)을 사용해야 합니다.
✅ 실행 제어를 위한 대안 3가지
1. ETW 기반 사용자 모드 감시 (비차단 감지용)
ETW (Event Tracing for Windows)를 통해 실행 이벤트를 감지하고, 정책 위반 여부를 판단할 수 있습니다. 다만 실제 차단은 불가능합니다.
void OnProcessStart(const std::wstring& imagePath)
{
if (imagePath.starts_with(L"R:\\Restricted\\")) {
std::wcout << L"[정책] 실행 차단 대상 감지: " << imagePath << std::endl;
// 실행 자체는 이미 진행됨 → 로그만 가능
}
}
장점: 실시간 감시 및 로그 가능
단점: 실행을 차단할 수는 없음
2. AppLocker 또는 WDAC 정책 기반 실행 차단
Windows의 보안 정책 도구인 AppLocker나 WDAC를 사용하면 특정 경로나 해시 기반으로 실행을 차단할 수 있습니다.
ReFS 경로도 포함할 수 있습니다.
<RuleCollection Type="Exe" EnforcementMode="Enabled">
<FilePathRule Id="..." Name="Block ReFS Execution" UserOrGroupSid="S-1-1-0" Action="Deny">
<Conditions>
<FilePathCondition Path="R:\Restricted\*" />
</Conditions>
</FilePathRule>
</RuleCollection>
장점: 운영체제 차원에서 확실히 차단 가능
단점: 정책 배포가 복잡할 수 있음
3. 커널 드라이버에서 실행 차단 (Process Create Notify)
PsSetCreateProcessNotifyRoutineEx
를 사용하여 프로세스 생성 시점에 이미지 경로를 확인하고, 정책 위반 시 실행을 차단할 수 있습니다.
VOID OnProcessNotify(
PEPROCESS Process, HANDLE ProcessId, PPS_CREATE_NOTIFY_INFO Info)
{
if (!Info || Info->ImageFileName == nullptr)
return;
UNICODE_STRING* imagePath = Info->ImageFileName;
if (wcsstr(imagePath->Buffer, L"\\Device\\HarddiskVolumeX\\Restricted\\")) {
DbgPrint("[정책] 실행 차단: %wZ\n", imagePath);
Info->CreationStatus = STATUS_ACCESS_DENIED;
}
}
장점: 실행 직전에 직접 차단 가능
단점: 커널 모드 드라이버 작성 필요
🚦 실행 차단 흐름 요약
단계 | 동작 |
---|---|
1 | 프로세스 생성 요청 발생 (.exe 실행) |
2 | 이미지 경로 확인 (ReFS 포함 여부 판단) |
3 | 정책 위반 여부 확인 |
4 | 위반 시: 실행 차단 또는 로그 기록 |
✅ 정리
방식 | 차단 가능 | 설명 |
---|---|---|
ETW 감시 | ❌ | ReFS 실행 감지만 가능, 차단 불가 |
AppLocker / WDAC | ✅ | 경로나 해시 기준으로 정책 차단 가능 |
커널 드라이버 후킹 | ✅ | 프로세스 생성 시 직접 실행 거부 가능 |
ReFS는 NTFS처럼 파일 필터로 실행 차단이 불가능하므로, 실행 제어는 반드시 정책 기반 또는 커널 기반 차단으로 우회 설계해야 합니다.
728x90