#1 파일 시스템 / 구동방식


파일 시스템(File System)이란?

데이터는 파일과, 디렉토리 형태로 저장, 과거에는 데이터의 효율적인 관리보다는 저장이라는 행위에 포커싱, 데이터는 수시로 지워지며 덮어쓰여진다, 효과적인 관리를 위해 압축, 암호화, 동적 할당 등이 있다. http://forensic-proof.com/archives/352


이러한 파일 시스템은 파일 시스템 드라이버(NTFS.sys, FAT32.sys etc)에 의해 기록되어 관리되다가 삭제가 되는 그 순간까지 데이터의 관리를 해줍니다. 아래 <그림 1>은 파일 시스템의 동작 원리를 이해하기 쉽게 그려 놓은 것입니다.




<그림 1> 파일 시스템 동작 원리


주요 동작을 아래와 같이 요약할 수 있습니다.


(1) 사용자/응용 프로그램에서 저장 매체(storage)로부터 데이터의 송/수신을 요구.


(2) I/O Manager는 Cache Manager에게 기록된 Cache가 있는지 확인 요청(Fast I/O)


(3) Cache Manager는 System Cache의 상태를 체크 후, 요청에 대해 미 충족 시

    Virtual Memory Manager(VMM)가 개입되어 Page Fault를 발생.


(4) 파일 시스템 드라이버는 Low Level Driver로부터 송/수신 된 데이터를 VMM에게

 반환하고, VMM은 System Cache에 일정양을 저장합니다.


(5) Cache Manager는 System Cache로 부터 요청된 데이터를 I/O Manager에게 전달.


(6) I/O Manager는 사용자에게 요청을 반환.




#2 비슷한 동향과 파일 시스템 필터 드라이버


Windows Device Driver는 가용성(유지 보수 및 관리 체계)를 위해 계층적으로 구조화 되어 있습니다. 가장 상위 계층에 속하는 드라이버는 요청을 가장 먼저 받을 수 있고, 처리가 완료된 후 가장 마지막에 데이터를 받아볼 수 있습니다.


http://msdn.microsoft.com/en-us/windows/hardware/gg463008.aspx

(각종 드라이버 개발에 대한 로드맵입니다)


키보드 보안 제품의 경우는 가장 먼저 선점해야하고, 누가 더 깊은 곳을 쥐고(?) 있느냐에 따른 이슈가 있습니다. 키로거가 더 하단부에서 데이터를 처리해버린다면 그것 또한 큰 문제가 될 수 있죠. 


최근의 키로거는 커널모드 보다는 유저모드에서 스파이웨어 형태로 더 많이 존재하고 있어서 언뜻보면 키보드 보안 제품이 별 쓸모가 없어 보일지 모르지만 유저모드의 조크(Joke) / 초딩들의 막무가내식 키로거를 대부분 차단하고 있다는 것입니다.


파일 시스템 필터드라이버는 백신의 실시간 감시에 사용되는 핵심 기술입니다. 가장 최근 이슈는 이러한 실시간 감시 드라이버의 모가지(?)를 쳐서 통채로 우회를 시키는 방법이 등장했습니다. 


어쨋든 본론으로 돌아와서 정리를 해보면,


파일 시스템 필터 드라이버는 계층화된 구조에 추가적인 드라이버를 삽입하여 우리의 목적에 맞게 일의 생성, 읽기, 쓰기, 삭제를 제어함으로써 감시 기능을 구현할 수 있다는 것입니다.




#3 파일 시스템 미니 필터 드라이버


뭐, 아무튼 파일 시스템 필터 드라이버는 파일 시스템 드라이버에 못지 않게 민감한 작업들(위에 언급한 Fast I/O, VMM, Cache Manager, I/O Manager)을 전부 처리해주어야 했습니다. 


또한, 아래와 같은 단점들이 존재했습니다.


(1) 순서를 알지 못한다.

(2) 순서에 따라 드라이버의 동작 테스트 케이스(?)가 늘어난다.

(3) 쌓이는 필터의 순서에 따라 충돌 문제 발생

(4) Unload를 지원하지 않는다.

(5) 커널 스택 부족(12KB)

(6) recursive I/O를 발생시키면 난감하다(무슨 말이지 -_-).


http://ezbeat.tistory.com/410 Ezbeat 형님께서 커널 스택 부족 현상에 대해 잘 짚어주셨네요. 참고하시기 바랍니다. ;)


제가 모르는 부분도 존재합니다만.. 




<그림 2> 필터 매니저(Fltmgr)


결국은 Sensitive 작업들 + 단점들로 인해 파일 시스템 필터 드라이버 관리자가 개발되었고, 가장 최상위에 위치하게 되었습니다. 이후에 필터 기능을 수행하고 싶다면, 미니 필터 드라이버 형태로 구현 후, 요청에 대한 콜백을 처리하는 방식으로 구현하기로 약속을 한 것이죠.




<그림 3> 필터 매니저 최상위 계층


그리고 고도의 개념을 추가하여 필터의 우선순위를 정함으로써 충돌 문제를 해결하였고, Unload를 지원함으로써 가용성을 한층 더 업그레이드 시켰습니다. 마지막으로 Sensitive한 작업들은 필터 매니져(Fltmgr)가 해결해줌으로써 우리는 원하는 기능만 구현하면 되고, 인터페이스는 제공 해주는 아주 깔끔하게 결론이 난것입니다!




자세한 내용은 위 첨부 파일을 확인하시면 되고, 미니필터를 사용하여 개발을 할 때 참고해야할 샘플 파일들을 압축시켜 놓았습니다. 




#4 분석


(1) 백신의 실시간 감시 모듈은 미니필터 드라이버를 사용.



<그림 4> 백신의 실시간 감시 모듈


(2) Fltmgr에 등록시켜 줄 구조체 형식의 변수에 필요한 데이터 기록.

    (어떤 콜백을 언제 어떻게 받을 것인지, 콜백을 받았을 때 처리 할 핸들러의 정보)


(3) 미니필터 역시 Driver Entry Point Function이 존재.


(4) PRE, POST 콜백을 구현하여 모니터링 및 파일/디렉토리 제어.


(5) 언제든지 로드/언로드 가능




#5 구현




<그림 5> 구현된 미니 필터 드라이버 로드





<그림 6> 파일 생성





<그림 7> 접근 차단



이렇게 하여 텍스트 파일 생성 시 접근을 차단하는 미니 필터 드라이버가 성공적으로 구현되었습니다. 현재 포스팅을 하면서도 자유자제로 구현이 안되고 있어서 코드 공개는 조금 어렵습니다. 저 역시 검색으로 이것저것 보며 짜집기를 한 것이기 때문에 완전히 저의 지식이 되었을 때 공개하겠습니다.


물론 좀 더 많은 내용을 포함하여 ^_^


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License