삽이 부서질 때까지 삽질

mini filter driver 스터디 - 프로세스 콜백 본문

driver

mini filter driver 스터디 - 프로세스 콜백

xinfo 2017. 10. 3. 14:42

mini filter driver 스터디 - 미니 필터 드라이버 생성 및 기본 개념

mini filter driver 스터디 - 디버깅 메세지 출력 및 파일 필터

스터디 자료 받는 곳

https://github.com/xinfolab/mini-filter-driver-study


앞에서는 IRP를 이용하여 프로세스 접근을 차단했으면, 이번에는 프로세스 콜백으로 차단을 해보겠습니다.



프로세스 콜백 등록은 DriverEntry 에서 합니다.



PsSetCreateProcessNotifyRoutineEx 는 MSDN을 참고합시다.


https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(NTDDK%2FPsSetCreateProcessNotifyRoutineEx);k(PsSetCreateProcessNotifyRoutineEx);k(SolutionItemsProject);k(DevLang-C%2B%2B);k(TargetOS-Windows)&rd=true


해당 API는 프로세스가 생성되거나 종료될 때 caller에게 알려주는 함수입니다.


CreateProcessNotifyRoutineEx 를 호출하는데, 이 함수는 notepad.exe 가 실행이 되면 접근 권한이 없다고 반값을 반환합니다.

그럼 IRP와 Callback 둘다 차단하는 건데 뭐가 다른 거지? 라고 생각을 해봐서 몇 가지를 테스트해보았습니다. 그 결과 아래 표와 같습니다.


 

IRP 

Callback 

실행

차단 

차단 

생성 

차단 

허용 

저장 

차단 

허용 

세번째 저장이 이상하다고 생각할 수 있는데, 이때 말하는 저장은 control_second - print_study 또는 control_third - process_control 실행 전에 notepad.exe 를 실행시킨 뒤 실행 후 저장하는 것을 비교한 것입니다.


PsSetCreateProcessNotifyRoutineEx 를 이용하여 process callback을 제어하는 코드를 작성하여 서비스를 실행하면 접근 권한이 없다고 뜨는 것을 볼 수 있습니다. 이유는 설정인데요. process_control 프로젝트의 설정을 들어가보면 다른 프로젝트와는 달리 설정이 되어 있습니다.



Links -> Additional Options 에 추가가 되어 있는데요.

/INTEGRITYCHECK 가 되어있습니다.

해당 설정이 들어가 있지 않으면 권한이 없다고 뜨니 체크해주세요.

PsSetCreateProcessNotifyRoutineEx  MSDN을 읽어보시면 아래와 같은 내용이 나오고, 


키워드로 검색해보면 아래와 같은 내용이 나옵니다.



https://social.technet.microsoft.com/wiki/contents/articles/255.forced-integrity-signing-of-portable-executable-pe-files.aspx


이거 때문에 많은 삽질을 했는데... 역시나 MSDN을 잘 읽어야겠네요...


지금까지 프로세스 콜백을 등록하는 과정이였다면, 반대로 해제를 해야겠죠??

해제는 해당 서비스가 종료될 때 끊어지도록 설정을 하였습니다.

그러면 Unload 될 때 StopProcessCallback을 넣으면 되겠죠??




cotrol_third를 실행시켜 결과를 확인해보면 정상적으로 차단하는 것을 확인할 수 있습니다.



Comments