본문 바로가기

reversing/rootkit

Driver 개념

SMALL

Driver란?

운영체제와 장치[마우스, 모니터 etc.]의 상호 통신을 허용하는 소프트웨어 구성요소라고 한다.

예를들어 보자.

응용 프로그램이 장치에서 데이터를 읽는 경우를 생각 해보자.

우리가 Capslock을 켜놓으면 로그인 창에서 켜저있다고 alert가 뜨는것을 볼 수있을 것이다.

이 경우, 해당 응용프로그램에서는 운영체제에 구현되어 있는 함수를 호출할 것이다.

그러면 운영체제는 드라이버에서 구현한 함수를 호출할 것이다. 

해당 드라이버에는 데이터를 가져오기 위해 장치 하드웨어와 통신하는 방법이 구현 되어있다.

그리고 Capslock 사용 여부에 대한 데이터를 읽어 올 수 있을 것이다.


위 그림은 간단하게 도식화 해놓은 것이다.

이제 드라이버가 무엇인지 알게 되었다. 

그러면 드라이버는 장치[Hardware]와 무조건 통신을 하는 것이고, 하나의 장치에는 하나의 드라이버만 존재 할 수 있는가?

라는 질문을 하면 `아니다` 라고 대답을 해야 한다.


모든 드라이버가 장치와 직접 통신하는 것은 아니다. 직접 통신을 하는 드라이버도 있고, 통신 하는 과정에서 

다른 일을 처리하는 드라이버도 있는 것이다. 

여기서 직접 통신을 하는 드라이버를 기능 드라이버[Function Driver]라고 하는 것이고,

부가적인 다른 일을 처리하는 드라이버를 필터 드라이버[Filter Driver]라고 한다.

예를 들어 설명하면 키보드의 인터럽트를 후킹을 하였다고 가정하자. 

그러면 키보드와 직접 연결된 기능 드라이버가 데이터를 가져 올 것이고, 필터 드라이버가 

데이터를 가공해서 키로깅을 하던지 하는 것이다.


이까지 알아 봤으니 Driver의 정의를 좀 더 구체화 할 수 있다.

운영체제와 장치 간 통신을 관찰하거나 이에 참여하는 소프트웨어 구성 요소이다.


구체화 하였다고 하지만 아직 정확하게 Driver를 정의 하기에는 부정확 하다.

그러면 장치간의 통신을 관찰하거나 참여하는 소프트웨어가 아니면 Driver가 아닌 가?

만약 SSDT 후킹을 하기위해서 테이블을 조작하는 Driver는 Driver가 아닌 것인가?


정리를 해보자.  드라이버에는 여러가지 종류가 있다.

하나는 소프트웨어 드라이버,  장치 드라이버, 버스 드라이버이다.


장치 드라이버는 장치와 관련된 데이터를 관리하기 위해서 사용되는 것이고,

소프트웨어 드라이버는 커널의 중요 데이터를 관리하기 위해서 하는 것이다.


이 외에도 장치 드라이버는 직접 연결된 것과 아닌 것이 있다.

USB포트를 여러개 사용하기 우해서 USB Toaster를 예를 들어보자.

실제 PCI에 연결되어 있는 장치는 USB Toaster 장치일 것이다.

그리고 이 해당 USB Toaster에 키보드 마우스를 연결 했다.

Toaster에 대한 기능 드라이버는 USB 호스트 컨트롤러에 대한 기능 드라이버에 요

청을 보냄으로써 Toaster와 간접적으로 통신합니다. 그러면 USB 호스트 컨트롤러에 

대한 기능 드라이버는 USB 호스트 컨트롤러 하드웨어와 직접 통신하고, 이 하드웨

어는 Toaster와 통신합니다


아직.. 혼동되는 부분이 있어서 추후 정리.




출처 [https://msdn.microsoft.com/ko-kr/library/windows/hardware/ff554678(v=vs.85).aspx]


LIST