삽이 부서질 때까지 삽질
mini filter driver 스터디 - 프로세스 콜백 본문
mini filter driver 스터디 - 미니 필터 드라이버 생성 및 기본 개념
mini filter driver 스터디 - 디버깅 메세지 출력 및 파일 필터
스터디 자료 받는 곳
https://github.com/xinfolab/mini-filter-driver-study
앞에서는 IRP를 이용하여 프로세스 접근을 차단했으면, 이번에는 프로세스 콜백으로 차단을 해보겠습니다.
프로세스 콜백 등록은 DriverEntry 에서 합니다.
PsSetCreateProcessNotifyRoutineEx 는 MSDN을 참고합시다.
해당 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을 읽어보시면 아래와 같은 내용이 나오고,
키워드로 검색해보면 아래와 같은 내용이 나옵니다.
이거 때문에 많은 삽질을 했는데... 역시나 MSDN을 잘 읽어야겠네요...
지금까지 프로세스 콜백을 등록하는 과정이였다면, 반대로 해제를 해야겠죠??
해제는 해당 서비스가 종료될 때 끊어지도록 설정을 하였습니다.
그러면 Unload 될 때 StopProcessCallback을 넣으면 되겠죠??
cotrol_third를 실행시켜 결과를 확인해보면 정상적으로 차단하는 것을 확인할 수 있습니다.
'driver' 카테고리의 다른 글
mini filter driver 스터디 - 디버깅 메세지 출력 및 파일 필터 (0) | 2017.09.24 |
---|---|
mini filter driver 스터디 - 미니 필터 드라이버 생성 및 기본 개념 (1) | 2017.09.24 |