본문 바로가기

정상을향해/OS·Kernel Driver·Rootkit15

3. 응용프로그램과의 통신 1. 디바이스 스택 (Device Stack)윈도우는 하나의 디바이스를 여러 개의 디바이스로 나누어서 생각하려 한다. 이 때 여러 개의 디바이스들은 그들끼리 상하 관계를 유지하는 모습으로 스택을 구성하고 있다. 이를 ‘디바이스 스택(Device Stack)’이라고 부른다.디바이스 스택은 최소한 2개의 계층을 가지도록 설계되는데, 아래 그림에서 보게되는 ‘물리층’과 ‘기능층’이다. 모든 추상적인 디바이스는 항상 최소한 이렇게 ‘물리층(PDO)’과 ‘기능층(FDO)’으로 구분된다. 이렇게 나누는 이유는 모든 디바이스는 CPU에 소개되기 위해서는 반드시 버스에 연결되어야 한다는 사실 때문이다.따라서 버스에 연결되는 특징으로 인해 디바이스 자체가 동작하려면 우선 버스로부터 해당 디바이스가 동작하도록 허용되는 과.. 2015. 3. 9.
2. 드라이버 개발 환경 구축 간단한 샘플 드라이버 소스코드를 이용해 드라이버 컴파일 과정을 알아보자.드라이버 개발을 위해 가상머신 환경에서 WindowsXP를 이용했다. 1. DDK에서 'Windows XP Checked Build Environment'를 선택한다. 2. 해당 폴더로 이동한다.(폴더 안에는 드라이버 소스코드, MAKEFILE, SOURCES 이 3개의 파일이 포함되어 있어야 한다.) 3. build 한다.옵션이 여러가지 있는데 여기서는 BUILD -c를 사용했다.(-c : 모든 obj 파일을 삭제)아래 그림과 같은 결과가 나오면 컴파일에 성공한 것이다.정상적인 결과가 나온 경우 일반적으로2 files compiled1 executable built이 두 문장이 표시된다. 4. 드라이버 파일이 생성된 것을 확인할 수.. 2015. 3. 9.
1. 윈도우 디바이스 드라이버(Windows Device Driver) 윈도우 디바이스 드라이버(Windows Device Driver)를 개발하기 위한 환경을 구축하기에 앞서 몇몇 용어를 정리하는 것이 필요하다.개발에 필요한 도구와 관련되어 언급되는 용어에 대해 정리해보자. 윈도우의 디바이스 드라이버 모델은 여러가지가 있다.즉, 디바이스 드라이버 제작 방법과 사용환경에 따라 여러가지 형태를 지원하고 있다.예를 들어, 네트워크 디바이스 드라이버 개발자는 WDM(Windows Driver Model)보다는 NDIS(Network Driver Interface Specification) 드라이버 개발 방법을 공부해야 한다.멀티미디어를 위한 Direct Show 필터 드라이버를 개발하려는 경우에는 WDM Kernel Stream Driver를 개발하는 방법을 습득해야 한다.이와 .. 2014. 12. 16.
3장. 하드웨어 레벨의 지식 - 링 제로 (Ring Zero) 인텔 x86 계열의 마이크로 프로세서는 접근 제얼르 위해서 링(Ring)이라는 개념을 사용한다. 링은 링 0(Ring Zero)부터 링 3까지 총 네 가지 레벨이 있으며, 링 0가 가장 권한이 높고 링 3가 가장 권한이 낮은 것을 의미한다. 내부적으로 각각의 링은 숫자로 저장된다. 실제로 마이크로 칩에 물리적인 링이 존재하는 것은 아니다. 윈도우 운영체제의 모든 커널 코드는 링 0로 동작한다. 따라서 커널 안에서 동작하는 루트킷 또한 링 0로 동작하는 것이다. 커널 안에서 동작하지 않는 유저 모드 프로그램들은 링 3 프로그램이라고 부른다. 윈도우와 리눅스를 포함해서 많은 운영체제들이 링 1, 2는 이용하지 않고 링 0과 링 3만을 이용한다. (윈도우 아키텍처에서는 링 1, 2를 사용하지 않는다.) 링 0.. 2014. 1. 17.